1 line
No EOL
3.5 MiB
1 line
No EOL
3.5 MiB
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@rschedule/core/es2015/generators.js","webpack:///./node_modules/@rschedule/core/es2015/main.js","webpack:///./node_modules/@rschedule/core/es2015/rules.js","webpack:///./node_modules/@rschedule/json-tools/es2015/Schedule.js","webpack:///./node_modules/@rschedule/json-tools/es2015/main.js","webpack:///./node_modules/@rschedule/standard-date-adapter/es2015/main.js","webpack:///./node_modules/@rschedule/standard-date-adapter/es2015/setup.js","webpack:///./node_modules/accounting/accounting.js","webpack:///./node_modules/adm-zip/adm-zip.js","webpack:///./node_modules/adm-zip/headers/entryHeader.js","webpack:///./node_modules/adm-zip/headers/index.js","webpack:///./node_modules/adm-zip/headers/mainHeader.js","webpack:///./node_modules/adm-zip/methods/deflater.js","webpack:///./node_modules/adm-zip/methods/index.js","webpack:///./node_modules/adm-zip/methods/inflater.js","webpack:///./node_modules/adm-zip/methods/zipcrypto.js","webpack:///./node_modules/adm-zip/util/constants.js","webpack:///./node_modules/adm-zip/util/errors.js","webpack:///./node_modules/adm-zip/util/fattr.js","webpack:///./node_modules/adm-zip/util/fileSystem.js","webpack:///./node_modules/adm-zip/util/index.js","webpack:///./node_modules/adm-zip/util/utils.js","webpack:///./node_modules/adm-zip/zipEntry.js","webpack:///./node_modules/adm-zip/zipFile.js","webpack:///./node_modules/available-typed-arrays/index.js","webpack:///./node_modules/call-bind/callBound.js","webpack:///./node_modules/call-bind/index.js","webpack:///./node_modules/charenc/charenc.js","webpack:///./node_modules/crypt/crypt.js","webpack:///./node_modules/csv-parse/lib/ResizeableBuffer.js","webpack:///./node_modules/csv-parse/lib/index.js","webpack:///./node_modules/csv-parse/lib/sync.js","webpack:///./node_modules/csv-stringify/lib/index.js","webpack:///./node_modules/csv-stringify/lib/sync.js","webpack:///./node_modules/currency-formatter/index.js","webpack:///./node_modules/damerau-levenshtein/index.js","webpack:///./node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","webpack:///./node_modules/date-fns/esm/_lib/assign/index.js","webpack:///./node_modules/date-fns/esm/_lib/cloneObject/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/formatters/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/longFormatters/index.js","webpack:///./node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/protectedTokens/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCDay/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCISODay/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/toInteger/index.js","webpack:///./node_modules/date-fns/esm/addDays/index.js","webpack:///./node_modules/date-fns/esm/addHours/index.js","webpack:///./node_modules/date-fns/esm/addISOWeekYears/index.js","webpack:///./node_modules/date-fns/esm/addMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/addMinutes/index.js","webpack:///./node_modules/date-fns/esm/addMonths/index.js","webpack:///./node_modules/date-fns/esm/addQuarters/index.js","webpack:///./node_modules/date-fns/esm/addSeconds/index.js","webpack:///./node_modules/date-fns/esm/addWeeks/index.js","webpack:///./node_modules/date-fns/esm/addYears/index.js","webpack:///./node_modules/date-fns/esm/areIntervalsOverlapping/index.js","webpack:///./node_modules/date-fns/esm/closestIndexTo/index.js","webpack:///./node_modules/date-fns/esm/closestTo/index.js","webpack:///./node_modules/date-fns/esm/compareAsc/index.js","webpack:///./node_modules/date-fns/esm/compareDesc/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarDays/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarISOWeekYears/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarISOWeeks/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarMonths/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarQuarters/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarWeeks/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarYears/index.js","webpack:///./node_modules/date-fns/esm/differenceInDays/index.js","webpack:///./node_modules/date-fns/esm/differenceInHours/index.js","webpack:///./node_modules/date-fns/esm/differenceInISOWeekYears/index.js","webpack:///./node_modules/date-fns/esm/differenceInMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/differenceInMinutes/index.js","webpack:///./node_modules/date-fns/esm/differenceInMonths/index.js","webpack:///./node_modules/date-fns/esm/differenceInQuarters/index.js","webpack:///./node_modules/date-fns/esm/differenceInSeconds/index.js","webpack:///./node_modules/date-fns/esm/differenceInWeeks/index.js","webpack:///./node_modules/date-fns/esm/differenceInYears/index.js","webpack:///./node_modules/date-fns/esm/eachDayOfInterval/index.js","webpack:///./node_modules/date-fns/esm/eachWeekOfInterval/index.js","webpack:///./node_modules/date-fns/esm/eachWeekendOfInterval/index.js","webpack:///./node_modules/date-fns/esm/eachWeekendOfMonth/index.js","webpack:///./node_modules/date-fns/esm/eachWeekendOfYear/index.js","webpack:///./node_modules/date-fns/esm/endOfDay/index.js","webpack:///./node_modules/date-fns/esm/endOfDecade/index.js","webpack:///./node_modules/date-fns/esm/endOfHour/index.js","webpack:///./node_modules/date-fns/esm/endOfISOWeek/index.js","webpack:///./node_modules/date-fns/esm/endOfISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/endOfMinute/index.js","webpack:///./node_modules/date-fns/esm/endOfMonth/index.js","webpack:///./node_modules/date-fns/esm/endOfQuarter/index.js","webpack:///./node_modules/date-fns/esm/endOfSecond/index.js","webpack:///./node_modules/date-fns/esm/endOfWeek/index.js","webpack:///./node_modules/date-fns/esm/endOfYear/index.js","webpack:///./node_modules/date-fns/esm/format/index.js","webpack:///./node_modules/date-fns/esm/formatDistance/index.js","webpack:///./node_modules/date-fns/esm/formatDistanceStrict/index.js","webpack:///./node_modules/date-fns/esm/formatRelative/index.js","webpack:///./node_modules/date-fns/esm/fromUnixTime/index.js","webpack:///./node_modules/date-fns/esm/getDate/index.js","webpack:///./node_modules/date-fns/esm/getDay/index.js","webpack:///./node_modules/date-fns/esm/getDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/getDaysInMonth/index.js","webpack:///./node_modules/date-fns/esm/getDaysInYear/index.js","webpack:///./node_modules/date-fns/esm/getDecade/index.js","webpack:///./node_modules/date-fns/esm/getHours/index.js","webpack:///./node_modules/date-fns/esm/getISODay/index.js","webpack:///./node_modules/date-fns/esm/getISOWeek/index.js","webpack:///./node_modules/date-fns/esm/getISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/getISOWeeksInYear/index.js","webpack:///./node_modules/date-fns/esm/getMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/getMinutes/index.js","webpack:///./node_modules/date-fns/esm/getMonth/index.js","webpack:///./node_modules/date-fns/esm/getOverlappingDaysInIntervals/index.js","webpack:///./node_modules/date-fns/esm/getQuarter/index.js","webpack:///./node_modules/date-fns/esm/getSeconds/index.js","webpack:///./node_modules/date-fns/esm/getTime/index.js","webpack:///./node_modules/date-fns/esm/getUnixTime/index.js","webpack:///./node_modules/date-fns/esm/getWeek/index.js","webpack:///./node_modules/date-fns/esm/getWeekOfMonth/index.js","webpack:///./node_modules/date-fns/esm/getWeekYear/index.js","webpack:///./node_modules/date-fns/esm/getWeeksInMonth/index.js","webpack:///./node_modules/date-fns/esm/getYear/index.js","webpack:///./node_modules/date-fns/esm/index.js","webpack:///./node_modules/date-fns/esm/isAfter/index.js","webpack:///./node_modules/date-fns/esm/isBefore/index.js","webpack:///./node_modules/date-fns/esm/isDate/index.js","webpack:///./node_modules/date-fns/esm/isEqual/index.js","webpack:///./node_modules/date-fns/esm/isFirstDayOfMonth/index.js","webpack:///./node_modules/date-fns/esm/isFriday/index.js","webpack:///./node_modules/date-fns/esm/isLastDayOfMonth/index.js","webpack:///./node_modules/date-fns/esm/isLeapYear/index.js","webpack:///./node_modules/date-fns/esm/isMonday/index.js","webpack:///./node_modules/date-fns/esm/isSameDay/index.js","webpack:///./node_modules/date-fns/esm/isSameHour/index.js","webpack:///./node_modules/date-fns/esm/isSameISOWeek/index.js","webpack:///./node_modules/date-fns/esm/isSameISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/isSameMinute/index.js","webpack:///./node_modules/date-fns/esm/isSameMonth/index.js","webpack:///./node_modules/date-fns/esm/isSameQuarter/index.js","webpack:///./node_modules/date-fns/esm/isSameSecond/index.js","webpack:///./node_modules/date-fns/esm/isSameWeek/index.js","webpack:///./node_modules/date-fns/esm/isSameYear/index.js","webpack:///./node_modules/date-fns/esm/isSaturday/index.js","webpack:///./node_modules/date-fns/esm/isSunday/index.js","webpack:///./node_modules/date-fns/esm/isThursday/index.js","webpack:///./node_modules/date-fns/esm/isTuesday/index.js","webpack:///./node_modules/date-fns/esm/isValid/index.js","webpack:///./node_modules/date-fns/esm/isWednesday/index.js","webpack:///./node_modules/date-fns/esm/isWeekend/index.js","webpack:///./node_modules/date-fns/esm/isWithinInterval/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfDecade/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfISOWeek/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfMonth/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfQuarter/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfWeek/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/lightFormat/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/index.js","webpack:///./node_modules/date-fns/esm/max/index.js","webpack:///./node_modules/date-fns/esm/min/index.js","webpack:///./node_modules/date-fns/esm/parse/_lib/parsers/index.js","webpack:///./node_modules/date-fns/esm/parse/index.js","webpack:///./node_modules/date-fns/esm/parseISO/index.js","webpack:///./node_modules/date-fns/esm/roundToNearestMinutes/index.js","webpack:///./node_modules/date-fns/esm/setDate/index.js","webpack:///./node_modules/date-fns/esm/setDay/index.js","webpack:///./node_modules/date-fns/esm/setDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/setHours/index.js","webpack:///./node_modules/date-fns/esm/setISODay/index.js","webpack:///./node_modules/date-fns/esm/setISOWeek/index.js","webpack:///./node_modules/date-fns/esm/setISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/setMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/setMinutes/index.js","webpack:///./node_modules/date-fns/esm/setMonth/index.js","webpack:///./node_modules/date-fns/esm/setQuarter/index.js","webpack:///./node_modules/date-fns/esm/setSeconds/index.js","webpack:///./node_modules/date-fns/esm/setWeek/index.js","webpack:///./node_modules/date-fns/esm/setWeekYear/index.js","webpack:///./node_modules/date-fns/esm/setYear/index.js","webpack:///./node_modules/date-fns/esm/startOfDay/index.js","webpack:///./node_modules/date-fns/esm/startOfDecade/index.js","webpack:///./node_modules/date-fns/esm/startOfHour/index.js","webpack:///./node_modules/date-fns/esm/startOfISOWeek/index.js","webpack:///./node_modules/date-fns/esm/startOfISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/startOfMinute/index.js","webpack:///./node_modules/date-fns/esm/startOfMonth/index.js","webpack:///./node_modules/date-fns/esm/startOfQuarter/index.js","webpack:///./node_modules/date-fns/esm/startOfSecond/index.js","webpack:///./node_modules/date-fns/esm/startOfWeek/index.js","webpack:///./node_modules/date-fns/esm/startOfWeekYear/index.js","webpack:///./node_modules/date-fns/esm/startOfYear/index.js","webpack:///./node_modules/date-fns/esm/subDays/index.js","webpack:///./node_modules/date-fns/esm/subHours/index.js","webpack:///./node_modules/date-fns/esm/subISOWeekYears/index.js","webpack:///./node_modules/date-fns/esm/subMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/subMinutes/index.js","webpack:///./node_modules/date-fns/esm/subMonths/index.js","webpack:///./node_modules/date-fns/esm/subQuarters/index.js","webpack:///./node_modules/date-fns/esm/subSeconds/index.js","webpack:///./node_modules/date-fns/esm/subWeeks/index.js","webpack:///./node_modules/date-fns/esm/subYears/index.js","webpack:///./node_modules/date-fns/esm/toDate/index.js","webpack:///./node_modules/deep-equal/index.js","webpack:///./node_modules/deep-equal/node_modules/isarray/index.js","webpack:///./node_modules/define-properties/index.js","webpack:///./node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js","webpack:///./node_modules/es-get-iterator/index.js","webpack:///./node_modules/es-get-iterator/node_modules/isarray/index.js","webpack:///./node_modules/foreach/index.js","webpack:///./node_modules/function-bind/implementation.js","webpack:///./node_modules/function-bind/index.js","webpack:///./node_modules/get-intrinsic/index.js","webpack:///./node_modules/google-protobuf/google-protobuf.js","webpack:///./node_modules/has-bigints/index.js","webpack:///./node_modules/has-symbols/index.js","webpack:///./node_modules/has-symbols/shams.js","webpack:///./node_modules/has-tostringtag/shams.js","webpack:///./node_modules/has/src/index.js","webpack:///./node_modules/is-arguments/index.js","webpack:///./node_modules/is-bigint/index.js","webpack:///./node_modules/is-boolean-object/index.js","webpack:///./node_modules/is-buffer/index.js","webpack:///./node_modules/is-date-object/index.js","webpack:///./node_modules/is-map/index.js","webpack:///./node_modules/is-number-object/index.js","webpack:///./node_modules/is-regex/index.js","webpack:///./node_modules/is-set/index.js","webpack:///./node_modules/is-string/index.js","webpack:///./node_modules/is-symbol/index.js","webpack:///./node_modules/is-typed-array/index.js","webpack:///./node_modules/is-weakmap/index.js","webpack:///./node_modules/is-weakset/index.js","webpack:///./node_modules/locale-currency/index.js","webpack:///./node_modules/locale-currency/map.js","webpack:///./node_modules/lru-cache/index.js","webpack:///./node_modules/lru-cache/node_modules/yallist/iterator.js","webpack:///./node_modules/lru-cache/node_modules/yallist/yallist.js","webpack:///./node_modules/md5/md5.js","webpack:///./node_modules/memoize-one/dist/memoize-one.esm.js","webpack:///./node_modules/murmurhash/murmurhash.js","webpack:///./node_modules/object-assign/index.js","webpack:///./node_modules/object-inspect/index.js","webpack:///./node_modules/object-inspect/util.inspect.js","webpack:///./node_modules/object-is/implementation.js","webpack:///./node_modules/object-is/index.js","webpack:///./node_modules/object-is/polyfill.js","webpack:///./node_modules/object-is/shim.js","webpack:///./node_modules/object-keys/implementation.js","webpack:///./node_modules/object-keys/index.js","webpack:///./node_modules/object-keys/isArguments.js","webpack:///./node_modules/object.assign/implementation.js","webpack:///./node_modules/object.assign/index.js","webpack:///./node_modules/object.assign/polyfill.js","webpack:///./node_modules/object.assign/shim.js","webpack:///./node_modules/regexp.prototype.flags/implementation.js","webpack:///./node_modules/regexp.prototype.flags/index.js","webpack:///./node_modules/regexp.prototype.flags/polyfill.js","webpack:///./node_modules/regexp.prototype.flags/shim.js","webpack:///./node_modules/side-channel/index.js","webpack:///./node_modules/slash/index.js","webpack:///./node_modules/uuid/index.js","webpack:///./node_modules/uuid/lib/bytesToUuid.js","webpack:///./node_modules/uuid/lib/rng.js","webpack:///./node_modules/uuid/v1.js","webpack:///./node_modules/uuid/v4.js","webpack:///./node_modules/which-boxed-primitive/index.js","webpack:///./node_modules/which-collection/index.js","webpack:///./node_modules/which-typed-array/index.js","webpack:///./packages/api/app/query.js","webpack:///./packages/api/injected.js","webpack:///./packages/api/methods.js","webpack:///./packages/import-ynab4/importer.js","webpack:///./packages/import-ynab4/node_modules/@actual-app/api/utils.js","webpack:///./packages/import-ynab5/importer.js","webpack:///./packages/import-ynab5/node_modules/@actual-app/api/utils.js","webpack:///./packages/loot-core/migrations/1632571489012_remove_cache.js","webpack:///./packages/loot-core/node_modules/adm-zip/adm-zip.js","webpack:///./packages/loot-core/node_modules/adm-zip/headers/entryHeader.js","webpack:///./packages/loot-core/node_modules/adm-zip/headers/index.js","webpack:///./packages/loot-core/node_modules/adm-zip/headers/mainHeader.js","webpack:///./packages/loot-core/node_modules/adm-zip/methods/deflater.js","webpack:///./packages/loot-core/node_modules/adm-zip/methods/index.js","webpack:///./packages/loot-core/node_modules/adm-zip/methods/inflater.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/constants.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/errors.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/fattr.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/fileSystem.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/index.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/utils.js","webpack:///./packages/loot-core/node_modules/adm-zip/zipEntry.js","webpack:///./packages/loot-core/node_modules/adm-zip/zipFile.js","webpack:///../src/index.ts","webpack:///./packages/loot-core/src/mocks/budget.js","webpack:///./packages/loot-core/src/platform/exceptions/index.electron.js","webpack:///./packages/loot-core/src/platform/server/asyncStorage/index.electron.js","webpack:///./packages/loot-core/src/platform/server/connection/index.api.js","webpack:///./packages/loot-core/src/platform/server/fetch/index.electron.js","webpack:///./packages/loot-core/src/platform/server/fs/index.electron.js","webpack:///./packages/loot-core/src/platform/server/log/index.api.js","webpack:///./packages/loot-core/src/platform/server/sqlite/index.electron.js","webpack:///./packages/loot-core/src/platform/uuid/index.electron.js","webpack:///./packages/loot-core/src/server/accounts/export-to-csv.js","webpack:///./packages/loot-core/src/server/accounts/link.js","webpack:///./packages/loot-core/src/server/accounts/parse-file.js","webpack:///./packages/loot-core/src/server/accounts/payees.js","webpack:///./packages/loot-core/src/server/accounts/qif2json.js","webpack:///./packages/loot-core/src/server/accounts/rules.js","webpack:///./packages/loot-core/src/server/accounts/sync.js","webpack:///./packages/loot-core/src/server/accounts/title/index.js","webpack:///./packages/loot-core/src/server/accounts/title/lower-case.js","webpack:///./packages/loot-core/src/server/accounts/title/specials.js","webpack:///./packages/loot-core/src/server/accounts/transaction-rules.js","webpack:///./packages/loot-core/src/server/accounts/transactions.js","webpack:///./packages/loot-core/src/server/accounts/transfer.js","webpack:///./packages/loot-core/src/server/api-models.js","webpack:///./packages/loot-core/src/server/api.js","webpack:///./packages/loot-core/src/server/app.js","webpack:///./packages/loot-core/src/server/aql/compiler.js","webpack:///./packages/loot-core/src/server/aql/exec.js","webpack:///./packages/loot-core/src/server/aql/schema-helpers.js","webpack:///./packages/loot-core/src/server/aql/schema/executors.js","webpack:///./packages/loot-core/src/server/aql/schema/index.js","webpack:///./packages/loot-core/src/server/aql/schema/run-query.js","webpack:///./packages/loot-core/src/server/aql/views.js","webpack:///./packages/loot-core/src/server/backups.js","webpack:///./packages/loot-core/src/server/budget/actions.js","webpack:///./packages/loot-core/src/server/budget/app.js","webpack:///./packages/loot-core/src/server/budget/base.js","webpack:///./packages/loot-core/src/server/budget/report.js","webpack:///./packages/loot-core/src/server/budget/rollover.js","webpack:///./packages/loot-core/src/server/budget/util.js","webpack:///./packages/loot-core/src/server/cloud-storage.js","webpack:///./packages/loot-core/src/server/db/index.js","webpack:///./packages/loot-core/src/server/db/mappings.js","webpack:///./packages/loot-core/src/server/db/sort.js","webpack:///./packages/loot-core/src/server/db/util.js","webpack:///./packages/loot-core/src/server/encryption-internals.js","webpack:///./packages/loot-core/src/server/encryption.js","webpack:///./packages/loot-core/src/server/errors.js","webpack:///./packages/loot-core/src/server/main-app.js","webpack:///./packages/loot-core/src/server/main.js","webpack:///./packages/loot-core/src/server/merkle.js","webpack:///./packages/loot-core/src/server/migrate/migrations.js","webpack:///./packages/loot-core/src/server/models.js","webpack:///./packages/loot-core/src/server/mutators.js","webpack:///./packages/loot-core/src/server/notes/app.js","webpack:///./packages/loot-core/src/server/perf.js","webpack:///./packages/loot-core/src/server/platform.js","webpack:///./packages/loot-core/src/server/polyfills.js","webpack:///./packages/loot-core/src/server/post.js","webpack:///./packages/loot-core/src/server/prefs.js","webpack:///./packages/loot-core/src/server/schedules/app.js","webpack:///./packages/loot-core/src/server/schedules/find-schedules.js","webpack:///./packages/loot-core/src/server/server-config.js","webpack:///./packages/loot-core/src/server/sheet.js","webpack:///./packages/loot-core/src/server/spreadsheet/globals.js","webpack:///./packages/loot-core/src/server/spreadsheet/graph-data-structure.js","webpack:///./packages/loot-core/src/server/spreadsheet/spreadsheet.js","webpack:///./packages/loot-core/src/server/spreadsheet/util.js","webpack:///./packages/loot-core/src/server/sync/encoder.js","webpack:///./packages/loot-core/src/server/sync/index.js","webpack:///./packages/loot-core/src/server/sync/make-test-message.js","webpack:///./packages/loot-core/src/server/sync/migrate.js","webpack:///./packages/loot-core/src/server/sync/proto/sync_pb.js","webpack:///./packages/loot-core/src/server/sync/repair.js","webpack:///./packages/loot-core/src/server/sync/reset.js","webpack:///./packages/loot-core/src/server/timestamp.js","webpack:///./packages/loot-core/src/server/tools/app.js","webpack:///./packages/loot-core/src/server/tracking/events.js","webpack:///./packages/loot-core/src/server/undo.js","webpack:///./packages/loot-core/src/server/update.js","webpack:///./packages/loot-core/src/server/util/budget-name.js","webpack:///./packages/loot-core/src/server/util/rschedule.js","webpack:///./packages/loot-core/src/shared/accounts.js","webpack:///./packages/loot-core/src/shared/async.js","webpack:///./packages/loot-core/src/shared/months.js","webpack:///./packages/loot-core/src/shared/query.js","webpack:///./packages/loot-core/src/shared/rules.js","webpack:///./packages/loot-core/src/shared/schedules.js","webpack:///./packages/loot-core/src/shared/transactions.js","webpack:///./packages/loot-core/src/shared/util.js","webpack:///external \"better-sqlite3\"","webpack:///external \"crypto\"","webpack:///external \"fs\"","webpack:///external \"node-fetch\"","webpack:///external \"node-libofx\"","webpack:///external \"path\"","webpack:///external \"stream\"","webpack:///external \"string_decoder\"","webpack:///external \"util\"","webpack:///external \"zlib\""],"names":["OccurrenceGenerator","constructor","args","timezone","undefined","maxDuration","firstDate","_firstDate","start","_run","next","value","dateAdapter","fromDateTime","lastDate","_lastDate","isInfinite","end","reverse","pipe","operators","reduce","prev","curr","base","occurrences","OccurrenceIterator","normalizeOccurrencesArgs","collections","CollectionIterator","normalizeCollectionsArgs","occursBetween","startInput","endInput","options","normalizeDateInput","hasDuration","excludeEnds","getMaxDuration","iterator","subtract","day","isBefore","isEqual","occursOn","rawArgs","normalizeOccursOnArgs","weekday","before","ArgumentError","after","add","date","get","skipToDate","getDifferenceBetweenWeekdays","granularity","isAfter","occursAfter","adapter","excludeStart","occursBefore","isAfterOrEqual","DateAdapterBase$1","Object","assign","excludeDates","map","normalizeRunArgs","dateInputToDateTime","normalizeDateInputToAdapter","dateInputToDateAdapter","normalizeRunOutput","normalizeDateTimeTimezone$1","method","Number","isInteger","iterable","Symbol","occurrenceIterator","toArray","take","Array","from","InfiniteLoopError","yieldArgs","normalizeDateOutput","Collection","dates","periodStart","periodEnd","weekStart","Error","getPeriod","startDate","collectionIterator","collection","push","period","index","isBeforeOrEqual","skipEmptyPeriods","incrementPeriod","endGranularity","Operator","streams","config","stream","set","calculateIsInfinite","calculateHasDuration","IterableWrapper","generator","runArgs","done","processYieldArgs","length","every","s","streamsComparer","a","b","streamsReverseComparer","selectNextIterable","sort","filter","shift","selectLastIterable","pop","AddOperator","_","wrappedStreams","input","some","streamsDuration","Calendar","schedules","data","isArray","schedule","prop","count","Dates","adapters","datetimes","duration","toDateTime","remove","slice","findIndex","valueOf","splice","keepLocalTime","json","toJSON","fromJSON","fn","dateTimeSortComparer","dateCache","InvalidDateAdapterError","dateAdapterConfig","DateAdapterBase","_date","generators","name","isDate","_object","unimplementedError","fromDate","_options","_json","_datetime","toISOString","DateTime","hasTimezoneSupport","DateAdapter","WEEKDAYS","MILLISECONDS_IN_SECOND","MILLISECONDS_IN_MINUTE","MILLISECONDS_IN_HOUR","MILLISECONDS_IN_DAY","MILLISECONDS_IN_WEEK","InvalidDateTimeError","Date","assertIsValid","UTC","year","month","hour","minute","second","millisecond","fromDateAdapter","_end","object","assertSameTimeZone","isOccurring","amount","unit","unshift","forkDateTime","addUTCYears","addUTCMonths","addUTCWeeks","addUTCDays","addUTCHours","addUTCMinutes","addUTCSeconds","addUTCMilliseconds","subUTCYears","subUTCMonths","subUTCWeeks","subUTCDays","subUTCHours","subUTCMinutes","subUTCSeconds","subUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCYearDay","getUTCDay","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","setUTCFullYear","monthLength","setUTCDate","setUTCMonth","setUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","opt","setDateToStartOfWeek","setDateToEndOfWeek","isNaN","x","y","JSON","stringify","wkst","orderedWeekdays","indexOf","wkdays","shiftArray","array","block","getDaysInFebruary","isLeapYear","now","diff","Math","floor","toInteger","NaN","int","ceil","addMilliseconds","dirtyDate","dirtyAmount","arguments","TypeError","timestamp","desiredMonth","dateWithDesiredMonth","daysInMonth","min","days","getTime","normalizeDateTimeTimezone","RuleBase","recurrenceRules","cloneRuleOptions","normOptions","normalizeRuleOptions","RecurrenceRulesIterator","recurrenceRulesReducer","Rule","tzoptions","DateTime$1","ScheduleBase","occurrenceStream","SubtractOperator","inclusion","exclusion","cycleStreams","iterateExclusion","unique","UniqueOperator","lastValue","Schedule","rrules","exrules","arg","ruleArgs","rule","rdates","exdates","intersection","IntersectionOperator","maxFailedIterations","defaultMaxFailedIterations","hasEndDate","cycleStreams$1","iteration","maxIterations","lastValidDate","last","forEach","DurationIterableWrapper","workingValue","MergeDurationOperatorError","mergeDuration","MergeDurationOperator","reverseRun","forwardRun","checkFromStart","checkFromEnd","SplitDurationOperatorError","splitDuration","SplitDurationOperator","splitFn","datesBucket","splitDate","selectedDate","bucketIndex","selectedBucketIndex","dateIndex","selectedDateIndex","bucket","dateShouldComeNext","datePastEnd","datePastSkipToDate","valid","uniqDateTimes","Map","values","result","abs","getDaysInYear","numberSortComparer","freqToGranularity","freq","cloneJSON","parse","RuleOptionError","normalizeDefaultOptions","recurrenceModules","startOptions","mod","normalizeOptions","keys","key","obj","RecurrenceRuleError","ValidDateTime","InvalidDateTime","rules","iterate","iterateWithReverseCount","iterateWithCount","normalizeDateTimeArgs","startingDate","nextDate","runRules","isDatePastEnd","run","RecurrenceRule","processor","FrequencyRule","initDate","intervalUnit","frequency","firstIntervalStartDate","normalizedStartDate","intervalStartDate","intervalEndDate","normalizedEndDate","skipToInterval","validateDate","dateIsWithinInterval","setToCurrentInterval","intervalDifference","intervalDifferenceBetweenDates","first","interval","direction","difference","intervalDuration","months","RevFrequencyRule","FREQUENCIES","FrequencyRuleModule","byMillisecondOfSecond","norm","includes","deps","ruleOptionFilled","option","freqCache","WeakMap","RecurrenceRuleBase","has","RevRecurrenceRuleBase","RevByTimeOfUnitRule","currentTime","time","baseGranularity","RevByMillisecondOfSecondRule","ByTimeOfUnitRule","ByMillisecondOfSecondRule","ByMillisecondOfSecondRuleModule","num","RevBySecondOfMinuteRule","bySecondOfMinute","BySecondOfMinuteRule","BySecondOfMinuteRuleModule","RevByMinuteOfHourRule","byMinuteOfHour","ByMinuteOfHourRule","ByMinuteOfHourRuleModule","RevByHourOfDayRule","byHourOfDay","ByHourOfDayRule","ByHourOfDayRuleModule","getNextWeekday","getNthWeekdayOfMonth","nth","ByDayOfMonthRule","normalizedByDayOfMonth","normalizeByDayOfMonth","byDayOfMonth","byDayOfWeek","currentDay","nextMonth","lengthOfMonth","filteredByDayOfMonth","entry","nthWeekdayOfMonth","Set","RevByDayOfMonthRule","ByDayOfMonthRuleModule","byDayOfYear","getNthWeekdayOfYear","getPreviousWeekday","RevByDayOfWeekRule","byMonthOfYear","expandYearly","expandMonthly","expand","getPrevWeekdaysOfYear","getPrevWeekdaysOfMonth","normalizedNthWeekdaysOfYear","normalizedNextWeekdays","normalizedNthWeekdaysOfMonth","ByDayOfWeekRule","getNextWeekdaysOfYear","getNextWeekdaysOfMonth","ByDayOfWeekRuleModule","invalidWeeday","find","RevByMonthOfYearRule","currentMonth","ByMonthOfYearRule","ByMonthOfYearRuleModule","ICAL_RULES","prototype","serialize","opts","type","nested","serializeDataToJSON","ParseJSONError","registerJSONSerializerFn","SerializeJSONError","JSON_FN_MAP","gen","StandardDateAdapter","toString","call","datetime","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","root","lib","version","settings","currency","symbol","format","decimal","thousand","precision","grouping","number","nativeMap","nativeIsArray","isString","charCodeAt","substr","isObject","defaults","defs","hasOwnProperty","context","results","i","j","checkPrecision","val","round","checkCurrencyFormat","match","pos","neg","replace","zero","unformat","regex","RegExp","unformatted","parseFloat","toFixed","exponentialForm","rounded","finalResult","formatNumber","usePrecision","negative","parseInt","split","formatMoney","formats","useFormat","formatColumn","list","padAfterSymbol","maxLength","formatted","fVal","join","module","exports","accounting","Utils","require","pth","ZipEntry","ZipFile","get_Bool","def","get_Str","defaultOptions","noSort","readEntries","Constants","NONE","fs","inBuffer","create","Uint8Array","Buffer","isBuffer","BUFFER","filetools","existsSync","FILE","filename","readFileSync","Errors","INVALID_FILENAME","_zip","canonical","sanitize","getEntry","item","entryName","header","fixPath","zipPath","posix","normalize","sep","readFile","pass","getData","readFileAsync","callback","getDataAsync","readAsText","encoding","readAsTextAsync","err","deleteFile","deleteEntry","addZipComment","comment","getZipComment","addZipEntryComment","getZipEntryComment","updateFile","content","setData","addLocalFile","localPath","zipName","p","_attr","statSync","addFile","FILE_NOT_FOUND","addLocalFolder","rx","test","items","findFiles","self","filepath","relative","stats","isFile","alloc","addLocalFolderAsync","open","code","stat","er0","er1","addLocalFolderPromise","props","Promise","resolve","reject","attr","update","isStat","Stats","mtime","fileattr","isDirectory","isWin","unix","mode","setEntry","getEntries","entries","getEntryCount","extractEntryTo","targetPath","maintainEntryPath","overwrite","keepOriginalPermission","outFileName","NO_ENTRY","target","basename","children","getEntryChildren","child","CANT_EXTRACT_FILE","childName","fileAttr","writeFileTo","CANT_OVERRIDE","extractAllTo","NO_ZIP","makeDir","utimesSync","extractAllToAsync","getPath","getError","msg","file","dirEntries","fileEntries","e","dirPath","dirAttr","chmodSync","er","size","filePath","err_1","writeFileToAsync","succ","utimes","err_2","delete","writeZip","targetFileName","zipData","compressToBuffer","ok","writeZipPromise","perm","toBufferPromise","then","ret","toAsyncBuffer","toBuffer","onSuccess","onFail","onItemStart","onItemEnd","_verMade","_version","_flags","_method","_time","_crc","_compressedSize","_size","_fnameLen","_extraLen","_comLen","_diskStart","_inattr","_offset","FLG_EFS","_dataHeader","setTime","made","flags","STORED","DEFLATED","crc","max","compressedSize","fileNameLength","extraLength","commentLength","diskNumStart","inAttr","offset","encripted","entryHeaderSize","CENHDR","realDataOffset","LOCHDR","fnameLen","extraLen","dataHeader","loadDataHeaderFromBinary","readUInt32LE","LOCSIG","INVALID_LOC","readUInt16LE","LOCVER","LOCFLG","LOCHOW","LOCTIM","LOCCRC","LOCSIZ","LOCLEN","LOCNAM","LOCEXT","loadFromBinary","CENSIG","INVALID_CEN","CENVEM","CENVER","CENFLG","CENHOW","CENTIM","CENCRC","CENSIZ","CENLEN","CENNAM","CENEXT","CENCOM","CENDSK","CENATT","CENATX","CENOFF","dataHeaderToBinary","writeUInt32LE","writeUInt16LE","entryHeaderToBinary","fill","bytes","nr","methodToString","toUpperCase","EntryHeader","MainHeader","_volumeEntries","_totalEntries","_commentLength","diskEntries","totalEntries","mainHeaderSize","ENDHDR","ENDSIG","ZIP64HDR","ZIP64SIG","INVALID_END","ENDSUB","ENDTOT","ENDSIZ","ENDOFF","ENDCOM","readBigUInt64LE","ZIP64SUB","ZIP64TOT","ZIP64SIZ","ZIP64OFF","toBinary","len","offs","inbuf","zlib","chunkSize","deflate","deflateRawSync","deflateAsync","tmp","createDeflateRaw","parts","total","on","buf","written","part","copy","Deflater","Inflater","ZipCrypto","inflate","inflateRawSync","inflateAsync","createInflateRaw","randomFillSync","crctable","Uint32Array","t","uMul","imul","crc32update","pCrc32","bval","genSalt","node","salt","random","Initkeys","pw","updateKeys","byteValue","k","make_decrypter","pwd","c","make_encrypter","decrypt","decrypter","_salter","encrypt","oldlike","encrypter","EXTSIG","EXTHDR","EXTCRC","EXTSIZ","EXTLEN","END64HDR","END64SIG","END64START","END64OFF","END64NUMDISKS","ZIP64LEAD","ZIP64SIZE","ZIP64VEM","ZIP64VER","ZIP64DSK","ZIP64DSKDIR","ZIP64SIZB","ZIP64EXTRA","SHRUNK","REDUCED1","REDUCED2","REDUCED3","REDUCED4","IMPLODED","ENHANCED_DEFLATED","PKWARE","BZIP2","LZMA","IBM_TERSE","IBM_LZ77","AES_ENCRYPT","FLG_ENC","FLG_COMP1","FLG_COMP2","FLG_DESC","FLG_ENH","FLG_PATCH","FLG_STR","FLG_MSK","EF_ID","EF_SIZE","ID_ZIP64","ID_AVINFO","ID_PFS","ID_OS2","ID_NTFS","ID_OPENVMS","ID_UNIX","ID_FORK","ID_PATCH","ID_X509_PKCS7","ID_X509_CERTID_F","ID_X509_CERTID_C","ID_STRONGENC","ID_RECORD_MGT","ID_X509_PKCS7_RL","ID_IBM1","ID_IBM2","ID_POSZIP","EF_ZIP64_OR_32","EF_ZIP64_OR_16","EF_ZIP64_SUNCOMP","EF_ZIP64_SCOMP","EF_ZIP64_RHO","EF_ZIP64_DSN","NO_DATA","BAD_CRC","FILE_IN_THE_WAY","UNKNOWN_METHOD","AVAIL_DATA","INVALID_DISTANCE","TO_MANY_CODES","INVALID_REPEAT_LEN","INVALID_REPEAT_FIRST","INCOMPLETE_CODES","INVALID_DYN_DISTANCE","INVALID_CODES_LEN","INVALID_STORE_BLOCK","INVALID_BLOCK_TYPE","DIRECTORY_CONTENT_ERROR","NOT_IMPLEMENTED","INVALID_FORMAT","path","_path","_obj","newAttr","_stat","directory","readonly","hidden","executable","atime","console","warn","readOnly","decodeAttributes","encodeAttributes","isReadOnly","isHidden","isExecutable","mTime","aTime","process","versions","originalFs","FileAttr","fsystem","platform","is_Obj","crcTable","folder","mkdirSync","fpath","resolvedPath","dirname","fd","openSync","writeSync","closeSync","exists","exist","chmod","write","close","findSync","dir","pattern","recursive","files","readdirSync","concat","getAttributes","setAttributes","byte","crc32","genCRCTable","off","safeSuffix","prefix","l","buffer","swap64","Headers","Methods","_entryHeader","_entryName","_comment","_isDirectory","uncompressedData","_extra","getCompressedDataFromZip","crc32OK","decompress","async","compressedData","inflater","compress","deflater","deflated","readUInt64LE","parseExtra","signature","parseZip64ExtendedInformation","rawEntryName","lastChar","extra","n","getCompressedData","getCompressedDataAsync","changed","packHeader","addpos","entryList","entryTable","mainHeader","loadedEntries","readMainHeader","iterateEntries","readNow","endStart","endOffset","commentEnd","sortEntries","toLowerCase","localeCompare","_self","zipEntry","dataBlock","entryHeaders","totalSize","dindex","entryNameLen","postHeader","dataLength","entryHeader","outBuffer","mh","compress2Buffer","entryLists","possibleNames","g","globalThis","global","availableTypedArrays","out","GetIntrinsic","callBind","$indexOf","callBoundIntrinsic","allowMissing","intrinsic","bind","$apply","$call","$reflectApply","$gOPD","$defineProperty","$max","originalFunction","func","desc","configurable","applyBind","apply","charenc","utf8","stringToBytes","str","bin","unescape","encodeURIComponent","bytesToString","decodeURIComponent","escape","String","fromCharCode","base64map","crypt","rotl","rotr","endian","randomBytes","bytesToWords","words","wordsToBytes","bytesToHex","hex","hexToBytes","bytesToBase64","base64","triplet","charAt","base64ToBytes","imod4","pow","ResizeableBuffer","prepend","resize","clone","append","reset","Transform","tab","nl","np","cr","space","boms","Parser","readableObjectMode","__originalOptions","__normalizeOptions","underscore","CsvError","bom","fnCastField","cast","cast_date","fnFirstLineToHeaders","columns","normalizeColumnsArray","columns_duplicates_to_array","delimiter_json","delimiter","from_line","ignore_last_delimiters","info","max_record_size","objname","on_record","quote","raw","record_delimiter","rd","relax","relax_column_count","relax_column_count_less","relax_column_count_more","skip_empty_lines","skip_lines_with_empty_values","skip_lines_with_error","rtrim","ltrim","trim","to","to_line","comment_lines","empty_lines","invalid_field_length","lines","records","state","bomSkipped","bufBytesStart","castField","commenting","error","enabled","escaping","escapeIsQuote","compare","expectedRecordLength","field","firstLineToHeaders","needMoreDataSize","previousBuf","quoting","stop","rawBuffer","record","recordHasError","record_length","recordDelimiterMaxLength","v","trimChars","wasQuoting","wasRowDelimiter","_transform","__parse","_flush","nextBuf","bomLength","bufLen","__needMoreData","record_delimiterCount","__autoDiscoverRecordDelimiter","chr","__isEscape","__isQuote","nextChr","isNextChrTrimable","__isCharTrimable","isNextChrComment","__compareBytes","isNextChrDelimiter","__isDelimiter","isNextChrRecordDelimiter","__isRecordDelimiter","__error","__infoField","recordDelimiterLength","skipCommentLine","__resetField","__resetRecord","errField","__onField","errRecord","__onRecord","commentCount","delimiterLength","lappend","rappend","recordLength","isRecordEmpty","__firstLineToColumns","finalErr","disabled","__push","__infoRecord","headers","normalizedHeaders","trimRight","__cast","f","isColumns","__isFloat","sourceBuf","targetBuf","targetPos","firstByte","sourceLength","numOfCharLeft","requiredLength","loop1","del","rdLength","emit","__infoDataSet","column","argument","parser","read","setImmediate","message","contexts","captureStackTrace","normalizedColumns","err1","err2","bom_utf8","Stringifier","writableObjectMode","quoted","quoted_empty","quoted_match","isRegExp","quoted_string","eof","normalize_columns","bigint","boolean","string","chunk","chunk_string","chunkIsHeader","csvrecord","containsdelimiter","containsQuote","containsEscape","containsRecordDelimiter","quotedString","quotedMatch","shouldQuote","regexp","newcolumns","stringifier","chunks","charCodeOfDot","reEscapeChar","rePropName","reIsDeepProp","reIsPlainProp","getTag","isKey","isSymbol","stringToPath","expression","subString","castPath","toKey","INFINITY","StringDecoder","decoder","onData","localeCurrency","currencies","localeFormats","defaultCurrency","thousandsSeparator","decimalSeparator","symbolOnLeft","spaceBetweenAmountAndSymbol","decimalDigits","defaultLocaleFormat","formatMapping","locale","getCurrency","localeMatch","exec","language","region","localeFormat","findCurrency","isUndefined","currencyCode","__this","that","limit","thisLength","thatLength","matrix","prepare","this_i","that_j","cost","steps","similarity","addLeadingZeros","targetLength","sign","output","dirtyObject","property","cloneObject","dayPeriodEnum","am","pm","midnight","noon","morning","afternoon","evening","night","formatters","G","token","localize","era","width","signedYear","ordinalNumber","lightFormatters","Y","signedWeekYear","getUTCWeekYear","weekYear","twoDigitYear","R","isoWeekYear","getUTCISOWeekYear","u","Q","quarter","q","M","L","w","week","getUTCWeek","I","isoWeek","getUTCISOWeek","d","D","dayOfYear","getUTCDayOfYear","E","dayOfWeek","localDayOfWeek","weekStartsOn","isoDayOfWeek","hours","dayPeriodEnumValue","dayPeriod","B","h","H","K","m","S","numberOfDigits","milliseconds","fractionalSeconds","X","_localize","originalDate","_originalDate","timezoneOffset","getTimezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","O","formatTimezoneShort","z","T","dirtyDelimiter","absOffset","minutes","dateLongFormatter","formatLong","timeLongFormatter","dateTimeLongFormatter","matchResult","datePattern","timePattern","dateTimeFormat","dateTime","longFormatters","P","getTimezoneOffsetInMilliseconds","baseTimezoneOffset","setSeconds","millisecondsPartOfTimezoneOffset","toDate","startOfYearTimestamp","startOfUTCISOWeek","startOfUTCISOWeekYear","fourthOfJanuaryOfNextYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","startOfUTCWeek","startOfUTCWeekYear","dirtyOptions","localeFirstWeekContainsDate","firstWeekContainsDate","defaultFirstWeekContainsDate","RangeError","firstWeekOfNextYear","firstWeekOfThisYear","protectedTokens","isProtectedToken","throwProtectedError","setUTCDay","dirtyDay","localeWeekStartsOn","defaultWeekStartsOn","remainder","dayIndex","setUTCISODay","setUTCISOWeek","dirtyISOWeek","setUTCWeek","dirtyWeek","fourthOfJanuary","firstWeek","dirtyNumber","addDays","setDate","addHours","addISOWeekYears","setISOWeekYear","getISOWeekYear","addMinutes","addMonths","setFullYear","setHours","getDaysInMonth","setMonth","addQuarters","addSeconds","addWeeks","addYears","areIntervalsOverlapping","dirtyIntervalLeft","dirtyIntervalRight","intervalLeft","intervalRight","leftStartTime","leftEndTime","rightStartTime","rightEndTime","closestIndexTo","dirtyDateToCompare","dirtyDatesArray","dateToCompare","timeToCompare","datesArray","minDistance","currentDate","distance","closestTo","compareAsc","dirtyDateLeft","dirtyDateRight","dateLeft","dateRight","compareDesc","differenceInCalendarDays","startOfDayLeft","startOfDay","startOfDayRight","timestampLeft","timestampRight","differenceInCalendarISOWeekYears","differenceInCalendarISOWeeks","startOfISOWeekLeft","startOfISOWeek","startOfISOWeekRight","differenceInCalendarMonths","yearDiff","monthDiff","differenceInCalendarQuarters","quarterDiff","getQuarter","differenceInCalendarWeeks","startOfWeekLeft","startOfWeek","startOfWeekRight","differenceInCalendarYears","differenceInDays","isLastDayNotFull","differenceInHours","differenceInMilliseconds","differenceInISOWeekYears","subISOWeekYears","isLastISOWeekYearNotFull","differenceInMinutes","differenceInMonths","isLastMonthNotFull","differenceInQuarters","differenceInSeconds","differenceInWeeks","differenceInYears","isLastYearNotFull","eachDayOfInterval","dirtyInterval","endDate","endTime","step","eachWeekOfInterval","startDateWeek","endDateWeek","weeks","currentWeek","eachWeekendOfInterval","dateInterval","weekends","isWeekend","isSunday","eachWeekendOfMonth","startOfMonth","endOfMonth","eachWeekendOfYear","startOfYear","endOfYear","endOfDay","endOfDecade","decade","endOfHour","setMinutes","endOfISOWeek","endOfWeek","endOfISOWeekYear","setMilliseconds","endOfMinute","endOfQuarter","endOfSecond","getDay","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","dirtyFormatStr","formatStr","defaultLocale","isValid","utcDate","subMilliseconds","formatterOptions","substring","firstCharacter","longFormatter","cleanEscapedString","formatter","awareOfUnicodeTokens","MINUTES_IN_DAY","MINUTES_IN_ALMOST_TWO_DAYS","MINUTES_IN_MONTH","MINUTES_IN_TWO_MONTHS","formatDistance","dirtyBaseDate","comparison","localizeOptions","addSuffix","Boolean","seconds","offsetInSeconds","includeSeconds","nearestMonth","monthsSinceStartOfYear","years","MINUTES_IN_YEAR","formatDistanceStrict","roundingMethod","roundingMethodFn","formatRelative","baseDate","utcBaseDate","fromUnixTime","dirtyUnixTime","unixTime","dayOfMonth","getDayOfYear","monthIndex","lastDayOfMonth","getDecade","getISODay","getISOWeek","startOfISOWeekYear","getISOWeeksInYear","thisYear","nextYear","getOverlappingDaysInIntervals","isOverlapping","overlapStartDate","overlapEndDate","differenceInMs","getUnixTime","getWeek","startOfWeekYear","getWeekOfMonth","startWeekDay","currentWeekDay","startWeekDayWithOptions","getWeekYear","getWeeksInMonth","getYear","dirtyLeftDate","dirtyRightDate","isFirstDayOfMonth","isFriday","isLastDayOfMonth","isMonday","isSameDay","dateLeftStartOfDay","dateRightStartOfDay","isSameHour","dateLeftStartOfHour","startOfHour","dateRightStartOfHour","isSameISOWeek","isSameWeek","isSameISOWeekYear","dateLeftStartOfYear","dateRightStartOfYear","isSameMinute","dateLeftStartOfMinute","startOfMinute","dateRightStartOfMinute","isSameMonth","isSameQuarter","dateLeftStartOfQuarter","startOfQuarter","dateRightStartOfQuarter","isSameSecond","dateLeftStartOfSecond","startOfSecond","dateRightStartOfSecond","dateLeftStartOfWeek","dateRightStartOfWeek","isSameYear","isSaturday","isThursday","isTuesday","isWednesday","isWithinInterval","startTime","lastDayOfDecade","lastDayOfISOWeek","lastDayOfWeek","lastDayOfISOWeekYear","lastDayOfQuarter","lastDayOfYear","lightFormat","buildFormatLongFn","defaultWidth","buildLocalizeFn","dirtyIndex","valuesArray","formattingValues","defaultFormattingWidth","argumentCallback","buildMatchFn","dirtyString","matchPattern","matchPatterns","defaultMatchWidth","matchedString","parsePatterns","defaultParseWidth","findKey","valueCallback","rest","predicate","buildMatchPatternFn","parseResult","parsePattern","formatDistanceLocale","lessThanXSeconds","one","other","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","dateFormats","full","long","medium","short","timeFormats","dateTimeFormats","formatRelativeLocale","lastWeek","yesterday","today","tomorrow","nextWeek","eraValues","narrow","abbreviated","wide","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","rem100","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","any","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","numericPatterns","hour23h","hour24h","hour11h","hour12h","singleDigit","twoDigits","threeDigits","fourDigits","anyDigitsSigned","singleDigitSigned","twoDigitsSigned","threeDigitsSigned","fourDigitsSigned","timezonePatterns","basicOptionalMinutes","basic","basicOptionalSeconds","extended","extendedOptionalSeconds","parseNumericPattern","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","enumValue","normalizeTwoDigitYear","currentYear","isCommonEra","absCurrentYear","rangeEnd","rangeEndCentury","isPreviousCentury","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","isLeapYearIndex","parsers","priority","isTwoDigitYear","validate","normalizedTwoDigitYear","firstWeekOfYear","wholeWeekDays","isPM","timestampIsSet","TIMEZONE_UNIT_PRIORITY","notWhitespaceRegExp","dirtyDateString","dirtyFormatString","dateString","formatString","subFnOptions","setters","dateToSystemTimezone","tokens","uniquePrioritySetters","setter","setterArray","convertedDate","DEFAULT_ADDITIONAL_DIGITS","patterns","dateTimeDelimiter","timeZoneDelimiter","dateRegex","timeRegex","timezoneRegex","parseISO","additionalDigits","dateStrings","splitDateString","parseYearResult","parseYear","parseDate","restDateString","parseTime","parseTimezone","fullTime","fullTimeDate","fullTimeDateNextDay","offsetDiff","timeString","captures","century","isWeekDate","parseDateUnit","validateWeekDate","dayOfISOWeekYear","validateDayOfYearDate","parseTimeUnit","validateTime","timezoneString","validateTimezone","fourthOfJanuaryDay","daysInMonths","_year","_hours","roundToNearestMinutes","nearestTo","roundedMinutes","remainderMinutes","addedMinutes","dirtyDayOfMonth","setDay","setDayOfYear","dirtyDayOfYear","dirtyHours","setISODay","setISOWeek","dirtyISOWeekYear","dirtyMilliseconds","dirtyMinutes","dirtyMonth","setQuarter","dirtyQuarter","oldQuarter","dirtySeconds","setWeek","setWeekYear","dirtyWeekYear","setYear","dirtyYear","startOfDecade","cleanDate","subDays","subHours","subMinutes","subMonths","subQuarters","subSeconds","subWeeks","subYears","argStr","stack","objectKeys","isArguments","is","isRegex","whichBoxedPrimitive","callBound","whichCollection","getIterator","getSideChannel","whichTypedArray","$getTime","gPO","getPrototypeOf","$objToString","$Set","$mapHas","$mapGet","$mapSize","$setAdd","$setDelete","$setHas","$setSize","setHasEqualElement","val1","channel","internalDeepEqual","findLooseMatchingPrimitives","prim","mapMightHaveLoosePrim","altValue","curB","looseOpts","strict","setMightHaveLoosePrim","mapHasEqualEntry","key1","item1","key2","actual","expected","actualBoxed","expectedBoxed","hasActual","hasExpected","sentinel","objEquiv","setEquiv","iA","iB","resultA","resultB","mapEquiv","item2","aIsArray","bIsArray","aIsError","bIsError","aIsRegex","bIsRegex","source","aIsDate","bIsDate","aIsBuffer","bIsBuffer","ka","kb","aCollection","bCollection","deepEqual","arr","hasSymbols","toStr","origDefineProperty","defineProperty","isFunction","arePropertyDescriptorsSupported","enumerable","supportsDescriptors","writable","defineProperties","predicates","getOwnPropertySymbols","$iterator","$Map","$arrayPush","$charCodeAt","$stringSlice","advanceStringIndex","getArrayIterator","arraylike","getNonCollectionIterator","noPrimordialCollections","nextIndex","isMap","isSet","$mapForEach","$setForEach","$mapIterator","$setIterator","getStopIterationIterator","$mapAtAtIterator","$setAtAtIterator","getCollectionIterator","hasOwn","ctx","ERROR_MESSAGE","funcType","bound","binder","boundLength","boundArgs","Function","Empty","implementation","$SyntaxError","SyntaxError","$Function","$TypeError","getEvalledConstructor","expressionSyntax","getOwnPropertyDescriptor","throwTypeError","ThrowTypeError","callee","calleeThrows","gOPDthrows","getProto","__proto__","needsEval","TypedArray","INTRINSICS","AggregateError","ArrayBuffer","Atomics","BigInt","DataView","decodeURI","encodeURI","eval","EvalError","Float32Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","Int32Array","isFinite","Proxy","ReferenceError","Reflect","SharedArrayBuffer","Uint8ClampedArray","Uint16Array","URIError","WeakRef","WeakSet","doEval","LEGACY_ALIASES","$concat","$spliceApply","$replace","$strSlice","getBaseIntrinsic","intrinsicName","alias","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","$jscomp","scope","findInternal","ASSUME_ES5","ASSUME_NO_NATIVE_MAP","ASSUME_NO_NATIVE_SET","SIMPLE_FROUND_POLYFILL","getGlobal","window","polyfill","checkStringArgs","COMPILED","goog","isDef","isBoolean","isNumber","exportPath_","execScript","define","CLOSURE_UNCOMPILED_DEFINES","CLOSURE_DEFINES","nodeType","FEATURESET_YEAR","DEBUG","LOCALE","TRUSTED_SITE","STRICT_MODE_COMPATIBLE","DISALLOW_TEST_ONLY_CODE","ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING","provide","isInModuleLoader_","isProvided_","constructNamespace_","implicitNamespaces_","lastIndexOf","getObjectByName","getScriptNonce","getScriptNonce_","document","cspNonce_","NONCE_PATTERN_","querySelector","nonce","getAttribute","VALID_MODULE_RE_","search","isInGoogModuleLoader_","moduleLoaderState_","moduleName","getInternal_","loadedModules_","ModuleType","ES6","GOOG","isInEs6ModuleLoader_","getCurrentModulePath","declareLegacyNamespace","declareModuleId","moduleId","setTestOnly","forwardDeclare","isDefAndNotNull","globalize","addDependency","DEPENDENCIES_ENABLED","debugLoader_","ENABLE_DEBUG_LOADER","logToConsole_","requested","load_","requireType","basePath","nullFunction","abstractMethod","addSingletonGetter","instance_","getInstance","instantiatedSingletons_","LOAD_MODULE_USING_EVAL","SEAL_MODULE_EXPORTS","TRANSPILE","ASSUME_ES_MODULES_TRANSPILED","TRANSPILE_TO_LANGUAGE","TRANSPILER","hasBadLetScoping","useSafari10Workaround","workaroundSafari10EvalBug","loadModule","loadModuleFromSource_","seal","normalizePath_","loadFileSync_","CLOSURE_LOAD_FILE_SYNC","XMLHttpRequest","send","status","responseText","transpile_","transpile","$gwtExport","typeOf","propertyIsEnumerable","isNull","isArrayLike","isDateLike","getUid","UID_PROPERTY_","uidCounter_","hasUid","removeUid","removeAttribute","getHashCode","removeHashCode","bindNative_","bindJs_","partial","mixin","globalEval","evalWorksForGlobals_","_evalTest_","createElement","defer","appendChild","createTextNode","head","removeChild","getCssName","cssNameMapping_","cssNameMappingStyle_","CLOSURE_CSS_NAME_MAP_FN","setCssNameMapping","CLOSURE_CSS_NAME_MAPPING","getMsg","html","getMsgWithFallback","exportSymbol","exportProperty","inherits","superClass_","caller","defineClass","statics","createSealingConstructor_","applyProperties_","SEAL_CLASS_INSTANCES","isUnsealable_","UNSEALABLE_CONSTRUCTOR_PROPERTY_","OBJECT_PROTOTYPE_FIELDS_","tagUnsealableClass","inHtmlDocument_","isDocumentLoading_","attachEvent","readyState","findBasePath_","CLOSURE_BASE_PATH","currentScript","getElementsByTagName","src","Transpiler","requiresTranspilation_","transpilationTarget_","createRequiresTranspilation_","es3","navigator","userAgent","needsTranspile","transpiler_","protectScriptTag_","DebugLoader_","dependencies_","idToPath_","written_","loadingDeps_","depsToLoad_","paused_","factory_","DependencyFactory","deferredCallbacks_","deferredQueue_","bootstrap","setTimeout","getPathFromDeps_","onLoad","loadClosureDeps","createDependency","loadDeps_","areDepsLoaded_","requires","setDependencyFactory","loading_","pause","resume","resume_","loaded","loaded_","pending","setModuleState","registerEs6ModuleExports","registerGoogModuleExports","clearModuleState","defer_","areDepsLoaded","load","pause_","LoadController","Dependency","relativePath","provides","loadFlags","loadCallbacks_","getPathName","callbackMap_","registerCallback_","unregisterCallback_","callback_","CLOSURE_IMPORT_SCRIPT","IS_OLD_IE_","TRUSTED_TYPES_POLICY_","createHTML","setAttribute","onreadystatechange","onload","createScriptURL","Es6ModuleDependency","textContent","createScript","TransformedDependency","contents_","lazyFetch_","transform","ensure","TranspiledDependency","transpiler","PreTranspiledEs6ModuleDependency","GoogModuleDependency","needsTranspile_","atob","all","lang","CLOSURE_NO_DEPS","TRUSTED_TYPES_POLICY_NAME","identity_","createTrustedTypesPolicy","TrustedTypes","createPolicy","createURL","getCount","getAnyKey","getAnyValue","contains","containsValue","getValues","getKeys","getValueByKeys","containsKey","findValue","isEmpty","clear","setIfUndefined","setWithReturnValueIfNotSet","equals","unsafeClone","transpose","PROTOTYPE_FIELDS_","extend","createSet","createImmutableView","isFrozen","freeze","isImmutableView","getAllPropertyNames","getOwnPropertyNames","getSuperClass","debug","reportErrorToServer","dom","NodeType","ELEMENT","ATTRIBUTE","TEXT","CDATA_SECTION","ENTITY_REFERENCE","ENTITY","PROCESSING_INSTRUCTION","COMMENT","DOCUMENT","DOCUMENT_TYPE","DOCUMENT_FRAGMENT","NOTATION","asserts","ENABLE_ASSERTS","AssertionError","subs_","messagePattern","DEFAULT_ERROR_HANDLER","errorHandler_","doAssertFailure_","setErrorHandler","assert","assertExists","fail","assertNumber","assertString","assertFunction","assertObject","assertArray","assertBoolean","assertElement","assertInstanceof","getType_","assertFinite","assertObjectPrototypeIsIntact","displayName","jspb","BinaryConstants","ConstBinaryMessage","BinaryMessage","FieldType","INVALID","DOUBLE","FLOAT","INT64","UINT64","INT32","FIXED64","FIXED32","BOOL","STRING","GROUP","MESSAGE","BYTES","UINT32","ENUM","SFIXED32","SFIXED64","SINT32","SINT64","FHASH64","VHASH64","WireType","VARINT","DELIMITED","START_GROUP","END_GROUP","FieldTypeToWireType","INVALID_FIELD_NUMBER","FLOAT32_EPS","FLOAT32_MIN","FLOAT32_MAX","FLOAT64_EPS","FLOAT64_MIN","FLOAT64_MAX","TWO_TO_20","TWO_TO_23","TWO_TO_31","TWO_TO_32","TWO_TO_52","TWO_TO_63","TWO_TO_64","ZERO_HASH","NATIVE_ARRAY_PROTOTYPES","ASSUME_NATIVE_FUNCTIONS","peek","forEachRight","reduceRight","findRight","findIndexRight","insert","insertAt","insertArrayAt","insertBefore","removeAt","removeLast","removeIf","removeAllIf","removeDuplicates","binarySearch","binarySearch_","defaultCompare","binarySelect","stableSort","sortByKey","sortObjectsByKey","isSorted","defaultCompareEquality","compare3","inverseDefaultCompare","binaryInsert","binaryRemove","toObject","range","repeat","flatten","rotate","moveItem","zip","shuffle","copyByIndex","concatMap","stringToByteArray","byteArrayToString","byteArrayToHex","hexToByteArray","stringToUtf8ByteArray","utf8ByteArrayToString","xorByteArray","assertIsLocation","getWindow_","Location","Element","debugStringForType_","assertIsElementType_","assertIsHTMLAnchorElement","assertIsHTMLButtonElement","assertIsHTMLLinkElement","assertIsHTMLImageElement","assertIsHTMLAudioElement","assertIsHTMLVideoElement","assertIsHTMLInputElement","assertIsHTMLTextAreaElement","assertIsHTMLCanvasElement","assertIsHTMLEmbedElement","assertIsHTMLFormElement","assertIsHTMLFrameElement","assertIsHTMLIFrameElement","assertIsHTMLObjectElement","assertIsHTMLScriptElement","ownerDocument","defaultView","parentWindow","functions","constant","FALSE","TRUE","NULL","identity","lock","partialRight","withReturnValue","sequence","equalTo","compose","and","or","not","CACHE_RETURN_VALUE","cacheReturnValue","once","debounce","clearTimeout","throttle","rateLimit","HtmlElement","TagName","tagName_","A","ABBR","ACRONYM","ADDRESS","APPLET","AREA","ARTICLE","ASIDE","AUDIO","BASE","BASEFONT","BDI","BDO","BIG","BLOCKQUOTE","BODY","BR","BUTTON","CANVAS","CAPTION","CENTER","CITE","CODE","COL","COLGROUP","COMMAND","DATA","DATALIST","DD","DEL","DETAILS","DFN","DIALOG","DIR","DIV","DL","DT","EM","EMBED","FIELDSET","FIGCAPTION","FIGURE","FONT","FOOTER","FORM","FRAME","FRAMESET","H1","H2","H3","H4","H5","H6","HEAD","HEADER","HGROUP","HR","HTML","IFRAME","IMG","INPUT","INS","ISINDEX","KBD","KEYGEN","LABEL","LEGEND","LI","LINK","MAIN","MAP","MARK","MATH","MENU","MENUITEM","META","METER","NAV","NOFRAMES","NOSCRIPT","OBJECT","OL","OPTGROUP","OPTION","OUTPUT","PARAM","PICTURE","PRE","PROGRESS","RP","RT","RTC","RUBY","SAMP","SCRIPT","SECTION","SELECT","SMALL","SOURCE","SPAN","STRIKE","STRONG","STYLE","SUB","SUMMARY","SUP","SVG","TABLE","TBODY","TD","TEMPLATE","TEXTAREA","TFOOT","TH","THEAD","TIME","TITLE","TR","TRACK","TT","U","UL","VAR","VIDEO","WBR","tags","VOID_TAGS_","area","br","col","command","embed","hr","img","keygen","link","meta","param","track","wbr","isVoidTag","trustedtypes","PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY","TypedString","Const","stringConstValueWithSecurityContract__googStringSecurityPrivate_","GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_","STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_","TYPE_MARKER_","implementsGoogStringTypedString","getTypedStringValue","unwrap","EMPTY","SafeScript","privateDoNotAccessOrElseSafeScriptWrappedValue_","SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","fromConstant","createSafeScriptSecurityPrivateDoNotAccessOrElse","fromConstantAndArgs","stringify_","fromJson","unwrapTrustedScript","initSecurityPrivateDoNotAccessOrElse_","url","createObjectUrl","getUrlObject_","createObjectURL","revokeObjectUrl","revokeObjectURL","findUrlObject_","URL","webkitURL","browserSupportsObjectUrls","i18n","bidi","FORCE_RTL","IS_RTL","Format","LRE","RLE","PDF","LRM","RLM","Dir","LTR","RTL","NEUTRAL","RIGHT","LEFT","I18N_RIGHT","I18N_LEFT","toDir","ltrChars_","rtlChars_","htmlSkipReg_","stripHtmlIfNeeded_","rtlCharReg_","ltrCharReg_","hasAnyRtl","hasRtlChar","hasAnyLtr","ltrRe_","rtlRe_","isRtlChar","isLtrChar","isNeutralChar","ltrDirCheckRe_","rtlDirCheckRe_","startsWithRtl","isRtlText","startsWithLtr","isLtrText","isRequiredLtrRe_","isNeutralText","ltrExitDirCheckRe_","rtlExitDirCheckRe_","endsWithLtr","isLtrExitText","endsWithRtl","isRtlExitText","rtlLocalesRe_","isRtlLanguage","bracketGuardTextRe_","guardBracketInText","enforceRtlInHtml","enforceRtlInText","enforceLtrInHtml","enforceLtrInText","dimensionsRe_","leftRe_","rightRe_","tempRe_","mirrorCSS","doubleQuoteSubstituteRe_","singleQuoteSubstituteRe_","normalizeHebrewQuote","wordSeparatorRe_","hasNumeralsRe_","rtlDetectionThreshold_","estimateDirection","detectRtlDirectionality","setElementDirAndAlign","style","textAlign","setElementDirByTextDirectionality","DirectionalString","TrustedResourceUrl","privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_","trustedURL_","TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","implementsGoogI18nBidiDirectionalString","getDirection","cloneWithParams","URL_PARAM_PARSER_","createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse","stringifyParams_","unwrapTrustedScriptURL","unwrapTrustedURL","BASE_URL_","FORMAT_MARKER_","formatWithParams","fromConstants","internal","startsWith","endsWith","caseInsensitiveStartsWith","caseInsensitiveCompare","caseInsensitiveEndsWith","caseInsensitiveEquals","isEmptyOrWhitespace","newLineToBr","htmlEscape","AMP_RE_","LT_RE_","GT_RE_","QUOT_RE_","SINGLE_QUOTE_RE_","NULL_RE_","ALL_RE_","whitespaceEscape","caseInsensitiveContains","compareVersions","compareElements_","SafeUrl","privateDoNotAccessOrElseSafeUrlWrappedValue_","SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","INNOCUOUS_STRING","createSafeUrlSecurityPrivateDoNotAccessOrElse","SAFE_MIME_TYPE_PATTERN_","isSafeMimeType","fromBlob","DATA_URL_PATTERN_","fromDataUrl","fromTelUrl","SIP_URL_PATTERN_","fromSipUrl","fromFacebookMessengerUrl","fromWhatsAppUrl","fromSmsUrl","isSmsUrlBodyValid_","fromSshUrl","sanitizeChromeExtensionUrl","sanitizeExtensionUrl_","sanitizeFirefoxExtensionUrl","sanitizeEdgeExtensionUrl","fromTrustedResourceUrl","SAFE_URL_PATTERN_","SAFE_URL_PATTERN","sanitizeAssertUnchanged","ABOUT_BLANK","SafeStyle","privateDoNotAccessOrElseSafeStyleWrappedValue_","SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","createSafeStyleSecurityPrivateDoNotAccessOrElse","sanitizePropertyValue_","sanitizePropertyValueString_","FUNCTIONS_RE_","URL_RE_","VALUE_RE_","COMMENT_RE_","hasBalancedQuotes_","hasBalancedSquareBrackets_","VALUE_ALLOWED_CHARS_","sanitizeUrl_","SafeStyleSheet","privateDoNotAccessOrElseSafeStyleSheetWrappedValue_","SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","createRule","hasBalancedBrackets_","createSafeStyleSheetSecurityPrivateDoNotAccessOrElse","labs","util","getNativeUserAgentString_","getNavigator_","userAgent_","setUserAgent","getUserAgent","matchUserAgent","matchUserAgentIgnoreCase","extractVersionTuples","browser","matchOpera_","matchIE_","matchEdgeHtml_","matchEdgeChromium_","matchOperaChromium_","matchFirefox_","matchSafari_","matchChrome_","matchCoast_","isSilk","matchIosWebview_","matchAndroidBrowser_","isChrome","isFirefox","isOpera","isIE","isEdge","isEdgeChromium","isOperaChromium","isSafari","isCoast","isIosWebview","isAndroidBrowser","getVersion","getIEVersion_","isVersionOrHigher","SafeHtml","privateDoNotAccessOrElseSafeHtmlWrappedValue_","SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","dir_","unwrapTrustedHTML","createSafeHtmlSecurityPrivateDoNotAccessOrElse","htmlEscapePreservingNewlines","htmlEscapePreservingNewlinesAndSpaces","VALID_NAMES_IN_TAG_","URL_ATTRIBUTES_","action","cite","formaction","href","manifest","poster","NOT_ALLOWED_TAG_NAMES_","verifyTagName","createSafeHtmlTagSecurityPrivateDoNotAccessOrElse","createIframe","srcdoc","combineAttributes","sandbox","createSandboxIframe","canUseSandboxIframe","HTMLIFrameElement","createScriptSrc","createStyle","createMetaRefresh","getAttrNameAndValue_","getStyleValue_","createWithDir","concatWithDir","stringifyAttributes","DOCTYPE_HTML","uncheckedconversions","safeHtmlFromStringKnownToSatisfyTypeContract","safeScriptFromStringKnownToSatisfyTypeContract","safeStyleFromStringKnownToSatisfyTypeContract","safeStyleSheetFromStringKnownToSatisfyTypeContract","safeUrlFromStringKnownToSatisfyTypeContract","trustedResourceUrlFromStringKnownToSatisfyTypeContract","safe","InsertAdjacentHtmlPosition","AFTERBEGIN","AFTEREND","BEFOREBEGIN","BEFOREEND","insertAdjacentHtml","insertAdjacentHTML","SET_INNER_HTML_DISALLOWED_TAGS_","isInnerHtmlCleanupRecursive_","firstChild","innerHTML","parentElement","unsafeSetInnerHtmlDoNotUseOrElse","lastChild","setInnerHtml","tagName","setOuterHtml","outerHTML","setFormElementAction","setButtonFormAction","formAction","setInputFormAction","setStyle","cssText","documentWrite","setAnchorHref","setImageSrc","setAudioSrc","setVideoSrc","setEmbedSrc","setFrameSrc","setIframeSrc","setIframeSrcdoc","setLinkHrefAndRel","rel","setObjectData","setScriptSrc","setScriptContent","text","setLocationHref","assignLocation","replaceLocation","openInWindow","parseFromStringHtml","parseFromString","createImageFromBlob","Image","DETECT_DOUBLE_ESCAPING","FORCE_NON_DOM_HTML_UNESCAPING","Unicode","NBSP","subs","collapseWhitespace","isEmptyString","isEmptyOrWhitespaceSafe","makeSafe","isEmptySafe","isBreakingWhitespace","isAlpha","isNumeric","isAlphaNumeric","isSpace","isUnicodeChar","stripNewlines","canonicalizeNewlines","normalizeWhitespace","normalizeSpaces","collapseBreakingSpaces","trimLeft","numberAwareCompare_","intAwareCompare","floatAwareCompare","numerateCompare","urlEncode","urlDecode","E_RE_","unescapeEntities","unescapeEntitiesUsingDom_","unescapePureXmlEntities_","unescapeEntitiesWithDocument","HTML_ENTITY_PATTERN_","nodeValue","preserveSpaces","stripQuotes","truncate","truncateMiddle","specialEscapeChars_","jsEscapeCache_","escapeChar","escapeString","countOf","removeAll","regExpEscape","replaceAll","padNumber","buildString","getRandomString","hashCode","uniqueStringCounter_","createUniqueString","toNumber","isLowerCamelCase","isUpperCamelCase","toCamelCase","toSelectorCase","toTitleCase","capitalize","splitLimit","lastComponent","editDistance","engine","isPresto","isTrident","isWebKit","isGecko","getEngineTuple_","getVersionForKey_","isAndroid","isIpod","isIphone","isIpad","isIos","isMacintosh","isLinux","isWindows","isChromeOS","isChromecast","isKaiOS","isGo2Phone","reflect","objectProperty","sinkValue","canAccessProperty","cache","ASSUME_IE","ASSUME_EDGE","ASSUME_GECKO","ASSUME_WEBKIT","ASSUME_MOBILE_WEBKIT","ASSUME_OPERA","ASSUME_ANY_VERSION","BROWSER_KNOWN_","getUserAgentString","getNavigatorTyped","getNavigator","OPERA","IE","EDGE","EDGE_OR_IE","GECKO","WEBKIT","isMobile_","MOBILE","SAFARI","determinePlatform_","PLATFORM","ASSUME_MAC","ASSUME_WINDOWS","ASSUME_LINUX","ASSUME_X11","ASSUME_ANDROID","ASSUME_IPHONE","ASSUME_IPAD","ASSUME_IPOD","ASSUME_KAIOS","ASSUME_GO2PHONE","PLATFORM_KNOWN_","MAC","WINDOWS","isLegacyLinux_","LINUX","isX11_","appVersion","X11","ANDROID","IPHONE","IPAD","IPOD","IOS","KAIOS","GO2PHONE","determineVersion_","getVersionRegexResult_","getDocumentMode_","documentMode","VERSION","isVersionOrHigherCache_","isVersion","isDocumentModeOrHigher","DOCUMENT_MODE","isDocumentMode","product","ASSUME_FIREFOX","ASSUME_CHROME","ASSUME_SAFARI","PRODUCT_KNOWN_","FIREFOX","isIphoneOrIpod_","CHROME","isSafariDesktop_","DEFAULT_ALPHABET_COMMON_","ENCODED_VALS","ENCODED_VALS_WEBSAFE","Alphabet","DEFAULT","NO_PADDING","WEBSAFE","WEBSAFE_DOT_PADDING","WEBSAFE_NO_PADDING","paddingChars_","isPadding_","byteToCharMaps_","charToByteMap_","ASSUME_NATIVE_SUPPORT_","HAS_NATIVE_ENCODE_","btoa","HAS_NATIVE_DECODE_","encodeByteArray","init_","encodeString","decodeString","decodeStringInternal_","decodeStringToByteArray","decodeStringToUint8Array","subarray","utils","split64Low","split64High","splitUint64","splitInt64","splitZigzag64","splitFloat32","log","LN2","splitFloat64","splitHash64","joinUint64","joinInt64","toZigzag64","joinZigzag64","fromZigzag64","joinFloat32","Infinity","joinFloat64","joinHash64","DIGITS","ZERO_CHAR_CODE_","A_CHAR_CODE_","joinUnsignedDecimalString","joinSignedDecimalString","hash64ToDecimalString","hash64ArrayToDecimalStrings","decimalStringToHash64","splitDecimalString","toHexDigit_","fromHexCharCode_","hash64ToHexString","hexStringToHash64","hash64ToNumber","numberToHash64","countVarints","countVarintFields","countFixedFields_","countFixed32Fields","countFixed64Fields","countDelimitedFields","debugBytesToTextFormat","byteSourceToUint8Array","debugScalarToTextFormat","BinaryDecoder","bytes_","cursor_","end_","start_","error_","setBlock","instanceCache_","free","getBuffer","getEnd","setEnd","getCursor","setCursor","advance","atEnd","pastEnd","readSplitVarint64","readSplitZigzagVarint64","readSplitFixed64","skipVarint","unskipVarint","readUnsignedVarint32","readSignedVarint32","readUnsignedVarint32String","readSignedVarint32String","readZigzagVarint32","readUnsignedVarint64","readUnsignedVarint64String","readSignedVarint64","readSignedVarint64String","readZigzagVarint64","readZigzagVarintHash64","readZigzagVarint64String","readUint8","readUint16","readUint32","readUint64","readUint64String","readInt8","readInt16","readInt32","readInt64","readInt64String","readFloat","readDouble","readBool","readEnum","readString","readStringWithLength","readBytes","readVarintHash64","readFixedHash64","BinaryReader","decoder_","fieldCursor_","nextField_","nextWireType_","readCallbacks_","getFieldCursor","getFieldNumber","getWireType","isDelimited","isEndGroup","nextField","unskipHeader","skipMatchingFields","skipField","skipVarintField","skipDelimitedField","skipFixed32Field","skipFixed64Field","skipGroup","registerReadCallback","runReadCallback","readAny","readFixed64","readFixed32","readSfixed32","readSfixed64","readSint32","readSint64","readMessage","readGroup","getFieldDecoder","readInt32String","readUint32String","readSint64String","readFixed64String","readSfixed32String","readSfixed64String","readSintHash64","readPackedField_","readPackedInt32","readPackedInt32String","readPackedInt64","readPackedInt64String","readPackedUint32","readPackedUint32String","readPackedUint64","readPackedUint64String","readPackedSint32","readPackedSint64","readPackedSint64String","readPackedFixed32","readPackedFixed64","readPackedFixed64String","readPackedSfixed32","readPackedSfixed64","readPackedSfixed64String","readPackedFloat","readPackedDouble","readPackedBool","readPackedEnum","readPackedVarintHash64","readPackedFixedHash64","BinaryEncoder","buffer_","writeSplitVarint64","writeSplitFixed64","writeUint32","writeUnsignedVarint32","writeSignedVarint32","writeUnsignedVarint64","writeSignedVarint64","writeZigzagVarint32","writeZigzagVarint64","writeZigzagVarint64String","writeZigzagVarintHash64","writeUint8","writeUint16","writeUint64","writeInt8","writeInt16","writeInt32","writeInt64","writeInt64String","writeFloat","writeDouble","writeBool","writeEnum","writeBytes","writeVarintHash64","writeFixedHash64","writeString","arith","UInt64","lo","hi","cmp","rightShift","leftShift","msb","lsb","sub","mul32x32","mul","div","fromString","Int64","BinaryWriter","blocks_","totalLength_","encoder_","bookmarks_","appendUint8Array_","beginDelimited_","writeFieldHeader_","endDelimited_","writeSerializedMessage","maybeWriteSerializedMessage","getResultBuffer","getResultBase64String","beginSubMessage","endSubMessage","writeAny","writeFixed64","writeFixed32","writeSfixed32","writeSfixed64","writeSint32","writeSint64","writeUnsignedVarint32_","writeSignedVarint32_","writeUnsignedVarint64_","writeSignedVarint64_","writeZigzagVarint32_","writeZigzagVarint64_","writeZigzagVarint64String_","writeZigzagVarintHash64_","writeInt32String","writeUint32String","writeUint64String","writeSintHash64","writeSint64String","writeFixed64String","writeSfixed64String","writeMessage","writeMessageSet","writeGroup","writeSplitZigzagVarint64","writeRepeatedInt32","writeRepeatedInt32String","writeRepeatedInt64","writeRepeatedSplitFixed64","writeRepeatedSplitVarint64","writeRepeatedSplitZigzagVarint64","writeRepeatedInt64String","writeRepeatedUint32","writeRepeatedUint32String","writeRepeatedUint64","writeRepeatedUint64String","writeRepeatedSint32","writeRepeatedSint64","writeRepeatedSint64String","writeRepeatedSintHash64","writeRepeatedFixed32","writeRepeatedFixed64","writeRepeatedFixed64String","writeRepeatedSfixed32","writeRepeatedSfixed64","writeRepeatedSfixed64String","writeRepeatedFloat","writeRepeatedDouble","writeRepeatedBool","writeRepeatedEnum","writeRepeatedString","writeRepeatedBytes","writeRepeatedMessage","writeRepeatedGroup","writeRepeatedFixedHash64","writeRepeatedVarintHash64","writePackedInt32","writePackedInt32String","writePackedInt64","writePackedSplitFixed64","writePackedSplitVarint64","writePackedSplitZigzagVarint64","writePackedInt64String","writePackedUint32","writePackedUint32String","writePackedUint64","writePackedUint64String","writePackedSint32","writePackedSint64","writePackedSint64String","writePackedSintHash64","writePackedFixed32","writePackedFixed64","writePackedFixed64String","writePackedSfixed32","writePackedSfixed64","writePackedSfixed64String","writePackedFloat","writePackedDouble","writePackedBool","writePackedEnum","writePackedFixedHash64","writePackedVarintHash64","arr_","valueCtor_","map_","arrClean","loadFromArray_","Entry_","valueWrapper","stringKeys_","wrapEntry_","fromObject","ArrayIteratorIterable_","idx_","getLength","getEntryList","serializeBinary","deserializeBinary","ExtensionFieldInfo","fieldIndex","fieldName","ctor","toObjectFn","isRepeated","ExtensionFieldBinaryInfo","fieldInfo","binaryReaderFn","binaryWriterFn","binaryMessageSerializeFn","binaryMessageDeserializeFn","isPacked","isMessageType","Message","GENERATE_TO_OBJECT","GENERATE_FROM_OBJECT","GENERATE_TO_STRING","ASSUME_LOCAL_ARRAYS","SERIALIZE_EMPTY_TRAILING_FIELDS","SUPPORTS_UINT8ARRAY_","getJsPbMessageId","messageId_","getIndex_","arrayIndexOffset_","hiddenES6Property_","getFieldNumber_","initialize","wrappers_","initPivotAndExtensionObject_","convertedPrimitiveFields_","repeatedFields","pivot_","EMPTY_LIST_SENTINEL_","maybeInitEmptyExtensionObject_","extensionObject_","computeOneofCase","isArray_","isExtensionObject_","MAX_VALUE","toObjectList","toObjectExtension","serializeBinaryExtensions","readBinaryExtension","getField","getRepeatedField","getOptionalFloatingPointField","getBooleanField","getRepeatedFloatingPointField","getRepeatedBooleanField","bytesAsB64","bytesAsU8","bytesListAsB64","assertConsistentTypes_","bytesListAsU8","getFieldWithDefault","getBooleanFieldWithDefault","getFloatingPointFieldWithDefault","getFieldProto3","getMapField","setField","setProto3IntField","setFieldIgnoringDefault_","setProto3FloatField","setProto3BooleanField","setProto3StringField","setProto3BytesField","setProto3EnumField","setProto3StringIntField","addToRepeatedField","setOneofField","getWrapperField","getRepeatedWrapperField","wrapRepeatedField_","setWrapperField","setOneofWrapperField","setRepeatedWrapperField","addToRepeatedWrapperField","toMap","syncMapFields_","getExtension","setExtension","compareFields","compareExtensions","cloneMessage","clone_","copyInto","registerMessageType","messageId","messageSetExtensions","messageSetExtensionsBinary","Export","$BigInt","hasNativeBigInts","origSymbol","hasSymbolSham","hasNativeSymbols","sym","symObj","symVal","syms","descriptor","hasToStringTagShams","toStringTag","hasToStringTag","$toString","isStandardArguments","isLegacyArguments","supportsStandardArguments","hasBigInts","bigIntValueOf","tryBigInt","tryBigIntObject","isBigInt","$boolToStr","tryBooleanObject","booleanBrandCheck","boolClass","isSlowBuffer","_isBuffer","readFloatLE","tryDateObject","tryDateGetDayCall","dateClass","isDateObject","exported","numToStr","tryNumberObject","numClass","isNumberObject","$exec","isRegexMarker","badStringifier","throwRegexMarker","toPrimitive","gOPD","regexClass","hasLastIndexDataProperty","strValue","tryStringObject","strClass","symToStr","symStringRegex","isSymbolObject","isRealSymbolObject","typedArrays","$slice","toStrTags","typedArray","proto","superProto","tryTypedArrays","tryAllTypedArrays","anyTrue","getter","isTypedArray","tag","$WeakMap","$WeakSet","isWeakMap","isWeakSet","getCountryCode","localeString","components","countryCode","getLocales","locales","AD","AE","AF","AG","AI","AL","AM","AN","AO","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HT","HU","ID","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","ST","SV","SX","SY","SZ","TC","TF","TG","TJ","TK","TL","TM","TN","TO","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW","Yallist","MAX","LENGTH","LENGTH_CALCULATOR","ALLOW_STALE","MAX_AGE","DISPOSE","NO_DISPOSE_ON_SET","LRU_LIST","CACHE","UPDATE_AGE_ON_GET","naiveLength","LRUCache","lc","stale","maxAge","dispose","noDisposeOnSet","updateAgeOnGet","mL","allowStale","mA","lengthCalculator","lC","hit","itemCount","rforEach","thisp","walker","tail","forEachStep","dump","isStale","dumpLru","Entry","expiresAt","prune","doUse","unshiftNode","removeNode","Node","pushNode","res","forEachReverse","getReverse","mapReverse","initial","acc","reduceReverse","toArrayReverse","sliceReverse","deleteCount","inserted","md5","FF","_ff","_gg","HH","_hh","II","_ii","aa","bb","cc","dd","_blocksize","_digestsize","digestbytes","asBytes","asString","simpleIsEqual","resultFn","lastThis","lastArgs","lastResult","calledOnce","isNewArgEqualToLast","newArg","_len","newArgs","_key","_global","MurmurHashV2","seed","MurmurHashV3","h1","h1b","c1","c1b","c2","c2b","k1","murmur","v2","v3","propIsEnumerable","shouldUseNative","test1","test2","order2","test3","letter","symbols","hasMap","mapSizeDescriptor","mapSize","mapForEach","hasSet","setSizeDescriptor","setSize","setForEach","hasWeakMap","weakMapHas","hasWeakSet","weakSetHas","hasWeakRef","weakRefDeref","deref","booleanValueOf","objectToString","functionToString","$match","$toUpperCase","$toLowerCase","$test","$join","$arrSlice","$floor","gOPS","symToString","hasShammedSymbols","isEnumerable","addNumericSeparator","sepRegex","intStr","dec","inspectCustom","custom","inspectSymbol","inspect_","depth","seen","quoteStyle","maxStringLength","customInspect","indent","numericSeparator","inspectString","bigIntStr","maxDepth","getIndent","inspect","noIndent","newOpts","nameOf","arrObjKeys","symString","markBoxed","isElement","nodeName","attrs","attributes","wrapQuotes","childNodes","xs","singleLineValues","indentedJoin","isError","cause","mapParts","collectionOf","setParts","weakCollectionOf","isWeakRef","ys","isPlainObject","protoTag","stringTag","constructorTag","defaultStyle","quoteChar","HTMLElement","remaining","trailer","lowbyte","joinedEntries","baseIndent","lineJoiner","isArr","symMap","numberIsNaN","getPolyfill","shim","shimObjectIs","testObjectIs","keysShim","isArgs","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","o","excludedKeys","$applicationCache","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$onmozfullscreenchange","$onmozfullscreenerror","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","equalsConstructorPrototypeIfNotBuggy","theKeys","skipProto","skipConstructor","origKeys","originalKeys","shimObjectKeys","keysWorksWithArguments","canBeObject","$push","$propIsEnumerable","originalGetSymbols","source1","objTarget","getSymbols","lacksProperEnumerationOrder","letters","assignHasPendingExceptions","preventExtensions","thrower","shimAssign","$Object","hasIndices","ignoreCase","multiline","dotAll","unicode","sticky","flagsBound","TypeErr","shimFlags","$weakMapGet","$weakMapSet","$weakMapHas","$mapSet","listGetNode","listGet","objects","listSet","listHas","$wm","$m","$o","isExtendedLengthPath","hasNonAscii","v1","v4","uuid","byteToHex","bytesToUuid","bth","crypto","nodeRNG","rng","_nodeId","_clockseq","_lastMSecs","_lastNSecs","clockseq","seedBytes","msecs","nsecs","dt","tl","tmh","rnds","ii","foundName","Query","filterExpressions","selectExpressions","groupExpressions","orderExpressions","calculation","rawMode","withDead","validateRefs","expr","unfilter","exprs","exprSet","select","query","calculate","groupBy","orderBy","withoutValidatedRefs","tableOptions","getPrimaryOrderBy","defaultOrderBy","orderExprs","order","firstOrder","table","injected","runImport","budgetName","loadBudget","budgetId","id","batchBudgetUpdates","runQuery","getBudgetMonths","getBudgetMonth","setBudgetAmount","categoryId","setBudgetCarryover","flag","addTransactions","accountId","transactions","importTransactions","getTransactions","filterTransactions","updateTransaction","fields","deleteTransaction","getAccounts","createAccount","account","initialBalance","updateAccount","closeAccount","transferAccountId","transferCategoryId","reopenAccount","deleteAccount","getCategoryGroups","grouped","createCategoryGroup","group","updateCategoryGroup","deleteCategoryGroup","getCategories","createCategory","category","updateCategory","deleteCategory","getPayees","createPayee","payee","updatePayee","deletePayee","getPayeeRules","payeeId","createPayeeRule","payee_id","updatePayeeRule","deletePayeeRule","normalizePathSep","AdmZip","amountToInteger","mapAccountType","keyName","_parse","monthFromDate","getCurrentMonth","importAccounts","entityIdMap","accounts","isTombstone","accountType","accountName","offbudget","onBudget","closed","entityId","importCategories","masterCategories","masterCategory","subCategories","cat","is_income","group_id","masterCategoryId","importPayees","payees","autoFillCategoryId","transfer_acct","targetAccountId","categories","incomeCategoryId","getCategory","isOffBudget","acctId","acct","transaction","sortOrder","transactionsGrouped","toImport","transferId","transferTransactionId","newTransaction","notes","memo","transfer_id","subtransactions","subTransactions","fillInBudgets","categoryBudgets","budgets","budgeted","importBudgets","monthlyBudgets","earliestMonth","carryoverFlags","budget","filled","monthlySubCategoryBudgets","catBudget","catId","overspendingHandling","estimateRecentness","findLatestDevice","zipped","devices","contents","hasFullKnowledge","deviceGUID","shortName","shortDeviceId","recentness","knowledge","doImport","getBudgetName","unixFilepath","getFile","paths","importBuffer","dirMatch","metaStr","budgetPath","relativeDataFolderName","deviceFiles","yfullPath","integerToAmount","amountFromYnab","deleted","on_budget","incomeCatId","ynabIncomeCategories","checkSpecialCat","category_group_id","category_groups","groupId","cats","newCategory","startingBalanceCatId","startingPayeeYNAB","subtransactionsGrouped","subtrans","category_id","account_id","cleared","imported_id","import_id","transfer_transaction_id","transfer_account_id","internalCatIdYnab","creditcardCatIdYnab","importYNAB5","runMigration","db","getValue","cachedValue","execQuery","monthBudget","dbmonth","sheetName","carryover","buffers","parseNote","note","parsed","FileSystem","_filename","FLG_LNG","_permissions","PATH_SEPARATOR","recoursive","writeInt32LE","inputType","nameA","nameB","handler","handlers","evt","pickRandom","integer","findMin","getStartingBalanceCat","extractCommonThings","groups","incomePayee","expensePayees","expenseGroup","incomeGroup","bill","expenseCategories","billCategories","billPayees","fillPrimaryChecking","numTransactions","monthUtils","pick","earliestDate","starting_balance_flag","fillChecking","added","fastMode","fillInvestment","fillSavings","fillMortgage","fillOther","createBudget","primaryAccount","earliestPrimaryDate","setBudget","budgetActions","setBudgetIfSpent","spent","sheet","runMutator","batchMessages","prevSaved","toBudget","available","createTestBudget","setSyncingMode","offBudget","categoryGroups","isIncome","allGroups","runHandler","aqlQuery","$sum","primaryBalance","$gt","lastDeposit","prefs","isCached","captureException","exc","SentryClient","captureBreadcrumb","breadcrumb","addBreadcrumb","lootFs","getStorePath","getDataDir","store","persisted","init","persist","_saveStore","writeFile","getItem","setItem","removeItem","multiGet","multiSet","keyValues","multiRemove","fetch","fetchBinary","fileStream","createWriteStream","body","documentDir","rootPath","__dirname","__filename","env","ACTUAL_DATA_DIR","_setDocumentDir","getDocumentDir","getBudgetDir","bundledDatabasePath","migrationsPath","demoBudgetPath","listDir","readdir","access","constants","F_OK","mkdir","copyFile","frompath","topath","readStream","createReadStream","writeStream","removeFile","unlink","removeDir","dirpath","rmdir","removeDirRecursively","fullpath","getModifiedTime","Database","verifyParamTypes","sql","params","fetchAll","stmt","changes","insertId","lastInsertRowid","transactionDepth","asyncTransaction","openDatabase","pathOrBuffer","closeDatabase","exportDatabase","v4Sync","exportToCSV","accountNamesById","reduced","categoryNamesById","subCategory","payeeNamesById","transactionsForExport","Account","Payee","Notes","Category","Amount","csvStringify","exportQueryToCSV","Id","ParentId","IsParent","splits","parentsPayees","trans","noParents","handoffPublicToken","institution","publicToken","asyncStorage","userId","institution_id","post","getServer","PLAID_SERVER","item_id","public_token","bank_id","addAccounts","bankId","accountIds","offbudgetIds","userKey","bankSync","official_name","fromPlaidAccountType","balance_current","balances","current","mask","bank","parseFile","errors","ext","parseQIF","parseCSV","parseOFX","csv2json","qif2json","looselyParseAmount","payee_name","imported_payee","getOFXTransactions","initModule","fi_id","dayFromDate","description","row","getStartingBalancePayee","qif","line","division","address","lArray","subcategory","clearedStatus","sArray","dateFormat","safeNumber","safeParseInt","RuleError","parseRecurDate","recurConfigToRSchedule","RSchedule","parseDateString","dateFns","parseBetweenAmount","between","num1","num2","CONDITION_TYPES","ops","nullable","op","Condition","fieldTypes","typeName","rawValue","unparsedValue","fieldValue","outflow","inflow","extractValue","fieldDate","fullDate","high","low","yearFromDate","threshold","getApproxNumberThreshold","sortNumbers","ACTION_OPS","Action","stage","conditions","actions","evalConditions","condition","execActions","getId","RuleIndexer","getIndex","getIndexForValue","getKey","getIndexes","cond","indexes","getApplicableRules","indexedRules","fastSetMerge","OP_SCORES","oneOf","isapprox","isbetween","gt","gte","lt","lte","computeScore","initialScore","score","_rankRules","scores","r1","r2","score1","score2","id1","id2","rankRules","pre","normal","migrateIds","mappings","ci","ai","iterateIds","counts","ruleiter","vi","levenshtein","BankSyncError","makeSplitTransaction","recalculateSplit","is_parent","idx","makeChildTransaction","sort_order","parent","getAccountBalance","updateAccountBalance","balance","fromPlaid","transaction_id","downloadTransactions","since","allTransactions","accountBalance","pageSize","numDownloaded","start_date","end_date","error_code","error_type","total_transactions","resolvePayee","payeeName","payeesToCreate","newPayee","normalizeTransactions","rawPayeeName","normalized","trimmed","title","createNewPayees","addsAndUpdates","usedPayeeIds","reconcileTransactions","hasMatched","updated","transactionsStep1","fuzzyDataset","transactionsStep2","transactionsStep3","existing","updates","hasFieldsChanged","finalTransaction","batchUpdateTransactions","runTransfers","newTransactions","syncAccount","latestTransaction","startingTransaction","acctRow","startingDay","currentBalance","previousBalance","oldestDate","initialId","lowerCase","specials","character","convertToRegExp","parseMatch","lead","forced","lower","parsedMatch","fullLower","customSpecials","special","replaceRegExp","conjunctions","articles","prepositions","intended","allRules","unlistenSync","firstcharIndexer","payeeIndexer","resetState","invert","fromEntries","internalFields","schemaConfig","views","publicFields","fromInternalField","toInternalField","ruleModel","requiredFields","toJS","parseArray","fromJS","makeRule","FIELD_TYPES","getMappings","loadRules","addSyncListener","onApplySync","getRules","insertRule","updateRule","deleteRule","oldValues","newValues","newValue","oldRule","tombstone","tables","finalTrans","allChanges","conditionsToAQL","recurDateBounds","filters","$and","$lt","$transform","$eq","$or","$gte","$lte","applyActions","transactionIds","parsedActions","getRulesForPayee","getIsSetterRules","condField","actionField","condValue","actionValue","getOneOfSetterRules","updatePayeeRenameRule","fromNames","renameRule","getProbableCategory","winner","updateCategoryRules","payeeIds","transIds","register","toDateRepr","partitionByField","categoriesToSet","latestTrans","ruleSetters","newRule","migrateOldRules","allPayees","payeesById","rulesByPayeeId","payeeRules","r","payeeRule","catRules","ids","prevMode","connection","idsWithChildren","whereIds","whereIn","rows","getTransactionsByIds","incrFetch","where","learnCategories","detectOrphanPayees","addedIds","updatedIds","deletedIds","oldPayees","descUpdatedIds","allAdded","allUpdated","allDeleted","resultAdded","resultUpdated","transfer","newPayeeIds","allOrphaned","orphanedIds","updatedPayeeIds","getPayee","getTransferredAccount","clearCategory","transferAcct","fromOffBudget","toOffBudget","addTransfer","transferredAccount","fromPayee","parent_id","categoryCleared","removeTransfer","transferTrans","is_child","updateTransfer","onInsert","onDelete","onUpdate","transactionModel","models","toExternal","fromExternal","imported_description","financial_id","transferred_id","accountModel","categoryModel","cat_group","categoryGroupModel","payeeModel","payeeRuleModel","resolveName","IMPORT_MODE","APIError","withMutation","latestTimestamp","getClock","getNumClients","dataset","undoDisabled","validateMonth","validateExpenseCategory","batchPromise","currentId","avoidUpload","markCacheDirty","cloudStorage","catch","getCellValue","incomeAvailable","lastMonthOverspent","forNextMonth","totalBudgeted","fromLastMonth","totalIncome","totalSpent","totalBalance","received","startMonth","ungroupTransactions","serverHandlers","App","services","events","mitt","unlistenServices","service","combine","apps","app","listeners","listener","startServices","stopServices","unlisten","createApp","_uid","resetUid","uid","tableName","CompileError","nativeDateToInt","pad","dateToInt","addTombstone","schema","tableId","whereStr","hasTombstone","popPath","isKeyword","quoteAlias","typed","literal","getFieldDescription","fieldDesc","makePath","initialTable","ref","joinTable","parentParts","parentPath","parentDesc","joinField","resolvePath","fullName","implicitTableName","pathInfo","transformField","implicitTableId","refPath","refPathInfo","noMapping","fieldStr","parseMonth","badDateFormat","inferParam","existingType","paramType","casts","float","castInput","expr2","castedExpr","valArray","types","validateArgLength","saveStack","compileStack","prettyValue","expanded","getCompileError","stackStr","fieldRef","opData","rootMethod","methodArgs","compileLiteral","compileExpr","implicitField","paramName","namedParameters","compileFunction","assertType","acceptedTypes","assertArgLength","argExprs","arg1","orders","compileOrderBy","arg2","arg3","conds","compileConditions","compileOp","opExpr","rhs","lhs","left","right","condsObj","compiled","compileAnd","compileOr","compileWhere","compileJoins","tableRef","internalTableFilters","joins","dependencies","expandStar","compileSelect","isAggregate","outputTypes","compileGroupBy","$dir","AGGREGATE_FUNCTIONS","isAggregateFunction","ex","isAggregateQuery","queryState","compileQuery","tableViews","tableFilters","customizeQuery","isJoin","view","dependences","sqlPieces","defaultConstructQuery","generateSQLWithState","generateSQL","applyTypes","convertOutputType","runCompiledQuery","pieces","executors","paramArray","convertInputType","isRequired","required","fromDateRepr","conform","skipNull","tableSchema","convertForInsert","rawObj","default","convertForUpdate","convertFromSelect","toGroup","parents","mapper","childs","execTransactions","splitType","execTransactionsBasic","execTransactionsGrouped","_isUnhappy","isHappyPathQuery","whereDead","allSql","matched","rowSql","finalSql","allRows","pid","_parent_id","_unmatched","next_date","completed","posts_transaction","_payee","_account","_amount","_amountOp","_conditions","_actions","$condition","$nocase","v_payees","v_categories","v_schedules","v_transactions_internal","v_transactions_internal_alive","v_transactions","_runCompiledQuery","schemaExecutors","_runQuery","selectFields","as","needsAs","makeViews","viewStrs","fieldMappings","viewName","publicMaker","overrides","internalMaker","LATEST_BACKUP_FILENAME","serviceInterval","getBackups","budgetDir","backupDir","backups","b1","b2","getLatestBackup","isLatest","getAvailableBackups","latestBackup","backup","updateBackups","byDay","removed","dayBackups","isToday","currentBackups","makeBackup","backupId","backupPath","sqlite","toRemove","loadBackup","stopBackupService","startBackupService","lastSyncedTimestamp","lastUploaded","clearInterval","setInterval","getSheetValue","cell","calcBufferedAmount","buffered","getBudgetTable","budgetType","isReflectBudget","isZeroBudget","dbMonth","getBudgetData","getAllMonths","createdMonths","latest","getBudget","setBuffer","setCarryover","copyPreviousMonth","prevMonth","budgetData","prevBudget","setZero","set3MonthAvg","prevMonth1","prevMonth2","prevMonth3","spent1","spent2","spent3","avg","setAllFuture","holdForNextMonth","bufferedAmount","holdForFutureMonths","resetHold","coverOverspending","toBudgeted","leftover","leftoverFrom","amountCovered","fromBudgeted","transferAvailable","transferCategory","setCategoryCarryover","mutator","undoable","mergeUpdates","merged","getBudgetType","getBudgetRange","prevSheetName","createDynamic","initialValue","rollover","report","sumAmounts","handleAccountChange","oldValue","recompute","handleTransactionChange","changedFields","handleCategoryMappingChange","handleCategoryChange","addDeps","addDependencies","removeDeps","removeDependencies","handleCategoryGroupChange","handleBudgetMonthChange","handleBudgetChange","triggerBudgetChanges","old","getChangedValues","doTransfer","categoryIds","totalValue","transferValue","setMeta","createAllBudgets","earliestTransaction","newMonths","setType","nodes","getNodes","cellName","deleteCell","startCacheBarrier","bounds","endCacheBarrier","createStatic","sumAmount","prevCarryover","prevLeftover","refresh","createSummary","income","getBlankSheet","blankMonth","createBlankCategory","createBlankMonth","prevLeftoverPos","flatten2","unflatten2","amounts","lastOverspent","blankSheet","clearSheet","UPLOAD_FREQUENCY_IN_DAYS","checkHTTPStatus","HTTPError","fetchJSON","checkKey","userToken","cloudFileId","encryptKeyId","SYNC_SERVER","fileId","reason","encryption","hasKey","resetSyncState","newKeyState","IS_BETA","PostError","keyId","keySalt","testContent","exportBuffer","rawDbContent","memDb","dbContent","resetClock","metaContent","fileData","dbEntry","metaEntry","FileDownloadError","encryptMeta","dbFile","metaFile","upload","FileUploadError","zipContent","uploadContent","uploadMeta","encrypted","isMissingKey","possiblyUpload","listRemoteFiles","download","arrayBuffer","ab","dbPath","getDatabasePath","setDatabase","reopenDatabase","db_","resetQueryCache","getDatabase","loadClock","clock","deserializeClock","setClock","Timestamp","makeClientId","makeClock","serializeClock","_queryCache","LRU","cached","prepared","firstSync","sendMessages","insertWithUUID","delete_","selectWithSchema","selectFirstWithSchema","insertWithSchema","updateWithSchema","getCategoriesGrouped","insertCategoryGroup","lastGroup","SORT_INCREMENT","moveCategoryGroup","targetId","shoveSortOrders","insertCategory","id_","lastCat","moveCategory","existingTransfers","mapping","insertPayee","deleteTransferPayee","mergePayees","groupById","getOrphanedPayees","getPayeeByName","insertPayeeRule","insertAccount","moveAccount","getTransaction","_addFragmentForAccount","addWhere","showClosed","showOffbudget","fragment","getTransactionsByDate","insertTransaction","allMappings","loadMappings","getMapping","midpoint","below","above","terms","makeQuery","pageCount","fetchedIds","ids2","ENCRYPTION_ALGORITHM","sha256String","createHash","digest","masterKey","masterKeyBuffer","iv","cipher","createCipheriv","final","authTag","getAuthTag","algorithm","decipher","createDecipheriv","setAuthTag","decrypted","createKey","secret","createKeyBuffer","importKey","numBytes","pbkdf2Sync","Key","createFromPassword","password","internals","createFromBase64","loadKey","keyInstance","unloadKey","unloadAllKeys","statusCode","responseBody","SyncError","TransactionError","isCodeError","YNAB4","YNAB5","unresolveName","SyncPb","DEMO_BUDGET_ID","TEST_BUDGET_ID","UNCONFIGURED_SERVER","onSheetChange","names","_getNode","undo","redo","withUndo","term","latestDate","notPaged","groupCategories","payeeCounts","mergeIds","orphaned","validateRule","runValidation","conditionErrors","ruleFieldTypes","actionErrors","someDeletionsFailed","nodeSheet","getNode","createQuery","accts","upgradingId","balance_available","balance_limit","stopPolling","cb","matchedTransactions","updatedAccounts","linkToken","link_token","maxMonths","tracking","trackUsage","autoUpdate","floatingSidebar","seenTutorial","encryptKey","stringToInteger","getDefaultDocumentDir","prefsToSet","resetSync","repairSync","makeTestMessage","seenSubscribe","BASE_SERVER","bootstrapped","SIGNUP_SERVER","offline","setServer","fullSync","prefsPath","findBudgets","recomputeAll","showUpdate","initialFullSync","currentPrefs","trackSizes","getFileSize","dbSize","cacheSize","testMode","testBudgetId","clearFullSyncTimeout","uniqueFileName","idFromFileName","sqliteDb","budgetVersion","updateVersion","logger","setNode","Platform","isWeb","isMobile","__TESTING__","syncMigrations","clearUndo","unseen","installAPI","injectAPI","schedulesApp","budgetApp","notesApp","toolsApp","ACTUAL_DOCUMENT_DIR","setupDocumentsDir","ensureExists","initApp","isDev","socketName","keysStr","lastBudget","$send","$query","$q","$db","$setSyncingMode","ACTUAL_APP_VERSION","dataDir","serverURL","ACTUAL_SERVER_URL","cwd","sendMessage","syncAndReceiveMessages","merkle","SyncProtoBuf","addEventListener","shutdown","trie","keyToTimestamp","fullkey","hash","millis","insertKey","build","timestamps","trie1","trie2","node1","node2","keyset","diffkey","next1","next2","MIGRATIONS_DIR","javascriptMigrations","m1632571489012","withMigrationsDir","oldDir","getMigrationsDir","getMigrationId","getUpMigration","getAppliedMigrations","getMigrationList","migrationsDir","m1","m2","getPending","appliedIds","applyJavaScript","dbInterface","applySql","applyMigration","checkDatabaseValidity","migrate","migration","validateAccountType","categoryGroup","validateType","isParent","isChild","runningMethods","currentContext","mutatingMethods","globalMutationsEnabled","_latestHandlerNames","isMutating","flushRunningMethods","wait","undoTag","promise","enableGlobalMutations","disableGlobalMutations","sequential","initialContext","finally","withMutatorContext","prevContext","getMutatorContext","counters","unrecord","increment","isDesktop","throwIfNot200","contentType","postBinary","loadPrefs","dummyTestPrefs","savePrefs","avoidSync","messages","unloadPrefs","getPrefs","getDefaultPrefs","readPrefs","arr1","arr2","updateConditions","newConditions","scheduleConds","extractScheduleConds","newScheduleConds","replacements","getNextDate","dateCond","getRuleForSchedule","ruleId","fixRuleForSchedule","newId","setNextDate","newNextDate","nd","base_next_date","base_next_date_ts","local_next_date","local_next_date_ts","createSchedule","scheduleId","nextDateRepr","nextDateId","schedule_id","updateSchedule","resetNextDate","oldConditions","stripType","deleteSchedule","skipNextDate","getPossibleTransactions","discoverSchedules","findSchedules","getUpcomingDates","onRuleUpdate","payeeIdx","accountIdx","amountIdx","dateIdx","trackJSONPaths","found","postTransactionForSchedule","getScheduledAmount","advanceSchedulesService","syncSuccess","getHasTransactionsQuery","hasTransData","hasTrans","failedToPost","didPost","getStatus","syncDisabled","subtype","completeEvent","lastScheduleRun","takeDates","getRank","day1","day2","dayDiff","matchSchedules","allOccurs","partialMatchRank","baseOccur","occurs","occur","rank","exactAmount","exact","exactDate","schedulesForPattern","baseStart","numDays","baseConfig","weekly","every2weeks","monthly","monthlyLastDay","s1","s2","monthly1stor3rd","dayValue","monthly2ndor4th","findStartDate","currentConfig","prevConfig","allSchedules","finalized","joinURL","pathname","globalSheet","globalOnChange","globalCacheDb","updateSpreadsheetCache","rawDb","setCacheStatus","mainDb","cacheDb","clean","isCacheDirty","loadSpreadsheet","cacheEnabled","cachePath","Spreadsheet","cachedRows","loadUserBudgets","unloadSpreadsheet","unload","reloadSpreadsheet","startTransaction","budgetMonths","budgetMonth","sheetForMonth","endTransaction","getCell","waitOnSpreadsheet","onFinish","firstValue","Graph","serialized","graph","addNode","adjacent","adjacentIncoming","addEdge","removeEdge","removeIncomingEdges","topologicalSort","generateDOT","getEdges","edges","incomingEdges","incoming","iter","cur","topologicalSortUntil","visited","sorted","sourceNodes","edgeStrings","adj","edge","saveCache","dirtyCells","computeQueue","_meta","hasCell","cells","queueComputation","cellNames","running","runComputations","_dependencies","dep","markCacheSafe","cacheBarrier","pendingChange","getExpr","getCellExpr","getCellValueLoose","bootup","onReady","_markDirty","dynamic","resolved","voidCell","voidValue","newDeps","triggerDatabaseChanges","resolveNamesAsObjects","sheets","resolveNamesAsArrays","coerceBuffer","encode","requestPb","SyncRequest","envelopePb","MessageEnvelope","setTimestamp","messagePb","setDataset","setRow","setColumn","setValue","binaryMsg","EncryptedData","setIv","setAuthtag","setContent","setIsencrypted","addMessages","setGroupid","setFileid","setKeyid","setSince","decode","responsePb","SyncResponse","getMerkle","getMessagesList","getTimestamp","getIsencrypted","binary","getContent","getIv","getAuthtag","getDataset","getRow","getColumn","FULL_SYNC_DELAY","SYNCING_MODE","checkSyncingMode","partIds","serializeValue","deserializeValue","_syncListeners","compareMessages","newMessages","timestampStr","applyMessagesForImport","applyMessages","t1","t2","idsPerTable","fetchData","setIn","oldData","currentMerkle","getIn","setBudgetType","newData","getTablesFromMessages","prevData","receiveMessages","recv","_sendMessages","scheduleFullSync","IS_BATCHING","_BATCHED","batched","getMessagesSince","localMessages","syncTimeout","_fullSync","sinceTimestamp","prevDiffTime","encoder","resBuffer","localTimeChanged","receivedMessages","diffTime","rebuiltMerkle","rebuildMerkleHash","numMessages","clocks","randomString","migrateParentIds","toApply","parentId","_unlisten","listen","opt_data","repeatedFields_","opt_includeInstance","includeInstance","getIv_asB64","authtag","getAuthtag_asB64","getData_asB64","$jspbMessageInstance","reader","deserializeBinaryFromReader","writer","serializeBinaryToWriter","getIv_asU8","getAuthtag_asU8","getData_asU8","isencrypted","getContent_asB64","getContent_asU8","messagesList","fileid","groupid","keyid","getFileid","getGroupid","getKeyid","getSince","setMessagesList","opt_value","opt_index","clearMessagesList","setMerkle","rebuilt","keyState","clock_","MutableTimestamp","maxDrift","counter","_state","murmurhash","setMillis","setCounter","phys","lOld","cOld","lNew","cNew","ClockDriftError","OverflowError","lMsg","cMsg","isoString","DuplicateNodeError","blankPayeeRows","parentPayee","clearedRows","deletedRows","numBlankPayees","numCleared","numDeleted","currentUniqueId","mixpanel","isEnabled","toggle","hashed","isAnonymous","login","BUFFERING","startBuffering","stopBuffering","distinct_id","setProfile","MESSAGE_HISTORY","CURSOR","HISTORY_SIZE","trimHistory","markers","cutoff","appendMessages","undoListening","marker","applyUndoAction","undoMessage","oldItem","redoResurrections","resurrect","runMigrations","migrations","updateViews","hashKey","currentHash","existingFiles","initialName","newName","prettyAccountType","determineOffBudget","sequenceState","queue","pump","onceFn","IS_TESTING","month1","month2","_range","inclusive","rangeInclusive","_dayRange","dayRange","dayRangeInclusive","getMonthIndex","getYearStart","getYearEnd","nameForMonth","getDateFormatRegex","memoizeOne","getDayMonthFormat","getDayMonthRegex","getMonthYearFormat","getMonthYearRegex","getShortYearFormat","getShortYearRegex","TYPE_INFO","amountInflow","amountOutfow","mapField","friendlyOp","deserializeField","getFieldError","unparse","inputKey","unparsed","makeValue","currencyToAmount","makeNumberSuffix","prettyDayName","SU","TU","WE","getRecurringDescription","p1","p2","typeOrder","valOrder","strs","uniqueDays","dayName","abbrevDay","dayNames","SplitTransactionError","makeChild","findParentIndex","getSplit","parentIndex","groupTransaction","ungroupTransaction","applyTransactionDiff","groupedTrans","applyChanges","replaceTransactions","transactionsCopy","newSplit","_deleted","diffItems","newTrans","addSplitTransaction","prevSub","splitTransaction","realizeTempTransactions","currencyFormatter","cleanUUID","mergeObjects","composeCellChanges","flattenArray","arrays","shallowEqual","numKeysA","numKeysB","obj1","obj2","hasChanged","groupBySingle","_groupById","newItems","newGrouped","newItem","debugMemoFailure","prevProps","nextProps","throwError","set1","set2","finalSet","titleFirst","numberFormats","label","numberFormat","setNumberFormat","separator","getNumberFormat","toRelaxedNumber","currencyToInteger","toRelaxedInteger","integerToCurrency","amountToCurrency","amountToPrettyCurrency","semverToNumber"],"mappings":"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G;AACrB,WAAO,CAAC,EAAE,KAAKJ,MAAL,CAAYlF,IAAZ,IAAoB,KAAKkF,MAAL,CAAYlF,IAAZ,CAAiBY,WAAvC,CAAR;AACD;;AAjCmC;;AAoCtC,MAAMgQ,QAAN,SAAuBV,YAAvB,CAAoC;AAClC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEzR,aAAW,CAACiC,OAAO,GAAG,EAAX,EAAe;AACxB,UAAMA,OAAN;AACA,SAAKmQ,MAAL,GAAc,EAAd;AACA,SAAKC,OAAL,GAAe,EAAf;;AACA,SAAK,MAAM1J,IAAX,IAAmB,CAAC,QAAD,EAAW,SAAX,CAAnB,EAA0C;AACxC,YAAM2J,GAAG,GAAGrQ,OAAO,CAAC0G,IAAD,CAAnB;;AACA,UAAI2J,GAAJ,EAAS;AACP,aAAK3J,IAAL,IAAa2J,GAAG,CAACpO,GAAJ,CAAQqO,QAAQ,IAAI;AAC/B,cAAIA,QAAQ,YAAYjB,IAAxB,EAA8B;AAC5B,mBAAOiB,QAAQ,CAAC5L,GA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/D,MAAM,GAAG,IAArB,CAAtB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASoxC,QAAT,CAAkBrtC,SAAlB,EAA6BC,WAA7B,EAA0C;AACvD,MAAIC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIiF,MAAM,GAAG0D,uEAAS,CAACM,WAAD,CAAtB;AACA,MAAIQ,IAAI,GAAGxE,MAAM,GAAG,CAApB;AACA,SAAOswC,iEAAO,CAACvsC,SAAD,EAAYS,IAAZ,CAAd;AACD,C;;;;;;;;;;;;ACnCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS6sC,QAAT,CAAkBttC,SAAlB,EAA6BC,WAA7B,EAA0C;AACvD,MAAIC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIiF,MAAM,GAAG0D,uEAAS,CAACM,WAAD,CAAtB;AACA,SAAO6sC,mEAAS,CAAC9sC,SAAD,EAAY/D,MAAM,GAAG,EAArB,CAAhB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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AG,CAAxB,EAA2B,CAA3B,EAA8B,CAA9B;AACAtI,MAAI,CAACg6C,QAAL,CAAc,EAAd,EAAkB,EAAlB,EAAsB,EAAtB,EAA0B,GAA1B;AACA,SAAOh6C,IAAP;AACD,C;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,IAAIugD,sBAAsB,GAAG,uDAA7B,C,CAEA;AACA;;AACA,IAAIC,0BAA0B,GAAG,mCAAjC;AAEA,IAAIC,mBAAmB,GAAG,YAA1B;AACA,IAAIC,iBAAiB,GAAG,KAAxB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS9kC,MAAT,CAAgB5O,SAAhB,EAA2B2zC,cAA3B,EAA2C5I,YAA3C,EAAyD;AACtE,MAAI7qC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI48C,SAAS,GAAGpf,MAAM,CAACmf,cAAD,CAAtB;AACA,MAAI7hD,OAAO,GAAGi5C,YAAY,IAAI,EAA9B;AAEA,MAAIhI,MAAM,GAAGjxC,OAAO,CAACixC,MAAR,IAAkB8Q,8DAA/B;AAEA,MAAI7I,2BAA2B,GAC7BjI,MAAM,CAACjxC,OAAP,IAAkBixC,MAAM,CAACjxC,OAAP,CAAem5C,qBADnC;AAEA,MAAIC,4BAA4B,GAC9BF,2BAA2B,IAAI,IAA/B,GAC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;;;;;;;AC3bD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAIc,cAAc,GAAG,IAArB;AACA,IAAIC,0BAA0B,GAAG,IAAjC;AACA,IAAIC,gBAAgB,GAAG,KAAvB;AACA,IAAIC,qBAAqB,GAAG,KAA5B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASC,cAAT,CAAwB50C,SAAxB,EAAmC60C,aAAnC,EAAkD9J,YAAlD,EAAgE;AAC7E,MAAI7qC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIlF,OAAO,GAAGi5C,YAAY,IAAI,EAA9B;AACA,MAAIhI,MAAM,GAAGjxC,OAAO,CAACixC,MAAR,IAAkB8Q,8DAA/B;;AAEA,MAAI,CAAC9Q,MAAM,CAAC6R,cAAZ,EAA4B;AAC1B,UAAM,IAAIzJ,UAAJ,CAAe,6CAAf,CAAN;AACD;;AAED,MAAI2J,UAAU,GAAGpG,oEAAU,CAAC1uC,SAAD,EAAY60C,aAAZ,CAA3B;;AAEA,MAAIp2C,KAAK,CAACq2C,U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AAIE,gBAAgB,GAAG,KAAvB;AACA,IAAIc,eAAe,GAAG,MAAtB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASC,oBAAT,CACbz1C,SADa,EAEb60C,aAFa,EAGb9J,YAHa,EAIb;AACA,MAAI7qC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIlF,OAAO,GAAGi5C,YAAY,IAAI,EAA9B;AACA,MAAIhI,MAAM,GAAGjxC,OAAO,CAACixC,MAAR,IAAkB8Q,8DAA/B;;AAEA,MAAI,CAAC9Q,MAAM,CAAC6R,cAAZ,EAA4B;AAC1B,UAAM,IAAIzJ,UAAJ,CAAe,sDAAf,CAAN;AACD;;AAED,MAAI2J,UAAU,GAAGpG,oEAAU,CAAC1uC,S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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASl6B,UAAT,CAAoBnO,SAApB,EAA+B;AAC5C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAIqpC,OAAO,GAAGr2C,IAAI,CAACmb,UAAL,EAAd;AACA,SAAOk7B,OAAP;AACD,C;;;;;;;;;;;;ACjCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASr7B,QAAT,CAAkBhO,SAAlB,EAA6B;AAC1C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAIzE,KAAK,GAAGvI,IAAI,CAACgb,QAAL,EAAZ;AACA,SAAOzS,KAAP;AACD,C;;;;;;;;;;;;ACjCD;AAAA;AAAA;AAAA;AAEA,IAAIP,mBAAmB,GAAG,KAAK,EAAL,GAAU,EAAV,GAAe,IAAzC;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS67C,6BAAT,CACbrJ,iBADa,EAEbC,kBAFa,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AACA;AACA;AAGA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC3LA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASjI,OAAT,CAAiB2M,SAAjB,EAA4BiuC,kBAA5B,EAAgD;AAC7D,MAAI/tC,SAAS,CAA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CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,SAAOqzC,gEAAM,CAACrqC,SAAD,CAAN,CAAkBszC,MAAlB,OAA+B,CAAtC;AACD,C;;;;;;;;;;;;AC/BD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASyG,UAAT,CAAoB/5C,SAApB,EAA+B;AAC5C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,SAAOqzC,gEAAM,CAACrqC,SAAD,CAAN,CAAkBszC,MAAlB,OAA+B,CAAtC;AACD,C;;;;;;;;;;;;AC/BD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS0G,SAAT,CAAmBh6C,SAAnB,EAA8B;AAC3C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,SAAOqzC,gEAAM,CAACrqC,SAAD,CAAN,CAAkBszC,MAAlB,OAA+B,CAAtC;AACD,C;;;;;;;;;;;;AC/BD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASQ,OAAT,CAAiB9zC,SAAjB,EA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6B,MAAT,EAAiBoF,KAAjB,EAAwBp1B,KAAxB,EAA+Bre,OAA/B,EAAwC;AAC7C,aAAO+uD,oBAAoB,CAAC1gB,MAAD,CAA3B;AACD,KAJA;AAKD3pC,OAAG,EAAE,UAASxD,IAAT,EAAeqqB,KAAf,EAAsB9sB,KAAtB,EAA6BuB,OAA7B,EAAsC;AACzC,aAAO,CAAC,IAAIqJ,IAAJ,CAAS5K,KAAT,CAAD,EAAkB;AAAE6xD,sBAAc,EAAE;AAAlB,OAAlB,CAAP;AACD;AAPA;AArmCS,CAAd;AAgnCeR,sEAAf,E;;;;;;;;;;;;ACj3CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA,IAAIS,sBAAsB,GAAG,EAA7B,C,CAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,IAAI9O,sBAAsB,GAAG,uDAA7B;AAEA,IAAIE,mBAAmB,GAAG,YAA1B;AACA,IAAIC,iBAAiB,GAAG,KAAxB;AAEA,IAAI4O,mBAAmB,GAAG,IAA1B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASh9C,KAAT,CACbi9C,eADa,EAEbC,iBAFa,EAGb3N,aAHa,EAIb9J,YAJa,EAKb;AACA,MAAI7qC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIyrD,UAAU,GAAGjuB,MAAM,CAAC+tB,eAAD,CAAvB;AACA,MAAIG,YAAY,GAAGluB,MAAM,CAACguB,iBAAD,CAAzB;AACA,MAAI1wD,OAAO,GAAGi5C,YAAY,IAAI,EAA9B;AAEA,MAAIhI,MAAM,GAAGjxC,OAAO,CAACixC,MAAR,IAAkB8Q,8DAA/B;;AAEA,MAAI,CAAC9Q,MAAM,CAAC5yB,KAAZ,EAAmB;AACjB,UAAM,IAAIg7B,UAAJ,CAAe,oCAAf,CAAN;AACD;;AAED,MAAIH,2BAA2B,GAC7BjI,MAAM,CAACjxC,OAAP,IAAkBixC,MAAM,CAACjxC,OAAP,CAAem5C,qBADnC;AAEA,MAAIC,4BAA4B,GAC9BF,2BAA2B,IAAI,IAA/B,GACI,CADJ,GAEIrrC,uEAAS,CAACqrC,2BAAD,CAHf;AAIA,MAAIC,qBAAqB,GACvBn5C,OAAO,CAACm5C,qBAAR,IAAiC,IAAjC,GACIC,4BADJ,GAEIvrC,uEAAS,CAAC7N,OAAO,CAACm5C,qBAAT,CAHf,CAvBA,CA4BA;;AACA,MAAI,EAAEA,qBAAqB,IAAI,CAAzB,IAA8BA,qBAAqB,IAAI,CAAzD,CAAJ,EAAiE;AAC/D,UAAM,IAAIE,UAAJ,CACJ,2DADI,CAAN;AAGD;;AAED,MAAIQ,kBAAkB,GAAG5I,MAAM,CAACjxC,OAAP,IAAkBixC,MAAM,CAACjxC,OAAP,CAAe21C,YAA1D;AACA,MAAImE,mBAAmB,GACrBD,kBAAkB,IAAI,IAAtB,GAA6B,CAA7B,GAAiChsC,uEAAS,CAACgsC,kBAAD,CAD5C;AAEA,MAAIlE,YAAY,GACd31C,OAAO,CAAC21C,YAAR,IAAwB,IAAxB,GACImE,mBADJ,GAEIjsC,uEAAS,CAAC7N,OAAO,CAAC21C,YAAT,CAHf,CAtCA,CA2CA;;AACA,MAAI,EAAEA,YAAY,IAAI,CAAhB,IAAqBA,YAAY,IAAI,CAAvC,CAAJ,EAA+C;AAC7C,UAAM,IAAI0D,UAAJ,CAAe,kDAAf,CAAN;AACD;;AAED,MAAIuX,YAAY,KAAK,EAArB,EAAyB;AACvB,QAAID,UAAU,KAAK,EAAnB,EAAuB;AACrB,aAAOpY,gEAAM,CAACwK,aAAD,CAAb;AACD,KAFD,MAEO;AACL,aAAO,IAAI15C,IAAJ,CAASyE,GAAT,CAAP;AACD;AACF;;AAED,MAAI+iD,YAAY,GAAG;AACjB1X,yBAAqB,EAAEA,qBADN;AAEjBxD,gBAAY,EAAEA,YAFG;AAGjB1E,UAAM,EAAEA;AAHS,GAAnB,CAxDA,CA8DA;;AACA,MAAI6f,OAAO,GAAG,CACZ;AACEf,YAAQ,EAAEQ,sBADZ;AAEE7rD,OAAG,EAAEqsD,oBAFP;AAGE9sD,SAAK,EAAE;AAHT,GADY,CAAd;AAQA,MAAI8Z,CAAJ;AAEA,MAAIizC,MAAM,GAAGJ,YAAY,CAACvyC,KAAb,CAAmBojC,sBAAnB,CAAb;;AAEA,OAAK1jC,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGizC,MAAM,CAAC9rD,MAAvB,EAA+B6Y,CAAC,EAAhC,EAAoC;AAClC,QAAI01B,KAAK,GAAGud,MAAM,CAACjzC,CAAD,CAAlB;;AAEA,QAAI,CAAC/d,OAAO,CAACyiD,oBAAT,IAAiChJ,sFAAgB,CAAChG,KAAD,CAArD,EAA8D;AAC5DiG,+FAAmB,CAACjG,KAAD,CAAnB;AACD;;AAED,QAAI4O,cAAc,GAAG5O,KAAK,CAAC,CAAD,CAA1B;AACA,QAAIzG,MAAM,GAAG8iB,6DAAO,CAACzN,cAAD,CAApB;;AACA,QAAIrV,MAAJ,EAAY;AACV,UAAIkd,WAAW,GAAGld,MAAM,CAACx5B,KAAP,CAChBm9C,UADgB,EAEhBld,KAFgB,EAGhBxC,MAAM,CAAC5yB,KAHS,EAIhBwyC,YAJgB,CAAlB;;AAOA,UAAI,CAAC3G,WAAL,EAAkB;AAChB,eAAO,IAAI7gD,IAAJ,CAASyE,GAAT,CAAP;AACD;;AAEDgjD,aAAO,CAAC/sD,IAAR,CAAa;AACXgsD,gBAAQ,EAAE/iB,MAAM,CAAC+iB,QADN;AAEXrrD,WAAG,EAAEsoC,MAAM,CAACtoC,GAFD;AAGXurD,gBAAQ,EAAEjjB,MAAM,CAACijB,QAHN;AAIXxxD,aAAK,EAAEyrD,WAAW,CAACzrD,KAJR;AAKXwF,aAAK,EAAE6sD,OAAO,CAAC5rD;AALJ,OAAb;AAQAyrD,gBAAU,GAAGzG,WAAW,CAACH,IAAzB;AACD,KArBD,MAqBO;AACL;AACA,UAAItW,KAAK,KAAK,IAAd,EAAoB;AAClBA,aAAK,GAAG,GAAR;AACD,OAFD,MAEO,IAAI4O,cAAc,KAAK,GAAvB,EAA4B;AACjC5O,aAAK,GAAG8O,kBAAkB,CAAC9O,KAAD,CAA1B;AACD,OANI,CAQL;;;AACA,UAAIkd,UAAU,CAACzjD,OAAX,CAAmBumC,KAAnB,MAA8B,CAAlC,EAAqC;AACnCkd,kBAAU,GAAGA,UAAU,CAACzpD,KAAX,CAAiBusC,KAAK,CAACvuC,MAAvB,CAAb;AACD,OAFD,MAEO;AACL,eAAO,IAAImE,IAAJ,CAASyE,GAAT,CAAP;AACD;AACF;AACF,GAxHD,CA0HA;;;AACA,MAAI6iD,UAAU,CAACzrD,MAAX,GAAoB,CAApB,IAAyBsrD,mBAAmB,CAAC9rC,IAApB,CAAyBisC,UAAzB,CAA7B,EAAmE;AACjE,WAAO,IAAItnD,IAAJ,CAASyE,GAAT,CAAP;AACD;;AAED,MAAImjD,qBAAqB,GAAGH,OAAO,CAChC7uD,GADyB,CACrB,UAASivD,MAAT,EAAiB;AACpB,WAAOA,MAAM,CAACnB,QAAd;AACD,GAHyB,EAIzBrqD,IAJyB,CAIpB,UAASJ,CAAT,EAAYC,CAAZ,EAAe;AACnB,WAAOA,CAAC,GAAGD,CAAX;AACD,GANyB,EAOzBK,MAPyB,CAOlB,UAASoqD,QAAT,EAAmB9rD,KAAnB,EAA0BoJ,KAA1B,EAAiC;AACvC,WAAOA,KAAK,CAACH,OAAN,CAAc6iD,QAAd,MAA4B9rD,KAAnC;AACD,GATyB,EAUzBhC,GAVyB,CAUrB,UAAS8tD,QAAT,EAAmB;AACtB,WAAOe,OAAO,CACXnrD,MADI,CACG,UAASurD,MAAT,EAAiB;AACvB,aAAOA,MAAM,CAACnB,QAAP,KAAoBA,QAA3B;AACD,KAHI,EAIJ/wD,OAJI,EAAP;AAKD,GAhByB,EAiBzBiD,GAjByB,CAiBrB,UAASkvD,WAAT,EAAsB;AACzB,WAAOA,WAAW,CAAC,CAAD,CAAlB;AACD,GAnByB,CAA5B;AAqBA,MAAIjwD,IAAI,GAAGq3C,gEAAM,CAACwK,aAAD,CAAjB;;AAEA,MAAIp2C,KAAK,CAACzL,IAAD,CAAT,EAAiB;AACf,WAAO,IAAImI,IAAJ,CAASyE,GAAT,CAAP;AACD,GAxJD,CA0JA;AACA;AACA;;;AACA,MAAIm0C,OAAO,GAAGC,yEAAe,CAAChhD,IAAD,EAAOi3C,6FAA+B,CAACj3C,IAAD,CAAtC,CAA7B;AAEA,MAAIqqB,KAAK,GAAG,EAAZ;;AACA,OAAKxN,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkzC,qBAAqB,CAAC/rD,MAAtC,EAA8C6Y,CAAC,EAA/C,EAAmD;AACjD,QAAImzC,MAAM,GAAGD,qBAAqB,CAAClzC,CAAD,CAAlC;;AAEA,QACEmzC,MAAM,CAACjB,QAAP,IACA,CAACiB,MAAM,CAACjB,QAAP,CAAgBhO,OAAhB,EAAyBiP,MAAM,CAACzyD,KAAhC,EAAuCoyD,YAAvC,CAFH,EAGE;AACA,aAAO,IAAIxnD,IAAJ,CAASyE,GAAT,CAAP;AACD;;AAED,QAAImF,MAAM,GAAGi+C,MAAM,CAACxsD,GAAP,CAAWu9C,OAAX,EAAoB12B,KAApB,EAA2B2lC,MAAM,CAACzyD,KAAlC,EAAyCoyD,YAAzC,CAAb,CAViD,CAWjD;;AACA,QAAI59C,MAAM,CAAC,CAAD,CAAV,EAAe;AACbgvC,aAAO,GAAGhvC,MAAM,CAAC,CAAD,CAAhB;AACAlR,0EAAM,CAACwpB,KAAD,EAAQtY,MAAM,CAAC,CAAD,CAAd,CAAN,CAFa,CAGb;AACD,KAJD,MAIO;AACLgvC,aAAO,GAAGhvC,MAAV;AACD;AACF;;AAED,SAAOgvC,OAAP;AACD;;AAED,SAAS8O,oBAAT,CAA8B7vD,IAA9B,EAAoCqqB,KAApC,EAA2C;AACzC,MAAIA,KAAK,CAAC+kC,cAAV,EAA0B;AACxB,WAAOpvD,IAAP;AACD;;AAED,MAAIkwD,aAAa,GAAG,IAAI/nD,IAAJ,CAAS,CAAT,CAApB;AACA+nD,eAAa,CAACnW,WAAd,CACE/5C,IAAI,CAACqK,cAAL,EADF,EAEErK,IAAI,CAACsK,WAAL,EAFF,EAGEtK,IAAI,CAACyK,UAAL,EAHF;AAKAylD,eAAa,CAAClW,QAAd,CACEh6C,IAAI,CAAC0K,WAAL,EADF,EAEE1K,IAAI,CAAC2K,aAAL,EAFF,EAGE3K,IAAI,CAAC4K,aAAL,EAHF,EAIE5K,IAAI,CAAC6K,kBAAL,EAJF;AAMA,SAAOqlD,aAAP;AACD;;AAED,SAAS7O,kBAAT,CAA4Br8C,KAA5B,EAAmC;AACjC,SAAOA,KAAK,CAACmY,KAAN,CAAYsjC,mBAAZ,EAAiC,CAAjC,EAAoCnjC,OAApC,CAA4CojC,iBAA5C,EAA+D,GAA/D,CAAP;AACD,C;;;;;;;;;;;;AC1gBD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA,IAAI34C,oBAAoB,GAAG,OAA3B;AACA,IAAID,sBAAsB,GAAG,KAA7B;AACA,IAAIqoD,yBAAyB,GAAG,CAAhC;AAEA,IAAIC,QAAQ,GAAG;AACbC,mBAAiB,EAAE,MADN;AAEbC,mBAAiB,EAAE,OAFN;AAGbvzD,UAAQ,EAAE;AAHG,CAAf;AAMA,IAAIwzD,SAAS,GAAG,+DAAhB;AACA,IAAIC,SAAS,GAAG,2EAAhB;AACA,IAAIC,aAAa,GAAG,+BAApB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASC,QAAT,CAAkB7kB,QAAlB,EAA4BkM,YAA5B,EAA0C;AACvD,MAAI7qC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIlF,OAAO,GAAGi5C,YAAY,IAAI,EAA9B;AAEA,MAAI4Y,gBAAgB,GAClB7xD,OAAO,CAAC6xD,gBAAR,IAA4B,IAA5B,GACIR,yBADJ,GAEIxjD,uEAAS,CAAC7N,OAAO,CAAC6xD,gBAAT,CAHf;;AAIA,MACEA,gBAAgB,KAAK,CAArB,IACAA,gBAAgB,KAAK,CADrB,IAEAA,gBAAgB,KAAK,CAHvB,EAIE;AACA,UAAM,IAAIxY,UAAJ,CAAe,oCAAf,CAAN;AACD;;AAED,MACE,EACE,OAAOtM,QAAP,KAAoB,QAApB,IACAjrC,MAAM,CAACoZ,SAAP,CAAiBY,QAAjB,CAA0BC,IAA1B,CAA+BgxB,QAA/B,MAA6C,iBAF/C,CADF,EAKE;AACA,WAAO,IAAI1jC,IAAJ,CAASyE,GAAT,CAAP;AACD;;AAED,MAAIgkD,WAAW,GAAGC,eAAe,CAAChlB,QAAD,CAAjC;AACA,MAAIilB,eAAe,GAAGC,SAAS,CAACH,WAAW,CAAC5wD,IAAb,EAAmB2wD,gBAAnB,CAA/B;AACA,MAAI3wD,IAAI,GAAGgxD,SAAS,CAACF,eAAe,CAACG,cAAjB,EAAiCH,eAAe,CAACxoD,IAAjD,CAApB;;AAEA,MAAImD,KAAK,CAACzL,IAAD,CAAL,IAAe,CAACA,IAApB,EAA0B;AACxB,WAAO,IAAImI,IAAJ,CAASyE,GAAT,CAAP;AACD;;AAED,MAAIQ,SAAS,GAAGpN,IAAI,CAAC0N,OAAL,EAAhB;AACA,MAAI0I,IAAI,GAAG,CAAX;AACA,MAAI4U,MAAJ;;AAEA,MAAI4lC,WAAW,CAACx6C,IAAhB,EAAsB;AACpBA,QAAI,GAAG86C,SAAS,CAACN,WAAW,CAACx6C,IAAb,CAAhB;;AACA,QAAI3K,KAAK,CAAC2K,IAAD,CAAT,EAAiB;AACf,aAAO,IAAIjO,IAAJ,CAASyE,GAAT,CAAP;AACD;AACF;;AAED,MAAIgkD,WAAW,CAAC7zD,QAAhB,EAA0B;AACxBiuB,UAAM,GAAGmmC,aAAa,CAACP,WAAW,CAAC7zD,QAAb,CAAtB;;AACA,QAAI0O,KAAK,CAACuf,MAAD,CAAT,EAAmB;AACjB,aAAO,IAAI7iB,IAAJ,CAASyE,GAAT,CAAP;AACD;AACF,GALD,MAKO;AACL,QAAIwkD,QAAQ,GAAGhkD,SAAS,GAAGgJ,IAA3B;AACA,QAAIi7C,YAAY,GAAG,IAAIlpD,IAAJ,CAASipD,QAAT,CAAnB;AAEApmC,UAAM,GAAGisB,6FAA+B,CAACoa,YAAD,CAAxC,CAJK,CAML;;AACA,QAAIC,mBAAmB,GAAG,IAAInpD,IAAJ,CAASipD,QAAT,CAA1B;AACAE,uBAAmB,CAAC9X,OAApB,CAA4B6X,YAAY,CAACp2C,OAAb,KAAyB,CAArD;AACA,QAAIs2C,UAAU,GACZta,6FAA+B,CAACqa,mBAAD,CAA/B,GAAuDtmC,MADzD;;AAEA,QAAIumC,UAAU,GAAG,CAAjB,EAAoB;AAClBvmC,YAAM,IAAIumC,UAAV;AACD;AACF;;AAED,SAAO,IAAIppD,IAAJ,CAASiF,SAAS,GAAGgJ,IAAZ,GAAmB4U,MAA5B,CAAP;AACD;;AAED,SAAS6lC,eAAT,CAAyBpB,UAAzB,EAAqC;AACnC,MAAImB,WAAW,GAAG,EAAlB;AACA,MAAIzkD,KAAK,GAAGsjD,UAAU,CAACpxC,KAAX,CAAiB+xC,QAAQ,CAACC,iBAA1B,CAAZ;AACA,MAAImB,UAAJ;;AAEA,MAAI,IAAIhuC,IAAJ,CAASrX,KAAK,CAAC,CAAD,CAAd,CAAJ,EAAwB;AACtBykD,eAAW,CAAC5wD,IAAZ,GAAmB,IAAnB;AACAwxD,cAAU,GAAGrlD,KAAK,CAAC,CAAD,CAAlB;AACD,GAHD,MAGO;AACLykD,eAAW,CAAC5wD,IAAZ,GAAmBmM,KAAK,CAAC,CAAD,CAAxB;AACAqlD,cAAU,GAAGrlD,KAAK,CAAC,CAAD,CAAlB;;AACA,QAAIikD,QAAQ,CAACE,iBAAT,CAA2B9sC,IAA3B,CAAgCotC,WAAW,CAAC5wD,IAA5C,CAAJ,EAAuD;AACrD4wD,iBAAW,CAAC5wD,IAAZ,GAAmByvD,UAAU,CAACpxC,KAAX,CAAiB+xC,QAAQ,CAACE,iBAA1B,EAA6C,CAA7C,CAAnB;AACAkB,gBAAU,GAAG/B,UAAU,CAACnzC,MAAX,CAAkBs0C,WAAW,CAAC5wD,IAAZ,CAAiBgE,MAAnC,EAA2CyrD,UAAU,CAACzrD,MAAtD,CAAb;AACD;AACF;;AAED,MAAIwtD,UAAJ,EAAgB;AACd,QAAIjf,KAAK,GAAG6d,QAAQ,CAACrzD,QAAT,CAAkBmzC,IAAlB,CAAuBshB,UAAvB,CAAZ;;AACA,QAAIjf,KAAJ,EAAW;AACTqe,iBAAW,CAACx6C,IAAZ,GAAmBo7C,UAAU,CAACl0C,OAAX,CAAmBi1B,KAAK,CAAC,CAAD,CAAxB,EAA6B,EAA7B,CAAnB;AACAqe,iBAAW,CAAC7zD,QAAZ,GAAuBw1C,KAAK,CAAC,CAAD,CAA5B;AACD,KAHD,MAGO;AACLqe,iBAAW,CAACx6C,IAAZ,GAAmBo7C,UAAnB;AACD;AACF;;AAED,SAAOZ,WAAP;AACD;;AAED,SAASG,SAAT,CAAmBtB,UAAnB,EAA+BkB,gBAA/B,EAAiD;AAC/C,MAAIlzC,KAAK,GAAG,IAAIC,MAAJ,CACV,0BACG,IAAIizC,gBADP,IAEE,qBAFF,IAGG,IAAIA,gBAHP,IAIE,MALQ,CAAZ;AAQA,MAAIc,QAAQ,GAAGhC,UAAU,CAACtyC,KAAX,CAAiBM,KAAjB,CAAf,CAT+C,CAU/C;;AACA,MAAI,CAACg0C,QAAL,EAAe,OAAO;AAAEnpD,QAAI,EAAE;AAAR,GAAP;AAEf,MAAIA,IAAI,GAAGmpD,QAAQ,CAAC,CAAD,CAAR,IAAerzC,QAAQ,CAACqzC,QAAQ,CAAC,CAAD,CAAT,CAAlC;AACA,MAAIC,OAAO,GAAGD,QAAQ,CAAC,CAAD,CAAR,IAAerzC,QAAQ,CAACqzC,QAAQ,CAAC,CAAD,CAAT,CAArC;AAEA,SAAO;AACLnpD,QAAI,EAAEopD,OAAO,IAAI,IAAX,GAAkBppD,IAAlB,GAAyBopD,OAAO,GAAG,GADpC;AAELT,kBAAc,EAAExB,UAAU,CAACzpD,KAAX,CAAiB,CAACyrD,QAAQ,CAAC,CAAD,CAAR,IAAeA,QAAQ,CAAC,CAAD,CAAxB,EAA6BztD,MAA9C;AAFX,GAAP;AAID;;AAED,SAASgtD,SAAT,CAAmBvB,UAAnB,EAA+BnnD,IAA/B,EAAqC;AACnC;AACA,MAAIA,IAAI,KAAK,IAAb,EAAmB,OAAO,IAAP;AAEnB,MAAImpD,QAAQ,GAAGhC,UAAU,CAACtyC,KAAX,CAAiBozC,SAAjB,CAAf,CAJmC,CAKnC;;AACA,MAAI,CAACkB,QAAL,EAAe,OAAO,IAAP;AAEf,MAAIE,UAAU,GAAG,CAAC,CAACF,QAAQ,CAAC,CAAD,CAA3B;AACA,MAAIrd,SAAS,GAAGwd,aAAa,CAACH,QAAQ,CAAC,CAAD,CAAT,CAA7B;AACA,MAAIlpD,KAAK,GAAGqpD,aAAa,CAACH,QAAQ,CAAC,CAAD,CAAT,CAAb,GAA6B,CAAzC;AACA,MAAIpyD,GAAG,GAAGuyD,aAAa,CAACH,QAAQ,CAAC,CAAD,CAAT,CAAvB;AACA,MAAI5d,IAAI,GAAG+d,aAAa,CAACH,QAAQ,CAAC,CAAD,CAAT,CAAb,GAA6B,CAAxC;AACA,MAAIld,SAAS,GAAGqd,aAAa,CAACH,QAAQ,CAAC,CAAD,CAAT,CAAb,GAA6B,CAA7C;;AAEA,MAAIE,UAAJ,EAAgB;AACd,QAAI,CAACE,gBAAgB,CAACvpD,IAAD,EAAOurC,IAAP,EAAaU,SAAb,CAArB,EAA8C;AAC5C,aAAO,IAAIpsC,IAAJ,CAASyE,GAAT,CAAP;AACD;;AACD,WAAOklD,gBAAgB,CAACxpD,IAAD,EAAOurC,IAAP,EAAaU,SAAb,CAAvB;AACD,GALD,MAKO;AACL,QAAIv0C,IAAI,GAAG,IAAImI,IAAJ,CAAS,CAAT,CAAX;;AACA,QACE,CAACsM,YAAY,CAACnM,IAAD,EAAOC,KAAP,EAAclJ,GAAd,CAAb,IACA,CAAC0yD,qBAAqB,CAACzpD,IAAD,EAAO8rC,SAAP,CAFxB,EAGE;AACA,aAAO,IAAIjsC,IAAJ,CAASyE,GAAT,CAAP;AACD;;AACD5M,QAAI,CAAC8K,cAAL,CAAoBxC,IAApB,EAA0BC,KAA1B,EAAiCkE,IAAI,CAACge,GAAL,CAAS2pB,SAAT,EAAoB/0C,GAApB,CAAjC;AACA,WAAOW,IAAP;AACD;AACF;;AAED,SAAS4xD,aAAT,CAAuBr0D,KAAvB,EAA8B;AAC5B,SAAOA,KAAK,GAAG6gB,QAAQ,CAAC7gB,KAAD,CAAX,GAAqB,CAAjC;AACD;;AAED,SAAS2zD,SAAT,CAAmBM,UAAnB,EAA+B;AAC7B,MAAIC,QAAQ,GAAGD,UAAU,CAACr0C,KAAX,CAAiBqzC,SAAjB,CAAf;AACA,MAAI,CAACiB,QAAL,EAAe,OAAO,IAAP,CAFc,CAEF;;AAE3B,MAAI9c,KAAK,GAAGqd,aAAa,CAACP,QAAQ,CAAC,CAAD,CAAT,CAAzB;AACA,MAAIpb,OAAO,GAAG2b,aAAa,CAACP,QAAQ,CAAC,CAAD,CAAT,CAA3B;AACA,MAAIvP,OAAO,GAAG8P,aAAa,CAACP,QAAQ,CAAC,CAAD,CAAT,CAA3B;;AAEA,MAAI,CAACQ,YAAY,CAACtd,KAAD,EAAQ0B,OAAR,EAAiB6L,OAAjB,CAAjB,EAA4C;AAC1C,WAAOt1C,GAAP;AACD;;AAED,SACG+nC,KAAK,GAAG,EAAT,GAAe5sC,oBAAf,GACAsuC,OAAO,GAAGvuC,sBADV,GAEAo6C,OAAO,GAAG,IAHZ;AAKD;;AAED,SAAS8P,aAAT,CAAuBz0D,KAAvB,EAA8B;AAC5B,SAAQA,KAAK,IAAIqgB,UAAU,CAACrgB,KAAK,CAAC+f,OAAN,CAAc,GAAd,EAAmB,GAAnB,CAAD,CAApB,IAAkD,CAAzD;AACD;;AAED,SAAS6zC,aAAT,CAAuBe,cAAvB,EAAuC;AACrC,MAAIA,cAAc,KAAK,GAAvB,EAA4B,OAAO,CAAP;AAE5B,MAAIT,QAAQ,GAAGS,cAAc,CAAC/0C,KAAf,CAAqBszC,aAArB,CAAf;AACA,MAAI,CAACgB,QAAL,EAAe,OAAO,CAAP;AAEf,MAAIlgB,IAAI,GAAGkgB,QAAQ,CAAC,CAAD,CAAR,KAAgB,GAAhB,GAAsB,CAAC,CAAvB,GAA2B,CAAtC;AACA,MAAI9c,KAAK,GAAGv2B,QAAQ,CAACqzC,QAAQ,CAAC,CAAD,CAAT,CAApB;AACA,MAAIpb,OAAO,GAAIob,QAAQ,CAAC,CAAD,CAAR,IAAerzC,QAAQ,CAACqzC,QAAQ,CAAC,CAAD,CAAT,CAAxB,IAA0C,CAAxD;;AAEA,MAAI,CAACU,gBAAgB,CAACxd,KAAD,EAAQ0B,OAAR,CAArB,EAAuC;AACrC,WAAOzpC,GAAP;AACD;;AAED,SACE2kC,IAAI,IAAIoD,KAAK,GAAG5sC,oBAAR,GAA+BsuC,OAAO,GAAGvuC,sBAA7C,CADN;AAGD;;AAED,SAASgqD,gBAAT,CAA0B1e,WAA1B,EAAuCS,IAAvC,EAA6Cx0C,GAA7C,EAAkD;AAChD,MAAIW,IAAI,GAAG,IAAImI,IAAJ,CAAS,CAAT,CAAX;AACAnI,MAAI,CAAC8K,cAAL,CAAoBsoC,WAApB,EAAiC,CAAjC,EAAoC,CAApC;AACA,MAAIgf,kBAAkB,GAAGpyD,IAAI,CAACwK,SAAL,MAAoB,CAA7C;AACA,MAAIgC,IAAI,GAAG,CAACqnC,IAAI,IAAI,CAAT,IAAc,CAAd,IAAmBx0C,GAAG,IAAI,CAA1B,IAA+B,CAA/B,GAAmC+yD,kBAA9C;AACApyD,MAAI,CAACgL,UAAL,CAAgBhL,IAAI,CAACyK,UAAL,KAAoB+B,IAApC;AACA,SAAOxM,IAAP;AACD,C,CAED;AAEA;;;AACA,IAAIqyD,YAAY,GAAG,CAAC,EAAD,EAAK,IAAL,EAAW,EAAX,EAAe,EAAf,EAAmB,EAAnB,EAAuB,EAAvB,EAA2B,EAA3B,EAA+B,EAA/B,EAAmC,EAAnC,EAAuC,EAAvC,EAA2C,EAA3C,EAA+C,EAA/C,CAAnB;;AAEA,SAAS1D,eAAT,CAAyBrmD,IAAzB,EAA+B;AAC7B,SAAOA,IAAI,GAAG,GAAP,KAAe,CAAf,IAAqBA,IAAI,GAAG,CAAP,KAAa,CAAb,IAAkBA,IAAI,GAAG,GAArD;AACD;;AAED,SAASmM,YAAT,CAAsBnM,IAAtB,EAA4BC,KAA5B,EAAmCvI,IAAnC,EAAyC;AACvC,SAAO,EACLuI,KAAK,GAAG,CAAR,IACAA,KAAK,GAAG,EADR,IAEAvI,IAAI,GAAG,CAFP,IAGAA,IAAI,IAAIqyD,YAAY,CAAC9pD,KAAD,CAAZ,KAAwBomD,eAAe,CAACrmD,IAAD,CAAf,GAAwB,EAAxB,GAA6B,EAArD,CAAJ,CAJC,CAAP;AAMD;;AAED,SAASypD,qBAAT,CAA+BzpD,IAA/B,EAAqC8rC,SAArC,EAAgD;AAC9C,SAAO,EAAEA,SAAS,GAAG,CAAZ,IAAiBA,SAAS,IAAIua,eAAe,CAACrmD,IAAD,CAAf,GAAwB,GAAxB,GAA8B,GAAlC,CAA5B,CAAP;AACD;;AAED,SAASupD,gBAAT,CAA0BS,KAA1B,EAAiCze,IAAjC,EAAuCx0C,GAAvC,EAA4C;AAC1C,SAAO,EAAEw0C,IAAI,GAAG,CAAP,IAAYA,IAAI,GAAG,EAAnB,IAAyBx0C,GAAG,GAAG,CAA/B,IAAoCA,GAAG,GAAG,CAA5C,CAAP;AACD;;AAED,SAAS4yD,YAAT,CAAsBtd,KAAtB,EAA6B0B,OAA7B,EAAsC6L,OAAtC,EAA+C;AAC7C,SAAO,EACLA,OAAO,GAAG,CAAV,IACAA,OAAO,IAAI,EADX,IAEA7L,OAAO,GAAG,CAFV,IAGAA,OAAO,IAAI,EAHX,IAIA1B,KAAK,GAAG,CAJR,IAKAA,KAAK,IAAI,EANJ,CAAP;AAQD;;AAED,SAASwd,gBAAT,CAA0BI,MAA1B,EAAkClc,OAAlC,EAA2C;AACzC,SAAO,EAAEA,OAAO,GAAG,CAAV,IAAeA,OAAO,GAAG,EAA3B,CAAP;AACD,C;;;;;;;;;;;;ACtUD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASmc,qBAAT,CAA+BxlD,SAA/B,EAA0ClO,OAA1C,EAAmD;AAChE,MAAIoO,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CAAc,qDAAd,CAAN;AACD;;AAED,MAAIslD,SAAS,GACX3zD,OAAO,IAAI,eAAeA,OAA1B,GAAoC6N,uEAAS,CAAC7N,OAAO,CAAC2zD,SAAT,CAA7C,GAAmE,CADrE;;AAGA,MAAIA,SAAS,GAAG,CAAZ,IAAiBA,SAAS,GAAG,EAAjC,EAAqC;AACnC,UAAM,IAAIta,UAAJ,CAAe,8CAAf,CAAN;AACD;;AAED,MAAIn4C,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAIk1C,OAAO,GAAGliD,IAAI,CAACob,UAAL,EAAd,CAbgE,CAahC;;AAChC,MAAIi7B,OAAO,GAAGr2C,IAAI,CAACmb,UAAL,KAAoB+mC,OAAO,GAAG,EAA5C;AACA,MAAIwQ,cAAc,GAAGjmD,IAAI,CAACC,KAAL,CAAW2pC,OAAO,GAAGoc,SAArB,IAAkCA,SAAvD;AACA,MAAIE,gBAAgB,GAAGtc,OAAO,GAAGoc,SAAjC;AACA,MAAIG,YAAY,GAAGnmD,IAAI,CAACwQ,KAAL,CAAW01C,gBAAgB,GAAGF,SAA9B,IAA2CA,SAA9D;AAEA,SAAO,IAAItqD,IAAJ,CACLnI,IAAI,CAAC+a,WAAL,EADK,EAEL/a,IAAI,CAACgb,QAAL,EAFK,EAGLhb,IAAI,CAACib,OAAL,EAHK,EAILjb,IAAI,CAACkb,QAAL,EAJK,EAKLw3C,cAAc,GAAGE,YALZ,CAAP;AAOD,C;;;;;;;;;;;;ACrDD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASpZ,OAAT,CAAiBxsC,SAAjB,EAA4B6lD,eAA5B,EAA6C;AAC1D,MAAI3lD,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAIk2C,UAAU,GAAGv2C,uEAAS,CAACkmD,eAAD,CAA1B;AACA7yD,MAAI,CAACw5C,OAAL,CAAa0J,UAAb;AACA,SAAOljD,IAAP;AACD,C;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS8yD,MAAT,CAAgB9lD,SAAhB,EAA2B0rC,QAA3B,EAAqCX,YAArC,EAAmD;AAChE,MAAI7qC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIlF,OAAO,GAAGi5C,YAAY,IAAI,EAA9B;AACA,MAAIhI,MAAM,GAAGjxC,OAAO,CAACixC,MAArB;AACA,MAAI4I,kBAAkB,GACpB5I,MAAM,IAAIA,MAAM,CAACjxC,OAAjB,IAA4BixC,MAAM,CAACjxC,OAAP,CAAe21C,YAD7C;AAEA,MAAImE,mBAAmB,GACrBD,kBAAkB,IAAI,IAAtB,GAA6B,CAA7B,GAAiChsC,uEAAS,CAACgsC,kBAAD,CAD5C;AAEA,MAAIlE,YAAY,GACd31C,OAAO,CAAC21C,YAAR,IAAwB,IAAxB,GACImE,mBADJ,GAEIjsC,uEAAS,CAAC7N,OAAO,CAAC21C,YAAT,CAHf,CAbgE,CAkBhE;;AACA,MAAI,EAAEA,YAAY,IAAI,CAAhB,IAAqBA,YAAY,IAAI,CAAvC,CAAJ,EAA+C;AAC7C,UAAM,IAAI0D,UAAJ,CAAe,kDAAf,CAAN;AACD;;AAED,MAAIn4C,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,EAAYlO,OAAZ,CAAjB;AACA,MAAIO,GAAG,GAAGsN,uEAAS,CAAC+rC,QAAD,CAAnB;AACA,MAAI3gC,UAAU,GAAG/X,IAAI,CAACsgD,MAAL,EAAjB;AAEA,MAAIzH,SAAS,GAAGx5C,GAAG,GAAG,CAAtB;AACA,MAAIy5C,QAAQ,GAAG,CAACD,SAAS,GAAG,CAAb,IAAkB,CAAjC;AAEA,MAAIrsC,IAAI,GAAG,CAACssC,QAAQ,GAAGrE,YAAX,GAA0B,CAA1B,GAA8B,CAA/B,IAAoCp1C,GAApC,GAA0C0Y,UAArD;AACA,SAAOwhC,iEAAO,CAACv5C,IAAD,EAAOwM,IAAP,EAAa1N,OAAb,CAAd;AACD,C;;;;;;;;;;;;ACnED;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASi0D,YAAT,CAAsB/lD,SAAtB,EAAiCgmD,cAAjC,EAAiD;AAC9D,MAAI9lD,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAIonC,SAAS,GAAGznC,uEAAS,CAACqmD,cAAD,CAAzB;AACAhzD,MAAI,CAACk6C,QAAL,CAAc,CAAd;AACAl6C,MAAI,CAACw5C,OAAL,CAAapF,SAAb;AACA,SAAOp0C,IAAP;AACD,C;;;;;;;;;;;;ACrCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASg6C,QAAT,CAAkBhtC,SAAlB,EAA6BimD,UAA7B,EAAyC;AACtD,MAAI/lD,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAI2nC,KAAK,GAAGhoC,uEAAS,CAACsmD,UAAD,CAArB;AACAjzD,MAAI,CAACg6C,QAAL,CAAcrF,KAAd;AACA,SAAO30C,IAAP;AACD,C;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASkzD,SAAT,CAAmBlmD,SAAnB,EAA8B0rC,QAA9B,EAAwC;AACrD,MAAIxrC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAI3N,GAAG,GAAGsN,uEAAS,CAAC+rC,QAAD,CAAnB;AACA,MAAI3gC,UAAU,GAAGwrC,mEAAS,CAACvjD,IAAD,CAA1B;AACA,MAAIwM,IAAI,GAAGnN,GAAG,GAAG0Y,UAAjB;AACA,SAAOwhC,iEAAO,CAACv5C,IAAD,EAAOwM,IAAP,CAAd;AACD,C;;;;;;;;;;;;ACzCD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS2mD,UAAT,CAAoBnmD,SAApB,EAA+BisC,YAA/B,EAA6C;AAC1D,MAAI/rC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAIgnC,OAAO,GAAGrnC,uEAAS,CAACssC,YAAD,CAAvB;AACA,MAAIzsC,IAAI,GAAGg3C,oEAAU,CAACxjD,IAAD,CAAV,GAAmBg0C,OAA9B;AACAh0C,MAAI,CAACw5C,OAAL,CAAax5C,IAAI,CAACib,OAAL,KAAiBzO,IAAI,GAAG,CAArC;AACA,SAAOxM,IAAP;AACD,C;;;;;;;;;;;;ACxCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS25C,cAAT,CAAwB3sC,SAAxB,EAAmComD,gBAAnC,EAAqD;AAClE,MAAIlmD,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAIomC,WAAW,GAAGzmC,uEAAS,CAACymD,gBAAD,CAA3B;AACA,MAAI5mD,IAAI,GAAGwvC,kFAAwB,CAACh8C,IAAD,EAAOyjD,4EAAkB,CAACzjD,IAAD,CAAzB,CAAnC;AACA,MAAIo5C,eAAe,GAAG,IAAIjxC,IAAJ,CAAS,CAAT,CAAtB;AACAixC,iBAAe,CAACW,WAAhB,CAA4B3G,WAA5B,EAAyC,CAAzC,EAA4C,CAA5C;AACAgG,iBAAe,CAACY,QAAhB,CAAyB,CAAzB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkC,CAAlC;AACAh6C,MAAI,GAAGyjD,4EAAkB,CAACrK,eAAD,CAAzB;AACAp5C,MAAI,CAACw5C,OAAL,CAAax5C,IAAI,CAACib,OAAL,KAAiBzO,IAA9B;AACA,SAAOxM,IAAP;AACD,C;;;;;;;;;;;;ACnDD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASkgD,eAAT,CAAyBlzC,SAAzB,EAAoCqmD,iBAApC,EAAuD;AACpE,MAAInmD,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAIqoC,YAAY,GAAG1oC,uEAAS,CAAC0mD,iBAAD,CAA5B;AACArzD,MAAI,CAACkgD,eAAL,CAAqB7K,YAArB;AACA,SAAOr1C,IAAP;AACD,C;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS8/C,UAAT,CAAoB9yC,SAApB,EAA+BsmD,YAA/B,EAA6C;AAC1D,MAAIpmD,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAIqpC,OAAO,GAAG1pC,uEAAS,CAAC2mD,YAAD,CAAvB;AACAtzD,MAAI,CAAC8/C,UAAL,CAAgBzJ,OAAhB;AACA,SAAOr2C,IAAP;AACD,C;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASk6C,QAAT,CAAkBltC,SAAlB,EAA6BumD,UAA7B,EAAyC;AACtD,MAAIrmD,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAIzE,KAAK,GAAGoE,uEAAS,CAAC4mD,UAAD,CAArB;AACA,MAAIjrD,IAAI,GAAGtI,IAAI,CAAC+a,WAAL,EAAX;AACA,MAAI1b,GAAG,GAAGW,IAAI,CAACib,OAAL,EAAV;AAEA,MAAI3N,oBAAoB,GAAG,IAAInF,IAAJ,CAAS,CAAT,CAA3B;AACAmF,sBAAoB,CAACysC,WAArB,CAAiCzxC,IAAjC,EAAuCC,KAAvC,EAA8C,EAA9C;AACA+E,sBAAoB,CAAC0sC,QAArB,CAA8B,CAA9B,EAAiC,CAAjC,EAAoC,CAApC,EAAuC,CAAvC;AACA,MAAIzsC,WAAW,GAAG0sC,wEAAc,CAAC3sC,oBAAD,CAAhC,CAfsD,CAgBtD;AACA;;AACAtN,MAAI,CAACk6C,QAAL,CAAc3xC,KAAd,EAAqBkE,IAAI,CAACe,GAAL,CAASnO,GAAT,EAAckO,WAAd,CAArB;AACA,SAAOvN,IAAP;AACD,C;;;;;;;;;;;;AC9CD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASwzD,UAAT,CAAoBxmD,SAApB,EAA+BymD,YAA/B,EAA6C;AAC1D,MAAIvmD,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAIwmC,OAAO,GAAG7mC,uEAAS,CAAC8mD,YAAD,CAAvB;AACA,MAAIC,UAAU,GAAGjnD,IAAI,CAACC,KAAL,CAAW1M,IAAI,CAACgb,QAAL,KAAkB,CAA7B,IAAkC,CAAnD;AACA,MAAIxO,IAAI,GAAGgnC,OAAO,GAAGkgB,UAArB;AACA,SAAOxZ,kEAAQ,CAACl6C,IAAD,EAAOA,IAAI,CAACgb,QAAL,KAAkBxO,IAAI,GAAG,CAAhC,CAAf;AACD,C;;;;;;;;;;;;ACtCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS2qC,UAAT,CAAoBnqC,SAApB,EAA+B2mD,YAA/B,EAA6C;AAC1D,MAAIzmD,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAIk1C,OAAO,GAAGv1C,uEAAS,CAACgnD,YAAD,CAAvB;AACA3zD,MAAI,CAACm3C,UAAL,CAAgB+K,OAAhB;AACA,SAAOliD,IAAP;AACD,C;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS4zD,OAAT,CAAiB5mD,SAAjB,EAA4BmsC,SAA5B,EAAuCpB,YAAvC,EAAqD;AAClE,MAAI7qC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAI6mC,IAAI,GAAGlnC,uEAAS,CAACwsC,SAAD,CAApB;AACA,MAAI3sC,IAAI,GAAG23C,iEAAO,CAACnkD,IAAD,EAAO+3C,YAAP,CAAP,GAA8BlE,IAAzC;AACA7zC,MAAI,CAACw5C,OAAL,CAAax5C,IAAI,CAACib,OAAL,KAAiBzO,IAAI,GAAG,CAArC;AACA,SAAOxM,IAAP;AACD,C;;;;;;;;;;;;AC3DD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS6zD,WAAT,CAAqB7mD,SAArB,EAAgC8mD,aAAhC,EAA+C/b,YAA/C,EAA6D;AAC1E,MAAI7qC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIlF,OAAO,GAAGi5C,YAAY,IAAI,EAA9B;AACA,MAAIhI,MAAM,GAAGjxC,OAAO,CAACixC,MAArB;AACA,MAAIiI,2BAA2B,GAC7BjI,MAAM,IAAIA,MAAM,CAACjxC,OAAjB,IAA4BixC,MAAM,CAACjxC,OAAP,CAAem5C,qBAD7C;AAEA,MAAIC,4BAA4B,GAC9BF,2BAA2B,IAAI,IAA/B,GACI,CADJ,GAEIrrC,uEAAS,CAACqrC,2BAAD,CAHf;AAIA,MAAIC,qBAAqB,GACvBn5C,OAAO,CAACm5C,qBAAR,IAAiC,IAAjC,GACIC,4BADJ,GAEIvrC,uEAAS,CAAC7N,OAAO,CAACm5C,qBAAT,CAHf;AAKA,MAAIj4C,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAIimC,QAAQ,GAAGtmC,uEAAS,CAACmnD,aAAD,CAAxB;AACA,MAAItnD,IAAI,GAAGwvC,kFAAwB,CAACh8C,IAAD,EAAOokD,yEAAe,CAACpkD,IAAD,EAAO+3C,YAAP,CAAtB,CAAnC;AACA,MAAIsB,SAAS,GAAG,IAAIlxC,IAAJ,CAAS,CAAT,CAAhB;AACAkxC,WAAS,CAACU,WAAV,CAAsB9G,QAAtB,EAAgC,CAAhC,EAAmCgF,qBAAnC;AACAoB,WAAS,CAACW,QAAV,CAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,CAA5B;AACAh6C,MAAI,GAAGokD,yEAAe,CAAC/K,SAAD,EAAYtB,YAAZ,CAAtB;AACA/3C,MAAI,CAACw5C,OAAL,CAAax5C,IAAI,CAACib,OAAL,KAAiBzO,IAA9B;AACA,SAAOxM,IAAP;AACD,C;;;;;;;;;;;;AC9ED;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS+zD,OAAT,CAAiB/mD,SAAjB,EAA4BgnD,SAA5B,EAAuC;AACpD,MAAI9mD,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAI1E,IAAI,GAAGqE,uEAAS,CAACqnD,SAAD,CAApB,CARoD,CAUpD;;AACA,MAAIvoD,KAAK,CAACzL,IAAD,CAAT,EAAiB;AACf,WAAO,IAAImI,IAAJ,CAASyE,GAAT,CAAP;AACD;;AAED5M,MAAI,CAAC+5C,WAAL,CAAiBzxC,IAAjB;AACA,SAAOtI,IAAP;AACD,C;;;;;;;;;;;;AC1CD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASk8C,UAAT,CAAoBlvC,SAApB,EAA+B;AAC5C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACAhN,MAAI,CAACg6C,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB;AACA,SAAOh6C,IAAP;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASi0D,aAAT,CAAuBjnD,SAAvB,EAAkC;AAC/C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAI1E,IAAI,GAAGtI,IAAI,CAAC+a,WAAL,EAAX;AACA,MAAI6kC,MAAM,GAAGnzC,IAAI,CAACC,KAAL,CAAWpE,IAAI,GAAG,EAAlB,IAAwB,EAArC;AACAtI,MAAI,CAAC+5C,WAAL,CAAiB6F,MAAjB,EAAyB,CAAzB,EAA4B,CAA5B;AACA5/C,MAAI,CAACg6C,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB;AACA,SAAOh6C,IAAP;AACD,C;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASulD,WAAT,CAAqBv4C,SAArB,EAAgC;AAC7C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACAhN,MAAI,CAAC8/C,UAAL,CAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB;AACA,SAAO9/C,IAAP;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASy8C,cAAT,CAAwBzvC,SAAxB,EAAmC;AAChD,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,SAAOm5C,qEAAW,CAACnwC,SAAD,EAAY;AAAEynC,gBAAY,EAAE;AAAhB,GAAZ,CAAlB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASgP,kBAAT,CAA4Bz2C,SAA5B,EAAuC;AACpD,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIsE,IAAI,GAAGsxC,wEAAc,CAAC5sC,SAAD,CAAzB;AACA,MAAIosC,eAAe,GAAG,IAAIjxC,IAAJ,CAAS,CAAT,CAAtB;AACAixC,iBAAe,CAACW,WAAhB,CAA4BzxC,IAA5B,EAAkC,CAAlC,EAAqC,CAArC;AACA8wC,iBAAe,CAACY,QAAhB,CAAyB,CAAzB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkC,CAAlC;AACA,MAAIh6C,IAAI,GAAGy8C,wEAAc,CAACrD,eAAD,CAAzB;AACA,SAAOp5C,IAAP;AACD,C;;;;;;;;;;;;ACzCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASgmD,aAAT,CAAuBh5C,SAAvB,EAAkC;AAC/C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACAhN,MAAI,CAACm3C,UAAL,CAAgB,CAAhB,EAAmB,CAAnB;AACA,SAAOn3C,IAAP;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASq/C,YAAT,CAAsBryC,SAAtB,EAAiC;AAC9C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACAhN,MAAI,CAACw5C,OAAL,CAAa,CAAb;AACAx5C,MAAI,CAACg6C,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB;AACA,SAAOh6C,IAAP;AACD,C;;;;;;;;;;;;ACnCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASqmD,cAAT,CAAwBr5C,SAAxB,EAAmC;AAChD,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAI4M,YAAY,GAAG5Z,IAAI,CAACgb,QAAL,EAAnB;AACA,MAAIzS,KAAK,GAAGqR,YAAY,GAAIA,YAAY,GAAG,CAA3C;AACA5Z,MAAI,CAACk6C,QAAL,CAAc3xC,KAAd,EAAqB,CAArB;AACAvI,MAAI,CAACg6C,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB;AACA,SAAOh6C,IAAP;AACD,C;;;;;;;;;;;;ACrCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASymD,aAAT,CAAuBz5C,SAAvB,EAAkC;AAC/C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACAhN,MAAI,CAACkgD,eAAL,CAAqB,CAArB;AACA,SAAOlgD,IAAP;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASm9C,WAAT,CAAqBnwC,SAArB,EAAgC+qC,YAAhC,EAA8C;AAC3D,MAAI7qC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIlF,OAAO,GAAGi5C,YAAY,IAAI,EAA9B;AACA,MAAIhI,MAAM,GAAGjxC,OAAO,CAACixC,MAArB;AACA,MAAI4I,kBAAkB,GACpB5I,MAAM,IAAIA,MAAM,CAACjxC,OAAjB,IAA4BixC,MAAM,CAACjxC,OAAP,CAAe21C,YAD7C;AAEA,MAAImE,mBAAmB,GACrBD,kBAAkB,IAAI,IAAtB,GAA6B,CAA7B,GAAiChsC,uEAAS,CAACgsC,kBAAD,CAD5C;AAEA,MAAIlE,YAAY,GACd31C,OAAO,CAAC21C,YAAR,IAAwB,IAAxB,GACImE,mBADJ,GAEIjsC,uEAAS,CAAC7N,OAAO,CAAC21C,YAAT,CAHf,CAb2D,CAkB3D;;AACA,MAAI,EAAEA,YAAY,IAAI,CAAhB,IAAqBA,YAAY,IAAI,CAAvC,CAAJ,EAA+C;AAC7C,UAAM,IAAI0D,UAAJ,CAAe,kDAAf,CAAN;AACD;;AAED,MAAIn4C,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAI3N,GAAG,GAAGW,IAAI,CAACsgD,MAAL,EAAV;AACA,MAAI9zC,IAAI,GAAG,CAACnN,GAAG,GAAGo1C,YAAN,GAAqB,CAArB,GAAyB,CAA1B,IAA+Bp1C,GAA/B,GAAqCo1C,YAAhD;AAEAz0C,MAAI,CAACw5C,OAAL,CAAax5C,IAAI,CAACib,OAAL,KAAiBzO,IAA9B;AACAxM,MAAI,CAACg6C,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB;AACA,SAAOh6C,IAAP;AACD,C;;;;;;;;;;;;AChED;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASokD,eAAT,CAAyBp3C,SAAzB,EAAoC+qC,YAApC,EAAkD;AAC/D,MAAI7qC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIlF,OAAO,GAAGi5C,YAAY,IAAI,EAA9B;AACA,MAAIhI,MAAM,GAAGjxC,OAAO,CAACixC,MAArB;AACA,MAAIiI,2BAA2B,GAC7BjI,MAAM,IAAIA,MAAM,CAACjxC,OAAjB,IAA4BixC,MAAM,CAACjxC,OAAP,CAAem5C,qBAD7C;AAEA,MAAIC,4BAA4B,GAC9BF,2BAA2B,IAAI,IAA/B,GACI,CADJ,GAEIrrC,uEAAS,CAACqrC,2BAAD,CAHf;AAIA,MAAIC,qBAAqB,GACvBn5C,OAAO,CAACm5C,qBAAR,IAAiC,IAAjC,GACIC,4BADJ,GAEIvrC,uEAAS,CAAC7N,OAAO,CAACm5C,qBAAT,CAHf;AAKA,MAAI3vC,IAAI,GAAGm8C,qEAAW,CAACz3C,SAAD,EAAY+qC,YAAZ,CAAtB;AACA,MAAIsB,SAAS,GAAG,IAAIlxC,IAAJ,CAAS,CAAT,CAAhB;AACAkxC,WAAS,CAACU,WAAV,CAAsBzxC,IAAtB,EAA4B,CAA5B,EAA+B2vC,qBAA/B;AACAoB,WAAS,CAACW,QAAV,CAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,CAA5B;AACA,MAAIh6C,IAAI,GAAGm9C,qEAAW,CAAC9D,SAAD,EAAYtB,YAAZ,CAAtB;AACA,SAAO/3C,IAAP;AACD,C;;;;;;;;;;;;ACxED;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASw/C,WAAT,CAAqBxyC,SAArB,EAAgC;AAC7C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIkwD,SAAS,GAAG7c,gEAAM,CAACrqC,SAAD,CAAtB;AACA,MAAIhN,IAAI,GAAG,IAAImI,IAAJ,CAAS,CAAT,CAAX;AACAnI,MAAI,CAAC+5C,WAAL,CAAiBma,SAAS,CAACn5C,WAAV,EAAjB,EAA0C,CAA1C,EAA6C,CAA7C;AACA/a,MAAI,CAACg6C,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB;AACA,SAAOh6C,IAAP;AACD,C;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASm0D,OAAT,CAAiBnnD,SAAjB,EAA4BC,WAA5B,EAAyC;AACtD,MAAIC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIiF,MAAM,GAAG0D,uEAAS,CAACM,WAAD,CAAtB;AACA,SAAOssC,iEAAO,CAACvsC,SAAD,EAAY,CAAC/D,MAAb,CAAd;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASmrD,QAAT,CAAkBpnD,SAAlB,EAA6BC,WAA7B,EAA0C;AACvD,MAAIC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIiF,MAAM,GAAG0D,uEAAS,CAACM,WAAD,CAAtB;AACA,SAAOwsC,kEAAQ,CAACzsC,SAAD,EAAY,CAAC/D,MAAb,CAAf;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS00C,eAAT,CAAyB3wC,SAAzB,EAAoCC,WAApC,EAAiD;AAC9D,MAAIC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIiF,MAAM,GAAG0D,uEAAS,CAACM,WAAD,CAAtB;AACA,SAAOysC,yEAAe,CAAC1sC,SAAD,EAAY,CAAC/D,MAAb,CAAtB;AACD,C;;;;;;;;;;;;ACzCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS+3C,eAAT,CAAyBh0C,SAAzB,EAAoCC,WAApC,EAAiD;AAC9D,MAAIC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIiF,MAAM,GAAG0D,uEAAS,CAACM,WAAD,CAAtB;AACA,SAAOF,yEAAe,CAACC,SAAD,EAAY,CAAC/D,MAAb,CAAtB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASorD,UAAT,CAAoBrnD,SAApB,EAA+BC,WAA/B,EAA4C;AACzD,MAAIC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIiF,MAAM,GAAG0D,uEAAS,CAACM,WAAD,CAAtB;AACA,SAAO4sC,oEAAU,CAAC7sC,SAAD,EAAY,CAAC/D,MAAb,CAAjB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASqrD,SAAT,CAAmBtnD,SAAnB,EAA8BC,WAA9B,EAA2C;AACxD,MAAIC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIiF,MAAM,GAAG0D,uEAAS,CAACM,WAAD,CAAtB;AACA,SAAO6sC,mEAAS,CAAC9sC,SAAD,EAAY,CAAC/D,MAAb,CAAhB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASsrD,WAAT,CAAqBvnD,SAArB,EAAgCC,WAAhC,EAA6C;AAC1D,MAAIC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIiF,MAAM,GAAG0D,uEAAS,CAACM,WAAD,CAAtB;AACA,SAAOktC,qEAAW,CAACntC,SAAD,EAAY,CAAC/D,MAAb,CAAlB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASurD,UAAT,CAAoBxnD,SAApB,EAA+BC,WAA/B,EAA4C;AACzD,MAAIC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIiF,MAAM,GAAG0D,uEAAS,CAACM,WAAD,CAAtB;AACA,SAAOmtC,oEAAU,CAACptC,SAAD,EAAY,CAAC/D,MAAb,CAAjB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASwrD,QAAT,CAAkBznD,SAAlB,EAA6BC,WAA7B,EAA0C;AACvD,MAAIC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIiF,MAAM,GAAG0D,uEAAS,CAACM,WAAD,CAAtB;AACA,SAAOotC,kEAAQ,CAACrtC,SAAD,EAAY,CAAC/D,MAAb,CAAf;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASyrD,QAAT,CAAkB1nD,SAAlB,EAA6BC,WAA7B,EAA0C;AACvD,MAAIC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIiF,MAAM,GAAG0D,uEAAS,CAACM,WAAD,CAAtB;AACA,SAAOqtC,kEAAQ,CAACttC,SAAD,EAAY,CAAC/D,MAAb,CAAf;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASouC,MAAT,CAAgBxL,QAAhB,EAA0B;AACvC,MAAI3+B,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAI2wD,MAAM,GAAG/zD,MAAM,CAACoZ,SAAP,CAAiBY,QAAjB,CAA0BC,IAA1B,CAA+BgxB,QAA/B,CAAb,CAPuC,CASvC;;AACA,MACEA,QAAQ,YAAY1jC,IAApB,IACC,OAAO0jC,QAAP,KAAoB,QAApB,IAAgC8oB,MAAM,KAAK,eAF9C,EAGE;AACA;AACA,WAAO,IAAIxsD,IAAJ,CAAS0jC,QAAQ,CAACn+B,OAAT,EAAT,CAAP;AACD,GAND,MAMO,IAAI,OAAOm+B,QAAP,KAAoB,QAApB,IAAgC8oB,MAAM,KAAK,iBAA/C,EAAkE;AACvE,WAAO,IAAIxsD,IAAJ,CAAS0jC,QAAT,CAAP;AACD,GAFM,MAEA;AACL,QACE,CAAC,OAAOA,QAAP,KAAoB,QAApB,IAAgC8oB,MAAM,KAAK,iBAA5C,KACA,OAAOj8B,OAAP,KAAmB,WAFrB,EAGE;AACAA,aAAO,CAACC,IAAR,CACE,6IADF;AAGAD,aAAO,CAACC,IAAR,CAAa,IAAIn2B,KAAJ,GAAYoyD,KAAzB;AACD;;AACD,WAAO,IAAIzsD,IAAJ,CAASyE,GAAT,CAAP;AACD;AACF,C;;;;;;;;;;;;AC5DY;;AAEb,IAAIioD,UAAU,GAAGz1C,mBAAO,CAAC,wDAAD,CAAxB;;AACA,IAAI01C,WAAW,GAAG11C,mBAAO,CAAC,0DAAD,CAAzB;;AACA,IAAI21C,EAAE,GAAG31C,mBAAO,CAAC,oDAAD,CAAhB;;AACA,IAAI41C,OAAO,GAAG51C,mBAAO,CAAC,kDAAD,CAArB;;AACA,IAAIiL,KAAK,GAAGjL,mBAAO,CAAC,8EAAD,CAAnB;;AACA,IAAI9Z,OAAO,GAAG8Z,mBAAO,CAAC,wEAAD,CAArB;;AACA,IAAInY,MAAM,GAAGmY,mBAAO,CAAC,8DAAD,CAApB;;AACA,IAAI61C,mBAAmB,GAAG71C,mBAAO,CAAC,4EAAD,CAAjC;;AACA,IAAIugB,YAAY,GAAGvgB,mBAAO,CAAC,4DAAD,CAA1B;;AACA,IAAI81C,SAAS,GAAG91C,mBAAO,CAAC,kEAAD,CAAvB;;AACA,IAAI+1C,eAAe,GAAG/1C,mBAAO,CAAC,kEAAD,CAA7B;;AACA,IAAIg2C,WAAW,GAAGh2C,mBAAO,CAAC,gEAAD,CAAzB;;AACA,IAAIi2C,cAAc,GAAGj2C,mBAAO,CAAC,0DAAD,CAA5B;;AACA,IAAIk2C,eAAe,GAAGl2C,mBAAO,CAAC,oEAAD,CAA7B;;AACA,IAAIve,MAAM,GAAGue,mBAAO,CAAC,4DAAD,CAApB;;AAEA,IAAIm2C,QAAQ,GAAGL,SAAS,CAAC,wBAAD,CAAxB;AACA,IAAIM,GAAG,GAAG50D,MAAM,CAAC60D,cAAjB;AACA,IAAIC,YAAY,GAAGR,SAAS,CAAC,2BAAD,CAA5B;AAEA,IAAIS,IAAI,GAAGh2B,YAAY,CAAC,OAAD,EAAU,IAAV,CAAvB;AACA,IAAIi2B,OAAO,GAAGV,SAAS,CAAC,mBAAD,EAAsB,IAAtB,CAAvB;AACA,IAAIW,OAAO,GAAGX,SAAS,CAAC,mBAAD,EAAsB,IAAtB,CAAvB;AACA,IAAIY,QAAQ,GAAGZ,SAAS,CAAC,oBAAD,EAAuB,IAAvB,CAAxB;AACA,IAAIa,OAAO,GAAGb,SAAS,CAAC,mBAAD,EAAsB,IAAtB,CAAvB;AACA,IAAIc,UAAU,GAAGd,SAAS,CAAC,sBAAD,EAAyB,IAAzB,CAA1B;AACA,IAAIe,OAAO,GAAGf,SAAS,CAAC,mBAAD,EAAsB,IAAtB,CAAvB;AACA,IAAIgB,QAAQ,GAAGhB,SAAS,CAAC,oBAAD,EAAuB,IAAvB,CAAxB,C,CAEA;;AACA,SAASiB,kBAAT,CAA4B3yD,GAA5B,EAAiC4yD,IAAjC,EAAuCl8C,IAAvC,EAA6Cm8C,OAA7C,EAAsD;AACpD,MAAIx5C,CAAC,GAAGu4C,WAAW,CAAC5xD,GAAD,CAAnB;AACA,MAAIuO,MAAJ;;AACA,SAAO,CAACA,MAAM,GAAG8K,CAAC,CAACvf,IAAF,EAAV,KAAuB,CAACyU,MAAM,CAACjO,IAAtC,EAA4C;AAC1C,QAAIwyD,iBAAiB,CAACF,IAAD,EAAOrkD,MAAM,CAACxU,KAAd,EAAqB2c,IAArB,EAA2Bm8C,OAA3B,CAArB,EAA0D;AAAE;AAC1D;AACAL,gBAAU,CAACxyD,GAAD,EAAMuO,MAAM,CAACxU,KAAb,CAAV;AACA,aAAO,IAAP;AACD;AACF;;AAED,SAAO,KAAP;AACD,C,CAED;;;AACA,SAASg5D,2BAAT,CAAqCC,IAArC,EAA2C;AACzC,MAAI,OAAOA,IAAP,KAAgB,WAApB,EAAiC;AAC/B,WAAO,IAAP;AACD;;AACD,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAAE;AAC9B,WAAO,KAAK,CAAZ;AACD;;AACD,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5B,WAAO,KAAP;AACD;;AACD,MAAI,OAAOA,IAAP,KAAgB,QAAhB,IAA4B,OAAOA,IAAP,KAAgB,QAAhD,EAA0D;AACxD;AACA,WAAO,CAACA,IAAD,KAAU,CAACA,IAAlB,CAFwD,CAEhC;AACzB;;AACD,SAAO,IAAP;AACD,C,CAED;;;AACA,SAASC,qBAAT,CAA+BryD,CAA/B,EAAkCC,CAAlC,EAAqCmyD,IAArC,EAA2Ct1C,IAA3C,EAAiDhH,IAAjD,EAAuDm8C,OAAvD,EAAgE;AAC9D,MAAIK,QAAQ,GAAGH,2BAA2B,CAACC,IAAD,CAA1C;;AACA,MAAIE,QAAQ,IAAI,IAAhB,EAAsB;AACpB,WAAOA,QAAP;AACD;;AACD,MAAIC,IAAI,GAAGd,OAAO,CAACxxD,CAAD,EAAIqyD,QAAJ,CAAlB;AACA,MAAIE,SAAS,GAAG/1D,MAAM,CAAC,EAAD,EAAKqZ,IAAL,EAAW;AAAE28C,UAAM,EAAE;AAAV,GAAX,CAAtB;;AACA,MACG,OAAOF,IAAP,KAAgB,WAAhB,IAA+B,CAACf,OAAO,CAACvxD,CAAD,EAAIqyD,QAAJ,CAAxC,CACA;AADA,KAEG,CAACJ,iBAAiB,CAACp1C,IAAD,EAAOy1C,IAAP,EAAaC,SAAb,EAAwBP,OAAxB,CAHvB,EAIE;AACA,WAAO,KAAP;AACD,GAb6D,CAc9D;;;AACA,SAAO,CAACT,OAAO,CAACxxD,CAAD,EAAIsyD,QAAJ,CAAR,IAAyBJ,iBAAiB,CAACp1C,IAAD,EAAOy1C,IAAP,EAAaC,SAAb,EAAwBP,OAAxB,CAAjD;AACD,C,CAED;;;AACA,SAASS,qBAAT,CAA+B1yD,CAA/B,EAAkCC,CAAlC,EAAqCmyD,IAArC,EAA2C;AACzC,MAAIE,QAAQ,GAAGH,2BAA2B,CAACC,IAAD,CAA1C;;AACA,MAAIE,QAAQ,IAAI,IAAhB,EAAsB;AACpB,WAAOA,QAAP;AACD;;AAED,SAAOT,OAAO,CAAC5xD,CAAD,EAAIqyD,QAAJ,CAAP,IAAwB,CAACT,OAAO,CAAC7xD,CAAD,EAAIsyD,QAAJ,CAAvC;AACD,C,CAED;;;AACA,SAASK,gBAAT,CAA0BvzD,GAA1B,EAA+BzC,GAA/B,EAAoCi2D,IAApC,EAA0CC,KAA1C,EAAiD/8C,IAAjD,EAAuDm8C,OAAvD,EAAgE;AAC9D,MAAIx5C,CAAC,GAAGu4C,WAAW,CAAC5xD,GAAD,CAAnB;AACA,MAAIuO,MAAJ;AACA,MAAImlD,IAAJ;;AACA,SAAO,CAACnlD,MAAM,GAAG8K,CAAC,CAACvf,IAAF,EAAV,KAAuB,CAACyU,MAAM,CAACjO,IAAtC,EAA4C;AAC1CozD,QAAI,GAAGnlD,MAAM,CAACxU,KAAd;;AACA,SACE;AACA+4D,qBAAiB,CAACU,IAAD,EAAOE,IAAP,EAAah9C,IAAb,EAAmBm8C,OAAnB,CAAjB,CACA;AADA,OAEGC,iBAAiB,CAACW,KAAD,EAAQpB,OAAO,CAAC90D,GAAD,EAAMm2D,IAAN,CAAf,EAA4Bh9C,IAA5B,EAAkCm8C,OAAlC,CAJtB,EAKE;AACAL,gBAAU,CAACxyD,GAAD,EAAM0zD,IAAN,CAAV;AACA,aAAO,IAAP;AACD;AACF;;AAED,SAAO,KAAP;AACD;;AAED,SAASZ,iBAAT,CAA2Ba,MAA3B,EAAmCC,QAAnC,EAA6Ct4D,OAA7C,EAAsDu3D,OAAtD,EAA+D;AAC7D,MAAIn8C,IAAI,GAAGpb,OAAO,IAAI,EAAtB,CAD6D,CAG7D;;AACA,MAAIob,IAAI,CAAC28C,MAAL,GAAc9B,EAAE,CAACoC,MAAD,EAASC,QAAT,CAAhB,GAAqCD,MAAM,KAAKC,QAApD,EAA8D;AAC5D,WAAO,IAAP;AACD;;AAED,MAAIC,WAAW,GAAGpC,mBAAmB,CAACkC,MAAD,CAArC;AACA,MAAIG,aAAa,GAAGrC,mBAAmB,CAACmC,QAAD,CAAvC;;AACA,MAAIC,WAAW,KAAKC,aAApB,EAAmC;AACjC,WAAO,KAAP;AACD,GAZ4D,CAc7D;;;AACA,MAAI,CAACH,MAAD,IAAW,CAACC,QAAZ,IAAyB,OAAOD,MAAP,KAAkB,QAAlB,IAA8B,OAAOC,QAAP,KAAoB,QAA/E,EAA0F;AACxF,WAAOl9C,IAAI,CAAC28C,MAAL,GAAc9B,EAAE,CAACoC,MAAD,EAASC,QAAT,CAAhB,GAAqCD,MAAM,IAAIC,QAAtD,CADwF,CACxB;AACjE;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE;;;AAEA,MAAIG,SAAS,GAAGlB,OAAO,CAACrgD,GAAR,CAAYmhD,MAAZ,CAAhB;AACA,MAAIK,WAAW,GAAGnB,OAAO,CAACrgD,GAAR,CAAYohD,QAAZ,CAAlB;AACA,MAAIK,QAAJ;;AACA,MAAIF,SAAS,IAAIC,WAAjB,EAA8B;AAC5B,QAAInB,OAAO,CAACp2D,GAAR,CAAYk3D,MAAZ,MAAwBd,OAAO,CAACp2D,GAAR,CAAYm3D,QAAZ,CAA5B,EAAmD;AACjD,aAAO,IAAP;AACD;AACF,GAJD,MAIO;AACLK,YAAQ,GAAG,EAAX;AACD;;AACD,MAAI,CAACF,SAAL,EAAgB;AAAElB,WAAO,CAAC7yD,GAAR,CAAY2zD,MAAZ,EAAoBM,QAApB;AAAgC;;AAClD,MAAI,CAACD,WAAL,EAAkB;AAAEnB,WAAO,CAAC7yD,GAAR,CAAY4zD,QAAZ,EAAsBK,QAAtB;AAAkC,GAxCO,CA0C7D;;;AACA,SAAOC,QAAQ,CAACP,MAAD,EAASC,QAAT,EAAmBl9C,IAAnB,EAAyBm8C,OAAzB,CAAf;AACD;;AAED,SAASh2C,QAAT,CAAkB3U,CAAlB,EAAqB;AACnB,MAAI,CAACA,CAAD,IAAM,OAAOA,CAAP,KAAa,QAAnB,IAA+B,OAAOA,CAAC,CAAC1H,MAAT,KAAoB,QAAvD,EAAiE;AAC/D,WAAO,KAAP;AACD;;AACD,MAAI,OAAO0H,CAAC,CAACglB,IAAT,KAAkB,UAAlB,IAAgC,OAAOhlB,CAAC,CAAC1F,KAAT,KAAmB,UAAvD,EAAmE;AACjE,WAAO,KAAP;AACD;;AACD,MAAI0F,CAAC,CAAC1H,MAAF,GAAW,CAAX,IAAgB,OAAO0H,CAAC,CAAC,CAAD,CAAR,KAAgB,QAApC,EAA8C;AAC5C,WAAO,KAAP;AACD;;AAED,SAAO,CAAC,EAAEA,CAAC,CAAC7O,WAAF,IAAiB6O,CAAC,CAAC7O,WAAF,CAAcwjB,QAA/B,IAA2C3U,CAAC,CAAC7O,WAAF,CAAcwjB,QAAd,CAAuB3U,CAAvB,CAA7C,CAAR;AACD;;AAED,SAASisD,QAAT,CAAkBvzD,CAAlB,EAAqBC,CAArB,EAAwB6V,IAAxB,EAA8Bm8C,OAA9B,EAAuC;AACrC,MAAIH,QAAQ,CAAC9xD,CAAD,CAAR,KAAgB8xD,QAAQ,CAAC7xD,CAAD,CAA5B,EAAiC;AAC/B,WAAO,KAAP;AACD;;AACD,MAAIuzD,EAAE,GAAGxC,WAAW,CAAChxD,CAAD,CAApB;AACA,MAAIyzD,EAAE,GAAGzC,WAAW,CAAC/wD,CAAD,CAApB;AACA,MAAIyzD,OAAJ;AACA,MAAIC,OAAJ;AACA,MAAIv0D,GAAJ;;AACA,SAAO,CAACs0D,OAAO,GAAGF,EAAE,CAACt6D,IAAH,EAAX,KAAyB,CAACw6D,OAAO,CAACh0D,IAAzC,EAA+C;AAC7C,QAAIg0D,OAAO,CAACv6D,KAAR,IAAiB,OAAOu6D,OAAO,CAACv6D,KAAf,KAAyB,QAA9C,EAAwD;AACtD,UAAI,CAACiG,GAAL,EAAU;AAAEA,WAAG,GAAG,IAAImyD,IAAJ,EAAN;AAAmB;;AAC/BI,aAAO,CAACvyD,GAAD,EAAMs0D,OAAO,CAACv6D,KAAd,CAAP;AACD,KAHD,MAGO,IAAI,CAAC04D,OAAO,CAAC5xD,CAAD,EAAIyzD,OAAO,CAACv6D,KAAZ,CAAZ,EAAgC;AACrC,UAAI2c,IAAI,CAAC28C,MAAT,EAAiB;AAAE,eAAO,KAAP;AAAe;;AAClC,UAAI,CAACC,qBAAqB,CAAC1yD,CAAD,EAAIC,CAAJ,EAAOyzD,OAAO,CAACv6D,KAAf,CAA1B,EAAiD;AAC/C,eAAO,KAAP;AACD;;AACD,UAAI,CAACiG,GAAL,EAAU;AAAEA,WAAG,GAAG,IAAImyD,IAAJ,EAAN;AAAmB;;AAC/BI,aAAO,CAACvyD,GAAD,EAAMs0D,OAAO,CAACv6D,KAAd,CAAP;AACD;AACF;;AACD,MAAIiG,GAAJ,EAAS;AACP,WAAO,CAACu0D,OAAO,GAAGF,EAAE,CAACv6D,IAAH,EAAX,KAAyB,CAACy6D,OAAO,CAACj0D,IAAzC,EAA+C;AAC7C;AACA,UAAIi0D,OAAO,CAACx6D,KAAR,IAAiB,OAAOw6D,OAAO,CAACx6D,KAAf,KAAyB,QAA9C,EAAwD;AACtD,YAAI,CAAC44D,kBAAkB,CAAC3yD,GAAD,EAAMu0D,OAAO,CAACx6D,KAAd,EAAqB2c,IAAI,CAAC28C,MAA1B,EAAkCR,OAAlC,CAAvB,EAAmE;AACjE,iBAAO,KAAP;AACD;AACF,OAJD,MAIO,IACL,CAACn8C,IAAI,CAAC28C,MAAN,IACG,CAACZ,OAAO,CAAC7xD,CAAD,EAAI2zD,OAAO,CAACx6D,KAAZ,CADX,IAEG,CAAC44D,kBAAkB,CAAC3yD,GAAD,EAAMu0D,OAAO,CAACx6D,KAAd,EAAqB2c,IAAI,CAAC28C,MAA1B,EAAkCR,OAAlC,CAHjB,EAIL;AACA,eAAO,KAAP;AACD;AACF;;AACD,WAAOH,QAAQ,CAAC1yD,GAAD,CAAR,KAAkB,CAAzB;AACD;;AACD,SAAO,IAAP;AACD;;AAED,SAASw0D,QAAT,CAAkB5zD,CAAlB,EAAqBC,CAArB,EAAwB6V,IAAxB,EAA8Bm8C,OAA9B,EAAuC;AACrC,MAAIP,QAAQ,CAAC1xD,CAAD,CAAR,KAAgB0xD,QAAQ,CAACzxD,CAAD,CAA5B,EAAiC;AAC/B,WAAO,KAAP;AACD;;AACD,MAAIuzD,EAAE,GAAGxC,WAAW,CAAChxD,CAAD,CAApB;AACA,MAAIyzD,EAAE,GAAGzC,WAAW,CAAC/wD,CAAD,CAApB;AACA,MAAIyzD,OAAJ;AACA,MAAIC,OAAJ;AACA,MAAIv0D,GAAJ;AACA,MAAIsP,GAAJ;AACA,MAAImkD,KAAJ;AACA,MAAIgB,KAAJ;;AACA,SAAO,CAACH,OAAO,GAAGF,EAAE,CAACt6D,IAAH,EAAX,KAAyB,CAACw6D,OAAO,CAACh0D,IAAzC,EAA+C;AAC7CgP,OAAG,GAAGglD,OAAO,CAACv6D,KAAR,CAAc,CAAd,CAAN;AACA05D,SAAK,GAAGa,OAAO,CAACv6D,KAAR,CAAc,CAAd,CAAR;;AACA,QAAIuV,GAAG,IAAI,OAAOA,GAAP,KAAe,QAA1B,EAAoC;AAClC,UAAI,CAACtP,GAAL,EAAU;AAAEA,WAAG,GAAG,IAAImyD,IAAJ,EAAN;AAAmB;;AAC/BI,aAAO,CAACvyD,GAAD,EAAMsP,GAAN,CAAP;AACD,KAHD,MAGO;AACLmlD,WAAK,GAAGpC,OAAO,CAACxxD,CAAD,EAAIyO,GAAJ,CAAf;;AACA,UAAK,OAAOmlD,KAAP,KAAiB,WAAjB,IAAgC,CAACrC,OAAO,CAACvxD,CAAD,EAAIyO,GAAJ,CAAzC,IAAsD,CAACwjD,iBAAiB,CAACW,KAAD,EAAQgB,KAAR,EAAe/9C,IAAf,EAAqBm8C,OAArB,CAA5E,EAA2G;AACzG,YAAIn8C,IAAI,CAAC28C,MAAT,EAAiB;AACf,iBAAO,KAAP;AACD;;AACD,YAAI,CAACJ,qBAAqB,CAACryD,CAAD,EAAIC,CAAJ,EAAOyO,GAAP,EAAYmkD,KAAZ,EAAmB/8C,IAAnB,EAAyBm8C,OAAzB,CAA1B,EAA6D;AAC3D,iBAAO,KAAP;AACD;;AACD,YAAI,CAAC7yD,GAAL,EAAU;AAAEA,aAAG,GAAG,IAAImyD,IAAJ,EAAN;AAAmB;;AAC/BI,eAAO,CAACvyD,GAAD,EAAMsP,GAAN,CAAP;AACD;AACF;AACF;;AAED,MAAItP,GAAJ,EAAS;AACP,WAAO,CAACu0D,OAAO,GAAGF,EAAE,CAACv6D,IAAH,EAAX,KAAyB,CAACy6D,OAAO,CAACj0D,IAAzC,EAA+C;AAC7CgP,SAAG,GAAGilD,OAAO,CAACx6D,KAAR,CAAc,CAAd,CAAN;AACA06D,WAAK,GAAGF,OAAO,CAACx6D,KAAR,CAAc,CAAd,CAAR;;AACA,UAAIuV,GAAG,IAAI,OAAOA,GAAP,KAAe,QAA1B,EAAoC;AAClC,YAAI,CAACikD,gBAAgB,CAACvzD,GAAD,EAAMY,CAAN,EAAS0O,GAAT,EAAcmlD,KAAd,EAAqB/9C,IAArB,EAA2Bm8C,OAA3B,CAArB,EAA0D;AACxD,iBAAO,KAAP;AACD;AACF,OAJD,MAIO,IACL,CAACn8C,IAAI,CAAC28C,MAAN,KACI,CAACzyD,CAAC,CAAC4R,GAAF,CAAMlD,GAAN,CAAD,IAAe,CAACwjD,iBAAiB,CAACT,OAAO,CAACzxD,CAAD,EAAI0O,GAAJ,CAAR,EAAkBmlD,KAAlB,EAAyB/9C,IAAzB,EAA+Bm8C,OAA/B,CADrC,KAEG,CAACU,gBAAgB,CAACvzD,GAAD,EAAMY,CAAN,EAAS0O,GAAT,EAAcmlD,KAAd,EAAqBp3D,MAAM,CAAC,EAAD,EAAKqZ,IAAL,EAAW;AAAE28C,cAAM,EAAE;AAAV,OAAX,CAA3B,EAA0DR,OAA1D,CAHf,EAIL;AACA,eAAO,KAAP;AACD;AACF;;AACD,WAAOH,QAAQ,CAAC1yD,GAAD,CAAR,KAAkB,CAAzB;AACD;;AACD,SAAO,IAAP;AACD;;AAED,SAASk0D,QAAT,CAAkBtzD,CAAlB,EAAqBC,CAArB,EAAwB6V,IAAxB,EAA8Bm8C,OAA9B,EAAuC;AACrC;AACA,MAAIx5C,CAAJ,EAAO/J,GAAP;;AAEA,MAAI,OAAO1O,CAAP,KAAa,OAAOC,CAAxB,EAA2B;AAAE,WAAO,KAAP;AAAe;;AAC5C,MAAID,CAAC,IAAI,IAAL,IAAaC,CAAC,IAAI,IAAtB,EAA4B;AAAE,WAAO,KAAP;AAAe;;AAE7C,MAAIqxD,YAAY,CAACtxD,CAAD,CAAZ,KAAoBsxD,YAAY,CAACrxD,CAAD,CAApC,EAAyC;AAAE,WAAO,KAAP;AAAe;;AAE1D,MAAIywD,WAAW,CAAC1wD,CAAD,CAAX,KAAmB0wD,WAAW,CAACzwD,CAAD,CAAlC,EAAuC;AAAE,WAAO,KAAP;AAAe;;AAExD,MAAI6zD,QAAQ,GAAG5yD,OAAO,CAAClB,CAAD,CAAtB;AACA,MAAI+zD,QAAQ,GAAG7yD,OAAO,CAACjB,CAAD,CAAtB;;AACA,MAAI6zD,QAAQ,KAAKC,QAAjB,EAA2B;AAAE,WAAO,KAAP;AAAe,GAbP,CAerC;;;AACA,MAAIC,QAAQ,GAAGh0D,CAAC,YAAY5B,KAA5B;AACA,MAAI61D,QAAQ,GAAGh0D,CAAC,YAAY7B,KAA5B;;AACA,MAAI41D,QAAQ,KAAKC,QAAjB,EAA2B;AAAE,WAAO,KAAP;AAAe;;AAC5C,MAAID,QAAQ,IAAIC,QAAhB,EAA0B;AACxB,QAAIj0D,CAAC,CAAC4C,IAAF,KAAW3C,CAAC,CAAC2C,IAAb,IAAqB5C,CAAC,CAAC6nC,OAAF,KAAc5nC,CAAC,CAAC4nC,OAAzC,EAAkD;AAAE,aAAO,KAAP;AAAe;AACpE;;AAED,MAAIqsB,QAAQ,GAAGtD,OAAO,CAAC5wD,CAAD,CAAtB;AACA,MAAIm0D,QAAQ,GAAGvD,OAAO,CAAC3wD,CAAD,CAAtB;;AACA,MAAIi0D,QAAQ,KAAKC,QAAjB,EAA2B;AAAE,WAAO,KAAP;AAAe;;AAC5C,MAAI,CAACD,QAAQ,IAAIC,QAAb,MAA2Bn0D,CAAC,CAACo0D,MAAF,KAAan0D,CAAC,CAACm0D,MAAf,IAAyBnuC,KAAK,CAACjmB,CAAD,CAAL,KAAaimB,KAAK,CAAChmB,CAAD,CAAtE,CAAJ,EAAgF;AAC9E,WAAO,KAAP;AACD;;AAED,MAAIo0D,OAAO,GAAGxxD,MAAM,CAAC7C,CAAD,CAApB;AACA,MAAIs0D,OAAO,GAAGzxD,MAAM,CAAC5C,CAAD,CAApB;;AACA,MAAIo0D,OAAO,KAAKC,OAAhB,EAAyB;AAAE,WAAO,KAAP;AAAe;;AAC1C,MAAID,OAAO,IAAIC,OAAf,EAAwB;AAAE;AACxB,QAAInD,QAAQ,CAACnxD,CAAD,CAAR,KAAgBmxD,QAAQ,CAAClxD,CAAD,CAA5B,EAAiC;AAAE,aAAO,KAAP;AAAe;AACnD;;AACD,MAAI6V,IAAI,CAAC28C,MAAL,IAAerB,GAAf,IAAsBA,GAAG,CAACpxD,CAAD,CAAH,KAAWoxD,GAAG,CAACnxD,CAAD,CAAxC,EAA6C;AAAE,WAAO,KAAP;AAAe;;AAE9D,MAAIixD,eAAe,CAAClxD,CAAD,CAAf,KAAuBkxD,eAAe,CAACjxD,CAAD,CAA1C,EAA+C;AAC7C,WAAO,KAAP;AACD;;AAED,MAAIs0D,SAAS,GAAGt4C,QAAQ,CAACjc,CAAD,CAAxB;AACA,MAAIw0D,SAAS,GAAGv4C,QAAQ,CAAChc,CAAD,CAAxB;;AACA,MAAIs0D,SAAS,KAAKC,SAAlB,EAA6B;AAAE,WAAO,KAAP;AAAe;;AAC9C,MAAID,SAAS,IAAIC,SAAjB,EAA4B;AAAE;AAC5B,QAAIx0D,CAAC,CAACJ,MAAF,KAAaK,CAAC,CAACL,MAAnB,EAA2B;AAAE,aAAO,KAAP;AAAe;;AAC5C,SAAK6Y,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGzY,CAAC,CAACJ,MAAlB,EAA0B6Y,CAAC,EAA3B,EAA+B;AAC7B,UAAIzY,CAAC,CAACyY,CAAD,CAAD,KAASxY,CAAC,CAACwY,CAAD,CAAd,EAAmB;AAAE,eAAO,KAAP;AAAe;AACrC;;AACD,WAAO,IAAP;AACD;;AAED,MAAI,OAAOzY,CAAP,KAAa,OAAOC,CAAxB,EAA2B;AAAE,WAAO,KAAP;AAAe;;AAE5C,MAAIw0D,EAAE,GAAGhE,UAAU,CAACzwD,CAAD,CAAnB;AACA,MAAI00D,EAAE,GAAGjE,UAAU,CAACxwD,CAAD,CAAnB,CAxDqC,CAyDrC;;AACA,MAAIw0D,EAAE,CAAC70D,MAAH,KAAc80D,EAAE,CAAC90D,MAArB,EAA6B;AAAE,WAAO,KAAP;AAAe,GA1DT,CA4DrC;;;AACA60D,IAAE,CAACr0D,IAAH;AACAs0D,IAAE,CAACt0D,IAAH,GA9DqC,CA+DrC;;AACA,OAAKqY,CAAC,GAAGg8C,EAAE,CAAC70D,MAAH,GAAY,CAArB,EAAwB6Y,CAAC,IAAI,CAA7B,EAAgCA,CAAC,EAAjC,EAAqC;AACnC,QAAIg8C,EAAE,CAACh8C,CAAD,CAAF,IAASi8C,EAAE,CAACj8C,CAAD,CAAf,EAAoB;AAAE,aAAO,KAAP;AAAe,KADF,CACG;;AACvC,GAlEoC,CAoErC;;;AACA,OAAKA,CAAC,GAAGg8C,EAAE,CAAC70D,MAAH,GAAY,CAArB,EAAwB6Y,CAAC,IAAI,CAA7B,EAAgCA,CAAC,EAAjC,EAAqC;AACnC/J,OAAG,GAAG+lD,EAAE,CAACh8C,CAAD,CAAR;;AACA,QAAI,CAACy5C,iBAAiB,CAAClyD,CAAC,CAAC0O,GAAD,CAAF,EAASzO,CAAC,CAACyO,GAAD,CAAV,EAAiBoH,IAAjB,EAAuBm8C,OAAvB,CAAtB,EAAuD;AAAE,aAAO,KAAP;AAAe;AACzE;;AAED,MAAI0C,WAAW,GAAG5D,eAAe,CAAC/wD,CAAD,CAAjC;AACA,MAAI40D,WAAW,GAAG7D,eAAe,CAAC9wD,CAAD,CAAjC;;AACA,MAAI00D,WAAW,KAAKC,WAApB,EAAiC;AAC/B,WAAO,KAAP;AACD;;AACD,MAAID,WAAW,KAAK,KAAhB,IAAyBC,WAAW,KAAK,KAA7C,EAAoD;AAAE;AACpD,WAAOrB,QAAQ,CAACvzD,CAAD,EAAIC,CAAJ,EAAO6V,IAAP,EAAam8C,OAAb,CAAf;AACD;;AACD,MAAI0C,WAAW,KAAK,KAApB,EAA2B;AAAE;AAC3B,WAAOf,QAAQ,CAAC5zD,CAAD,EAAIC,CAAJ,EAAO6V,IAAP,EAAam8C,OAAb,CAAf;AACD;;AAED,SAAO,IAAP;AACD;;AAEDr3C,MAAM,CAACC,OAAP,GAAiB,SAASg6C,SAAT,CAAmB70D,CAAnB,EAAsBC,CAAtB,EAAyB6V,IAAzB,EAA+B;AAC9C,SAAOo8C,iBAAiB,CAAClyD,CAAD,EAAIC,CAAJ,EAAO6V,IAAP,EAAam7C,cAAc,EAA3B,CAAxB;AACD,CAFD,C;;;;;;;;;;;ACvWA,IAAIz6C,QAAQ,GAAG,GAAGA,QAAlB;;AAEAoE,MAAM,CAACC,OAAP,GAAiBnd,KAAK,CAACwD,OAAN,IAAiB,UAAU4zD,GAAV,EAAe;AAC/C,SAAOt+C,QAAQ,CAACC,IAAT,CAAcq+C,GAAd,KAAsB,gBAA7B;AACD,CAFD,C;;;;;;;;;;;;ACFa;;AAEb,IAAIrmD,IAAI,GAAGuM,mBAAO,CAAC,wDAAD,CAAlB;;AACA,IAAI+5C,UAAU,GAAG,OAAOz3D,MAAP,KAAkB,UAAlB,IAAgC,OAAOA,MAAM,CAAC,KAAD,CAAb,KAAyB,QAA1E;AAEA,IAAI03D,KAAK,GAAGx4D,MAAM,CAACoZ,SAAP,CAAiBY,QAA7B;AACA,IAAIogB,MAAM,GAAGl5B,KAAK,CAACkY,SAAN,CAAgBghB,MAA7B;AACA,IAAIq+B,kBAAkB,GAAGz4D,MAAM,CAAC04D,cAAhC;;AAEA,IAAIC,UAAU,GAAG,UAAU/yD,EAAV,EAAc;AAC9B,SAAO,OAAOA,EAAP,KAAc,UAAd,IAA4B4yD,KAAK,CAACv+C,IAAN,CAAWrU,EAAX,MAAmB,mBAAtD;AACA,CAFD;;AAIA,IAAIgzD,+BAA+B,GAAG,YAAY;AACjD,MAAIzmD,GAAG,GAAG,EAAV;;AACA,MAAI;AACHsmD,sBAAkB,CAACtmD,GAAD,EAAM,GAAN,EAAW;AAAE0mD,gBAAU,EAAE,KAAd;AAAqBl8D,WAAK,EAAEwV;AAA5B,KAAX,CAAlB,CADG,CAEH;;AACA,SAAK,IAAIjO,CAAT,IAAciO,GAAd,EAAmB;AAAE;AACpB,aAAO,KAAP;AACA;;AACD,WAAOA,GAAG,CAACrH,CAAJ,KAAUqH,GAAjB;AACA,GAPD,CAOE,OAAOuU,CAAP,EAAU;AAAE;AACb,WAAO,KAAP;AACA;AACD,CAZD;;AAaA,IAAIoyC,mBAAmB,GAAGL,kBAAkB,IAAIG,+BAA+B,EAA/E;;AAEA,IAAIF,cAAc,GAAG,UAAUxwD,MAAV,EAAkB9B,IAAlB,EAAwBzJ,KAAxB,EAA+BurD,SAA/B,EAA0C;AAC9D,MAAI9hD,IAAI,IAAI8B,MAAR,KAAmB,CAACywD,UAAU,CAACzQ,SAAD,CAAX,IAA0B,CAACA,SAAS,EAAvD,CAAJ,EAAgE;AAC/D;AACA;;AACD,MAAI4Q,mBAAJ,EAAyB;AACxBL,sBAAkB,CAACvwD,MAAD,EAAS9B,IAAT,EAAe;AAChC25B,kBAAY,EAAE,IADkB;AAEhC84B,gBAAU,EAAE,KAFoB;AAGhCl8D,WAAK,EAAEA,KAHyB;AAIhCo8D,cAAQ,EAAE;AAJsB,KAAf,CAAlB;AAMA,GAPD,MAOO;AACN7wD,UAAM,CAAC9B,IAAD,CAAN,GAAezJ,KAAf;AACA;AACD,CAdD;;AAgBA,IAAIq8D,gBAAgB,GAAG,UAAU9wD,MAAV,EAAkB/H,GAAlB,EAAuB;AAC7C,MAAI84D,UAAU,GAAG3sD,SAAS,CAAClJ,MAAV,GAAmB,CAAnB,GAAuBkJ,SAAS,CAAC,CAAD,CAAhC,GAAsC,EAAvD;AACA,MAAIsX,KAAK,GAAG3R,IAAI,CAAC9R,GAAD,CAAhB;;AACA,MAAIo4D,UAAJ,EAAgB;AACf30C,SAAK,GAAGwW,MAAM,CAACngB,IAAP,CAAY2J,KAAZ,EAAmB5jB,MAAM,CAACk5D,qBAAP,CAA6B/4D,GAA7B,CAAnB,CAAR;AACA;;AACD,OAAK,IAAI8b,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2H,KAAK,CAACxgB,MAA1B,EAAkC6Y,CAAC,IAAI,CAAvC,EAA0C;AACzCy8C,kBAAc,CAACxwD,MAAD,EAAS0b,KAAK,CAAC3H,CAAD,CAAd,EAAmB9b,GAAG,CAACyjB,KAAK,CAAC3H,CAAD,CAAN,CAAtB,EAAkCg9C,UAAU,CAACr1C,KAAK,CAAC3H,CAAD,CAAN,CAA5C,CAAd;AACA;AACD,CATD;;AAWA+8C,gBAAgB,CAACF,mBAAjB,GAAuC,CAAC,CAACA,mBAAzC;AAEA16C,MAAM,CAACC,OAAP,GAAiB26C,gBAAjB,C;;;;;;;;;;;;ACzDa;;AAEb,IAAIj6B,YAAY,GAAGvgB,mBAAO,CAAC,4DAAD,CAA1B;;AAEA,IAAIihB,KAAK,GAAGV,YAAY,CAAC,mCAAD,EAAsC,IAAtC,CAAxB;;AACA,IAAIU,KAAJ,EAAW;AACV,MAAI;AACHA,SAAK,CAAC,EAAD,EAAK,QAAL,CAAL;AACA,GAFD,CAEE,OAAO/Y,CAAP,EAAU;AACX;AACA+Y,SAAK,GAAG,IAAR;AACA;AACD;;AAEDrhB,MAAM,CAACC,OAAP,GAAiBohB,KAAjB,C;;;;;;;;;;;;ACda;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAIy0B,WAAW,GAAG11C,mBAAO,CAAC,0DAAD,CAAzB;;AAEA,IAAIA,mBAAO,CAAC,wDAAD,CAAP,MAA4BA,mBAAO,CAAC,8DAAD,CAAP,EAAhC,EAAgE;AAC/D,MAAI26C,SAAS,GAAGr4D,MAAM,CAACvC,QAAvB,CAD+D,CAE/D;AACA;AACA;AACA;AACA;AACA;AACA;;AACA6f,QAAM,CAACC,OAAP,GAAiB,SAASm2C,WAAT,CAAqB3zD,QAArB,EAA+B;AAC/C;AACA,QAAIA,QAAQ,IAAI,IAAZ,IAAoB,OAAOA,QAAQ,CAACs4D,SAAD,CAAf,KAA+B,WAAvD,EAAoE;AACnE,aAAOt4D,QAAQ,CAACs4D,SAAD,CAAR,EAAP;AACA;;AACD,QAAIjF,WAAW,CAACrzD,QAAD,CAAf,EAA2B;AAC1B;AACA;AACA,aAAOK,KAAK,CAACkY,SAAN,CAAgB+/C,SAAhB,EAA2Bl/C,IAA3B,CAAgCpZ,QAAhC,CAAP;AACA;AACD,GAVD;AAWA,CApBD,MAoBO;AACN;AACA,MAAI6D,OAAO,GAAG8Z,mBAAO,CAAC,6EAAD,CAArB;;AACA,MAAIhD,QAAQ,GAAGgD,mBAAO,CAAC,oDAAD,CAAtB;;AACA,MAAIugB,YAAY,GAAGvgB,mBAAO,CAAC,4DAAD,CAA1B;;AACA,MAAI46C,IAAI,GAAGr6B,YAAY,CAAC,OAAD,EAAU,IAAV,CAAvB;AACA,MAAIg2B,IAAI,GAAGh2B,YAAY,CAAC,OAAD,EAAU,IAAV,CAAvB;;AACA,MAAIu1B,SAAS,GAAG91C,mBAAO,CAAC,kEAAD,CAAvB;;AACA,MAAI66C,UAAU,GAAG/E,SAAS,CAAC,sBAAD,CAA1B;AACA,MAAIgF,WAAW,GAAGhF,SAAS,CAAC,6BAAD,CAA3B;AACA,MAAIiF,YAAY,GAAGjF,SAAS,CAAC,wBAAD,CAA5B;;AAEA,MAAIkF,kBAAkB,GAAG,SAASA,kBAAT,CAA4BjlB,CAA5B,EAA+BpyC,KAA/B,EAAsC;AAC9D,QAAIiB,MAAM,GAAGmxC,CAAC,CAACnxC,MAAf;;AACA,QAAKjB,KAAK,GAAG,CAAT,IAAeiB,MAAnB,EAA2B;AAC1B,aAAOjB,KAAK,GAAG,CAAf;AACA;;AAED,QAAI+R,KAAK,GAAGolD,WAAW,CAAC/kB,CAAD,EAAIpyC,KAAJ,CAAvB;;AACA,QAAI+R,KAAK,GAAG,MAAR,IAAkBA,KAAK,GAAG,MAA9B,EAAsC;AACrC,aAAO/R,KAAK,GAAG,CAAf;AACA;;AAED,QAAI2F,MAAM,GAAGwxD,WAAW,CAAC/kB,CAAD,EAAIpyC,KAAK,GAAG,CAAZ,CAAxB;;AACA,QAAI2F,MAAM,GAAG,MAAT,IAAmBA,MAAM,GAAG,MAAhC,EAAwC;AACvC,aAAO3F,KAAK,GAAG,CAAf;AACA;;AAED,WAAOA,KAAK,GAAG,CAAf;AACA,GAjBD;;AAmBA,MAAIs3D,gBAAgB,GAAG,SAASA,gBAAT,CAA0BC,SAA1B,EAAqC;AAC3D,QAAIz9C,CAAC,GAAG,CAAR;AACA,WAAO;AACNvf,UAAI,EAAE,SAASA,IAAT,GAAgB;AACrB,YAAIwG,IAAI,GAAG+Y,CAAC,IAAIy9C,SAAS,CAACt2D,MAA1B;AACA,YAAIzG,KAAJ;;AACA,YAAI,CAACuG,IAAL,EAAW;AACVvG,eAAK,GAAG+8D,SAAS,CAACz9C,CAAD,CAAjB;AACAA,WAAC,IAAI,CAAL;AACA;;AACD,eAAO;AACN/Y,cAAI,EAAEA,IADA;AAENvG,eAAK,EAAEA;AAFD,SAAP;AAIA;AAZK,KAAP;AAcA,GAhBD;;AAkBA,MAAIg9D,wBAAwB,GAAG,SAASA,wBAAT,CAAkC94D,QAAlC,EAA4C+4D,uBAA5C,EAAqE;AACnG,QAAIl1D,OAAO,CAAC7D,QAAD,CAAP,IAAqBqzD,WAAW,CAACrzD,QAAD,CAApC,EAAgD;AAC/C,aAAO44D,gBAAgB,CAAC54D,QAAD,CAAvB;AACA;;AACD,QAAI2a,QAAQ,CAAC3a,QAAD,CAAZ,EAAwB;AACvB,UAAIob,CAAC,GAAG,CAAR;AACA,aAAO;AACNvf,YAAI,EAAE,SAASA,IAAT,GAAgB;AACrB,cAAIm9D,SAAS,GAAGL,kBAAkB,CAAC34D,QAAD,EAAWob,CAAX,CAAlC;AACA,cAAItf,KAAK,GAAG48D,YAAY,CAAC14D,QAAD,EAAWob,CAAX,EAAc49C,SAAd,CAAxB;AACA59C,WAAC,GAAG49C,SAAJ;AACA,iBAAO;AACN32D,gBAAI,EAAE22D,SAAS,GAAGh5D,QAAQ,CAACuC,MADrB;AAENzG,iBAAK,EAAEA;AAFD,WAAP;AAIA;AATK,OAAP;AAWA,KAjBkG,CAmBnG;;;AACA,QAAIi9D,uBAAuB,IAAI,OAAO/4D,QAAQ,CAAC,qBAAD,CAAf,KAA2C,WAA1E,EAAuF;AACtF,aAAOA,QAAQ,CAAC,qBAAD,CAAR,EAAP;AACA;AACD,GAvBD;;AAyBA,MAAI,CAACu4D,IAAD,IAAS,CAACrE,IAAd,EAAoB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AAEA32C,UAAM,CAACC,OAAP,GAAiB,SAASm2C,WAAT,CAAqB3zD,QAArB,EAA+B;AAC/C,UAAIA,QAAQ,IAAI,IAAhB,EAAsB;AACrB,eAAO84D,wBAAwB,CAAC94D,QAAD,EAAW,IAAX,CAA/B;AACA;AACD,KAJD;AAKA,GAdD,MAcO;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,QAAIi5D,KAAK,GAAGt7C,mBAAO,CAAC,8CAAD,CAAnB;;AACA,QAAIu7C,KAAK,GAAGv7C,mBAAO,CAAC,8CAAD,CAAnB,CAVM,CAYN;;;AACA,QAAIw7C,WAAW,GAAG1F,SAAS,CAAC,uBAAD,EAA0B,IAA1B,CAA3B;AACA,QAAI2F,WAAW,GAAG3F,SAAS,CAAC,uBAAD,EAA0B,IAA1B,CAA3B;;AACA,QAAI,OAAO97B,OAAP,KAAmB,WAAnB,IAAkC,CAACA,OAAO,CAACC,QAA3C,IAAuD,CAACD,OAAO,CAACC,QAAR,CAAiBzH,IAA7E,EAAmF;AAAE;AAEpF;AACA;AACA;AACA,UAAIkpC,YAAY,GAAG5F,SAAS,CAAC,wBAAD,EAA2B,IAA3B,CAA5B;AACA,UAAI6F,YAAY,GAAG7F,SAAS,CAAC,wBAAD,EAA2B,IAA3B,CAA5B;;AACA,UAAI8F,wBAAwB,GAAG,UAAU77D,QAAV,EAAoB;AAClD,YAAI2E,IAAI,GAAG,KAAX;AACA,eAAO;AACNxG,cAAI,EAAE,SAASA,IAAT,GAAgB;AACrB,gBAAI;AACH,qBAAO;AACNwG,oBAAI,EAAEA,IADA;AAENvG,qBAAK,EAAEuG,IAAI,GAAG9G,SAAH,GAAemC,QAAQ,CAAC7B,IAAT;AAFpB,eAAP;AAIA,aALD,CAKE,OAAOgqB,CAAP,EAAU;AACXxjB,kBAAI,GAAG,IAAP;AACA,qBAAO;AACNA,oBAAI,EAAE,IADA;AAENvG,qBAAK,EAAEP;AAFD,eAAP;AAIA;AACD;AAdK,SAAP;AAgBA,OAlBD;AAmBA,KAzCK,CA0CN;AACA;AACA;;;AACA,QAAIi+D,gBAAgB,GAAG/F,SAAS,CAAC,0BAAD,EAA6B,IAA7B,CAAT,IAA+CA,SAAS,CAAC,mCAAD,EAAsC,IAAtC,CAA/E;AACA,QAAIgG,gBAAgB,GAAGhG,SAAS,CAAC,0BAAD,EAA6B,IAA7B,CAAT,IAA+CA,SAAS,CAAC,mCAAD,EAAsC,IAAtC,CAA/E;;AAEA,QAAIiG,qBAAqB,GAAG,SAASA,qBAAT,CAA+B15D,QAA/B,EAAyC;AACpE,UAAIi5D,KAAK,CAACj5D,QAAD,CAAT,EAAqB;AACpB,YAAIq5D,YAAJ,EAAkB;AACjB,iBAAOE,wBAAwB,CAACF,YAAY,CAACr5D,QAAD,CAAb,CAA/B;AACA;;AACD,YAAIw5D,gBAAJ,EAAsB;AACrB,iBAAOA,gBAAgB,CAACx5D,QAAD,CAAvB;AACA;;AACD,YAAIm5D,WAAJ,EAAiB;AAChB,cAAIp1C,OAAO,GAAG,EAAd;AACAo1C,qBAAW,CAACn5D,QAAD,EAAW,UAAUkmC,CAAV,EAAaxV,CAAb,EAAgB;AACrC8nC,sBAAU,CAACz0C,OAAD,EAAU,CAAC2M,CAAD,EAAIwV,CAAJ,CAAV,CAAV;AACA,WAFU,CAAX;AAGA,iBAAO0yB,gBAAgB,CAAC70C,OAAD,CAAvB;AACA;AACD;;AACD,UAAIm1C,KAAK,CAACl5D,QAAD,CAAT,EAAqB;AACpB,YAAIs5D,YAAJ,EAAkB;AACjB,iBAAOC,wBAAwB,CAACD,YAAY,CAACt5D,QAAD,CAAb,CAA/B;AACA;;AACD,YAAIy5D,gBAAJ,EAAsB;AACrB,iBAAOA,gBAAgB,CAACz5D,QAAD,CAAvB;AACA;;AACD,YAAIo5D,WAAJ,EAAiB;AAChB,cAAI/oD,MAAM,GAAG,EAAb;AACA+oD,qBAAW,CAACp5D,QAAD,EAAW,UAAUkmC,CAAV,EAAa;AAClCsyB,sBAAU,CAACnoD,MAAD,EAAS61B,CAAT,CAAV;AACA,WAFU,CAAX;AAGA,iBAAO0yB,gBAAgB,CAACvoD,MAAD,CAAvB;AACA;AACD;AACD,KA/BD;;AAiCAkN,UAAM,CAACC,OAAP,GAAiB,SAASm2C,WAAT,CAAqB3zD,QAArB,EAA+B;AAC/C,aAAO05D,qBAAqB,CAAC15D,QAAD,CAArB,IAAmC84D,wBAAwB,CAAC94D,QAAD,CAAlE;AACA,KAFD;AAGA;AACD,C;;;;;;;;;;;AC9MD,IAAImZ,QAAQ,GAAG,GAAGA,QAAlB;;AAEAoE,MAAM,CAACC,OAAP,GAAiBnd,KAAK,CAACwD,OAAN,IAAiB,UAAU4zD,GAAV,EAAe;AAC/C,SAAOt+C,QAAQ,CAACC,IAAT,CAAcq+C,GAAd,KAAsB,gBAA7B;AACD,CAFD,C;;;;;;;;;;;ACDA,IAAIkC,MAAM,GAAGx6D,MAAM,CAACoZ,SAAP,CAAiB0C,cAA9B;AACA,IAAI9B,QAAQ,GAAGha,MAAM,CAACoZ,SAAP,CAAiBY,QAAhC;;AAEAoE,MAAM,CAACC,OAAP,GAAiB,SAAS/O,OAAT,CAAkB6C,GAAlB,EAAuBvM,EAAvB,EAA2B60D,GAA3B,EAAgC;AAC7C,MAAIzgD,QAAQ,CAACC,IAAT,CAAcrU,EAAd,MAAsB,mBAA1B,EAA+C;AAC3C,UAAM,IAAI2G,SAAJ,CAAc,6BAAd,CAAN;AACH;;AACD,MAAIsuB,CAAC,GAAG1oB,GAAG,CAAC/O,MAAZ;;AACA,MAAIy3B,CAAC,KAAK,CAACA,CAAX,EAAc;AACV,SAAK,IAAI5e,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4e,CAApB,EAAuB5e,CAAC,EAAxB,EAA4B;AACxBrW,QAAE,CAACqU,IAAH,CAAQwgD,GAAR,EAAatoD,GAAG,CAAC8J,CAAD,CAAhB,EAAqBA,CAArB,EAAwB9J,GAAxB;AACH;AACJ,GAJD,MAIO;AACH,SAAK,IAAIof,CAAT,IAAcpf,GAAd,EAAmB;AACf,UAAIqoD,MAAM,CAACvgD,IAAP,CAAY9H,GAAZ,EAAiBof,CAAjB,CAAJ,EAAyB;AACrB3rB,UAAE,CAACqU,IAAH,CAAQwgD,GAAR,EAAatoD,GAAG,CAACof,CAAD,CAAhB,EAAqBA,CAArB,EAAwBpf,GAAxB;AACH;AACJ;AACJ;AACJ,CAhBD,C;;;;;;;;;;;;ACJa;AAEb;;AAEA,IAAIuoD,aAAa,GAAG,iDAApB;AACA,IAAIt1D,KAAK,GAAGlE,KAAK,CAACkY,SAAN,CAAgBhU,KAA5B;AACA,IAAIozD,KAAK,GAAGx4D,MAAM,CAACoZ,SAAP,CAAiBY,QAA7B;AACA,IAAI2gD,QAAQ,GAAG,mBAAf;;AAEAv8C,MAAM,CAACC,OAAP,GAAiB,SAASghB,IAAT,CAAcyQ,IAAd,EAAoB;AACjC,MAAIzqB,MAAM,GAAG,IAAb;;AACA,MAAI,OAAOA,MAAP,KAAkB,UAAlB,IAAgCmzC,KAAK,CAACv+C,IAAN,CAAWoL,MAAX,MAAuBs1C,QAA3D,EAAqE;AACjE,UAAM,IAAIpuD,SAAJ,CAAcmuD,aAAa,GAAGr1C,MAA9B,CAAN;AACH;;AACD,MAAInpB,IAAI,GAAGkJ,KAAK,CAAC6U,IAAN,CAAW3N,SAAX,EAAsB,CAAtB,CAAX;AAEA,MAAIsuD,KAAJ;;AACA,MAAIC,MAAM,GAAG,YAAY;AACrB,QAAI,gBAAgBD,KAApB,EAA2B;AACvB,UAAIzpD,MAAM,GAAGkU,MAAM,CAAC4a,KAAP,CACT,IADS,EAET/jC,IAAI,CAACk+B,MAAL,CAAYh1B,KAAK,CAAC6U,IAAN,CAAW3N,SAAX,CAAZ,CAFS,CAAb;;AAIA,UAAItM,MAAM,CAACmR,MAAD,CAAN,KAAmBA,MAAvB,EAA+B;AAC3B,eAAOA,MAAP;AACH;;AACD,aAAO,IAAP;AACH,KATD,MASO;AACH,aAAOkU,MAAM,CAAC4a,KAAP,CACH6P,IADG,EAEH5zC,IAAI,CAACk+B,MAAL,CAAYh1B,KAAK,CAAC6U,IAAN,CAAW3N,SAAX,CAAZ,CAFG,CAAP;AAIH;AACJ,GAhBD;;AAkBA,MAAIwuD,WAAW,GAAGjvD,IAAI,CAACge,GAAL,CAAS,CAAT,EAAYxE,MAAM,CAACjiB,MAAP,GAAgBlH,IAAI,CAACkH,MAAjC,CAAlB;AACA,MAAI23D,SAAS,GAAG,EAAhB;;AACA,OAAK,IAAI9+C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6+C,WAApB,EAAiC7+C,CAAC,EAAlC,EAAsC;AAClC8+C,aAAS,CAAC94D,IAAV,CAAe,MAAMga,CAArB;AACH;;AAED2+C,OAAK,GAAGI,QAAQ,CAAC,QAAD,EAAW,sBAAsBD,SAAS,CAAC58C,IAAV,CAAe,GAAf,CAAtB,GAA4C,2CAAvD,CAAR,CAA4G08C,MAA5G,CAAR;;AAEA,MAAIx1C,MAAM,CAACjM,SAAX,EAAsB;AAClB,QAAI6hD,KAAK,GAAG,SAASA,KAAT,GAAiB,CAAE,CAA/B;;AACAA,SAAK,CAAC7hD,SAAN,GAAkBiM,MAAM,CAACjM,SAAzB;AACAwhD,SAAK,CAACxhD,SAAN,GAAkB,IAAI6hD,KAAJ,EAAlB;AACAA,SAAK,CAAC7hD,SAAN,GAAkB,IAAlB;AACH;;AAED,SAAOwhD,KAAP;AACH,CA1CD,C;;;;;;;;;;;;ACTa;;AAEb,IAAIM,cAAc,GAAG18C,mBAAO,CAAC,wEAAD,CAA5B;;AAEAJ,MAAM,CAACC,OAAP,GAAiB28C,QAAQ,CAAC5hD,SAAT,CAAmBimB,IAAnB,IAA2B67B,cAA5C,C;;;;;;;;;;;;ACJa;;AAEb,IAAI9+D,SAAJ;AAEA,IAAI++D,YAAY,GAAGC,WAAnB;AACA,IAAIC,SAAS,GAAGL,QAAhB;AACA,IAAIM,UAAU,GAAG/uD,SAAjB,C,CAEA;;AACA,IAAIgvD,qBAAqB,GAAG,UAAUC,gBAAV,EAA4B;AACvD,MAAI;AACH,WAAOH,SAAS,CAAC,2BAA2BG,gBAA3B,GAA8C,gBAA/C,CAAT,EAAP;AACA,GAFD,CAEE,OAAO90C,CAAP,EAAU,CAAE;AACd,CAJD;;AAMA,IAAI+Y,KAAK,GAAGz/B,MAAM,CAACy7D,wBAAnB;;AACA,IAAIh8B,KAAJ,EAAW;AACV,MAAI;AACHA,SAAK,CAAC,EAAD,EAAK,EAAL,CAAL;AACA,GAFD,CAEE,OAAO/Y,CAAP,EAAU;AACX+Y,SAAK,GAAG,IAAR,CADW,CACG;AACd;AACD;;AAED,IAAIi8B,cAAc,GAAG,YAAY;AAChC,QAAM,IAAIJ,UAAJ,EAAN;AACA,CAFD;;AAGA,IAAIK,cAAc,GAAGl8B,KAAK,GACtB,YAAY;AACd,MAAI;AACH;AACAnzB,aAAS,CAACsvD,MAAV,CAFG,CAEe;;AAClB,WAAOF,cAAP;AACA,GAJD,CAIE,OAAOG,YAAP,EAAqB;AACtB,QAAI;AACH;AACA,aAAOp8B,KAAK,CAACnzB,SAAD,EAAY,QAAZ,CAAL,CAA2BjN,GAAlC;AACA,KAHD,CAGE,OAAOy8D,UAAP,EAAmB;AACpB,aAAOJ,cAAP;AACA;AACD;AACD,CAbE,EADsB,GAevBA,cAfH;;AAiBA,IAAInD,UAAU,GAAG/5C,mBAAO,CAAC,wDAAD,CAAP,EAAjB;;AAEA,IAAIu9C,QAAQ,GAAG/7D,MAAM,CAAC60D,cAAP,IAAyB,UAAU/pD,CAAV,EAAa;AAAE,SAAOA,CAAC,CAACkxD,SAAT;AAAqB,CAA5E,C,CAA8E;;;AAE9E,IAAIC,SAAS,GAAG,EAAhB;AAEA,IAAIC,UAAU,GAAG,OAAO38C,UAAP,KAAsB,WAAtB,GAAoCnjB,SAApC,GAAgD2/D,QAAQ,CAACx8C,UAAD,CAAzE;AAEA,IAAI48C,UAAU,GAAG;AAChB,sBAAoB,OAAOC,cAAP,KAA0B,WAA1B,GAAwChgE,SAAxC,GAAoDggE,cADxD;AAEhB,aAAWl7D,KAFK;AAGhB,mBAAiB,OAAOm7D,WAAP,KAAuB,WAAvB,GAAqCjgE,SAArC,GAAiDigE,WAHlD;AAIhB,8BAA4B9D,UAAU,GAAGwD,QAAQ,CAAC,GAAGj7D,MAAM,CAACvC,QAAV,GAAD,CAAX,GAAqCnC,SAJ3D;AAKhB,sCAAoCA,SALpB;AAMhB,qBAAmB6/D,SANH;AAOhB,sBAAoBA,SAPJ;AAQhB,8BAA4BA,SARZ;AAShB,8BAA4BA,SATZ;AAUhB,eAAa,OAAOK,OAAP,KAAmB,WAAnB,GAAiClgE,SAAjC,GAA6CkgE,OAV1C;AAWhB,cAAY,OAAOC,MAAP,KAAkB,WAAlB,GAAgCngE,SAAhC,GAA4CmgE,MAXxC;AAYhB,eAAalb,OAZG;AAahB,gBAAc,OAAOmb,QAAP,KAAoB,WAApB,GAAkCpgE,SAAlC,GAA8CogE,QAb5C;AAchB,YAAUj1D,IAdM;AAehB,iBAAek1D,SAfC;AAgBhB,0BAAwB/7B,kBAhBR;AAiBhB,iBAAeg8B,SAjBC;AAkBhB,0BAAwBl8B,kBAlBR;AAmBhB,aAAW5+B,KAnBK;AAoBhB,YAAU+6D,IApBM;AAoBA;AAChB,iBAAeC,SArBC;AAsBhB,oBAAkB,OAAOC,YAAP,KAAwB,WAAxB,GAAsCzgE,SAAtC,GAAkDygE,YAtBpD;AAuBhB,oBAAkB,OAAOC,YAAP,KAAwB,WAAxB,GAAsC1gE,SAAtC,GAAkD0gE,YAvBpD;AAwBhB,4BAA0B,OAAOC,oBAAP,KAAgC,WAAhC,GAA8C3gE,SAA9C,GAA0D2gE,oBAxBpE;AAyBhB,gBAAc1B,SAzBE;AA0BhB,yBAAuBY,SA1BP;AA2BhB,iBAAe,OAAOe,SAAP,KAAqB,WAArB,GAAmC5gE,SAAnC,GAA+C4gE,SA3B9C;AA4BhB,kBAAgB,OAAOC,UAAP,KAAsB,WAAtB,GAAoC7gE,SAApC,GAAgD6gE,UA5BhD;AA6BhB,kBAAgB,OAAOC,UAAP,KAAsB,WAAtB,GAAoC9gE,SAApC,GAAgD8gE,UA7BhD;AA8BhB,gBAAcC,QA9BE;AA+BhB,aAAWtyD,KA/BK;AAgChB,yBAAuB0tD,UAAU,GAAGwD,QAAQ,CAACA,QAAQ,CAAC,GAAGj7D,MAAM,CAACvC,QAAV,GAAD,CAAT,CAAX,GAA+CnC,SAhChE;AAiChB,YAAU,OAAO4O,IAAP,KAAgB,QAAhB,GAA2BA,IAA3B,GAAkC5O,SAjC5B;AAkChB,WAAS,OAAO6U,GAAP,KAAe,WAAf,GAA6B7U,SAA7B,GAAyC6U,GAlClC;AAmChB,4BAA0B,OAAOA,GAAP,KAAe,WAAf,IAA8B,CAACsnD,UAA/B,GAA4Cn8D,SAA5C,GAAwD2/D,QAAQ,CAAC,IAAI9qD,GAAJ,GAAUnQ,MAAM,CAACvC,QAAjB,GAAD,CAnC1E;AAoChB,YAAUsN,IApCM;AAqChB,cAAYlL,MArCI;AAsChB,cAAYX,MAtCI;AAuChB,kBAAgBgd,UAvCA;AAwChB,gBAAcQ,QAxCE;AAyChB,eAAa,OAAOqG,OAAP,KAAmB,WAAnB,GAAiCznB,SAAjC,GAA6CynB,OAzC1C;AA0ChB,aAAW,OAAOu5C,KAAP,KAAiB,WAAjB,GAA+BhhE,SAA/B,GAA2CghE,KA1CtC;AA2ChB,kBAAgB7lB,UA3CA;AA4ChB,sBAAoB8lB,cA5CJ;AA6ChB,eAAa,OAAOC,OAAP,KAAmB,WAAnB,GAAiClhE,SAAjC,GAA6CkhE,OA7C1C;AA8ChB,cAAYxgD,MA9CI;AA+ChB,WAAS,OAAOrF,GAAP,KAAe,WAAf,GAA6Brb,SAA7B,GAAyCqb,GA/ClC;AAgDhB,4BAA0B,OAAOA,GAAP,KAAe,WAAf,IAA8B,CAAC8gD,UAA/B,GAA4Cn8D,SAA5C,GAAwD2/D,QAAQ,CAAC,IAAItkD,GAAJ,GAAU3W,MAAM,CAACvC,QAAjB,GAAD,CAhD1E;AAiDhB,yBAAuB,OAAOg/D,iBAAP,KAA6B,WAA7B,GAA2CnhE,SAA3C,GAAuDmhE,iBAjD9D;AAkDhB,cAAY38B,MAlDI;AAmDhB,+BAA6B23B,UAAU,GAAGwD,QAAQ,CAAC,GAAGj7D,MAAM,CAACvC,QAAV,GAAD,CAAX,GAAqCnC,SAnD5D;AAoDhB,cAAYm8D,UAAU,GAAGz3D,MAAH,GAAY1E,SApDlB;AAqDhB,mBAAiB++D,YArDD;AAsDhB,sBAAoBQ,cAtDJ;AAuDhB,kBAAgBO,UAvDA;AAwDhB,iBAAeZ,UAxDC;AAyDhB,kBAAgB,OAAO/7C,UAAP,KAAsB,WAAtB,GAAoCnjB,SAApC,GAAgDmjB,UAzDhD;AA0DhB,yBAAuB,OAAOi+C,iBAAP,KAA6B,WAA7B,GAA2CphE,SAA3C,GAAuDohE,iBA1D9D;AA2DhB,mBAAiB,OAAOC,WAAP,KAAuB,WAAvB,GAAqCrhE,SAArC,GAAiDqhE,WA3DlD;AA4DhB,mBAAiB,OAAOjtC,WAAP,KAAuB,WAAvB,GAAqCp0B,SAArC,GAAiDo0B,WA5DlD;AA6DhB,gBAAcktC,QA7DE;AA8DhB,eAAa,OAAOxoD,OAAP,KAAmB,WAAnB,GAAiC9Y,SAAjC,GAA6C8Y,OA9D1C;AA+DhB,eAAa,OAAOyoD,OAAP,KAAmB,WAAnB,GAAiCvhE,SAAjC,GAA6CuhE,OA/D1C;AAgEhB,eAAa,OAAOC,OAAP,KAAmB,WAAnB,GAAiCxhE,SAAjC,GAA6CwhE;AAhE1C,CAAjB;;AAmEA,IAAIC,MAAM,GAAG,SAASA,MAAT,CAAgBz3D,IAAhB,EAAsB;AAClC,MAAIzJ,KAAJ;;AACA,MAAIyJ,IAAI,KAAK,iBAAb,EAAgC;AAC/BzJ,SAAK,GAAG4+D,qBAAqB,CAAC,sBAAD,CAA7B;AACA,GAFD,MAEO,IAAIn1D,IAAI,KAAK,qBAAb,EAAoC;AAC1CzJ,SAAK,GAAG4+D,qBAAqB,CAAC,iBAAD,CAA7B;AACA,GAFM,MAEA,IAAIn1D,IAAI,KAAK,0BAAb,EAAyC;AAC/CzJ,SAAK,GAAG4+D,qBAAqB,CAAC,uBAAD,CAA7B;AACA,GAFM,MAEA,IAAIn1D,IAAI,KAAK,kBAAb,EAAiC;AACvC,QAAIR,EAAE,GAAGi4D,MAAM,CAAC,0BAAD,CAAf;;AACA,QAAIj4D,EAAJ,EAAQ;AACPjJ,WAAK,GAAGiJ,EAAE,CAACwT,SAAX;AACA;AACD,GALM,MAKA,IAAIhT,IAAI,KAAK,0BAAb,EAAyC;AAC/C,QAAI0T,GAAG,GAAG+jD,MAAM,CAAC,kBAAD,CAAhB;;AACA,QAAI/jD,GAAJ,EAAS;AACRnd,WAAK,GAAGo/D,QAAQ,CAACjiD,GAAG,CAACV,SAAL,CAAhB;AACA;AACD;;AAED+iD,YAAU,CAAC/1D,IAAD,CAAV,GAAmBzJ,KAAnB;AAEA,SAAOA,KAAP;AACA,CAvBD;;AAyBA,IAAImhE,cAAc,GAAG;AACpB,4BAA0B,CAAC,aAAD,EAAgB,WAAhB,CADN;AAEpB,sBAAoB,CAAC,OAAD,EAAU,WAAV,CAFA;AAGpB,0BAAwB,CAAC,OAAD,EAAU,WAAV,EAAuB,SAAvB,CAHJ;AAIpB,0BAAwB,CAAC,OAAD,EAAU,WAAV,EAAuB,SAAvB,CAJJ;AAKpB,uBAAqB,CAAC,OAAD,EAAU,WAAV,EAAuB,MAAvB,CALD;AAMpB,yBAAuB,CAAC,OAAD,EAAU,WAAV,EAAuB,QAAvB,CANH;AAOpB,8BAA4B,CAAC,eAAD,EAAkB,WAAlB,CAPR;AAQpB,sBAAoB,CAAC,wBAAD,EAA2B,WAA3B,CARA;AASpB,+BAA6B,CAAC,wBAAD,EAA2B,WAA3B,EAAwC,WAAxC,CATT;AAUpB,wBAAsB,CAAC,SAAD,EAAY,WAAZ,CAVF;AAWpB,yBAAuB,CAAC,UAAD,EAAa,WAAb,CAXH;AAYpB,qBAAmB,CAAC,MAAD,EAAS,WAAT,CAZC;AAapB,sBAAoB,CAAC,OAAD,EAAU,WAAV,CAbA;AAcpB,0BAAwB,CAAC,WAAD,EAAc,WAAd,CAdJ;AAepB,6BAA2B,CAAC,cAAD,EAAiB,WAAjB,CAfP;AAgBpB,6BAA2B,CAAC,cAAD,EAAiB,WAAjB,CAhBP;AAiBpB,yBAAuB,CAAC,UAAD,EAAa,WAAb,CAjBH;AAkBpB,iBAAe,CAAC,mBAAD,EAAsB,WAAtB,CAlBK;AAmBpB,0BAAwB,CAAC,mBAAD,EAAsB,WAAtB,EAAmC,WAAnC,CAnBJ;AAoBpB,0BAAwB,CAAC,WAAD,EAAc,WAAd,CApBJ;AAqBpB,2BAAyB,CAAC,YAAD,EAAe,WAAf,CArBL;AAsBpB,2BAAyB,CAAC,YAAD,EAAe,WAAf,CAtBL;AAuBpB,iBAAe,CAAC,MAAD,EAAS,OAAT,CAvBK;AAwBpB,qBAAmB,CAAC,MAAD,EAAS,WAAT,CAxBC;AAyBpB,oBAAkB,CAAC,KAAD,EAAQ,WAAR,CAzBE;AA0BpB,uBAAqB,CAAC,QAAD,EAAW,WAAX,CA1BD;AA2BpB,uBAAqB,CAAC,QAAD,EAAW,WAAX,CA3BD;AA4BpB,yBAAuB,CAAC,QAAD,EAAW,WAAX,EAAwB,UAAxB,CA5BH;AA6BpB,wBAAsB,CAAC,QAAD,EAAW,WAAX,EAAwB,SAAxB,CA7BF;AA8BpB,wBAAsB,CAAC,SAAD,EAAY,WAAZ,CA9BF;AA+BpB,yBAAuB,CAAC,SAAD,EAAY,WAAZ,EAAyB,MAAzB,CA/BH;AAgCpB,mBAAiB,CAAC,SAAD,EAAY,KAAZ,CAhCG;AAiCpB,sBAAoB,CAAC,SAAD,EAAY,QAAZ,CAjCA;AAkCpB,uBAAqB,CAAC,SAAD,EAAY,SAAZ,CAlCD;AAmCpB,2BAAyB,CAAC,YAAD,EAAe,WAAf,CAnCL;AAoCpB,+BAA6B,CAAC,gBAAD,EAAmB,WAAnB,CApCT;AAqCpB,uBAAqB,CAAC,QAAD,EAAW,WAAX,CArCD;AAsCpB,oBAAkB,CAAC,KAAD,EAAQ,WAAR,CAtCE;AAuCpB,kCAAgC,CAAC,mBAAD,EAAsB,WAAtB,CAvCZ;AAwCpB,uBAAqB,CAAC,QAAD,EAAW,WAAX,CAxCD;AAyCpB,uBAAqB,CAAC,QAAD,EAAW,WAAX,CAzCD;AA0CpB,4BAA0B,CAAC,aAAD,EAAgB,WAAhB,CA1CN;AA2CpB,2BAAyB,CAAC,YAAD,EAAe,WAAf,CA3CL;AA4CpB,0BAAwB,CAAC,WAAD,EAAc,WAAd,CA5CJ;AA6CpB,2BAAyB,CAAC,YAAD,EAAe,WAAf,CA7CL;AA8CpB,kCAAgC,CAAC,mBAAD,EAAsB,WAAtB,CA9CZ;AA+CpB,4BAA0B,CAAC,aAAD,EAAgB,WAAhB,CA/CN;AAgDpB,4BAA0B,CAAC,aAAD,EAAgB,WAAhB,CAhDN;AAiDpB,yBAAuB,CAAC,UAAD,EAAa,WAAb,CAjDH;AAkDpB,wBAAsB,CAAC,SAAD,EAAY,WAAZ,CAlDF;AAmDpB,wBAAsB,CAAC,SAAD,EAAY,WAAZ;AAnDF,CAArB;;AAsDA,IAAIz+B,IAAI,GAAG7gB,mBAAO,CAAC,4DAAD,CAAlB;;AACA,IAAIg8C,MAAM,GAAGh8C,mBAAO,CAAC,4CAAD,CAApB;;AACA,IAAIu/C,OAAO,GAAG1+B,IAAI,CAACplB,IAAL,CAAU+gD,QAAQ,CAAC/gD,IAAnB,EAAyB/Y,KAAK,CAACkY,SAAN,CAAgBghB,MAAzC,CAAd;AACA,IAAI4jC,YAAY,GAAG3+B,IAAI,CAACplB,IAAL,CAAU+gD,QAAQ,CAAC/6B,KAAnB,EAA0B/+B,KAAK,CAACkY,SAAN,CAAgB7T,MAA1C,CAAnB;AACA,IAAI04D,QAAQ,GAAG5+B,IAAI,CAACplB,IAAL,CAAU+gD,QAAQ,CAAC/gD,IAAnB,EAAyB2mB,MAAM,CAACxnB,SAAP,CAAiBsD,OAA1C,CAAf;AACA,IAAIwhD,SAAS,GAAG7+B,IAAI,CAACplB,IAAL,CAAU+gD,QAAQ,CAAC/gD,IAAnB,EAAyB2mB,MAAM,CAACxnB,SAAP,CAAiBhU,KAA1C,CAAhB;AAEA;;AACA,IAAIqoC,UAAU,GAAG,oGAAjB;AACA,IAAID,YAAY,GAAG,UAAnB;AAA+B;;AAC/B,IAAIO,YAAY,GAAG,SAASA,YAAT,CAAsBxB,MAAtB,EAA8B;AAChD,MAAIr4B,KAAK,GAAGgqD,SAAS,CAAC3xB,MAAD,EAAS,CAAT,EAAY,CAAZ,CAArB;AACA,MAAIl9B,IAAI,GAAG6uD,SAAS,CAAC3xB,MAAD,EAAS,CAAC,CAAV,CAApB;;AACA,MAAIr4B,KAAK,KAAK,GAAV,IAAiB7E,IAAI,KAAK,GAA9B,EAAmC;AAClC,UAAM,IAAI8rD,YAAJ,CAAiB,gDAAjB,CAAN;AACA,GAFD,MAEO,IAAI9rD,IAAI,KAAK,GAAT,IAAgB6E,KAAK,KAAK,GAA9B,EAAmC;AACzC,UAAM,IAAIinD,YAAJ,CAAiB,gDAAjB,CAAN;AACA;;AACD,MAAIhqD,MAAM,GAAG,EAAb;AACA8sD,UAAQ,CAAC1xB,MAAD,EAASkB,UAAT,EAAqB,UAAUlxB,KAAV,EAAiBlB,MAAjB,EAAyB+oB,KAAzB,EAAgC6J,SAAhC,EAA2C;AACvE98B,UAAM,CAACA,MAAM,CAAC/N,MAAR,CAAN,GAAwBghC,KAAK,GAAG65B,QAAQ,CAAChwB,SAAD,EAAYT,YAAZ,EAA0B,IAA1B,CAAX,GAA6CnyB,MAAM,IAAIkB,KAApF;AACA,GAFO,CAAR;AAGA,SAAOpL,MAAP;AACA,CAbD;AAcA;;;AAEA,IAAIgtD,gBAAgB,GAAG,SAASA,gBAAT,CAA0B/3D,IAA1B,EAAgC+4B,YAAhC,EAA8C;AACpE,MAAIi/B,aAAa,GAAGh4D,IAApB;AACA,MAAIi4D,KAAJ;;AACA,MAAI7D,MAAM,CAACsD,cAAD,EAAiBM,aAAjB,CAAV,EAA2C;AAC1CC,SAAK,GAAGP,cAAc,CAACM,aAAD,CAAtB;AACAA,iBAAa,GAAG,MAAMC,KAAK,CAAC,CAAD,CAAX,GAAiB,GAAjC;AACA;;AAED,MAAI7D,MAAM,CAAC2B,UAAD,EAAaiC,aAAb,CAAV,EAAuC;AACtC,QAAIzhE,KAAK,GAAGw/D,UAAU,CAACiC,aAAD,CAAtB;;AACA,QAAIzhE,KAAK,KAAKs/D,SAAd,EAAyB;AACxBt/D,WAAK,GAAGkhE,MAAM,CAACO,aAAD,CAAd;AACA;;AACD,QAAI,OAAOzhE,KAAP,KAAiB,WAAjB,IAAgC,CAACwiC,YAArC,EAAmD;AAClD,YAAM,IAAIm8B,UAAJ,CAAe,eAAel1D,IAAf,GAAsB,sDAArC,CAAN;AACA;;AAED,WAAO;AACNi4D,WAAK,EAAEA,KADD;AAENj4D,UAAI,EAAEg4D,aAFA;AAGNzhE,WAAK,EAAEA;AAHD,KAAP;AAKA;;AAED,QAAM,IAAIw+D,YAAJ,CAAiB,eAAe/0D,IAAf,GAAsB,kBAAvC,CAAN;AACA,CAzBD;;AA2BAgY,MAAM,CAACC,OAAP,GAAiB,SAAS0gB,YAAT,CAAsB34B,IAAtB,EAA4B+4B,YAA5B,EAA0C;AAC1D,MAAI,OAAO/4B,IAAP,KAAgB,QAAhB,IAA4BA,IAAI,CAAChD,MAAL,KAAgB,CAAhD,EAAmD;AAClD,UAAM,IAAIk4D,UAAJ,CAAe,2CAAf,CAAN;AACA;;AACD,MAAIhvD,SAAS,CAAClJ,MAAV,GAAmB,CAAnB,IAAwB,OAAO+7B,YAAP,KAAwB,SAApD,EAA+D;AAC9D,UAAM,IAAIm8B,UAAJ,CAAe,2CAAf,CAAN;AACA;;AAED,MAAI9rC,KAAK,GAAGue,YAAY,CAAC3nC,IAAD,CAAxB;AACA,MAAIk4D,iBAAiB,GAAG9uC,KAAK,CAACpsB,MAAN,GAAe,CAAf,GAAmBosB,KAAK,CAAC,CAAD,CAAxB,GAA8B,EAAtD;AAEA,MAAI4P,SAAS,GAAG++B,gBAAgB,CAAC,MAAMG,iBAAN,GAA0B,GAA3B,EAAgCn/B,YAAhC,CAAhC;AACA,MAAIo/B,iBAAiB,GAAGn/B,SAAS,CAACh5B,IAAlC;AACA,MAAIzJ,KAAK,GAAGyiC,SAAS,CAACziC,KAAtB;AACA,MAAI6hE,kBAAkB,GAAG,KAAzB;AAEA,MAAIH,KAAK,GAAGj/B,SAAS,CAACi/B,KAAtB;;AACA,MAAIA,KAAJ,EAAW;AACVC,qBAAiB,GAAGD,KAAK,CAAC,CAAD,CAAzB;AACAL,gBAAY,CAACxuC,KAAD,EAAQuuC,OAAO,CAAC,CAAC,CAAD,EAAI,CAAJ,CAAD,EAASM,KAAT,CAAf,CAAZ;AACA;;AAED,OAAK,IAAIpiD,CAAC,GAAG,CAAR,EAAWwiD,KAAK,GAAG,IAAxB,EAA8BxiD,CAAC,GAAGuT,KAAK,CAACpsB,MAAxC,EAAgD6Y,CAAC,IAAI,CAArD,EAAwD;AACvD,QAAI4T,IAAI,GAAGL,KAAK,CAACvT,CAAD,CAAhB;AACA,QAAI/H,KAAK,GAAGgqD,SAAS,CAACruC,IAAD,EAAO,CAAP,EAAU,CAAV,CAArB;AACA,QAAIxgB,IAAI,GAAG6uD,SAAS,CAACruC,IAAD,EAAO,CAAC,CAAR,CAApB;;AACA,QACC,CACE3b,KAAK,KAAK,GAAV,IAAiBA,KAAK,KAAK,GAA3B,IAAkCA,KAAK,KAAK,GAA7C,IACI7E,IAAI,KAAK,GAAT,IAAgBA,IAAI,KAAK,GAAzB,IAAgCA,IAAI,KAAK,GAF9C,KAIG6E,KAAK,KAAK7E,IALd,EAME;AACD,YAAM,IAAI8rD,YAAJ,CAAiB,sDAAjB,CAAN;AACA;;AACD,QAAItrC,IAAI,KAAK,aAAT,IAA0B,CAAC4uC,KAA/B,EAAsC;AACrCD,wBAAkB,GAAG,IAArB;AACA;;AAEDF,qBAAiB,IAAI,MAAMzuC,IAA3B;AACA0uC,qBAAiB,GAAG,MAAMD,iBAAN,GAA0B,GAA9C;;AAEA,QAAI9D,MAAM,CAAC2B,UAAD,EAAaoC,iBAAb,CAAV,EAA2C;AAC1C5hE,WAAK,GAAGw/D,UAAU,CAACoC,iBAAD,CAAlB;AACA,KAFD,MAEO,IAAI5hE,KAAK,IAAI,IAAb,EAAmB;AACzB,UAAI,EAAEkzB,IAAI,IAAIlzB,KAAV,CAAJ,EAAsB;AACrB,YAAI,CAACwiC,YAAL,EAAmB;AAClB,gBAAM,IAAIm8B,UAAJ,CAAe,wBAAwBl1D,IAAxB,GAA+B,6CAA9C,CAAN;AACA;;AACD,eAAO,KAAKhK,SAAZ;AACA;;AACD,UAAIqjC,KAAK,IAAKxjB,CAAC,GAAG,CAAL,IAAWuT,KAAK,CAACpsB,MAA9B,EAAsC;AACrC,YAAI08B,IAAI,GAAGL,KAAK,CAAC9iC,KAAD,EAAQkzB,IAAR,CAAhB;AACA4uC,aAAK,GAAG,CAAC,CAAC3+B,IAAV,CAFqC,CAIrC;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,YAAI2+B,KAAK,IAAI,SAAS3+B,IAAlB,IAA0B,EAAE,mBAAmBA,IAAI,CAACzgC,GAA1B,CAA9B,EAA8D;AAC7D1C,eAAK,GAAGmjC,IAAI,CAACzgC,GAAb;AACA,SAFD,MAEO;AACN1C,eAAK,GAAGA,KAAK,CAACkzB,IAAD,CAAb;AACA;AACD,OAhBD,MAgBO;AACN4uC,aAAK,GAAGjE,MAAM,CAAC79D,KAAD,EAAQkzB,IAAR,CAAd;AACAlzB,aAAK,GAAGA,KAAK,CAACkzB,IAAD,CAAb;AACA;;AAED,UAAI4uC,KAAK,IAAI,CAACD,kBAAd,EAAkC;AACjCrC,kBAAU,CAACoC,iBAAD,CAAV,GAAgC5hE,KAAhC;AACA;AACD;AACD;;AACD,SAAOA,KAAP;AACA,CA9ED,C;;;;;;;;;;;AC3PA,IAAI+hE,OAAO,GAACA,OAAO,IAAE,EAArB;AAAwBA,OAAO,CAACC,KAAR,GAAc,EAAd;;AAAiBD,OAAO,CAACE,YAAR,GAAqB,UAASp7D,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACluB,GAAC,YAAYo9B,MAAb,KAAsBp9B,CAAC,GAACo9B,MAAM,CAACp9B,CAAD,CAA9B;;AAAmC,OAAI,IAAI8vC,CAAC,GAAC9vC,CAAC,CAACJ,MAAR,EAAesjB,CAAC,GAAC,CAArB,EAAuBA,CAAC,GAAC4sB,CAAzB,EAA2B5sB,CAAC,EAA5B,EAA+B;AAAC,QAAIujB,CAAC,GAACzmC,CAAC,CAACkjB,CAAD,CAAP;AAAW,QAAGjjB,CAAC,CAACwW,IAAF,CAAOyX,CAAP,EAASuY,CAAT,EAAWvjB,CAAX,EAAaljB,CAAb,CAAH,EAAmB,OAAM;AAACyY,OAAC,EAACyK,CAAH;AAAKqgB,OAAC,EAACkD;AAAP,KAAN;AAAgB;;AAAA,SAAM;AAAChuB,KAAC,EAAC,CAAC,CAAJ;AAAM8qB,KAAC,EAAC,KAAK;AAAb,GAAN;AAAsB,CAA5K;;AAA6K23B,OAAO,CAACG,UAAR,GAAmB,CAAC,CAApB;AAAsBH,OAAO,CAACI,oBAAR,GAA6B,CAAC,CAA9B;AAAgCJ,OAAO,CAACK,oBAAR,GAA6B,CAAC,CAA9B;AAAgCL,OAAO,CAACM,sBAAR,GAA+B,CAAC,CAAhC;AAC5SN,OAAO,CAAChG,cAAR,GAAuBgG,OAAO,CAACG,UAAR,IAAoB,cAAY,OAAO7+D,MAAM,CAACg5D,gBAA9C,GAA+Dh5D,MAAM,CAAC04D,cAAtE,GAAqF,UAASl1D,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACluB,GAAC,IAAEtC,KAAK,CAACkY,SAAT,IAAoB5V,CAAC,IAAExD,MAAM,CAACoZ,SAA9B,KAA0C5V,CAAC,CAACC,CAAD,CAAD,GAAKiuB,CAAC,CAAC/0B,KAAjD;AAAwD,CAApL;;AAAqL+hE,OAAO,CAACO,SAAR,GAAkB,UAASz7D,CAAT,EAAW;AAAC,SAAM,eAAa,OAAO07D,MAApB,IAA4BA,MAAM,KAAG17D,CAArC,GAAuCA,CAAvC,GAAyC,eAAa,OAAOo7B,MAApB,IAA4B,QAAMA,MAAlC,GAAyCA,MAAzC,GAAgDp7B,CAA/F;AAAiG,CAA/H;;AAAgIk7D,OAAO,CAAC9/B,MAAR,GAAe8/B,OAAO,CAACO,SAAR,CAAkB,IAAlB,CAAf;;AACrTP,OAAO,CAACS,QAAR,GAAiB,UAAS37D,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,MAAG7vC,CAAH,EAAK;AAACiuB,KAAC,GAACgtC,OAAO,CAAC9/B,MAAV;AAAiBp7B,KAAC,GAACA,CAAC,CAACia,KAAF,CAAQ,GAAR,CAAF;;AAAe,SAAI61B,CAAC,GAAC,CAAN,EAAQA,CAAC,GAAC9vC,CAAC,CAACJ,MAAF,GAAS,CAAnB,EAAqBkwC,CAAC,EAAtB,EAAyB;AAAC,UAAI5sB,CAAC,GAACljB,CAAC,CAAC8vC,CAAD,CAAP;AAAW5sB,OAAC,IAAIgL,CAAL,KAASA,CAAC,CAAChL,CAAD,CAAD,GAAK,EAAd;AAAkBgL,OAAC,GAACA,CAAC,CAAChL,CAAD,CAAH;AAAO;;AAAAljB,KAAC,GAACA,CAAC,CAACA,CAAC,CAACJ,MAAF,GAAS,CAAV,CAAH;AAAgBkwC,KAAC,GAAC5hB,CAAC,CAACluB,CAAD,CAAH;AAAOC,KAAC,GAACA,CAAC,CAAC6vC,CAAD,CAAH;AAAO7vC,KAAC,IAAE6vC,CAAH,IAAM,QAAM7vC,CAAZ,IAAei7D,OAAO,CAAChG,cAAR,CAAuBhnC,CAAvB,EAAyBluB,CAAzB,EAA2B;AAACu8B,kBAAY,EAAC,CAAC,CAAf;AAAiBg5B,cAAQ,EAAC,CAAC,CAA3B;AAA6Bp8D,WAAK,EAAC8G;AAAnC,KAA3B,CAAf;AAAiF;AAAC,CAAvP;;AAAwPi7D,OAAO,CAACS,QAAR,CAAiB,2BAAjB,EAA6C,UAAS37D,CAAT,EAAW;AAAC,SAAOA,CAAC,GAACA,CAAD,GAAG,UAASA,CAAT,EAAWkuB,CAAX,EAAa;AAAC,WAAOgtC,OAAO,CAACE,YAAR,CAAqB,IAArB,EAA0Bp7D,CAA1B,EAA4BkuB,CAA5B,EAA+BzV,CAAtC;AAAwC,GAAjE;AAAkE,CAA3H,EAA4H,KAA5H,EAAkI,KAAlI;;AACxPyiD,OAAO,CAACU,eAAR,GAAwB,UAAS57D,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAG,QAAMluB,CAAT,EAAW,MAAM,IAAI+I,SAAJ,CAAc,2CAAyCmlB,CAAzC,GAA2C,gCAAzD,CAAN;AAAiG,MAAGjuB,CAAC,YAAYqZ,MAAhB,EAAuB,MAAM,IAAIvQ,SAAJ,CAAc,wCAAsCmlB,CAAtC,GAAwC,mCAAtD,CAAN;AAAiG,SAAOluB,CAAC,GAAC,EAAT;AAAY,CAAxR;;AACAk7D,OAAO,CAACS,QAAR,CAAiB,2BAAjB,EAA6C,UAAS37D,CAAT,EAAW;AAAC,SAAOA,CAAC,GAACA,CAAD,GAAG,UAASA,CAAT,EAAWkuB,CAAX,EAAa;AAAC,QAAIjuB,CAAC,GAACi7D,OAAO,CAACU,eAAR,CAAwB,IAAxB,EAA6B57D,CAA7B,EAA+B,UAA/B,CAAN;AAAiDA,KAAC,IAAE,EAAH;AAAM,SAAK,CAAL,KAASkuB,CAAT,KAAaA,CAAC,GAACjuB,CAAC,CAACL,MAAjB;AAAyBsuB,KAAC,GAAC7lB,IAAI,CAACge,GAAL,CAAS,CAAT,EAAWhe,IAAI,CAACe,GAAL,CAAS8kB,CAAC,GAAC,CAAX,EAAajuB,CAAC,CAACL,MAAf,CAAX,CAAF;;AAAqC,SAAI,IAAIsjB,CAAC,GAACljB,CAAC,CAACJ,MAAZ,EAAmB,IAAEsjB,CAAF,IAAK,IAAEgL,CAA1B,GAA6B,IAAGjuB,CAAC,CAAC,EAAEiuB,CAAH,CAAD,IAAQluB,CAAC,CAAC,EAAEkjB,CAAH,CAAZ,EAAkB,OAAM,CAAC,CAAP;;AAAS,WAAO,KAAGA,CAAV;AAAY,GAAlN;AAAmN,CAA5Q,EAA6Q,KAA7Q,EAAmR,KAAnR;AAA0Rg4C,OAAO,CAACS,QAAR,CAAiB,sBAAjB,EAAwC,UAAS37D,CAAT,EAAW;AAAC,SAAOA,CAAC,GAACA,CAAD,GAAG,UAASA,CAAT,EAAWkuB,CAAX,EAAa;AAAC,WAAOgtC,OAAO,CAACE,YAAR,CAAqB,IAArB,EAA0Bp7D,CAA1B,EAA4BkuB,CAA5B,EAA+BqV,CAAtC;AAAwC,GAAjE;AAAkE,CAAtH,EAAuH,KAAvH,EAA6H,KAA7H;AAC1R23B,OAAO,CAACS,QAAR,CAAiB,6BAAjB,EAA+C,UAAS37D,CAAT,EAAW;AAAC,SAAOA,CAAC,GAACA,CAAD,GAAG,UAASA,CAAT,EAAWkuB,CAAX,EAAa;AAAC,QAAIjuB,CAAC,GAACi7D,OAAO,CAACU,eAAR,CAAwB,IAAxB,EAA6B57D,CAA7B,EAA+B,YAA/B,CAAN;AAAmDA,KAAC,IAAE,EAAH;AAAM,QAAIkjB,CAAC,GAACjjB,CAAC,CAACL,MAAR;AAAA,QAAe6mC,CAAC,GAACzmC,CAAC,CAACJ,MAAnB;AAA0BsuB,KAAC,GAAC7lB,IAAI,CAACge,GAAL,CAAS,CAAT,EAAWhe,IAAI,CAACe,GAAL,CAAS8kB,CAAC,GAAC,CAAX,EAAajuB,CAAC,CAACL,MAAf,CAAX,CAAF;;AAAqC,SAAI,IAAIs7B,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACuL,CAAF,IAAKvY,CAAC,GAAChL,CAAnB,GAAsB,IAAGjjB,CAAC,CAACiuB,CAAC,EAAF,CAAD,IAAQluB,CAAC,CAACk7B,CAAC,EAAF,CAAZ,EAAkB,OAAM,CAAC,CAAP;;AAAS,WAAOA,CAAC,IAAEuL,CAAV;AAAY,GAA9M;AAA+M,CAA1Q,EAA2Q,KAA3Q,EAAiR,KAAjR;AACAy0B,OAAO,CAACS,QAAR,CAAiB,yBAAjB,EAA2C,UAAS37D,CAAT,EAAW;AAAC,SAAOA,CAAC,GAACA,CAAD,GAAG,UAASA,CAAT,EAAW;AAAC,QAAIC,CAAC,GAACi7D,OAAO,CAACU,eAAR,CAAwB,IAAxB,EAA6B,IAA7B,EAAkC,QAAlC,CAAN;AAAkD,QAAG,IAAE57D,CAAF,IAAK,aAAWA,CAAnB,EAAqB,MAAM,IAAI+zC,UAAJ,CAAe,qBAAf,CAAN;AAA4C/zC,KAAC,IAAE,CAAH;;AAAK,SAAI,IAAI8vC,CAAC,GAAC,EAAV,EAAa9vC,CAAb,GAAgB,IAAGA,CAAC,GAAC,CAAF,KAAM8vC,CAAC,IAAE7vC,CAAT,GAAYD,CAAC,MAAI,CAApB,EAAsBC,CAAC,IAAEA,CAAH;;AAAK,WAAO6vC,CAAP;AAAS,GAAnM;AAAoM,CAA3P,EAA4P,KAA5P,EAAkQ,KAAlQ;AAAyQ,IAAI+rB,QAAQ,GAAC,CAAC,CAAd;AAAA,IAAgBC,IAAI,GAACA,IAAI,IAAE,EAA3B;AAA8BA,IAAI,CAAC1gC,MAAL,GAAY,QAAM7b,IAAlB;;AAAuBu8C,IAAI,CAACC,KAAL,GAAW,UAAS/7D,CAAT,EAAW;AAAC,SAAO,KAAK,CAAL,KAASA,CAAhB;AAAkB,CAAzC;;AAA0C87D,IAAI,CAAC9jD,QAAL,GAAc,UAAShY,CAAT,EAAW;AAAC,SAAM,YAAU,OAAOA,CAAvB;AAAyB,CAAnD;;AAAoD87D,IAAI,CAACE,SAAL,GAAe,UAASh8D,CAAT,EAAW;AAAC,SAAM,aAAW,OAAOA,CAAxB;AAA0B,CAArD;;AAC5Z87D,IAAI,CAACG,QAAL,GAAc,UAASj8D,CAAT,EAAW;AAAC,SAAM,YAAU,OAAOA,CAAvB;AAAyB,CAAnD;;AAAoD87D,IAAI,CAACI,WAAL,GAAiB,UAASl8D,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACluB,GAAC,GAACA,CAAC,CAACia,KAAF,CAAQ,GAAR,CAAF;AAAeiU,GAAC,GAACA,CAAC,IAAE4tC,IAAI,CAAC1gC,MAAV;AAAiBp7B,GAAC,CAAC,CAAD,CAAD,IAAOkuB,CAAP,IAAU,eAAa,OAAOA,CAAC,CAACiuC,UAAhC,IAA4CjuC,CAAC,CAACiuC,UAAF,CAAa,SAAOn8D,CAAC,CAAC,CAAD,CAArB,CAA5C;;AAAsE,OAAI,IAAI8vC,CAAR,EAAU9vC,CAAC,CAACJ,MAAF,KAAWkwC,CAAC,GAAC9vC,CAAC,CAACM,KAAF,EAAb,CAAV,GAAmC,CAACN,CAAC,CAACJ,MAAH,IAAWk8D,IAAI,CAACC,KAAL,CAAW97D,CAAX,CAAX,GAAyBiuB,CAAC,CAAC4hB,CAAD,CAAD,GAAK7vC,CAA9B,GAAgCiuB,CAAC,GAACA,CAAC,CAAC4hB,CAAD,CAAD,IAAM5hB,CAAC,CAAC4hB,CAAD,CAAD,KAAOtzC,MAAM,CAACoZ,SAAP,CAAiBk6B,CAAjB,CAAb,GAAiC5hB,CAAC,CAAC4hB,CAAD,CAAlC,GAAsC5hB,CAAC,CAAC4hB,CAAD,CAAD,GAAK,EAA7E;AAAgF,CAA1P;;AACpDgsB,IAAI,CAACM,MAAL,GAAY,UAASp8D,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,CAAC47D,QAAJ,EAAa;AAAC,QAAI3tC,CAAC,GAAC4tC,IAAI,CAAC1gC,MAAL,CAAYihC,0BAAlB;AAAA,QAA6CvsB,CAAC,GAACgsB,IAAI,CAAC1gC,MAAL,CAAYkhC,eAA3D;AAA2EpuC,KAAC,IAAE,KAAK,CAAL,KAASA,CAAC,CAACquC,QAAd,IAAwB//D,MAAM,CAACoZ,SAAP,CAAiB0C,cAAjB,CAAgC7B,IAAhC,CAAqCyX,CAArC,EAAuCluB,CAAvC,CAAxB,GAAkEC,CAAC,GAACiuB,CAAC,CAACluB,CAAD,CAArE,GAAyE8vC,CAAC,IAAE,KAAK,CAAL,KAASA,CAAC,CAACysB,QAAd,IAAwB//D,MAAM,CAACoZ,SAAP,CAAiB0C,cAAjB,CAAgC7B,IAAhC,CAAqCq5B,CAArC,EAAuC9vC,CAAvC,CAAxB,KAAoEC,CAAC,GAAC6vC,CAAC,CAAC9vC,CAAD,CAAvE,CAAzE;AAAqJ;;AAAA,SAAOC,CAAP;AAAS,CAAjR;;AAAkR67D,IAAI,CAACU,eAAL,GAAqB,IAArB;AAA0BV,IAAI,CAACW,KAAL,GAAW,CAAC,CAAZ;AAAcX,IAAI,CAACY,MAAL,GAAY,IAAZ;AAAiBZ,IAAI,CAACa,YAAL,GAAkB,CAAC,CAAnB;AAAqBb,IAAI,CAACc,sBAAL,GAA4B,CAAC,CAA7B;AAA+Bd,IAAI,CAACe,uBAAL,GAA6BhB,QAAQ,IAAE,CAACC,IAAI,CAACW,KAA7C;AAAmDX,IAAI,CAACgB,qCAAL,GAA2C,CAAC,CAA5C;;AAClbhB,IAAI,CAACiB,OAAL,GAAa,UAAS/8D,CAAT,EAAW;AAAC,MAAG87D,IAAI,CAACkB,iBAAL,EAAH,EAA4B,MAAM5+D,KAAK,CAAC,8CAAD,CAAX;AAA4D,MAAG,CAACy9D,QAAD,IAAWC,IAAI,CAACmB,WAAL,CAAiBj9D,CAAjB,CAAd,EAAkC,MAAM5B,KAAK,CAAC,gBAAc4B,CAAd,GAAgB,qBAAjB,CAAX;AAAmD87D,MAAI,CAACoB,mBAAL,CAAyBl9D,CAAzB;AAA4B,CAAlO;;AAAmO87D,IAAI,CAACoB,mBAAL,GAAyB,UAASl9D,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,CAAC47D,QAAJ,EAAa;AAAC,WAAOC,IAAI,CAACqB,mBAAL,CAAyBn9D,CAAzB,CAAP;;AAAmC,SAAI,IAAIkuB,CAAC,GAACluB,CAAV,EAAY,CAACkuB,CAAC,GAACA,CAAC,CAAC4uB,SAAF,CAAY,CAAZ,EAAc5uB,CAAC,CAACkvC,WAAF,CAAc,GAAd,CAAd,CAAH,KAAuC,CAACtB,IAAI,CAACuB,eAAL,CAAqBnvC,CAArB,CAApD,GAA6E4tC,IAAI,CAACqB,mBAAL,CAAyBjvC,CAAzB,IAA4B,CAAC,CAA7B;AAA+B;;AAAA4tC,MAAI,CAACI,WAAL,CAAiBl8D,CAAjB,EAAmBC,CAAnB;AAAsB,CAA1N;;AACnO67D,IAAI,CAACwB,cAAL,GAAoB,UAASt9D,CAAT,EAAW;AAAC,MAAGA,CAAC,IAAEA,CAAC,IAAE87D,IAAI,CAAC1gC,MAAd,EAAqB,OAAO0gC,IAAI,CAACyB,eAAL,CAAqBv9D,CAAC,CAACw9D,QAAvB,CAAP;AAAwC,WAAO1B,IAAI,CAAC2B,SAAZ,KAAwB3B,IAAI,CAAC2B,SAAL,GAAe3B,IAAI,CAACyB,eAAL,CAAqBzB,IAAI,CAAC1gC,MAAL,CAAYoiC,QAAjC,CAAvC;AAAmF,SAAO1B,IAAI,CAAC2B,SAAZ;AAAsB,CAAtM;;AAAuM3B,IAAI,CAAC4B,cAAL,GAAoB,qBAApB;AAA0C5B,IAAI,CAAC2B,SAAL,GAAe,IAAf;;AAAoB3B,IAAI,CAACyB,eAAL,GAAqB,UAASv9D,CAAT,EAAW;AAAC,SAAM,CAACA,CAAC,GAACA,CAAC,CAAC29D,aAAF,IAAiB39D,CAAC,CAAC29D,aAAF,CAAgB,eAAhB,CAApB,MAAwD39D,CAAC,GAACA,CAAC,CAAC49D,KAAF,IAAS59D,CAAC,CAAC69D,YAAF,CAAe,OAAf,CAAnE,KAA6F/B,IAAI,CAAC4B,cAAL,CAAoBt+C,IAApB,CAAyBpf,CAAzB,CAA7F,GAAyHA,CAAzH,GAA2H,EAAjI;AAAoI,CAArK;;AAAsK87D,IAAI,CAACgC,gBAAL,GAAsB,6BAAtB;;AAC3ahC,IAAI,CAAClhD,MAAL,GAAY,UAAS5a,CAAT,EAAW;AAAC,MAAG,CAAC87D,IAAI,CAAC9jD,QAAL,CAAchY,CAAd,CAAD,IAAmB,CAACA,CAApB,IAAuB,CAAC,CAAD,IAAIA,CAAC,CAAC+9D,MAAF,CAASjC,IAAI,CAACgC,gBAAd,CAA9B,EAA8D,MAAM1/D,KAAK,CAAC,2BAAD,CAAX;AAAyC,MAAG,CAAC09D,IAAI,CAACkC,qBAAL,EAAJ,EAAiC,MAAM5/D,KAAK,CAAC,YAAU4B,CAAV,GAAY,0XAAb,CAAX;AAChK,MAAG87D,IAAI,CAACmC,kBAAL,CAAwBC,UAA3B,EAAsC,MAAM9/D,KAAK,CAAC,iDAAD,CAAX;AAA+D09D,MAAI,CAACmC,kBAAL,CAAwBC,UAAxB,GAAmCl+D,CAAnC;;AAAqC,MAAG,CAAC67D,QAAJ,EAAa;AAAC,QAAGC,IAAI,CAACmB,WAAL,CAAiBj9D,CAAjB,CAAH,EAAuB,MAAM5B,KAAK,CAAC,gBAAc4B,CAAd,GAAgB,qBAAjB,CAAX;AAAmD,WAAO87D,IAAI,CAACqB,mBAAL,CAAyBn9D,CAAzB,CAAP;AAAmC;AAAC,CADtQ;;AACuQ87D,IAAI,CAAClhD,MAAL,CAAY/e,GAAZ,GAAgB,UAASmE,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAAClhD,MAAL,CAAYujD,YAAZ,CAAyBn+D,CAAzB,CAAP;AAAmC,CAA/D;;AACvQ87D,IAAI,CAAClhD,MAAL,CAAYujD,YAAZ,GAAyB,UAASn+D,CAAT,EAAW;AAAC,MAAG,CAAC67D,QAAJ,EAAa;AAAC,QAAG77D,CAAC,IAAI87D,IAAI,CAACsC,cAAb,EAA4B,OAAOtC,IAAI,CAACsC,cAAL,CAAoBp+D,CAApB,EAAuB6a,OAA9B;AAAsC,QAAG,CAACihD,IAAI,CAACqB,mBAAL,CAAyBn9D,CAAzB,CAAJ,EAAgC,OAAOA,CAAC,GAAC87D,IAAI,CAACuB,eAAL,CAAqBr9D,CAArB,CAAF,EAA0B,QAAMA,CAAN,GAAQA,CAAR,GAAU,IAA3C;AAAgD;;AAAA,SAAO,IAAP;AAAY,CAAjN;;AAAkN87D,IAAI,CAACuC,UAAL,GAAgB;AAACC,KAAG,EAAC,KAAL;AAAWC,MAAI,EAAC;AAAhB,CAAhB;AAAwCzC,IAAI,CAACmC,kBAAL,GAAwB,IAAxB;;AAA6BnC,IAAI,CAACkB,iBAAL,GAAuB,YAAU;AAAC,SAAOlB,IAAI,CAACkC,qBAAL,MAA8BlC,IAAI,CAAC0C,oBAAL,EAArC;AAAiE,CAAnG;;AAAoG1C,IAAI,CAACkC,qBAAL,GAA2B,YAAU;AAAC,SAAM,CAAC,CAAClC,IAAI,CAACmC,kBAAP,IAA2BnC,IAAI,CAACmC,kBAAL,CAAwBloD,IAAxB,IAA8B+lD,IAAI,CAACuC,UAAL,CAAgBE,IAA/E;AAAoF,CAA1H;;AAC3XzC,IAAI,CAAC0C,oBAAL,GAA0B,YAAU;AAAC,MAAG1C,IAAI,CAACmC,kBAAL,IAAyBnC,IAAI,CAACmC,kBAAL,CAAwBloD,IAAxB,IAA8B+lD,IAAI,CAACuC,UAAL,CAAgBC,GAA1E,EAA8E,OAAM,CAAC,CAAP;AAAS,MAAIt+D,CAAC,GAAC87D,IAAI,CAAC1gC,MAAL,CAAY8/B,OAAlB;AAA0B,SAAOl7D,CAAC,GAAC,cAAY,OAAOA,CAAC,CAACy+D,oBAArB,GAA0C,CAAC,CAA3C,GAA6C,CAAC,CAACz+D,CAAC,CAACy+D,oBAAF,EAAhD,GAAyE,CAAC,CAAlF;AAAoF,CAA1O;;AACA3C,IAAI,CAAClhD,MAAL,CAAY8jD,sBAAZ,GAAmC,YAAU;AAAC,MAAG,CAAC7C,QAAD,IAAW,CAACC,IAAI,CAACkC,qBAAL,EAAf,EAA4C,MAAM5/D,KAAK,CAAC,6EAAD,CAAX;AAA2F,MAAG,CAACy9D,QAAD,IAAW,CAACC,IAAI,CAACmC,kBAAL,CAAwBC,UAAvC,EAAkD,MAAM9/D,KAAK,CAAC,yEAAD,CAAX;AAAuF09D,MAAI,CAACmC,kBAAL,CAAwBS,sBAAxB,GAA+C,CAAC,CAAhD;AAAkD,CAAhX;;AACA5C,IAAI,CAAC6C,eAAL,GAAqB,UAAS3+D,CAAT,EAAW;AAAC,MAAG,CAAC67D,QAAJ,EAAa;AAAC,QAAG,CAACC,IAAI,CAAC0C,oBAAL,EAAJ,EAAgC,MAAMpgE,KAAK,CAAC,mEAAD,CAAX;AAAiF,QAAG09D,IAAI,CAACmC,kBAAL,IAAyBnC,IAAI,CAACmC,kBAAL,CAAwBC,UAApD,EAA+D,MAAM9/D,KAAK,CAAC,0DAAD,CAAX;AAAwE,QAAG4B,CAAC,IAAI87D,IAAI,CAACsC,cAAb,EAA4B,MAAMhgE,KAAK,CAAC,4BAA0B4B,CAA1B,GAA4B,mBAA7B,CAAX;AAA8D;;AAAA,MAAG87D,IAAI,CAACmC,kBAAR,EAA2BnC,IAAI,CAACmC,kBAAL,CAAwBC,UAAxB,GAAmCl+D,CAAnC,CAA3B,KAAoE;AAAC,QAAIC,CAAC,GAAC67D,IAAI,CAAC1gC,MAAL,CAAY8/B,OAAlB;AAA0B,QAAG,CAACj7D,CAAD,IAAI,cAAY,OAAOA,CAAC,CAACw+D,oBAA5B,EAAiD,MAAMrgE,KAAK,CAAC,4BAC7hB4B,CAD6hB,GAC3hB,gCAD0hB,CAAX;AAC7eC,KAAC,GAACA,CAAC,CAAC+a,OAAF,CAAU/a,CAAC,CAACw+D,oBAAF,EAAV,CAAF;AAAsC3C,QAAI,CAACsC,cAAL,CAAoBp+D,CAApB,IAAuB;AAAC6a,aAAO,EAAC5a,CAAT;AAAW8V,UAAI,EAAC+lD,IAAI,CAACuC,UAAL,CAAgBC,GAAhC;AAAoCM,cAAQ,EAAC5+D;AAA7C,KAAvB;AAAuE;AAAC,CADlJ;;AACmJ87D,IAAI,CAAC+C,WAAL,GAAiB,UAAS7+D,CAAT,EAAW;AAAC,MAAG87D,IAAI,CAACe,uBAAR,EAAgC,MAAM78D,CAAC,GAACA,CAAC,IAAE,EAAL,EAAQ5B,KAAK,CAAC,yDAAuD4B,CAAC,GAAC,OAAKA,CAAN,GAAQ,GAAhE,CAAD,CAAnB;AAA2F,CAAxJ;;AAAyJ87D,IAAI,CAACgD,cAAL,GAAoB,UAAS9+D,CAAT,EAAW,CAAE,CAAjC;;AAC5S67D,QAAQ,KAAGC,IAAI,CAACmB,WAAL,GAAiB,UAASj9D,CAAT,EAAW;AAAC,SAAOA,CAAC,IAAI87D,IAAI,CAACsC,cAAV,IAA0B,CAACtC,IAAI,CAACqB,mBAAL,CAAyBn9D,CAAzB,CAAD,IAA8B87D,IAAI,CAACiD,eAAL,CAAqBjD,IAAI,CAACuB,eAAL,CAAqBr9D,CAArB,CAArB,CAA/D;AAA6G,CAA1I,EAA2I87D,IAAI,CAACqB,mBAAL,GAAyB;AAAC,iBAAc,CAAC;AAAhB,CAAvK,CAAR;;AAAmMrB,IAAI,CAACuB,eAAL,GAAqB,UAASr9D,CAAT,EAAWC,CAAX,EAAa;AAACD,GAAC,GAACA,CAAC,CAACia,KAAF,CAAQ,GAAR,CAAF;AAAeha,GAAC,GAACA,CAAC,IAAE67D,IAAI,CAAC1gC,MAAV;;AAAiB,OAAI,IAAIlN,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACluB,CAAC,CAACJ,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,IAAGjuB,CAAC,GAACA,CAAC,CAACD,CAAC,CAACkuB,CAAD,CAAF,CAAH,EAAU,CAAC4tC,IAAI,CAACiD,eAAL,CAAqB9+D,CAArB,CAAd,EAAsC,OAAO,IAAP;;AAAY,SAAOA,CAAP;AAAS,CAAzJ;;AAA0J67D,IAAI,CAACkD,SAAL,GAAe,UAASh/D,CAAT,EAAWC,CAAX,EAAa;AAACA,GAAC,GAACA,CAAC,IAAE67D,IAAI,CAAC1gC,MAAV;;AAAiB,OAAI,IAAIlN,CAAR,IAAaluB,CAAb,EAAeC,CAAC,CAACiuB,CAAD,CAAD,GAAKluB,CAAC,CAACkuB,CAAD,CAAN;AAAU,CAAvE;;AAC7V4tC,IAAI,CAACmD,aAAL,GAAmB,UAASj/D,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,GAAC+rB,QAAD,IAAWC,IAAI,CAACoD,oBAAhB,IAAsCpD,IAAI,CAACqD,YAAL,CAAkBF,aAAlB,CAAgCj/D,CAAhC,EAAkCC,CAAlC,EAAoCiuB,CAApC,EAAsC4hB,CAAtC,CAAtC;AAA+E,CAApH;;AAAqHgsB,IAAI,CAACsD,mBAAL,GAAyB,CAAC,CAA1B;;AAA4BtD,IAAI,CAACuD,aAAL,GAAmB,UAASr/D,CAAT,EAAW;AAAC87D,MAAI,CAAC1gC,MAAL,CAAY9G,OAAZ,IAAqBwnC,IAAI,CAAC1gC,MAAL,CAAY9G,OAAZ,CAAoBgO,KAApB,CAA0BtiC,CAA1B,CAArB;AAAkD,CAAjF;;AACjJ87D,IAAI,CAAC9gD,OAAL,GAAa,UAAShb,CAAT,EAAW;AAAC,MAAG,CAAC67D,QAAJ,EAAa;AAACC,QAAI,CAACsD,mBAAL,IAA0BtD,IAAI,CAACqD,YAAL,CAAkBG,SAAlB,CAA4Bt/D,CAA5B,CAA1B;;AAAyD,QAAG87D,IAAI,CAACmB,WAAL,CAAiBj9D,CAAjB,CAAH,EAAuB;AAAC,UAAG87D,IAAI,CAACkB,iBAAL,EAAH,EAA4B,OAAOlB,IAAI,CAAClhD,MAAL,CAAYujD,YAAZ,CAAyBn+D,CAAzB,CAAP;AAAmC,KAAvF,MAA4F,IAAG87D,IAAI,CAACsD,mBAAR,EAA4B;AAAC,UAAIn/D,CAAC,GAAC67D,IAAI,CAACmC,kBAAX;AAA8BnC,UAAI,CAACmC,kBAAL,GAAwB,IAAxB;;AAA6B,UAAG;AAACnC,YAAI,CAACqD,YAAL,CAAkBI,KAAlB,CAAwBv/D,CAAxB;AAA2B,OAA/B,SAAsC;AAAC87D,YAAI,CAACmC,kBAAL,GAAwBh+D,CAAxB;AAA0B;AAAC;;AAAA,WAAO,IAAP;AAAY;AAAC,CAAnW;;AAAoW67D,IAAI,CAAC0D,WAAL,GAAiB,UAASx/D,CAAT,EAAW;AAAC,SAAM,EAAN;AAAS,CAAtC;;AAAuC87D,IAAI,CAAC2D,QAAL,GAAc,EAAd;;AAAiB3D,IAAI,CAAC4D,YAAL,GAAkB,YAAU,CAAE,CAA9B;;AAC5Z5D,IAAI,CAAC6D,cAAL,GAAoB,YAAU;AAAC,QAAMvhE,KAAK,CAAC,+BAAD,CAAX;AAA8C,CAA7E;;AAA8E09D,IAAI,CAAC8D,kBAAL,GAAwB,UAAS5/D,CAAT,EAAW;AAACA,GAAC,CAAC6/D,SAAF,GAAY,KAAK,CAAjB;;AAAmB7/D,GAAC,CAAC8/D,WAAF,GAAc,YAAU;AAAC,QAAG9/D,CAAC,CAAC6/D,SAAL,EAAe,OAAO7/D,CAAC,CAAC6/D,SAAT;AAAmB/D,QAAI,CAACW,KAAL,KAAaX,IAAI,CAACiE,uBAAL,CAA6BjE,IAAI,CAACiE,uBAAL,CAA6BngE,MAA1D,IAAkEI,CAA/E;AAAkF,WAAOA,CAAC,CAAC6/D,SAAF,GAAY,IAAI7/D,CAAJ,EAAnB;AAAyB,GAAtK;AAAuK,CAA9N;;AAA+N87D,IAAI,CAACiE,uBAAL,GAA6B,EAA7B;AAAgCjE,IAAI,CAACkE,sBAAL,GAA4B,CAAC,CAA7B;AAA+BlE,IAAI,CAACmE,mBAAL,GAAyBnE,IAAI,CAACW,KAA9B;AAAoCX,IAAI,CAACsC,cAAL,GAAoB,EAApB;AAAuBtC,IAAI,CAACoD,oBAAL,GAA0B,CAACrD,QAAD,IAAWC,IAAI,CAACsD,mBAA1C;AAA8DtD,IAAI,CAACoE,SAAL,GAAe,QAAf;AACrepE,IAAI,CAACqE,4BAAL,GAAkC,CAAC,CAAnC;AAAqCrE,IAAI,CAACsE,qBAAL,GAA2B,EAA3B;AAA8BtE,IAAI,CAACuE,UAAL,GAAgB,cAAhB;AAA+BvE,IAAI,CAACwE,gBAAL,GAAsB,IAAtB;;AAA2BxE,IAAI,CAACyE,qBAAL,GAA2B,YAAU;AAAC,MAAG,QAAMzE,IAAI,CAACwE,gBAAd,EAA+B;AAAC,QAAG;AAAC,UAAItgE,CAAC,GAAC,CAACm5D,IAAI,CAAC,4EAAD,CAAX;AAA0F,KAA9F,CAA8F,OAAMl5D,CAAN,EAAQ;AAACD,OAAC,GAAC,CAAC,CAAH;AAAK;;AAAA87D,QAAI,CAACwE,gBAAL,GAAsBtgE,CAAtB;AAAwB;;AAAA,SAAO87D,IAAI,CAACwE,gBAAZ;AAA6B,CAAvO;;AAAwOxE,IAAI,CAAC0E,yBAAL,GAA+B,UAASxgE,CAAT,EAAW;AAAC,SAAM,iBAAeA,CAAf,GAAiB,YAAvB;AAAoC,CAA/E;;AACrW87D,IAAI,CAAC2E,UAAL,GAAgB,UAASzgE,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC67D,IAAI,CAACmC,kBAAX;;AAA8B,MAAG;AAACnC,QAAI,CAACmC,kBAAL,GAAwB;AAACC,gBAAU,EAAC,EAAZ;AAAeQ,4BAAsB,EAAC,CAAC,CAAvC;AAAyC3oD,UAAI,EAAC+lD,IAAI,CAACuC,UAAL,CAAgBE;AAA9D,KAAxB;AAA4F,QAAGzC,IAAI,CAAC3G,UAAL,CAAgBn1D,CAAhB,CAAH,EAAsB,IAAIkuB,CAAC,GAACluB,CAAC,CAACyW,IAAF,CAAO,KAAK,CAAZ,EAAc,EAAd,CAAN,CAAtB,KAAmD,IAAGqlD,IAAI,CAAC9jD,QAAL,CAAchY,CAAd,CAAH,EAAoB87D,IAAI,CAACyE,qBAAL,OAA+BvgE,CAAC,GAAC87D,IAAI,CAAC0E,yBAAL,CAA+BxgE,CAA/B,CAAjC,GAAoEkuB,CAAC,GAAC4tC,IAAI,CAAC4E,qBAAL,CAA2BjqD,IAA3B,CAAgC,KAAK,CAArC,EAAuCzW,CAAvC,CAAtE,CAApB,KAAyI,MAAM5B,KAAK,CAAC,2BAAD,CAAX;AAAyC,QAAI0xC,CAAC,GAACgsB,IAAI,CAACmC,kBAAL,CAAwBC,UAA9B;AAAyC,QAAGpC,IAAI,CAAC9jD,QAAL,CAAc83B,CAAd,KAAkBA,CAArB,EAAuBgsB,IAAI,CAACmC,kBAAL,CAAwBS,sBAAxB,GAA+C5C,IAAI,CAACoB,mBAAL,CAAyBptB,CAAzB,EAC9e5hB,CAD8e,CAA/C,GAC5b4tC,IAAI,CAACmE,mBAAL,IAA0BzjE,MAAM,CAACmkE,IAAjC,IAAuC,YAAU,OAAOzyC,CAAxD,IAA2D,QAAMA,CAAjE,IAAoE1xB,MAAM,CAACmkE,IAAP,CAAYzyC,CAAZ,CADwX,EACzW4tC,IAAI,CAACsC,cAAL,CAAoBtuB,CAApB,IAAuB;AAACj1B,aAAO,EAACqT,CAAT;AAAWnY,UAAI,EAAC+lD,IAAI,CAACuC,UAAL,CAAgBE,IAAhC;AAAqCK,cAAQ,EAAC9C,IAAI,CAACmC,kBAAL,CAAwBC;AAAtE,KADkV,CAAvB,KACpO,MAAM9/D,KAAK,CAAC,0BAAwB0xC,CAAxB,GAA0B,GAA3B,CAAX;AAA4C,GADtL,SAC6L;AAACgsB,QAAI,CAACmC,kBAAL,GAAwBh+D,CAAxB;AAA0B;AAAC,CADnR;;AACoR67D,IAAI,CAAC4E,qBAAL,GAA2B,UAAS1gE,CAAT,EAAW;AAACm5D,MAAI,CAACn5D,CAAD,CAAJ;AAAQ,SAAM,EAAN;AAAS,CAAxD;;AAAyD87D,IAAI,CAAC8E,cAAL,GAAoB,UAAS5gE,CAAT,EAAW;AAACA,GAAC,GAACA,CAAC,CAACia,KAAF,CAAQ,GAAR,CAAF;;AAAe,OAAI,IAAIha,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACD,CAAC,CAACJ,MAAhB,GAAwB,OAAKI,CAAC,CAACC,CAAD,CAAN,GAAUD,CAAC,CAAC+B,MAAF,CAAS9B,CAAT,EAAW,CAAX,CAAV,GAAwBA,CAAC,IAAE,QAAMD,CAAC,CAACC,CAAD,CAAV,IAAeD,CAAC,CAACC,CAAC,GAAC,CAAH,CAAhB,IAAuB,QAAMD,CAAC,CAACC,CAAC,GAAC,CAAH,CAA9B,GAAoCD,CAAC,CAAC+B,MAAF,CAAS,EAAE9B,CAAX,EAAa,CAAb,CAApC,GAAoDA,CAAC,EAA7E;;AAAgF,SAAOD,CAAC,CAAC2a,IAAF,CAAO,GAAP,CAAP;AAAmB,CAA1K;;AAC7UmhD,IAAI,CAAC+E,aAAL,GAAmB,UAAS7gE,CAAT,EAAW;AAAC,MAAG87D,IAAI,CAAC1gC,MAAL,CAAY0lC,sBAAf,EAAsC,OAAOhF,IAAI,CAAC1gC,MAAL,CAAY0lC,sBAAZ,CAAmC9gE,CAAnC,CAAP;;AAA6C,MAAG;AAAC,QAAIC,CAAC,GAAC,IAAI67D,IAAI,CAAC1gC,MAAL,CAAY2lC,cAAhB,EAAN;AAAqC9gE,KAAC,CAAC6f,IAAF,CAAO,KAAP,EAAa9f,CAAb,EAAe,CAAC,CAAhB;AAAmBC,KAAC,CAAC+gE,IAAF;AAAS,WAAO,KAAG/gE,CAAC,CAACghE,MAAL,IAAa,OAAKhhE,CAAC,CAACghE,MAApB,GAA2BhhE,CAAC,CAACihE,YAA7B,GAA0C,IAAjD;AAAsD,GAA3H,CAA2H,OAAMhzC,CAAN,EAAQ;AAAC,WAAO,IAAP;AAAY;AAAC,CAAnQ;;AACA4tC,IAAI,CAACqF,UAAL,GAAgB,UAASnhE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAACgsB,IAAI,CAAC1gC,MAAL,CAAY8/B,OAAlB;AAA0BprB,GAAC,KAAGgsB,IAAI,CAAC1gC,MAAL,CAAY8/B,OAAZ,GAAoBprB,CAAC,GAAC,EAAzB,CAAD;AAA8B,MAAI5sB,CAAC,GAAC4sB,CAAC,CAACsxB,SAAR;;AAAkB,MAAG,CAACl+C,CAAJ,EAAM;AAAC,QAAIujB,CAAC,GAACq1B,IAAI,CAAC2D,QAAL,GAAc3D,IAAI,CAACuE,UAAzB;AAAA,QAAoCnlC,CAAC,GAAC4gC,IAAI,CAAC+E,aAAL,CAAmBp6B,CAAnB,CAAtC;;AAA4D,QAAGvL,CAAH,EAAK;AAAC,OAAC,YAAU;AAAC,SAAC,GAAEi+B,IAAH,EAASj+B,CAAC,GAAC,kBAAF,GAAqBuL,CAA9B;AAAiC,OAA7C,EAA+ChwB,IAA/C,CAAoDqlD,IAAI,CAAC1gC,MAAzD;AAAiE,UAAG0gC,IAAI,CAAC1gC,MAAL,CAAYimC,UAAZ,IAAwBvF,IAAI,CAAC1gC,MAAL,CAAYimC,UAAZ,CAAuBnG,OAA/C,IAAwD,CAACY,IAAI,CAAC1gC,MAAL,CAAYimC,UAAZ,CAAuBnG,OAAvB,CAA+BkG,SAA3F,EAAqG,MAAMhjE,KAAK,CAAC,gFAA8EoJ,IAAI,CAACC,SAAL,CAAeq0D,IAAI,CAAC1gC,MAAL,CAAYimC,UAA3B,CAA/E,CAAX;AAAkIvF,UAAI,CAAC1gC,MAAL,CAAY8/B,OAAZ,CAAoBkG,SAApB,GAC3dtF,IAAI,CAAC1gC,MAAL,CAAYimC,UAAZ,CAAuBnG,OAAvB,CAA+BkG,SAD4b;AAClbtxB,OAAC,GAACgsB,IAAI,CAAC1gC,MAAL,CAAY8/B,OAAd;AAAsBh4C,OAAC,GAAC4sB,CAAC,CAACsxB,SAAJ;AAAc;AAAC;;AAAAl+C,GAAC,KAAGA,CAAC,GAAC4sB,CAAC,CAACsxB,SAAF,GAAY,UAASphE,CAAT,EAAWC,CAAX,EAAa;AAAC67D,QAAI,CAACuD,aAAL,CAAmBp/D,CAAC,GAAC,sDAArB;AAA6E,WAAOD,CAAP;AAAS,GAArH,CAAD;AAAwH,SAAOkjB,CAAC,CAACljB,CAAD,EAAGC,CAAH,EAAKiuB,CAAL,CAAR;AAAgB,CADtN;;AAEA4tC,IAAI,CAACwF,MAAL,GAAY,UAASthE,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,OAAOD,CAAb;AAAe,MAAG,YAAUC,CAAb;AAAe,QAAGD,CAAH,EAAK;AAAC,UAAGA,CAAC,YAAYtC,KAAhB,EAAsB,OAAM,OAAN;AAAc,UAAGsC,CAAC,YAAYxD,MAAhB,EAAuB,OAAOyD,CAAP;AAAS,UAAIiuB,CAAC,GAAC1xB,MAAM,CAACoZ,SAAP,CAAiBY,QAAjB,CAA0BC,IAA1B,CAA+BzW,CAA/B,CAAN;AAAwC,UAAG,qBAAmBkuB,CAAtB,EAAwB,OAAM,QAAN;AAAe,UAAG,oBAAkBA,CAAlB,IAAqB,YAAU,OAAOluB,CAAC,CAACJ,MAAnB,IAA2B,eAAa,OAAOI,CAAC,CAAC+B,MAAjD,IAAyD,eAAa,OAAO/B,CAAC,CAACuhE,oBAA/E,IAAqG,CAACvhE,CAAC,CAACuhE,oBAAF,CAAuB,QAAvB,CAA9H,EAA+J,OAAM,OAAN;AAAc,UAAG,uBAAqBrzC,CAArB,IAAwB,eAAa,OAAOluB,CAAC,CAACyW,IAAtB,IAA4B,eAAa,OAAOzW,CAAC,CAACuhE,oBAAlD,IAAwE,CAACvhE,CAAC,CAACuhE,oBAAF,CAAuB,MAAvB,CAApG,EAAmI,OAAM,UAAN;AAAiB,KAA1d,MAA+d,OAAM,MAAN;AAA9e,SAClC,IAAG,cAAYthE,CAAZ,IAAe,eAAa,OAAOD,CAAC,CAACyW,IAAxC,EAA6C,OAAM,QAAN;AAAe,SAAOxW,CAAP;AAAS,CAD1E;;AAC2E67D,IAAI,CAAC0F,MAAL,GAAY,UAASxhE,CAAT,EAAW;AAAC,SAAO,SAAOA,CAAd;AAAgB,CAAxC;;AAAyC87D,IAAI,CAACiD,eAAL,GAAqB,UAAS/+D,CAAT,EAAW;AAAC,SAAO,QAAMA,CAAb;AAAe,CAAhD;;AAAiD87D,IAAI,CAAC56D,OAAL,GAAa,UAASlB,CAAT,EAAW;AAAC,SAAM,WAAS87D,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAAf;AAA8B,CAAvD;;AAAwD87D,IAAI,CAAC2F,WAAL,GAAiB,UAASzhE,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC67D,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAAN;AAAqB,SAAM,WAASC,CAAT,IAAY,YAAUA,CAAV,IAAa,YAAU,OAAOD,CAAC,CAACJ,MAAlD;AAAyD,CAA3G;;AAA4Gk8D,IAAI,CAAC4F,UAAL,GAAgB,UAAS1hE,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAAC3jD,QAAL,CAAcnY,CAAd,KAAkB,cAAY,OAAOA,CAAC,CAAC2W,WAA9C;AAA0D,CAAtF;;AAAuFmlD,IAAI,CAAC3G,UAAL,GAAgB,UAASn1D,CAAT,EAAW;AAAC,SAAM,cAAY87D,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAAlB;AAAiC,CAA7D;;AACha87D,IAAI,CAAC3jD,QAAL,GAAc,UAASnY,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,OAAOD,CAAb;AAAe,SAAM,YAAUC,CAAV,IAAa,QAAMD,CAAnB,IAAsB,cAAYC,CAAxC;AAA0C,CAAnF;;AAAoF67D,IAAI,CAAC6F,MAAL,GAAY,UAAS3hE,CAAT,EAAW;AAAC,SAAOA,CAAC,CAAC87D,IAAI,CAAC8F,aAAN,CAAD,KAAwB5hE,CAAC,CAAC87D,IAAI,CAAC8F,aAAN,CAAD,GAAsB,EAAE9F,IAAI,CAAC+F,WAArD,CAAP;AAAyE,CAAjG;;AAAkG/F,IAAI,CAACgG,MAAL,GAAY,UAAS9hE,CAAT,EAAW;AAAC,SAAM,CAAC,CAACA,CAAC,CAAC87D,IAAI,CAAC8F,aAAN,CAAT;AAA8B,CAAtD;;AAAuD9F,IAAI,CAACiG,SAAL,GAAe,UAAS/hE,CAAT,EAAW;AAAC,WAAOA,CAAP,IAAU,qBAAoBA,CAA9B,IAAiCA,CAAC,CAACgiE,eAAF,CAAkBlG,IAAI,CAAC8F,aAAvB,CAAjC;;AAAuE,MAAG;AAAC,WAAO5hE,CAAC,CAAC87D,IAAI,CAAC8F,aAAN,CAAR;AAA6B,GAAjC,CAAiC,OAAM3hE,CAAN,EAAQ,CAAE;AAAC,CAA9I;;AAA+I67D,IAAI,CAAC8F,aAAL,GAAmB,kBAAgB,MAAIv5D,IAAI,CAACqlB,MAAL,EAAJ,KAAoB,CAApC,CAAnB;AAA0DouC,IAAI,CAAC+F,WAAL,GAAiB,CAAjB;AAAmB/F,IAAI,CAACmG,WAAL,GAAiBnG,IAAI,CAAC6F,MAAtB;AACzc7F,IAAI,CAACoG,cAAL,GAAoBpG,IAAI,CAACiG,SAAzB;;AAAmCjG,IAAI,CAACvuB,WAAL,GAAiB,UAASvtC,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC67D,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAAN;;AAAqB,MAAG,YAAUC,CAAV,IAAa,WAASA,CAAzB,EAA2B;AAAC,QAAG,eAAa,OAAOD,CAAC,CAAC4+B,KAAzB,EAA+B,OAAO5+B,CAAC,CAAC4+B,KAAF,EAAP;AAAiB3+B,KAAC,GAAC,WAASA,CAAT,GAAW,EAAX,GAAc,EAAhB;;AAAmB,SAAI,IAAIiuB,CAAR,IAAaluB,CAAb,EAAeC,CAAC,CAACiuB,CAAD,CAAD,GAAK4tC,IAAI,CAACvuB,WAAL,CAAiBvtC,CAAC,CAACkuB,CAAD,CAAlB,CAAL;;AAA4B,WAAOjuB,CAAP;AAAS;;AAAA,SAAOD,CAAP;AAAS,CAA9M;;AAA+M87D,IAAI,CAACqG,WAAL,GAAiB,UAASniE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,SAAOluB,CAAC,CAACyW,IAAF,CAAOgmB,KAAP,CAAaz8B,CAAC,CAAC67B,IAAf,EAAoB/yB,SAApB,CAAP;AAAsC,CAAvE;;AAClPgzD,IAAI,CAACsG,OAAL,GAAa,UAASpiE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAG,CAACluB,CAAJ,EAAM,MAAM5B,KAAK,EAAX;;AAAc,MAAG,IAAE0K,SAAS,CAAClJ,MAAf,EAAsB;AAAC,QAAIkwC,CAAC,GAACpyC,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAAN;AAA8C,WAAO,YAAU;AAAC,UAAIolB,CAAC,GAACxwB,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,CAAN;AAA4CpL,WAAK,CAACkY,SAAN,CAAgB7Q,OAAhB,CAAwB03B,KAAxB,CAA8BvO,CAA9B,EAAgC4hB,CAAhC;AAAmC,aAAO9vC,CAAC,CAACy8B,KAAF,CAAQx8B,CAAR,EAAUiuB,CAAV,CAAP;AAAoB,KAArH;AAAsH;;AAAA,SAAO,YAAU;AAAC,WAAOluB,CAAC,CAACy8B,KAAF,CAAQx8B,CAAR,EAAU6I,SAAV,CAAP;AAA4B,GAA9C;AAA+C,CAA3R;;AAA4RgzD,IAAI,CAACjgC,IAAL,GAAU,UAAS77B,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACspC,UAAQ,CAAC5hD,SAAT,CAAmBimB,IAAnB,IAAyB,CAAC,CAAD,IAAI27B,QAAQ,CAAC5hD,SAAT,CAAmBimB,IAAnB,CAAwBrlB,QAAxB,GAAmC5O,OAAnC,CAA2C,aAA3C,CAA7B,GAAuFk0D,IAAI,CAACjgC,IAAL,GAAUigC,IAAI,CAACqG,WAAtG,GAAkHrG,IAAI,CAACjgC,IAAL,GAAUigC,IAAI,CAACsG,OAAjI;AAAyI,SAAOtG,IAAI,CAACjgC,IAAL,CAAUY,KAAV,CAAgB,IAAhB,EAAqB3zB,SAArB,CAAP;AAAuC,CAA1M;;AAC5RgzD,IAAI,CAACuG,OAAL,GAAa,UAASriE,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAACxwB,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAAN;AAA8C,SAAO,YAAU;AAAC,QAAI7I,CAAC,GAACiuB,CAAC,CAACtsB,KAAF,EAAN;AAAgB3B,KAAC,CAACxB,IAAF,CAAOg+B,KAAP,CAAax8B,CAAb,EAAe6I,SAAf;AAA0B,WAAO9I,CAAC,CAACy8B,KAAF,CAAQ,IAAR,EAAax8B,CAAb,CAAP;AAAuB,GAAnF;AAAoF,CAA7J;;AAA8J67D,IAAI,CAACwG,KAAL,GAAW,UAAStiE,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAI,IAAIiuB,CAAR,IAAajuB,CAAb,EAAeD,CAAC,CAACkuB,CAAD,CAAD,GAAKjuB,CAAC,CAACiuB,CAAD,CAAN;AAAU,CAAlD;;AAAmD4tC,IAAI,CAAC3zD,GAAL,GAAS2zD,IAAI,CAACa,YAAL,IAAmB54D,IAAI,CAACoE,GAAxB,IAA6B,YAAU;AAAC,SAAM,CAAC,IAAIpE,IAAJ,EAAP;AAAgB,CAAjE;;AACjN+3D,IAAI,CAACyG,UAAL,GAAgB,UAASviE,CAAT,EAAW;AAAC,MAAG87D,IAAI,CAAC1gC,MAAL,CAAY+gC,UAAf,EAA0BL,IAAI,CAAC1gC,MAAL,CAAY+gC,UAAZ,CAAuBn8D,CAAvB,EAAyB,YAAzB,EAA1B,KAAsE,IAAG87D,IAAI,CAAC1gC,MAAL,CAAY+9B,IAAf,EAAoB;AAAC,QAAG,QAAM2C,IAAI,CAAC0G,oBAAd,EAAmC;AAAC,UAAG;AAAC1G,YAAI,CAAC1gC,MAAL,CAAY+9B,IAAZ,CAAiB,qBAAjB;AAAwC,OAA5C,CAA4C,OAAMrpB,CAAN,EAAQ,CAAE;;AAAA,UAAG,eAAa,OAAOgsB,IAAI,CAAC1gC,MAAL,CAAYqnC,UAAnC,EAA8C;AAAC,YAAG;AAAC,iBAAO3G,IAAI,CAAC1gC,MAAL,CAAYqnC,UAAnB;AAA8B,SAAlC,CAAkC,OAAM3yB,CAAN,EAAQ,CAAE;;AAAAgsB,YAAI,CAAC0G,oBAAL,GAA0B,CAAC,CAA3B;AAA6B,OAAxH,MAA6H1G,IAAI,CAAC0G,oBAAL,GAA0B,CAAC,CAA3B;AAA6B;;AAAA,QAAG1G,IAAI,CAAC0G,oBAAR,EAA6B1G,IAAI,CAAC1gC,MAAL,CAAY+9B,IAAZ,CAAiBn5D,CAAjB,EAA7B,KAAqD;AAAC,UAAIC,CAAC,GAAC67D,IAAI,CAAC1gC,MAAL,CAAYoiC,QAAlB;AAAA,UAA2BtvC,CAAC,GAACjuB,CAAC,CAACyiE,aAAF,CAAgB,QAAhB,CAA7B;AAAuDx0C,OAAC,CAACnY,IAAF,GAAO,iBAAP;AAAyBmY,OAAC,CAACy0C,KAAF,GACjf,CAAC,CADgf;AAC9ez0C,OAAC,CAAC00C,WAAF,CAAc3iE,CAAC,CAAC4iE,cAAF,CAAiB7iE,CAAjB,CAAd;AAAmCC,OAAC,CAAC6iE,IAAF,CAAOF,WAAP,CAAmB10C,CAAnB;AAAsBjuB,OAAC,CAAC6iE,IAAF,CAAOC,WAAP,CAAmB70C,CAAnB;AAAsB;AAAC,GADe,MACV,MAAM9vB,KAAK,CAAC,+BAAD,CAAX;AAA8C,CADtI;;AACuI09D,IAAI,CAAC0G,oBAAL,GAA0B,IAA1B;;AACvI1G,IAAI,CAACkH,UAAL,GAAgB,UAAShjE,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,OAAKm9B,MAAM,CAACp9B,CAAD,CAAN,CAAUq+B,MAAV,CAAiB,CAAjB,CAAR,EAA4B,MAAMjgC,KAAK,CAAC,8EAA4E4B,CAA7E,CAAX;;AAA2F,MAAIkuB,CAAC,GAAC,UAASluB,CAAT,EAAW;AAAC,WAAO87D,IAAI,CAACmH,eAAL,CAAqBjjE,CAArB,KAAyBA,CAAhC;AAAkC,GAApD;AAAA,MAAqD8vC,CAAC,GAAC,UAAS9vC,CAAT,EAAW;AAACA,KAAC,GAACA,CAAC,CAACia,KAAF,CAAQ,GAAR,CAAF;;AAAe,SAAI,IAAIha,CAAC,GAAC,EAAN,EAAS6vC,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAAC9vC,CAAC,CAACJ,MAArB,EAA4BkwC,CAAC,EAA7B,EAAgC7vC,CAAC,CAACxB,IAAF,CAAOyvB,CAAC,CAACluB,CAAC,CAAC8vC,CAAD,CAAF,CAAR;;AAAgB,WAAO7vC,CAAC,CAAC0a,IAAF,CAAO,GAAP,CAAP;AAAmB,GAArJ;;AAAsJm1B,GAAC,GAACgsB,IAAI,CAACmH,eAAL,GAAqB,cAAYnH,IAAI,CAACoH,oBAAjB,GAAsCh1C,CAAtC,GAAwC4hB,CAA7D,GAA+D,UAAS9vC,CAAT,EAAW;AAAC,WAAOA,CAAP;AAAS,GAAtF;AAAuFA,GAAC,GAACC,CAAC,GAACD,CAAC,GAAC,GAAF,GAAM8vC,CAAC,CAAC7vC,CAAD,CAAR,GAAY6vC,CAAC,CAAC9vC,CAAD,CAAhB;AAAoB,SAAO87D,IAAI,CAAC1gC,MAAL,CAAY+nC,uBAAZ,GAAoCrH,IAAI,CAAC1gC,MAAL,CAAY+nC,uBAAZ,CAAoCnjE,CAApC,CAApC,GAA2EA,CAAlF;AAAoF,CAA1e;;AACA87D,IAAI,CAACsH,iBAAL,GAAuB,UAASpjE,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACmH,eAAL,GAAqBjjE,CAArB;AAAuB87D,MAAI,CAACoH,oBAAL,GAA0BjjE,CAA1B;AAA4B,CAAxF;;AAAyF,CAAC47D,QAAD,IAAWC,IAAI,CAAC1gC,MAAL,CAAYioC,wBAAvB,KAAkDvH,IAAI,CAACmH,eAAL,GAAqBnH,IAAI,CAAC1gC,MAAL,CAAYioC,wBAAnF;;AAA6GvH,IAAI,CAACwH,MAAL,GAAY,UAAStjE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACA,GAAC,IAAEA,CAAC,CAACq1C,IAAL,KAAYvjE,CAAC,GAACA,CAAC,CAACkZ,OAAF,CAAU,IAAV,EAAe,MAAf,CAAd;AAAsCjZ,GAAC,KAAGD,CAAC,GAACA,CAAC,CAACkZ,OAAF,CAAU,eAAV,EAA0B,UAASlZ,CAAT,EAAWkuB,CAAX,EAAa;AAAC,WAAO,QAAMjuB,CAAN,IAASiuB,CAAC,IAAIjuB,CAAd,GAAgBA,CAAC,CAACiuB,CAAD,CAAjB,GAAqBluB,CAA5B;AAA8B,GAAtE,CAAL,CAAD;AAA+E,SAAOA,CAAP;AAAS,CAA1J;;AAA2J87D,IAAI,CAAC0H,kBAAL,GAAwB,UAASxjE,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOD,CAAP;AAAS,CAA/C;;AAAgD87D,IAAI,CAAC2H,YAAL,GAAkB,UAASzjE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACI,WAAL,CAAiBl8D,CAAjB,EAAmBC,CAAnB,EAAqBiuB,CAArB;AAAwB,CAA1D;;AACjZ4tC,IAAI,CAAC4H,cAAL,GAAoB,UAAS1jE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACluB,GAAC,CAACC,CAAD,CAAD,GAAKiuB,CAAL;AAAO,CAA3C;;AAA4C4tC,IAAI,CAAC6H,QAAL,GAAc,UAAS3jE,CAAT,EAAWC,CAAX,EAAa;AAAC,WAASiuB,CAAT,GAAY,CAAE;;AAAAA,GAAC,CAACtY,SAAF,GAAY3V,CAAC,CAAC2V,SAAd;AAAwB5V,GAAC,CAAC4jE,WAAF,GAAc3jE,CAAC,CAAC2V,SAAhB;AAA0B5V,GAAC,CAAC4V,SAAF,GAAY,IAAIsY,CAAJ,EAAZ;AAAkBluB,GAAC,CAAC4V,SAAF,CAAYnd,WAAZ,GAAwBuH,CAAxB;;AAA0BA,GAAC,CAAChG,IAAF,GAAO,UAASgG,CAAT,EAAWkuB,CAAX,EAAauY,CAAb,EAAe;AAAC,SAAI,IAAIqJ,CAAC,GAACpyC,KAAK,CAACoL,SAAS,CAAClJ,MAAV,GAAiB,CAAlB,CAAX,EAAgCsjB,CAAC,GAAC,CAAtC,EAAwCA,CAAC,GAACpa,SAAS,CAAClJ,MAApD,EAA2DsjB,CAAC,EAA5D,EAA+D4sB,CAAC,CAAC5sB,CAAC,GAAC,CAAH,CAAD,GAAOpa,SAAS,CAACoa,CAAD,CAAhB;;AAAoB,WAAOjjB,CAAC,CAAC2V,SAAF,CAAYsY,CAAZ,EAAeuO,KAAf,CAAqBz8B,CAArB,EAAuB8vC,CAAvB,CAAP;AAAiC,GAA3I;AAA4I,CAApR;;AAC5CgsB,IAAI,CAAC9hE,IAAL,GAAU,UAASgG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAChnC,SAAS,CAACsvD,MAAV,CAAiByL,MAAvB;AAA8B,MAAG/H,IAAI,CAACc,sBAAL,IAA6Bd,IAAI,CAACW,KAAL,IAAY,CAAC3sB,CAA7C,EAA+C,MAAM1xC,KAAK,CAAC,4IAAD,CAAX;;AAA0J,MAAG,gBAAc,OAAO0xC,CAAC,CAAC8zB,WAA1B,EAAsC;AAAC,SAAI,IAAI1gD,CAAC,GAACxlB,KAAK,CAACoL,SAAS,CAAClJ,MAAV,GAAiB,CAAlB,CAAX,EAAgC6mC,CAAC,GAAC,CAAtC,EAAwCA,CAAC,GAAC39B,SAAS,CAAClJ,MAApD,EAA2D6mC,CAAC,EAA5D,EAA+DvjB,CAAC,CAACujB,CAAC,GAAC,CAAH,CAAD,GAAO39B,SAAS,CAAC29B,CAAD,CAAhB;;AAAoB,WAAOqJ,CAAC,CAAC8zB,WAAF,CAAcnrE,WAAd,CAA0BgkC,KAA1B,CAAgCz8B,CAAhC,EAAkCkjB,CAAlC,CAAP;AAA4C;;AAAA,MAAG,YAAU,OAAOjjB,CAAjB,IAAoB,YAAU,OAAOA,CAAxC,EAA0C,MAAM7B,KAAK,CAAC,iEAAD,CAAX;AACjd8kB,GAAC,GAACxlB,KAAK,CAACoL,SAAS,CAAClJ,MAAV,GAAiB,CAAlB,CAAP;;AAA4B,OAAI6mC,CAAC,GAAC,CAAN,EAAQA,CAAC,GAAC39B,SAAS,CAAClJ,MAApB,EAA2B6mC,CAAC,EAA5B,EAA+BvjB,CAAC,CAACujB,CAAC,GAAC,CAAH,CAAD,GAAO39B,SAAS,CAAC29B,CAAD,CAAhB;;AAAoBA,GAAC,GAAC,CAAC,CAAH;;AAAK,OAAI,IAAIvL,CAAC,GAACl7B,CAAC,CAACvH,WAAF,CAAcmd,SAAxB,EAAkCslB,CAAlC,EAAoCA,CAAC,GAAC1+B,MAAM,CAAC60D,cAAP,CAAsBn2B,CAAtB,CAAtC,EAA+D,IAAGA,CAAC,CAACj7B,CAAD,CAAD,KAAO6vC,CAAV,EAAYrJ,CAAC,GAAC,CAAC,CAAH,CAAZ,KAAsB,IAAGA,CAAH,EAAK,OAAOvL,CAAC,CAACj7B,CAAD,CAAD,CAAKw8B,KAAL,CAAWz8B,CAAX,EAAakjB,CAAb,CAAP;;AAAuB,MAAGljB,CAAC,CAACC,CAAD,CAAD,KAAO6vC,CAAV,EAAY,OAAO9vC,CAAC,CAACvH,WAAF,CAAcmd,SAAd,CAAwB3V,CAAxB,EAA2Bw8B,KAA3B,CAAiCz8B,CAAjC,EAAmCkjB,CAAnC,CAAP;AAA6C,QAAM9kB,KAAK,CAAC,4EAAD,CAAX;AAA2F,CADzV;;AAC0V09D,IAAI,CAACX,KAAL,GAAW,UAASn7D,CAAT,EAAW;AAAC,MAAG87D,IAAI,CAACkB,iBAAL,EAAH,EAA4B,MAAM5+D,KAAK,CAAC,8CAAD,CAAX;AAA4D4B,GAAC,CAACyW,IAAF,CAAOqlD,IAAI,CAAC1gC,MAAZ;AAAoB,CAAnI;;AAC1VygC,QAAQ,KAAGC,IAAI,CAAC1gC,MAAL,CAAYygC,QAAZ,GAAqBA,QAAxB,CAAR;;AAA0CC,IAAI,CAACgI,WAAL,GAAiB,UAAS9jE,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAACjuB,CAAC,CAACxH,WAAR;AAAA,MAAoBq3C,CAAC,GAAC7vC,CAAC,CAAC8jE,OAAxB;AAAgC71C,GAAC,IAAEA,CAAC,IAAE1xB,MAAM,CAACoZ,SAAP,CAAiBnd,WAAvB,KAAqCy1B,CAAC,GAAC,YAAU;AAAC,UAAM9vB,KAAK,CAAC,2DAAD,CAAX;AAA0E,GAA5H;AAA8H8vB,GAAC,GAAC4tC,IAAI,CAACgI,WAAL,CAAiBE,yBAAjB,CAA2C91C,CAA3C,EAA6CluB,CAA7C,CAAF;AAAkDA,GAAC,IAAE87D,IAAI,CAAC6H,QAAL,CAAcz1C,CAAd,EAAgBluB,CAAhB,CAAH;AAAsB,SAAOC,CAAC,CAACxH,WAAT;AAAqB,SAAOwH,CAAC,CAAC8jE,OAAT;AAAiBjI,MAAI,CAACgI,WAAL,CAAiBG,gBAAjB,CAAkC/1C,CAAC,CAACtY,SAApC,EAA8C3V,CAA9C;AAAiD,UAAM6vC,CAAN,KAAUA,CAAC,YAAY0nB,QAAb,GAAsB1nB,CAAC,CAAC5hB,CAAD,CAAvB,GAA2B4tC,IAAI,CAACgI,WAAL,CAAiBG,gBAAjB,CAAkC/1C,CAAlC,EAAoC4hB,CAApC,CAArC;AAA6E,SAAO5hB,CAAP;AAAS,CAAlb;;AAC1C4tC,IAAI,CAACgI,WAAL,CAAiBI,oBAAjB,GAAsCpI,IAAI,CAACW,KAA3C;;AAAiDX,IAAI,CAACgI,WAAL,CAAiBE,yBAAjB,GAA2C,UAAShkE,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,CAAC67D,IAAI,CAACgI,WAAL,CAAiBI,oBAArB,EAA0C,OAAOlkE,CAAP;;AAAS,MAAIkuB,CAAC,GAAC,CAAC4tC,IAAI,CAACgI,WAAL,CAAiBK,aAAjB,CAA+BlkE,CAA/B,CAAP;AAAA,MAAyC6vC,CAAC,GAAC,YAAU;AAAC,QAAI7vC,CAAC,GAACD,CAAC,CAACy8B,KAAF,CAAQ,IAAR,EAAa3zB,SAAb,KAAyB,IAA/B;AAAoC7I,KAAC,CAAC67D,IAAI,CAAC8F,aAAN,CAAD,GAAsB3hE,CAAC,CAAC67D,IAAI,CAAC8F,aAAN,CAAvB;AAA4C,SAAKnpE,WAAL,KAAmBq3C,CAAnB,IAAsB5hB,CAAtB,IAAyB1xB,MAAM,CAACmkE,IAAP,YAAuBnJ,QAAhD,IAA0Dh7D,MAAM,CAACmkE,IAAP,CAAY1gE,CAAZ,CAA1D;AAAyE,WAAOA,CAAP;AAAS,GAAxN;;AAAyN,SAAO6vC,CAAP;AAAS,CAA9U;;AAA+UgsB,IAAI,CAACgI,WAAL,CAAiBK,aAAjB,GAA+B,UAASnkE,CAAT,EAAW;AAAC,SAAOA,CAAC,IAAEA,CAAC,CAAC4V,SAAL,IAAgB5V,CAAC,CAAC4V,SAAF,CAAYkmD,IAAI,CAACsI,gCAAjB,CAAvB;AAA0E,CAArH;;AAChYtI,IAAI,CAACgI,WAAL,CAAiBO,wBAAjB,GAA0C,gGAAgGpqD,KAAhG,CAAsG,GAAtG,CAA1C;;AAAqJ6hD,IAAI,CAACgI,WAAL,CAAiBG,gBAAjB,GAAkC,UAASjkE,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAI,IAAIiuB,CAAR,IAAajuB,CAAb,EAAezD,MAAM,CAACoZ,SAAP,CAAiB0C,cAAjB,CAAgC7B,IAAhC,CAAqCxW,CAArC,EAAuCiuB,CAAvC,MAA4CluB,CAAC,CAACkuB,CAAD,CAAD,GAAKjuB,CAAC,CAACiuB,CAAD,CAAlD;;AAAuD,OAAI,IAAI4hB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACgsB,IAAI,CAACgI,WAAL,CAAiBO,wBAAjB,CAA0CzkE,MAAxD,EAA+DkwC,CAAC,EAAhE,EAAmE5hB,CAAC,GAAC4tC,IAAI,CAACgI,WAAL,CAAiBO,wBAAjB,CAA0Cv0B,CAA1C,CAAF,EAA+CtzC,MAAM,CAACoZ,SAAP,CAAiB0C,cAAjB,CAAgC7B,IAAhC,CAAqCxW,CAArC,EAAuCiuB,CAAvC,MAA4CluB,CAAC,CAACkuB,CAAD,CAAD,GAAKjuB,CAAC,CAACiuB,CAAD,CAAlD,CAA/C;AAAsG,CAA/R;;AACrJ4tC,IAAI,CAACwI,kBAAL,GAAwB,UAAStkE,CAAT,EAAW;AAAC,GAAC67D,QAAD,IAAWC,IAAI,CAACgI,WAAL,CAAiBI,oBAA5B,KAAmDlkE,CAAC,CAAC4V,SAAF,CAAYkmD,IAAI,CAACsI,gCAAjB,IAAmD,CAAC,CAAvG;AAA0G,CAA9I;;AAA+ItI,IAAI,CAACsI,gCAAL,GAAsC,oCAAtC;AAC/I,CAACvI,QAAD,IAAWC,IAAI,CAACoD,oBAAhB,KAAuCpD,IAAI,CAACyI,eAAL,GAAqB,YAAU;AAAC,MAAIvkE,CAAC,GAAC87D,IAAI,CAAC1gC,MAAL,CAAYoiC,QAAlB;AAA2B,SAAO,QAAMx9D,CAAN,IAAS,WAAUA,CAA1B;AAA4B,CAAvF,EAAwF87D,IAAI,CAAC0I,kBAAL,GAAwB,YAAU;AAAC,MAAIxkE,CAAC,GAAC87D,IAAI,CAAC1gC,MAAL,CAAYoiC,QAAlB;AAA2B,SAAOx9D,CAAC,CAACykE,WAAF,GAAc,cAAYzkE,CAAC,CAAC0kE,UAA5B,GAAuC,aAAW1kE,CAAC,CAAC0kE,UAA3D;AAAsE,CAA5N,EAA6N5I,IAAI,CAAC6I,aAAL,GAAmB,YAAU;AAAC,MAAG7I,IAAI,CAACC,KAAL,CAAWD,IAAI,CAAC1gC,MAAL,CAAYwpC,iBAAvB,KAA2C9I,IAAI,CAAC9jD,QAAL,CAAc8jD,IAAI,CAAC1gC,MAAL,CAAYwpC,iBAA1B,CAA9C,EAA2F9I,IAAI,CAAC2D,QAAL,GAAc3D,IAAI,CAAC1gC,MAAL,CAAYwpC,iBAA1B,CAA3F,KAA4I,IAAG9I,IAAI,CAACyI,eAAL,EAAH,EAA0B;AAAC,QAAIvkE,CAAC,GAAC87D,IAAI,CAAC1gC,MAAL,CAAYoiC,QAAlB;AAAA,QAA2Bv9D,CAAC,GAACD,CAAC,CAAC6kE,aAA/B;AACzc7kE,KAAC,GAACC,CAAC,GAAC,CAACA,CAAD,CAAD,GAAKD,CAAC,CAAC8kE,oBAAF,CAAuB,QAAvB,CAAR;;AAAyC,SAAI7kE,CAAC,GAACD,CAAC,CAACJ,MAAF,GAAS,CAAf,EAAiB,KAAGK,CAApB,EAAsB,EAAEA,CAAxB,EAA0B;AAAC,UAAIiuB,CAAC,GAACluB,CAAC,CAACC,CAAD,CAAD,CAAK8kE,GAAX;AAAA,UAAej1B,CAAC,GAAC5hB,CAAC,CAACkvC,WAAF,CAAc,GAAd,CAAjB;AAAoCttB,OAAC,GAAC,CAAC,CAAD,IAAIA,CAAJ,GAAM5hB,CAAC,CAACtuB,MAAR,GAAekwC,CAAjB;;AAAmB,UAAG,aAAW5hB,CAAC,CAAChW,MAAF,CAAS43B,CAAC,GAAC,CAAX,EAAa,CAAb,CAAd,EAA8B;AAACgsB,YAAI,CAAC2D,QAAL,GAAcvxC,CAAC,CAAChW,MAAF,CAAS,CAAT,EAAW43B,CAAC,GAAC,CAAb,CAAd;AAA8B;AAAM;AAAC;AAAC;AAAC,CAD1J,EAC2JgsB,IAAI,CAAC6I,aAAL,EAD3J,EACgL7I,IAAI,CAACkJ,UAAL,GAAgB,YAAU;AAAC,OAAKC,sBAAL,GAA4B,IAA5B;AAAiC,OAAKC,oBAAL,GAA0BpJ,IAAI,CAACsE,qBAA/B;AAAqD,CADjS,EACkStE,IAAI,CAACkJ,UAAL,CAAgBpvD,SAAhB,CAA0BuvD,4BAA1B,GAAuD,YAAU;AAAC,WAASnlE,CAAT,CAAWA,CAAX,EAAaC,CAAb,EAAe;AAACijB,KAAC,GAAC4sB,CAAC,CAAC9vC,CAAD,CAAD,GAAK,CAAC,CAAP,GAASC,CAAC,MAAIiuB,CAAC,GAACluB,CAAF,EAAI8vC,CAAC,CAAC9vC,CAAD,CAAD,GAAK,CAAC,CAAd,IAAiBkjB,CAAC,GAAC4sB,CAAC,CAAC9vC,CAAD,CAAD,GAAK,CAAC,CAApC;AAAsC;;AAAA,WAASC,CAAT,CAAWD,CAAX,EAAa;AAAC,QAAG;AAAC,aAAM,CAAC,CAACm5D,IAAI,CAACn5D,CAAD,CAAZ;AAAgB,KAApB,CAAoB,OAAM2wC,CAAN,EAAQ;AAAC,aAAM,CAAC,CAAP;AAAS;AAAC;;AACtf,MAAIziB,CAAC,GAAC,KAAN;AAAA,MAAY4hB,CAAC,GAAC;AAACs1B,OAAG,EAAC,CAAC;AAAN,GAAd;AAAA,MAAuBliD,CAAC,GAAC,CAAC,CAA1B;AAAA,MAA4BujB,CAAC,GAACq1B,IAAI,CAAC1gC,MAAL,CAAYiqC,SAAZ,IAAuBvJ,IAAI,CAAC1gC,MAAL,CAAYiqC,SAAZ,CAAsBC,SAA7C,GAAuDxJ,IAAI,CAAC1gC,MAAL,CAAYiqC,SAAZ,CAAsBC,SAA7E,GAAuF,EAArH;AAAwHtlE,GAAC,CAAC,KAAD,EAAO,YAAU;AAAC,WAAOC,CAAC,CAAC,gBAAD,CAAR;AAA2B,GAA7C,CAAD;AAAgDD,GAAC,CAAC,KAAD,EAAO,YAAU;AAAC,WAAOymC,CAAC,CAAC1tB,KAAF,CAAQ,qBAAR,IAA+B,CAAC,CAAhC,GAAkC9Y,CAAC,CAAC,0RAAD,CAA1C;AAAuU,GAAzV,CAAD;AACxKD,GAAC,CAAC,KAAD,EAAO,YAAU;AAAC,WAAOC,CAAC,CAAC,aAAD,CAAR;AAAwB,GAA1C,CAAD;AAA6CD,GAAC,CAAC,KAAD,EAAO,YAAU;AAAC,WAAOC,CAAC,CAAC,qBAAD,CAAR;AAAgC,GAAlD,CAAD;AAAqDD,GAAC,CAAC,KAAD,EAAO,YAAU;AAAC,WAAOC,CAAC,CAAC,wBAAD,CAAR;AAAmC,GAArD,CAAD;AAAwDD,GAAC,CAAC,SAAD,EAAW,YAAU;AAAC,WAAM,CAAC,CAAP;AAAS,GAA/B,CAAD;AAAkC,SAAM;AAAC6hB,UAAM,EAACqM,CAAR;AAAUvxB,OAAG,EAACmzC;AAAd,GAAN;AAAuB,CAH5K,EAG6KgsB,IAAI,CAACkJ,UAAL,CAAgBpvD,SAAhB,CAA0B2vD,cAA1B,GAAyC,UAASvlE,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,YAAU67D,IAAI,CAACoE,SAAlB,EAA4B,OAAM,CAAC,CAAP;AAAS,MAAG,WAASpE,IAAI,CAACoE,SAAjB,EAA2B,OAAM,CAAC,CAAP;;AAAS,MAAG,CAAC,KAAK+E,sBAAT,EAAgC;AAAC,QAAI/2C,CAAC,GAAC,KAAKi3C,4BAAL,EAAN;AAA0C,SAAKF,sBAAL,GAA4B/2C,CAAC,CAACvxB,GAA9B;AAAkC,SAAKuoE,oBAAL,GAA0B,KAAKA,oBAAL,IAC3dh3C,CAAC,CAACrM,MAD+b;AACxb;;AAAA,MAAG7hB,CAAC,IAAI,KAAKilE,sBAAb,EAAoC,OAAO,KAAKA,sBAAL,CAA4BjlE,CAA5B,IAA+B,CAAC,CAAhC,GAAkC,CAAC87D,IAAI,CAACyI,eAAL,EAAD,IAAyB,SAAOtkE,CAAhC,IAAmC,cAAa67D,IAAI,CAAC1gC,MAAL,CAAYoiC,QAAZ,CAAqBkF,aAArB,CAAmC,QAAnC,CAAhD,GAA6F,CAAC,CAA9F,GAAgG,CAAC,CAA1I;AAA4I,QAAMtkE,KAAK,CAAC,4BAA0B4B,CAA3B,CAAX;AAA0C,CAJ5L,EAI6L87D,IAAI,CAACkJ,UAAL,CAAgBpvD,SAAhB,CAA0BwrD,SAA1B,GAAoC,UAASphE,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAACqF,UAAL,CAAgBnhE,CAAhB,EAAkBC,CAAlB,EAAoB,KAAKilE,oBAAzB,CAAP;AAAsD,CAJrS,EAIsSpJ,IAAI,CAAC0J,WAAL,GAAiB,IAAI1J,IAAI,CAACkJ,UAAT,EAJvT,EAI2UlJ,IAAI,CAAC2J,iBAAL,GAAuB,UAASzlE,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACkZ,OAAF,CAAU,eAAV,EAA0B,UAA1B,CAAP;AAA6C,CAJ3Z,EAI4Z4iD,IAAI,CAAC4J,YAAL,GAAkB,YAAU;AAAC,OAAKC,aAAL,GAAmB,EAAnB;AAChe,OAAKC,SAAL,GAAe,EAAf;AAAkB,OAAKC,QAAL,GAAc,EAAd;AAAiB,OAAKC,YAAL,GAAkB,EAAlB;AAAqB,OAAKC,WAAL,GAAiB,EAAjB;AAAoB,OAAKC,OAAL,GAAa,CAAC,CAAd;AAAgB,OAAKC,QAAL,GAAc,IAAInK,IAAI,CAACoK,iBAAT,CAA2BpK,IAAI,CAAC0J,WAAhC,CAAd;AAA2D,OAAKW,kBAAL,GAAwB,EAAxB;AAA2B,OAAKC,cAAL,GAAoB,EAApB;AAAuB,CALlK,EAKmKtK,IAAI,CAAC4J,YAAL,CAAkB9vD,SAAlB,CAA4BywD,SAA5B,GAAsC,UAASrmE,CAAT,EAAWC,CAAX,EAAa;AAAC,WAASiuB,CAAT,GAAY;AAAC4hB,KAAC,KAAGgsB,IAAI,CAAC1gC,MAAL,CAAYkrC,UAAZ,CAAuBx2B,CAAvB,EAAyB,CAAzB,GAA4BA,CAAC,GAAC,IAAjC,CAAD;AAAwC;;AAAA,MAAIA,CAAC,GAAC7vC,CAAN;;AAAQ,MAAGD,CAAC,CAACJ,MAAL,EAAY;AAACK,KAAC,GAAC,EAAF;;AAAK,SAAI,IAAIijB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACljB,CAAC,CAACJ,MAAhB,EAAuBsjB,CAAC,EAAxB,EAA2B;AAAC,UAAIujB,CAAC,GAAC,KAAK8/B,gBAAL,CAAsBvmE,CAAC,CAACkjB,CAAD,CAAvB,CAAN;AAAkC,UAAG,CAACujB,CAAJ,EAAM,MAAMroC,KAAK,CAAC,4BAA0B4B,CAAC,CAACkjB,CAAD,CAA5B,CAAX;AAA4CjjB,OAAC,CAACxB,IAAF,CAAO,KAAKknE,aAAL,CAAmBl/B,CAAnB,CAAP;AAA8B;;AAAAA,KAAC,GAACq1B,IAAI,CAAC9gD,OAAP;AAAe,QAAIkgB,CAAC,GAAC,CAAN;;AAAQ,SAAIhY,CAAC,GACvf,CADkf,EAChfA,CAAC,GAACljB,CAAC,CAACJ,MAD4e,EACresjB,CAAC,EADoe,EACjeujB,CAAC,CAACzmC,CAAC,CAACkjB,CAAD,CAAF,CAAD,EAAQjjB,CAAC,CAACijB,CAAD,CAAD,CAAKsjD,MAAL,CAAY,YAAU;AAAC,QAAEtrC,CAAF,IAAKl7B,CAAC,CAACJ,MAAP,IAAesuB,CAAC,EAAhB;AAAmB,KAA1C,CAAR;AAAoD,GADsP,MACjPA,CAAC;AAAG,CANvC,EAMwC4tC,IAAI,CAAC4J,YAAL,CAAkB9vD,SAAlB,CAA4B6wD,eAA5B,GAA4C,YAAU;AAAC,OAAKV,WAAL,CAAiBtnE,IAAjB,CAAsB,KAAKwnE,QAAL,CAAcS,gBAAd,CAA+B5K,IAAI,CAAC8E,cAAL,CAAoB9E,IAAI,CAAC2D,QAAL,GAAc,SAAlC,CAA/B,EAA4E,SAA5E,EAAsF,EAAtF,EAAyF,EAAzF,EAA4F,EAA5F,EAA+F,CAAC,CAAhG,CAAtB;AAA0H,OAAKkH,SAAL;AAAiB,CAN1O,EAM2O7K,IAAI,CAAC4J,YAAL,CAAkB9vD,SAAlB,CAA4B0pD,SAA5B,GAAsC,UAASt/D,CAAT,EAAWC,CAAX,EAAa;AAAC,GAACD,CAAC,GAAC,KAAKumE,gBAAL,CAAsBvmE,CAAtB,CAAH,MAA+BC,CAAC,IAAE,KAAK2mE,cAAL,CAAoB,KAAKjB,aAAL,CAAmB3lE,CAAnB,EAAsB6mE,QAA1C,CAAlC,MAAyF5mE,CAAC,GAAC,KAAKkmE,kBAAL,CAAwBnmE,CAAxB,CAA3F,MAAyH,OAAO,KAAKmmE,kBAAL,CAAwBnmE,CAAxB,CAAP,EAAkCC,CAAC,EAA5J;AAAgK,CAN/b,EAMgc67D,IAAI,CAAC4J,YAAL,CAAkB9vD,SAAlB,CAA4BkxD,oBAA5B,GACve,UAAS9mE,CAAT,EAAW;AAAC,OAAKimE,QAAL,GAAcjmE,CAAd;AAAgB,CAPW,EAOV87D,IAAI,CAAC4J,YAAL,CAAkB9vD,SAAlB,CAA4B2pD,KAA5B,GAAkC,UAASv/D,CAAT,EAAW;AAAC,MAAG,KAAKumE,gBAAL,CAAsBvmE,CAAtB,CAAH,EAA4B;AAAC,QAAIC,CAAC,GAAC,IAAN;AAAA,QAAWiuB,CAAC,GAAC,EAAb;AAAA,QAAgB4hB,CAAC,GAAC,UAAS9vC,CAAT,EAAW;AAAC,UAAIkjB,CAAC,GAACjjB,CAAC,CAACsmE,gBAAF,CAAmBvmE,CAAnB,CAAN;AAA4B,UAAG,CAACkjB,CAAJ,EAAM,MAAM9kB,KAAK,CAAC,oCAAkC4B,CAAnC,CAAX;;AAAiD,UAAG,CAACC,CAAC,CAAC4lE,QAAF,CAAW3iD,CAAX,CAAJ,EAAkB;AAACjjB,SAAC,CAAC4lE,QAAF,CAAW3iD,CAAX,IAAc,CAAC,CAAf;AAAiBljB,SAAC,GAACC,CAAC,CAAC0lE,aAAF,CAAgBziD,CAAhB,CAAF;;AAAqB,aAAIA,CAAC,GAAC,CAAN,EAAQA,CAAC,GAACljB,CAAC,CAAC6mE,QAAF,CAAWjnE,MAArB,EAA4BsjB,CAAC,EAA7B,EAAgC44C,IAAI,CAACmB,WAAL,CAAiBj9D,CAAC,CAAC6mE,QAAF,CAAW3jD,CAAX,CAAjB,KAAiC4sB,CAAC,CAAC9vC,CAAC,CAAC6mE,QAAF,CAAW3jD,CAAX,CAAD,CAAlC;;AAAkDgL,SAAC,CAACzvB,IAAF,CAAOuB,CAAP;AAAU;AAAC,KAAvQ;;AAAwQ8vC,KAAC,CAAC9vC,CAAD,CAAD;AAAKA,KAAC,GAAC,CAAC,CAAC,KAAK+lE,WAAL,CAAiBnmE,MAArB;AAA4B,SAAKmmE,WAAL,GAAiB,KAAKA,WAAL,CAAiBnvC,MAAjB,CAAwB1I,CAAxB,CAAjB;AAA4C,SAAK83C,OAAL,IAAchmE,CAAd,IAAiB,KAAK2mE,SAAL,EAAjB;AAAkC,GAApZ,MAAyZ,MAAM3mE,CAAC,GAAC,kCAC5eA,CAD0e,EACxe87D,IAAI,CAACuD,aAAL,CAAmBr/D,CAAnB,CADwe,EACld5B,KAAK,CAAC4B,CAAD,CADuc;AAClc,CARK,EAQJ87D,IAAI,CAAC4J,YAAL,CAAkB9vD,SAAlB,CAA4B+wD,SAA5B,GAAsC,YAAU;AAAC,OAAI,IAAI3mE,CAAC,GAAC,IAAN,EAAWC,CAAC,GAAC,KAAK+lE,OAAtB,EAA8B,KAAKD,WAAL,CAAiBnmE,MAAjB,IAAyB,CAACK,CAAxD,GAA2D,CAAC,YAAU;AAAC,QAAIiuB,CAAC,GAAC,CAAC,CAAP;AAAA,QAAS4hB,CAAC,GAAC9vC,CAAC,CAAC+lE,WAAF,CAAczlE,KAAd,EAAX;AAAA,QAAiC4iB,CAAC,GAAC,CAAC,CAApC;AAAsCljB,KAAC,CAAC+mE,QAAF,CAAWj3B,CAAX;AAAc,QAAIrJ,CAAC,GAAC;AAACugC,WAAK,EAAC,YAAU;AAAC,YAAG94C,CAAH,EAAK,MAAM9vB,KAAK,CAAC,2CAAD,CAAX;AAAyD6B,SAAC,GAAC,CAAC,CAAH;AAAK,OAArF;AAAsFgnE,YAAM,EAAC,YAAU;AAAC/4C,SAAC,GAACluB,CAAC,CAACknE,OAAF,EAAD,GAAajnE,CAAC,GAAC,CAAC,CAAjB;AAAmB,OAA3H;AAA4HknE,YAAM,EAAC,YAAU;AAAC,YAAGjkD,CAAH,EAAK,MAAM9kB,KAAK,CAAC,wBAAD,CAAX;AAAsC8kB,SAAC,GAAC,CAAC,CAAH;AAAKljB,SAAC,CAAConE,OAAF,CAAUt3B,CAAV;AAAa,OAA3M;AAA4Mu3B,aAAO,EAAC,YAAU;AAAC,aAAI,IAAIpnE,CAAC,GAAC,EAAN,EAASiuB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAACluB,CAAC,CAAC8lE,YAAF,CAAelmE,MAAlC,EAAyCsuB,CAAC,EAA1C,EAA6CjuB,CAAC,CAACxB,IAAF,CAAOuB,CAAC,CAAC8lE,YAAF,CAAe53C,CAAf,CAAP;;AACje,eAAOjuB,CAAP;AAAS,OAD4M;AAC3MqnE,oBAAc,EAAC,UAAStnE,CAAT,EAAW;AAAC87D,YAAI,CAACmC,kBAAL,GAAwB;AAACloD,cAAI,EAAC/V,CAAN;AAAQk+D,oBAAU,EAAC,EAAnB;AAAsBQ,gCAAsB,EAAC,CAAC;AAA9C,SAAxB;AAAyE,OADuG;AACtG6I,8BAAwB,EAAC,UAASvnE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACA,SAAC,KAAG4tC,IAAI,CAACsC,cAAL,CAAoBlwC,CAApB,IAAuB;AAACrT,iBAAO,EAAC5a,CAAT;AAAW8V,cAAI,EAAC+lD,IAAI,CAACuC,UAAL,CAAgBC,GAAhC;AAAoCM,kBAAQ,EAAC1wC,CAAC,IAAE;AAAhD,SAA1B,CAAD;AAAgF,OADnB;AACoBs5C,+BAAyB,EAAC,UAASxnE,CAAT,EAAWC,CAAX,EAAa;AAAC67D,YAAI,CAACsC,cAAL,CAAoBp+D,CAApB,IAAuB;AAAC6a,iBAAO,EAAC5a,CAAT;AAAW8V,cAAI,EAAC+lD,IAAI,CAACuC,UAAL,CAAgBE,IAAhC;AAAqCK,kBAAQ,EAAC5+D;AAA9C,SAAvB;AAAwE,OADpI;AACqIynE,sBAAgB,EAAC,YAAU;AAAC3L,YAAI,CAACmC,kBAAL,GAAwB,IAAxB;AAA6B,OAD9L;AAC+L0E,WAAK,EAAC,UAAS1iE,CAAT,EAAW;AAAC,YAAGiuB,CAAH,EAAK,MAAM9vB,KAAK,CAAC,oDAAD,CAAX;AAAkE4B,SAAC,CAAC0nE,MAAF,CAAS53B,CAAT,EAC7e7vC,CAD6e;AAC1e,OAFkN;AAEjN0nE,mBAAa,EAAC,YAAU;AAAC,eAAO3nE,CAAC,CAAC4mE,cAAF,CAAiB92B,CAAC,CAAC+2B,QAAnB,CAAP;AAAoC;AAFoJ,KAAN;;AAE5I,QAAG;AAAC/2B,OAAC,CAAC83B,IAAF,CAAOnhC,CAAP;AAAU,KAAd,SAAqB;AAACvY,OAAC,GAAC,CAAC,CAAH;AAAK;AAAC,GAFgD;;AAE5CjuB,GAAC,IAAE,KAAK4nE,MAAL,EAAH;AAAiB,CAV7E,EAU8E/L,IAAI,CAAC4J,YAAL,CAAkB9vD,SAAlB,CAA4BiyD,MAA5B,GAAmC,YAAU;AAAC,OAAK7B,OAAL,GAAa,CAAC,CAAd;AAAgB,CAV5I,EAU6IlK,IAAI,CAAC4J,YAAL,CAAkB9vD,SAAlB,CAA4BsxD,OAA5B,GAAoC,YAAU;AAAC,OAAKlB,OAAL,KAAe,KAAKA,OAAL,GAAa,CAAC,CAAd,EAAgB,KAAKW,SAAL,EAA/B;AAAiD,CAV7O,EAU8O7K,IAAI,CAAC4J,YAAL,CAAkB9vD,SAAlB,CAA4BmxD,QAA5B,GAAqC,UAAS/mE,CAAT,EAAW;AAAC,OAAK8lE,YAAL,CAAkBrnE,IAAlB,CAAuBuB,CAAvB;AAA0B,CAVzT,EAU0T87D,IAAI,CAAC4J,YAAL,CAAkB9vD,SAAlB,CAA4BwxD,OAA5B,GAAoC,UAASpnE,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC,CAAV,EAAYA,CAAC,GAAC,KAAK6lE,YAAL,CAAkBlmE,MAAhC,EAAuCK,CAAC,EAAxC,EAA2C,IAAG,KAAK6lE,YAAL,CAAkB7lE,CAAlB,KAAsBD,CAAzB,EAA2B;AAAC,SAAK8lE,YAAL,CAAkB/jE,MAAlB,CAAyB9B,CAAzB,EAA2B,CAA3B;AACxd;AAAM;;AAAA,OAAIA,CAAC,GAAC,CAAN,EAAQA,CAAC,GAAC,KAAKmmE,cAAL,CAAoBxmE,MAA9B,EAAqCK,CAAC,EAAtC,EAAyC,IAAG,KAAKmmE,cAAL,CAAoBnmE,CAApB,KAAwBD,CAAC,CAAC4zB,IAA7B,EAAkC;AAAC,SAAKwyC,cAAL,CAAoBrkE,MAApB,CAA2B9B,CAA3B,EAA6B,CAA7B;AAAgC;AAAM;;AAAA,MAAG,KAAK6lE,YAAL,CAAkBlmE,MAAlB,IAA0B,KAAKwmE,cAAL,CAAoBxmE,MAA9C,IAAsD,CAAC,KAAKmmE,WAAL,CAAiBnmE,MAA3E,EAAkF,OAAK,KAAKwmE,cAAL,CAAoBxmE,MAAzB,GAAiC,KAAK0/D,SAAL,CAAe,KAAK8G,cAAL,CAAoB9lE,KAApB,EAAf,EAA2C,CAAC,CAA5C;AAA+CN,GAAC,CAACmnE,MAAF;AAAW,CAX9P,EAW+PrL,IAAI,CAAC4J,YAAL,CAAkB9vD,SAAlB,CAA4BgxD,cAA5B,GAA2C,UAAS5mE,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACD,CAAC,CAACJ,MAAhB,EAAuBK,CAAC,EAAxB,EAA2B;AAAC,QAAIiuB,CAAC,GAAC,KAAKq4C,gBAAL,CAAsBvmE,CAAC,CAACC,CAAD,CAAvB,CAAN;AAAkC,QAAG,CAACiuB,CAAD,IAAI,EAAEA,CAAC,IAAI,KAAKi4C,kBAAV,IAA8BrK,IAAI,CAACmB,WAAL,CAAiBj9D,CAAC,CAACC,CAAD,CAAlB,CAAhC,CAAP,EAA+D,OAAM,CAAC,CAAP;AAAS;;AAAA,SAAM,CAAC,CAAP;AAAS,CAXrc,EAWsc67D,IAAI,CAAC4J,YAAL,CAAkB9vD,SAAlB,CAA4B2wD,gBAA5B,GAC7e,UAASvmE,CAAT,EAAW;AAAC,SAAOA,CAAC,IAAI,KAAK4lE,SAAV,GAAoB,KAAKA,SAAL,CAAe5lE,CAAf,CAApB,GAAsCA,CAAC,IAAI,KAAK2lE,aAAV,GAAwB3lE,CAAxB,GAA0B,IAAvE;AAA4E,CAZjD,EAYkD87D,IAAI,CAAC4J,YAAL,CAAkB9vD,SAAlB,CAA4B8xD,MAA5B,GAAmC,UAAS1nE,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAKkmE,kBAAL,CAAwBnmE,CAAC,CAAC4zB,IAA1B,IAAgC3zB,CAAhC;AAAkC,OAAKmmE,cAAL,CAAoB3nE,IAApB,CAAyBuB,CAAC,CAAC4zB,IAA3B;AAAiC,CAZtK,EAYuKkoC,IAAI,CAACgM,cAAL,GAAoB,YAAU,CAAE,CAZvM,EAYwMhM,IAAI,CAACgM,cAAL,CAAoBlyD,SAApB,CAA8BoxD,KAA9B,GAAoC,YAAU,CAAE,CAZxP,EAYyPlL,IAAI,CAACgM,cAAL,CAAoBlyD,SAApB,CAA8BqxD,MAA9B,GAAqC,YAAU,CAAE,CAZ1S,EAY2SnL,IAAI,CAACgM,cAAL,CAAoBlyD,SAApB,CAA8BuxD,MAA9B,GAAqC,YAAU,CAAE,CAZ5V,EAY6VrL,IAAI,CAACgM,cAAL,CAAoBlyD,SAApB,CAA8ByxD,OAA9B,GAAsC,YAAU,CAAE,CAZ/Y,EAYgZvL,IAAI,CAACgM,cAAL,CAAoBlyD,SAApB,CAA8B2xD,wBAA9B,GAAuD,UAASvnE,CAAT,EAC9eC,CAD8e,EAC5eiuB,CAD4e,EAC1e,CAAE,CAbiC,EAahC4tC,IAAI,CAACgM,cAAL,CAAoBlyD,SAApB,CAA8B0xD,cAA9B,GAA6C,UAAStnE,CAAT,EAAW,CAAE,CAb1B,EAa2B87D,IAAI,CAACgM,cAAL,CAAoBlyD,SAApB,CAA8B6xD,gBAA9B,GAA+C,YAAU,CAAE,CAbtF,EAauF3L,IAAI,CAACgM,cAAL,CAAoBlyD,SAApB,CAA8B+sD,KAA9B,GAAoC,UAAS3iE,CAAT,EAAW,CAAE,CAbxI,EAayI87D,IAAI,CAACgM,cAAL,CAAoBlyD,SAApB,CAA8B+xD,aAA9B,GAA4C,YAAU,CAAE,CAbjM,EAakM7L,IAAI,CAACiM,UAAL,GAAgB,UAAS/nE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmB;AAAC,OAAK0Q,IAAL,GAAU5zB,CAAV;AAAY,OAAKgoE,YAAL,GAAkB/nE,CAAlB;AAAoB,OAAKgoE,QAAL,GAAc/5C,CAAd;AAAgB,OAAK24C,QAAL,GAAc/2B,CAAd;AAAgB,OAAKo4B,SAAL,GAAehlD,CAAf;AAAiB,OAAKkkD,OAAL,GAAa,CAAC,CAAd;AAAgB,OAAKe,cAAL,GAAoB,EAApB;AAAuB,CAb9V,EAa+VrM,IAAI,CAACiM,UAAL,CAAgBnyD,SAAhB,CAA0BwyD,WAA1B,GAAsC,YAAU;AAAC,MAAIpoE,CAAC,GAAC,KAAK4zB,IAAX;AAAA,MAAgB3zB,CAAC,GAACD,CAAC,CAAC4H,OAAF,CAAU,KAAV,CAAlB;AAAmC,OAAG3H,CAAH,KAAOD,CAAC,GAACA,CAAC,CAAC88C,SAAF,CAAY78C,CAAC,GAAC,CAAd,CAAF,EAAmBA,CAAC,GACrfD,CAAC,CAAC4H,OAAF,CAAU,GAAV,CADie,EACld,KAAG3H,CAAH,KAAOD,CAAC,GAACA,CAAC,CAAC88C,SAAF,CAAY78C,CAAC,GAAC,CAAd,CAAT,CAD2c;AAC/a,SAAOD,CAAP;AAAS,CAdb,EAcc87D,IAAI,CAACiM,UAAL,CAAgBnyD,SAAhB,CAA0B4wD,MAA1B,GAAiC,UAASxmE,CAAT,EAAW;AAAC,OAAKonE,OAAL,GAAapnE,CAAC,EAAd,GAAiB,KAAKmoE,cAAL,CAAoB1pE,IAApB,CAAyBuB,CAAzB,CAAjB;AAA6C,CAdxG,EAcyG87D,IAAI,CAACiM,UAAL,CAAgBnyD,SAAhB,CAA0BuxD,MAA1B,GAAiC,YAAU;AAAC,OAAKC,OAAL,GAAa,CAAC,CAAd;AAAgB,MAAIpnE,CAAC,GAAC,KAAKmoE,cAAX;AAA0B,OAAKA,cAAL,GAAoB,EAApB;;AAAuB,OAAI,IAAIloE,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACD,CAAC,CAACJ,MAAhB,EAAuBK,CAAC,EAAxB,EAA2BD,CAAC,CAACC,CAAD,CAAD;AAAO,CAdxP,EAcyP67D,IAAI,CAACiM,UAAL,CAAgBL,MAAhB,GAAuB,CAAC,CAdjR,EAcmR5L,IAAI,CAACiM,UAAL,CAAgBM,YAAhB,GAA6B,EAdhT,EAcmTvM,IAAI,CAACiM,UAAL,CAAgBO,iBAAhB,GAAkC,UAAStoE,CAAT,EAAW;AAAC,MAAIC,CAAC,GAACoI,IAAI,CAACqlB,MAAL,GAAclX,QAAd,CAAuB,EAAvB,CAAN;AAAiCslD,MAAI,CAACiM,UAAL,CAAgBM,YAAhB,CAA6BpoE,CAA7B,IAAgCD,CAAhC;AAAkC,SAAOC,CAAP;AAAS,CAd7a,EAc8a67D,IAAI,CAACiM,UAAL,CAAgBQ,mBAAhB,GACrd,UAASvoE,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACiM,UAAL,CAAgBM,YAAhB,CAA6BroE,CAA7B,CAAP;AAAuC,CAfZ,EAea87D,IAAI,CAACiM,UAAL,CAAgBS,SAAhB,GAA0B,UAASxoE,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAGD,CAAC,IAAI87D,IAAI,CAACiM,UAAL,CAAgBM,YAAxB,EAAqC;AAAC,SAAI,IAAIn6C,CAAC,GAAC4tC,IAAI,CAACiM,UAAL,CAAgBM,YAAhB,CAA6BroE,CAA7B,CAAN,EAAsC8vC,CAAC,GAAC,EAAxC,EAA2C5sB,CAAC,GAAC,CAAjD,EAAmDA,CAAC,GAACpa,SAAS,CAAClJ,MAA/D,EAAsEsjB,CAAC,EAAvE,EAA0E4sB,CAAC,CAACrxC,IAAF,CAAOqK,SAAS,CAACoa,CAAD,CAAhB;;AAAqBgL,KAAC,CAACuO,KAAF,CAAQ,KAAK,CAAb,EAAeqT,CAAf;AAAkB,GAAvJ,MAA4J,MAAM1xC,KAAK,CAAC,kBAAgB4B,CAAhB,GAAkB,uDAAnB,CAAX;AAAwF,CAfzS,EAe0S87D,IAAI,CAACiM,UAAL,CAAgBnyD,SAAhB,CAA0BgyD,IAA1B,GAA+B,UAAS5nE,CAAT,EAAW;AAAC,MAAG87D,IAAI,CAAC1gC,MAAL,CAAYqtC,qBAAf,EAAqC3M,IAAI,CAAC1gC,MAAL,CAAYqtC,qBAAZ,CAAkC,KAAK70C,IAAvC,IAA6C5zB,CAAC,CAACmnE,MAAF,EAA7C,GAAwDnnE,CAAC,CAACgnE,KAAF,EAAxD,CAArC,KAA4G,IAAGlL,IAAI,CAACyI,eAAL,EAAH,EAA0B;AAAC,QAAItkE,CAAC,GACxgB67D,IAAI,CAAC1gC,MAAL,CAAYoiC,QADuf;;AAC9e,QAAG,cAAYv9D,CAAC,CAACykE,UAAd,IAA0B,CAAC5I,IAAI,CAACgB,qCAAnC,EAAyE;AAAC,UAAG,aAAa19C,IAAb,CAAkB,KAAKwU,IAAvB,CAAH,EAAgC;AAAC5zB,SAAC,CAACmnE,MAAF;AAAW;AAAO;;AAAA,YAAM/oE,KAAK,CAAC,mBAAiB,KAAKw1B,IAAtB,GAA2B,uBAA5B,CAAX;AAAiE;;AAAA,QAAG,CAACkoC,IAAI,CAACgB,qCAAN,IAA6ChB,IAAI,CAAC0I,kBAAL,EAAhD,EAA0E;AAAC,UAAIt2C,CAAC,GAAC4tC,IAAI,CAACiM,UAAL,CAAgBO,iBAAhB,CAAkC,UAASroE,CAAT,EAAW;AAAC67D,YAAI,CAAC4J,YAAL,CAAkBgD,UAAlB,IAA8B,cAAYzoE,CAAC,CAACykE,UAA5C,KAAyD5I,IAAI,CAACiM,UAAL,CAAgBQ,mBAAhB,CAAoCr6C,CAApC,GAAuCluB,CAAC,CAACmnE,MAAF,EAAhG;AAA4G,OAA1J,CAAN;AAAA,UAAkKr3B,CAAC,GAAC,CAACgsB,IAAI,CAAC4J,YAAL,CAAkBgD,UAAnB,IAA+B5M,IAAI,CAACwB,cAAL,EAA/B,GAClc,aAAWxB,IAAI,CAACwB,cAAL,EAAX,GAAiC,GADia,GAC7Z,EADyP;AACtPxtB,OAAC,GAAC,kBAAgB,KAAKlc,IAArB,GAA0B,IAA1B,IAAgCkoC,IAAI,CAAC4J,YAAL,CAAkBgD,UAAlB,GAA6B,oBAA7B,GAAkD,QAAlF,IAA4F,gCAA5F,GAA6Hx6C,CAA7H,GAA+H,oCAA/H,IAAqK4tC,IAAI,CAACiM,UAAL,CAAgBL,MAAhB,GAAuB,OAAvB,GAA+B,EAApM,IAAwM53B,CAAxM,GAA0M,eAA5M;AAA4N7vC,OAAC,CAACm2B,KAAF,CAAQ0lC,IAAI,CAAC6M,qBAAL,GAA2B7M,IAAI,CAAC6M,qBAAL,CAA2BC,UAA3B,CAAsC94B,CAAtC,CAA3B,GAAoEA,CAA5E;AAA+E,KADhI,MACoI;AAAC,UAAI5sB,CAAC,GAACjjB,CAAC,CAACyiE,aAAF,CAAgB,QAAhB,CAAN;AAAgCx/C,OAAC,CAACy/C,KAAF,GAAQ7G,IAAI,CAACiM,UAAL,CAAgBL,MAAxB;AAA+BxkD,OAAC,CAACiV,KAAF,GAAQ,CAAC,CAAT;AAAWjV,OAAC,CAACnN,IAAF,GAAO,iBAAP;AAAyB,OAAC+5B,CAAC,GAACgsB,IAAI,CAACwB,cAAL,EAAH,KAA2Bp6C,CAAC,CAAC2lD,YAAF,CAAe,OAAf,EAAuB/4B,CAAvB,CAA3B;AAAqDgsB,UAAI,CAAC4J,YAAL,CAAkBgD,UAAlB,IAC/e1oE,CAAC,CAACgnE,KAAF,IAAU9jD,CAAC,CAAC4lD,kBAAF,GAAqB,YAAU;AAAC,YAAG,YAAU5lD,CAAC,CAACwhD,UAAZ,IAAwB,cAAYxhD,CAAC,CAACwhD,UAAzC,EAAoD1kE,CAAC,CAACmnE,MAAF,IAAWnnE,CAAC,CAACinE,MAAF,EAAX;AAAsB,OAD2X,IACzX/jD,CAAC,CAAC6lD,MAAF,GAAS,YAAU;AAAC7lD,SAAC,CAAC6lD,MAAF,GAAS,IAAT;AAAc/oE,SAAC,CAACmnE,MAAF;AAAW,OAD4U;AAC3UjkD,OAAC,CAAC6hD,GAAF,GAAMjJ,IAAI,CAAC6M,qBAAL,GAA2B7M,IAAI,CAAC6M,qBAAL,CAA2BK,eAA3B,CAA2C,KAAKp1C,IAAhD,CAA3B,GAAiF,KAAKA,IAA5F;AAAiG3zB,OAAC,CAAC6iE,IAAF,CAAOF,WAAP,CAAmB1/C,CAAnB;AAAsB;AAAC,GAH2M,MAGtM44C,IAAI,CAACuD,aAAL,CAAmB,4DAAnB,GAAiF,aAAW,KAAK2I,YAAhB,IAA8BlM,IAAI,CAACuD,aAAL,CAAmB,oGAAnB,GACjZr/D,CAAC,CAACmnE,MAAF,EADmX,IACvWnnE,CAAC,CAACgnE,KAAF,EADsR;AAC5Q,CAnBiB,EAmBhBlL,IAAI,CAACmN,mBAAL,GAAyB,UAASjpE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmB;AAAC44C,MAAI,CAACiM,UAAL,CAAgBtxD,IAAhB,CAAqB,IAArB,EAA0BzW,CAA1B,EAA4BC,CAA5B,EAA8BiuB,CAA9B,EAAgC4hB,CAAhC,EAAkC5sB,CAAlC;AAAqC,CAnBlE,EAmBmE44C,IAAI,CAAC6H,QAAL,CAAc7H,IAAI,CAACmN,mBAAnB,EAAuCnN,IAAI,CAACiM,UAA5C,CAnBnE,EAmB2HjM,IAAI,CAACmN,mBAAL,CAAyBrzD,SAAzB,CAAmCgyD,IAAnC,GAAwC,UAAS5nE,CAAT,EAAW;AAAC,WAASC,CAAT,CAAWD,CAAX,EAAaC,CAAb,EAAe;AAACD,KAAC,GAACC,CAAC,GAAC,uCAAqCA,CAArC,GAAuC,cAAxC,GAAuD,4CAA0CD,CAA1C,GAA4C,gBAAtG;AAAuH8vC,KAAC,CAAC1Z,KAAF,CAAQ0lC,IAAI,CAAC6M,qBAAL,GAA2B7M,IAAI,CAAC6M,qBAAL,CAA2BC,UAA3B,CAAsC5oE,CAAtC,CAA3B,GAAoEA,CAA5E;AAA+E;;AAAA,WAASkuB,CAAT,CAAWluB,CAAX,EAAaC,CAAb,EAAe;AAAC,QAAIiuB,CAAC,GAAC4hB,CAAC,CAAC4yB,aAAF,CAAgB,QAAhB,CAAN;AAAgCx0C,KAAC,CAACy0C,KAAF,GAAQ,CAAC,CAAT;AAAWz0C,KAAC,CAACiK,KAAF,GAAQ,CAAC,CAAT;AAAWjK,KAAC,CAACnY,IAAF,GAClf,QADkf;AACzemY,KAAC,CAAC26C,YAAF,CAAe,aAAf,EAA6B,CAAC,CAA9B;AAAiC,QAAI3lD,CAAC,GAAC44C,IAAI,CAACwB,cAAL,EAAN;AAA4Bp6C,KAAC,IAAEgL,CAAC,CAAC26C,YAAF,CAAe,OAAf,EAAuB3lD,CAAvB,CAAH;AAA6BjjB,KAAC,GAACiuB,CAAC,CAACg7C,WAAF,GAAcpN,IAAI,CAAC6M,qBAAL,GAA2B7M,IAAI,CAAC6M,qBAAL,CAA2BQ,YAA3B,CAAwClpE,CAAxC,CAA3B,GAAsEA,CAArF,GAAuFiuB,CAAC,CAAC62C,GAAF,GAAMjJ,IAAI,CAAC6M,qBAAL,GAA2B7M,IAAI,CAAC6M,qBAAL,CAA2BK,eAA3B,CAA2ChpE,CAA3C,CAA3B,GAAyEA,CAAvK;AAAyK8vC,KAAC,CAACgzB,IAAF,CAAOF,WAAP,CAAmB10C,CAAnB;AAAsB;;AAAA,MAAG4tC,IAAI,CAAC1gC,MAAL,CAAYqtC,qBAAf,EAAqC3M,IAAI,CAAC1gC,MAAL,CAAYqtC,qBAAZ,CAAkC,KAAK70C,IAAvC,IAA6C5zB,CAAC,CAACmnE,MAAF,EAA7C,GAAwDnnE,CAAC,CAACgnE,KAAF,EAAxD,CAArC,KAA4G,IAAGlL,IAAI,CAACyI,eAAL,EAAH,EAA0B;AAAC,QAAIz0B,CAAC,GAACgsB,IAAI,CAAC1gC,MAAL,CAAYoiC,QAAlB;AAAA,QAA2Bt6C,CAAC,GAAC,IAA7B;;AAAkC,QAAG44C,IAAI,CAAC0I,kBAAL,EAAH,EAA6B;AAAC,UAAI/9B,CAAC,GAACxmC,CAAN;AAAQ67D,UAAI,CAACiM,UAAL,CAAgBL,MAAhB,GACjf,CAAC,CADgf;AAC9e,KADwc,MACncjhC,CAAC,GAACvY,CAAF;;AAAI,QAAIgN,CAAC,GAAC4gC,IAAI,CAACiM,UAAL,CAAgBO,iBAAhB,CAAkC,YAAU;AAACxM,UAAI,CAACiM,UAAL,CAAgBQ,mBAAhB,CAAoCrtC,CAApC;AAAuCl7B,OAAC,CAACsnE,cAAF,CAAiBxL,IAAI,CAACuC,UAAL,CAAgBC,GAAjC;AAAsC,KAA1H,CAAN;AAAkI73B,KAAC,CAAC,KAAK,CAAN,EAAQ,gCAA8BvL,CAA9B,GAAgC,IAAxC,CAAD;AAA+CuL,KAAC,CAAC,KAAK7S,IAAN,EAAW,KAAK,CAAhB,CAAD;AAAoB,QAAI+c,CAAC,GAACmrB,IAAI,CAACiM,UAAL,CAAgBO,iBAAhB,CAAkC,UAASroE,CAAT,EAAW;AAAC67D,UAAI,CAACiM,UAAL,CAAgBQ,mBAAhB,CAAoC53B,CAApC;AAAuC3wC,OAAC,CAACunE,wBAAF,CAA2BrkD,CAAC,CAAC0Q,IAA7B,EAAkC3zB,CAAlC,EAAoC67D,IAAI,CAACmC,kBAAL,CAAwBC,UAA5D;AAAwE,KAA7J,CAAN;AAAqKz3B,KAAC,CAAC,KAAK,CAAN,EAAQ,yBAAuB,KAAK7S,IAA5B,GAAiC,gCAAjC,GAAkE+c,CAAlE,GAAoE,OAA5E,CAAD;AAAsF,QAAI5iB,CAAC,GAAC+tC,IAAI,CAACiM,UAAL,CAAgBO,iBAAhB,CAAkC,YAAU;AAACxM,UAAI,CAACiM,UAAL,CAAgBQ,mBAAhB,CAAoCx6C,CAApC;AAC/f/tB,OAAC,CAACynE,gBAAF;AAAqBznE,OAAC,CAACmnE,MAAF;AAAW,KADkb,CAAN;AAC1a1gC,KAAC,CAAC,KAAK,CAAN,EAAQ,gCAA8B1Y,CAA9B,GAAgC,IAAxC,CAAD;AAA+C,GAF6T,MAExT+tC,IAAI,CAACuD,aAAL,CAAmB,4DAAnB,GAAiFr/D,CAAC,CAACgnE,KAAF,EAAjF;AAA2F,CAtB1I,EAsB2IlL,IAAI,CAACsN,qBAAL,GAA2B,UAASppE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmB;AAAC44C,MAAI,CAACiM,UAAL,CAAgBtxD,IAAhB,CAAqB,IAArB,EAA0BzW,CAA1B,EAA4BC,CAA5B,EAA8BiuB,CAA9B,EAAgC4hB,CAAhC,EAAkC5sB,CAAlC;AAAqC,OAAKmmD,SAAL,GAAe,IAAf;AAAoB,OAAKC,UAAL,GAAgB,CAACxN,IAAI,CAACyI,eAAL,EAAD,IAAyB,EAAE,cAAazI,IAAI,CAAC1gC,MAAL,CAAYoiC,QAAZ,CAAqBkF,aAArB,CAAmC,QAAnC,CAAf,CAAzC;AAAsG,CAtBzV,EAsB0V5G,IAAI,CAAC6H,QAAL,CAAc7H,IAAI,CAACsN,qBAAnB,EAAyCtN,IAAI,CAACiM,UAA9C,CAtB1V,EAsBoZjM,IAAI,CAACsN,qBAAL,CAA2BxzD,SAA3B,CAAqCgyD,IAArC,GAA0C,UAAS5nE,CAAT,EAAW;AAAC,WAASC,CAAT,GAAY;AAACijB,KAAC,CAACmmD,SAAF,GAC9fvN,IAAI,CAAC+E,aAAL,CAAmB39C,CAAC,CAAC0Q,IAArB,CAD8f;AACne1Q,KAAC,CAACmmD,SAAF,KAAcnmD,CAAC,CAACmmD,SAAF,GAAYnmD,CAAC,CAACqmD,SAAF,CAAYrmD,CAAC,CAACmmD,SAAd,CAAZ,EAAqCnmD,CAAC,CAACmmD,SAAF,KAAcnmD,CAAC,CAACmmD,SAAF,IAAa,qBAAmBnmD,CAAC,CAAC0Q,IAAhD,CAAnD;AAA0G;;AAAA,WAAS1F,CAAT,GAAY;AAAChL,KAAC,CAAComD,UAAF,IAAcrpE,CAAC,EAAf;;AAAkB,QAAGijB,CAAC,CAACmmD,SAAL,EAAe;AAAC5iC,OAAC,IAAEzmC,CAAC,CAACsnE,cAAF,CAAiBxL,IAAI,CAACuC,UAAL,CAAgBC,GAAjC,CAAH;;AAAyC,UAAG;AAAC,YAAIpwC,CAAC,GAAChL,CAAC,CAACmmD,SAAR;AAAkBnmD,SAAC,CAACmmD,SAAF,GAAY,IAAZ;AAAiBvN,YAAI,CAACyG,UAAL,CAAgBr0C,CAAhB;AAAmB,YAAGuY,CAAH,EAAK,IAAIqJ,CAAC,GAACgsB,IAAI,CAACmC,kBAAL,CAAwBC,UAA9B;AAAyC,OAAxG,SAA+G;AAACz3B,SAAC,IAAEzmC,CAAC,CAACynE,gBAAF,EAAH;AAAwB;;AAAAhhC,OAAC,IAAEq1B,IAAI,CAAC1gC,MAAL,CAAY8/B,OAAZ,CAAoBlgD,OAApB,CAA4BwuD,MAA5B,CAAmC,CAACtmD,CAAC,CAACklD,WAAF,EAAD,CAAnC,EAAqD,YAAU;AAACpoE,SAAC,CAACunE,wBAAF,CAA2BrkD,CAAC,CAAC0Q,IAA7B,EAAkCkoC,IAAI,CAAC1gC,MAAL,CAAY8/B,OAAZ,CAAoBlgD,OAApB,CAA4BkI,CAAC,CAACklD,WAAF,EAA5B,CAAlC,EACxat4B,CADwa;AACra,OADqW,CAAH;AAChW9vC,OAAC,CAACmnE,MAAF;AAAW;AAAC;;AAAA,WAASr3B,CAAT,GAAY;AAAC,QAAI9vC,CAAC,GAAC87D,IAAI,CAAC1gC,MAAL,CAAYoiC,QAAlB;AAAA,QAA2Bv9D,CAAC,GAAC67D,IAAI,CAACiM,UAAL,CAAgBO,iBAAhB,CAAkC,YAAU;AAACxM,UAAI,CAACiM,UAAL,CAAgBQ,mBAAhB,CAAoCtoE,CAApC;AAAuCiuB,OAAC;AAAG,KAAxF,CAA7B;AAAA,QAAuH4hB,CAAC,GAAC,oCAAkCgsB,IAAI,CAAC2J,iBAAL,CAAuB,gCAA8BxlE,CAA9B,GAAgC,KAAvD,CAAlC,GAAgG,cAAzN;AAAwOD,KAAC,CAACo2B,KAAF,CAAQ0lC,IAAI,CAAC6M,qBAAL,GAA2B7M,IAAI,CAAC6M,qBAAL,CAA2BC,UAA3B,CAAsC94B,CAAtC,CAA3B,GAAoEA,CAA5E;AAA+E;;AAAA,MAAI5sB,CAAC,GAAC,IAAN;AAAW,MAAG44C,IAAI,CAAC1gC,MAAL,CAAYqtC,qBAAf,EAAqCxoE,CAAC,IAAG,KAAKopE,SAAL,IAAgBvN,IAAI,CAAC1gC,MAAL,CAAYqtC,qBAAZ,CAAkC,EAAlC,EAAqC,KAAKY,SAA1C,CAAhB,IAAsE,KAAKA,SAAL,GAAe,IAAf,EAAoBrpE,CAAC,CAACmnE,MAAF,EAA1F,IAAsGnnE,CAAC,CAACgnE,KAAF,EAA1G,CAArC,KAC5V;AAAC,QAAIvgC,CAAC,GAAC,KAAKyhC,SAAL,CAAettD,MAAf,IAAuBkhD,IAAI,CAACuC,UAAL,CAAgBC,GAA7C;AAAiD,SAAKgL,UAAL,IAAiBrpE,CAAC,EAAlB;AAAqB,QAAIi7B,CAAC,GAAC,IAAEl7B,CAAC,CAACqnE,OAAF,GAAYznE,MAApB;AAAA,QAA2B+wC,CAAC,GAACzV,CAAC,IAAE4gC,IAAI,CAAC4J,YAAL,CAAkBgD,UAAlD;AAA6DxtC,KAAC,GAAC4gC,IAAI,CAACiM,UAAL,CAAgBL,MAAhB,KAAyBxsC,CAAC,IAAE4gC,IAAI,CAAC0I,kBAAL,EAA5B,CAAF;AAAyD,QAAG7zB,CAAC,IAAEzV,CAAN,EAAQl7B,CAAC,CAAC2iE,KAAF,CAAQ,YAAU;AAACz0C,OAAC;AAAG,KAAvB,EAAR,KAAqC;AAAC,UAAIH,CAAC,GAAC+tC,IAAI,CAAC1gC,MAAL,CAAYoiC,QAAlB;AAA2B7sB,OAAC,GAACmrB,IAAI,CAACyI,eAAL,MAAwB,mBAAkBzI,IAAI,CAAC1gC,MAAjD;;AAAwD,UAAGqL,CAAC,IAAEq1B,IAAI,CAACyI,eAAL,EAAH,IAA2BzI,IAAI,CAAC0I,kBAAL,EAA3B,IAAsD,CAAC7zB,CAA1D,EAA4D;AAACmrB,YAAI,CAACiM,UAAL,CAAgBL,MAAhB,GAAuB,CAAC,CAAxB;AAA0B1nE,SAAC,CAACgnE,KAAF;AAAU,YAAI3vC,CAAC,GAACtJ,CAAC,CAAC+6C,kBAAR;;AAA2B/6C,SAAC,CAAC+6C,kBAAF,GAAqB,YAAU;AAAC,2BAAe/6C,CAAC,CAAC22C,UAAjB,KAA8B32C,CAAC,CAAC+6C,kBAAF,GACpfzxC,CADof,EAClfnJ,CAAC,EADif,EAC9eluB,CAAC,CAACinE,MAAF,EADgd;AACpcnL,cAAI,CAAC3G,UAAL,CAAgB99B,CAAhB,KAAoBA,CAAC,CAACoF,KAAF,CAAQ,KAAK,CAAb,EAAe3zB,SAAf,CAApB;AAA8C,SADsX;AACrX,OADyP,MACrP,CAACgzD,IAAI,CAAC4J,YAAL,CAAkBgD,UAAnB,IAA+B5M,IAAI,CAACyI,eAAL,EAA/B,IAAuDzI,IAAI,CAAC0I,kBAAL,EAAvD,GAAiF10B,CAAC,EAAlF,GAAqF5hB,CAAC,EAAtF;AAAyF;AAAC;AAAC,CA1BzH,EA0B0H4tC,IAAI,CAACsN,qBAAL,CAA2BxzD,SAA3B,CAAqC2zD,SAArC,GAA+C,UAASvpE,CAAT,EAAW,CAAE,CA1BtL,EA0BuL87D,IAAI,CAAC2N,oBAAL,GAA0B,UAASzpE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmBujB,CAAnB,EAAqB;AAACq1B,MAAI,CAACsN,qBAAL,CAA2B3yD,IAA3B,CAAgC,IAAhC,EAAqCzW,CAArC,EAAuCC,CAAvC,EAAyCiuB,CAAzC,EAA2C4hB,CAA3C,EAA6C5sB,CAA7C;AAAgD,OAAKwmD,UAAL,GAAgBjjC,CAAhB;AAAkB,CA1BzS,EA0B0Sq1B,IAAI,CAAC6H,QAAL,CAAc7H,IAAI,CAAC2N,oBAAnB,EAAwC3N,IAAI,CAACsN,qBAA7C,CA1B1S,EA0B8WtN,IAAI,CAAC2N,oBAAL,CAA0B7zD,SAA1B,CAAoC2zD,SAApC,GAA8C,UAASvpE,CAAT,EAAW;AAAC,SAAO,KAAK0pE,UAAL,CAAgBtI,SAAhB,CAA0BphE,CAA1B,EAA4B,KAAKooE,WAAL,EAA5B,CAAP;AAAuD,CA1B/d,EA2BvCtM,IAAI,CAAC6N,gCAAL,GAAsC,UAAS3pE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmB;AAAC44C,MAAI,CAACsN,qBAAL,CAA2B3yD,IAA3B,CAAgC,IAAhC,EAAqCzW,CAArC,EAAuCC,CAAvC,EAAyCiuB,CAAzC,EAA2C4hB,CAA3C,EAA6C5sB,CAA7C;AAAgD,CA3BnE,EA2BoE44C,IAAI,CAAC6H,QAAL,CAAc7H,IAAI,CAAC6N,gCAAnB,EAAoD7N,IAAI,CAACsN,qBAAzD,CA3BpE,EA2BoJtN,IAAI,CAAC6N,gCAAL,CAAsC/zD,SAAtC,CAAgD2zD,SAAhD,GAA0D,UAASvpE,CAAT,EAAW;AAAC,SAAOA,CAAP;AAAS,CA3BnO,EA2BoO87D,IAAI,CAAC8N,oBAAL,GAA0B,UAAS5pE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmBujB,CAAnB,EAAqBvL,CAArB,EAAuB;AAAC4gC,MAAI,CAACsN,qBAAL,CAA2B3yD,IAA3B,CAAgC,IAAhC,EAAqCzW,CAArC,EAAuCC,CAAvC,EAAyCiuB,CAAzC,EAA2C4hB,CAA3C,EAA6C5sB,CAA7C;AAAgD,OAAK2mD,eAAL,GAAqBpjC,CAArB;AAAuB,OAAK++B,WAAL,GAAiBtqC,CAAjB;AAAmB,CA3BhX,EA2BiX4gC,IAAI,CAAC6H,QAAL,CAAc7H,IAAI,CAAC8N,oBAAnB,EAAwC9N,IAAI,CAACsN,qBAA7C,CA3BjX,EA2BqbtN,IAAI,CAAC8N,oBAAL,CAA0Bh0D,SAA1B,CAAoC2zD,SAApC,GAC5d,UAASvpE,CAAT,EAAW;AAAC,OAAK6pE,eAAL,KAAuB7pE,CAAC,GAAC,KAAKwlE,WAAL,CAAiBpE,SAAjB,CAA2BphE,CAA3B,EAA6B,KAAKooE,WAAL,EAA7B,CAAzB;AAA2E,SAAOtM,IAAI,CAACkE,sBAAL,IAA6BlE,IAAI,CAACC,KAAL,CAAWD,IAAI,CAAC1gC,MAAL,CAAY5zB,IAAvB,CAA7B,GAA0D,qBAAmBs0D,IAAI,CAAC1gC,MAAL,CAAY5zB,IAAZ,CAAiBC,SAAjB,CAA2BzH,CAAC,GAAC,kBAAF,GAAqB,KAAK4zB,IAA1B,GAA+B,IAA1D,CAAnB,GAAmF,IAA7I,GAAkJ,qDAAmD5zB,CAAnD,GAAqD,sCAArD,GAA4F,KAAK4zB,IAAjG,GAAsG,IAA/P;AAAoQ,CA5BpT,EA4BqTkoC,IAAI,CAAC4J,YAAL,CAAkBgD,UAAlB,GAA6B,EAAE5M,IAAI,CAAC1gC,MAAL,CAAY0uC,IAAZ,IAAkB,CAAChO,IAAI,CAAC1gC,MAAL,CAAYoiC,QAA/B,IAAyC,CAAC1B,IAAI,CAAC1gC,MAAL,CAAYoiC,QAAZ,CAAqBuM,GAAjE,CA5BlV,EA4BwZjO,IAAI,CAAC4J,YAAL,CAAkB9vD,SAAlB,CAA4BqpD,aAA5B,GAA0C,UAASj/D,CAAT,EAAWC,CAAX,EACzeiuB,CADye,EACve4hB,CADue,EACre;AAAC7vC,GAAC,GAACA,CAAC,IAAE,EAAL;AAAQD,GAAC,GAACA,CAAC,CAACkZ,OAAF,CAAU,KAAV,EAAgB,GAAhB,CAAF;AAAuB,MAAIgK,CAAC,GAAC44C,IAAI,CAAC8E,cAAL,CAAoB9E,IAAI,CAAC2D,QAAL,GAAcz/D,CAAlC,CAAN;AAA2C8vC,GAAC,IAAE,cAAY,OAAOA,CAAtB,KAA0BA,CAAC,GAACA,CAAC,GAAC;AAACl1B,UAAM,EAACkhD,IAAI,CAACuC,UAAL,CAAgBE;AAAxB,GAAD,GAA+B,EAA5D;AAAgErwC,GAAC,GAAC,KAAK+3C,QAAL,CAAcS,gBAAd,CAA+BxjD,CAA/B,EAAiCljB,CAAjC,EAAmCC,CAAnC,EAAqCiuB,CAArC,EAAuC4hB,CAAvC,EAAyCgsB,IAAI,CAAC0J,WAAL,CAAiBD,cAAjB,CAAgCz1B,CAAC,CAACk6B,IAAF,IAAQ,KAAxC,EAA8Cl6B,CAAC,CAACl1B,MAAhD,CAAzC,CAAF;AAAoG,OAAK+qD,aAAL,CAAmBziD,CAAnB,IAAsBgL,CAAtB;;AAAwB,OAAIA,CAAC,GAAC,CAAN,EAAQA,CAAC,GAACjuB,CAAC,CAACL,MAAZ,EAAmBsuB,CAAC,EAApB,EAAuB,KAAK03C,SAAL,CAAe3lE,CAAC,CAACiuB,CAAD,CAAhB,IAAqBhL,CAArB;;AAAuB,OAAK0iD,SAAL,CAAe5lE,CAAf,IAAkBkjB,CAAlB;AAAoB,CA7BtS,EA6BuS44C,IAAI,CAACoK,iBAAL,GAAuB,UAASlmE,CAAT,EAAW;AAAC,OAAK0pE,UAAL,GAAgB1pE,CAAhB;AAAkB,CA7B5V,EA6B6V87D,IAAI,CAACoK,iBAAL,CAAuBtwD,SAAvB,CAAiC8wD,gBAAjC,GAAkD,UAAS1mE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmBujB,CAAnB,EAAqB;AAAC,SAAOvjB,CAAC,CAACtI,MAAF,IAAUkhD,IAAI,CAACuC,UAAL,CAAgBE,IAA1B,GAA+B,IAAIzC,IAAI,CAAC8N,oBAAT,CAA8B5pE,CAA9B,EAClfC,CADkf,EAChfiuB,CADgf,EAC9e4hB,CAD8e,EAC5e5sB,CAD4e,EAC1eujB,CAD0e,EACxe,KAAKijC,UADme,CAA/B,GACxbjjC,CAAC,GAAC,IAAIq1B,IAAI,CAAC2N,oBAAT,CAA8BzpE,CAA9B,EAAgCC,CAAhC,EAAkCiuB,CAAlC,EAAoC4hB,CAApC,EAAsC5sB,CAAtC,EAAwC,KAAKwmD,UAA7C,CAAD,GAA0DxmD,CAAC,CAACtI,MAAF,IAAUkhD,IAAI,CAACuC,UAAL,CAAgBC,GAA1B,GAA8B,WAASxC,IAAI,CAACoE,SAAd,IAAyBpE,IAAI,CAACqE,4BAA9B,GAA2D,IAAIrE,IAAI,CAAC6N,gCAAT,CAA0C3pE,CAA1C,EAA4CC,CAA5C,EAA8CiuB,CAA9C,EAAgD4hB,CAAhD,EAAkD5sB,CAAlD,CAA3D,GAAgH,IAAI44C,IAAI,CAACmN,mBAAT,CAA6BjpE,CAA7B,EAA+BC,CAA/B,EAAiCiuB,CAAjC,EAAmC4hB,CAAnC,EAAqC5sB,CAArC,CAA9I,GAAsL,IAAI44C,IAAI,CAACiM,UAAT,CAAoB/nE,CAApB,EAAsBC,CAAtB,EAAwBiuB,CAAxB,EAA0B4hB,CAA1B,EAA4B5sB,CAA5B,CADgM;AACjK,CA9BpQ,EA8BqQ44C,IAAI,CAACqD,YAAL,GAAkB,IAAIrD,IAAI,CAAC4J,YAAT,EA9BvR,EA8B6S5J,IAAI,CAAC2K,eAAL,GAAqB,YAAU;AAAC3K,MAAI,CAACqD,YAAL,CAAkBsH,eAAlB;AAAoC,CA9BjX,EA8BkX3K,IAAI,CAACgL,oBAAL,GAA0B,UAAS9mE,CAAT,EAAW;AAAC87D,MAAI,CAACqD,YAAL,CAAkB2H,oBAAlB,CAAuC9mE,CAAvC;AAA0C,CA9Blc,EA8Bmc87D,IAAI,CAAC1gC,MAAL,CAAY6uC,eAAZ,IAC1enO,IAAI,CAACqD,YAAL,CAAkBsH,eAAlB,EA/BuC,EA+BH3K,IAAI,CAACuK,SAAL,GAAe,UAASrmE,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqD,YAAL,CAAkBkH,SAAlB,CAA4BrmE,CAA5B,EAA8BC,CAA9B;AAAiC,CA/BlG;AA+BoG67D,IAAI,CAACoO,yBAAL,GAA+B,EAA/B;;AAAkCpO,IAAI,CAACqO,SAAL,GAAe,UAASnqE,CAAT,EAAW;AAAC,SAAOA,CAAP;AAAS,CAApC;;AAAqC87D,IAAI,CAACsO,wBAAL,GAA8B,UAASpqE,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,IAAN;AAAW,MAAG,gBAAc,OAAOoqE,YAArB,IAAmC,CAACA,YAAY,CAACC,YAApD,EAAiE,OAAOrqE,CAAP;;AAAS,MAAG;AAACA,KAAC,GAACoqE,YAAY,CAACC,YAAb,CAA0BtqE,CAA1B,EAA4B;AAAC4oE,gBAAU,EAAC9M,IAAI,CAACqO,SAAjB;AAA2BhB,kBAAY,EAACrN,IAAI,CAACqO,SAA7C;AAAuDnB,qBAAe,EAAClN,IAAI,CAACqO,SAA5E;AAAsFI,eAAS,EAACzO,IAAI,CAACqO;AAArG,KAA5B,CAAF;AAA+I,GAAnJ,CAAmJ,OAAMj8C,CAAN,EAAQ;AAAC4tC,QAAI,CAACuD,aAAL,CAAmBnxC,CAAC,CAAC2Z,OAArB;AAA8B;;AAAA,SAAO5nC,CAAP;AAAS,CAAlU;;AAC3K67D,IAAI,CAAC6M,qBAAL,GAA2B7M,IAAI,CAACoO,yBAAL,GAA+BpO,IAAI,CAACsO,wBAAL,CAA8BtO,IAAI,CAACoO,yBAAL,GAA+B,OAA7D,CAA/B,GAAqG,IAAhI;AAAqIpO,IAAI,CAACp3D,MAAL,GAAY,EAAZ;;AAAeo3D,IAAI,CAACp3D,MAAL,CAAYisD,EAAZ,GAAe,UAAS3wD,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOD,CAAC,KAAGC,CAAJ,GAAM,MAAID,CAAJ,IAAO,IAAEA,CAAF,KAAM,IAAEC,CAArB,GAAuBD,CAAC,KAAGA,CAAJ,IAAOC,CAAC,KAAGA,CAAzC;AAA2C,CAAxE;;AAAyE67D,IAAI,CAACp3D,MAAL,CAAYoH,OAAZ,GAAoB,UAAS9L,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAI,IAAI4hB,CAAR,IAAa9vC,CAAb,EAAeC,CAAC,CAACwW,IAAF,CAAOyX,CAAP,EAASluB,CAAC,CAAC8vC,CAAD,CAAV,EAAcA,CAAd,EAAgB9vC,CAAhB;AAAmB,CAAtE;;AAAuE87D,IAAI,CAACp3D,MAAL,CAAYrE,MAAZ,GAAmB,UAASL,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC,EAAN;AAAA,MAAS5sB,CAAT;;AAAW,OAAIA,CAAJ,IAASljB,CAAT,EAAWC,CAAC,CAACwW,IAAF,CAAOyX,CAAP,EAASluB,CAAC,CAACkjB,CAAD,CAAV,EAAcA,CAAd,EAAgBljB,CAAhB,MAAqB8vC,CAAC,CAAC5sB,CAAD,CAAD,GAAKljB,CAAC,CAACkjB,CAAD,CAA3B;;AAAgC,SAAO4sB,CAAP;AAAS,CAAlG;;AAAmGgsB,IAAI,CAACp3D,MAAL,CAAY/H,GAAZ,GAAgB,UAASqD,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC,EAAN;AAAA,MAAS5sB,CAAT;;AAAW,OAAIA,CAAJ,IAASljB,CAAT,EAAW8vC,CAAC,CAAC5sB,CAAD,CAAD,GAAKjjB,CAAC,CAACwW,IAAF,CAAOyX,CAAP,EAASluB,CAAC,CAACkjB,CAAD,CAAV,EAAcA,CAAd,EAAgBljB,CAAhB,CAAL;;AAAwB,SAAO8vC,CAAP;AAAS,CAAvF;;AAAwFgsB,IAAI,CAACp3D,MAAL,CAAY7D,IAAZ,GAAiB,UAASb,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAI,IAAI4hB,CAAR,IAAa9vC,CAAb,EAAe,IAAGC,CAAC,CAACwW,IAAF,CAAOyX,CAAP,EAASluB,CAAC,CAAC8vC,CAAD,CAAV,EAAcA,CAAd,EAAgB9vC,CAAhB,CAAH,EAAsB,OAAM,CAAC,CAAP;;AAAS,SAAM,CAAC,CAAP;AAAS,CAAxF;;AAC/d87D,IAAI,CAACp3D,MAAL,CAAY7E,KAAZ,GAAkB,UAASG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAI,IAAI4hB,CAAR,IAAa9vC,CAAb,EAAe,IAAG,CAACC,CAAC,CAACwW,IAAF,CAAOyX,CAAP,EAASluB,CAAC,CAAC8vC,CAAD,CAAV,EAAcA,CAAd,EAAgB9vC,CAAhB,CAAJ,EAAuB,OAAM,CAAC,CAAP;;AAAS,SAAM,CAAC,CAAP;AAAS,CAA1F;;AAA2F87D,IAAI,CAACp3D,MAAL,CAAY8lE,QAAZ,GAAqB,UAASxqE,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,CAAN;AAAA,MAAQiuB,CAAR;;AAAU,OAAIA,CAAJ,IAASluB,CAAT,EAAWC,CAAC;;AAAG,SAAOA,CAAP;AAAS,CAAnE;;AAAoE67D,IAAI,CAACp3D,MAAL,CAAY+lE,SAAZ,GAAsB,UAASzqE,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAR,IAAaD,CAAb,EAAe,OAAOC,CAAP;AAAS,CAA1D;;AAA2D67D,IAAI,CAACp3D,MAAL,CAAYgmE,WAAZ,GAAwB,UAAS1qE,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAR,IAAaD,CAAb,EAAe,OAAOA,CAAC,CAACC,CAAD,CAAR;AAAY,CAA/D;;AAAgE67D,IAAI,CAACp3D,MAAL,CAAYimE,QAAZ,GAAqB,UAAS3qE,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAACp3D,MAAL,CAAYkmE,aAAZ,CAA0B5qE,CAA1B,EAA4BC,CAA5B,CAAP;AAAsC,CAAzE;;AAA0E67D,IAAI,CAACp3D,MAAL,CAAYmmE,SAAZ,GAAsB,UAAS7qE,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,EAAN;AAAA,MAASiuB,CAAC,GAAC,CAAX;AAAA,MAAa4hB,CAAb;;AAAe,OAAIA,CAAJ,IAAS9vC,CAAT,EAAWC,CAAC,CAACiuB,CAAC,EAAF,CAAD,GAAOluB,CAAC,CAAC8vC,CAAD,CAAR;;AAAY,SAAO7vC,CAAP;AAAS,CAAjF;;AACpW67D,IAAI,CAACp3D,MAAL,CAAYomE,OAAZ,GAAoB,UAAS9qE,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,EAAN;AAAA,MAASiuB,CAAC,GAAC,CAAX;AAAA,MAAa4hB,CAAb;;AAAe,OAAIA,CAAJ,IAAS9vC,CAAT,EAAWC,CAAC,CAACiuB,CAAC,EAAF,CAAD,GAAO4hB,CAAP;;AAAS,SAAO7vC,CAAP;AAAS,CAA5E;;AAA6E67D,IAAI,CAACp3D,MAAL,CAAYqmE,cAAZ,GAA2B,UAAS/qE,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAAC4tC,IAAI,CAAC2F,WAAL,CAAiBxhE,CAAjB,CAAN;AAAA,MAA0B6vC,CAAC,GAAC5hB,CAAC,GAACjuB,CAAD,GAAG6I,SAAhC;;AAA0C,OAAIolB,CAAC,GAACA,CAAC,GAAC,CAAD,GAAG,CAAV,EAAYA,CAAC,GAAC4hB,CAAC,CAAClwC,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B;AAAC,QAAG,QAAMluB,CAAT,EAAW;AAAOA,KAAC,GAACA,CAAC,CAAC8vC,CAAC,CAAC5hB,CAAD,CAAF,CAAH;AAAU;;AAAA,SAAOluB,CAAP;AAAS,CAApJ;;AAAqJ87D,IAAI,CAACp3D,MAAL,CAAYsmE,WAAZ,GAAwB,UAAShrE,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO,SAAOD,CAAP,IAAUC,CAAC,IAAID,CAAtB;AAAwB,CAA9D;;AAA+D87D,IAAI,CAACp3D,MAAL,CAAYkmE,aAAZ,GAA0B,UAAS5qE,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAI,IAAIiuB,CAAR,IAAaluB,CAAb,EAAe,IAAGA,CAAC,CAACkuB,CAAD,CAAD,IAAMjuB,CAAT,EAAW,OAAM,CAAC,CAAP;;AAAS,SAAM,CAAC,CAAP;AAAS,CAApF;;AAAqF67D,IAAI,CAACp3D,MAAL,CAAY6/C,OAAZ,GAAoB,UAASvkD,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAI,IAAI4hB,CAAR,IAAa9vC,CAAb,EAAe,IAAGC,CAAC,CAACwW,IAAF,CAAOyX,CAAP,EAASluB,CAAC,CAAC8vC,CAAD,CAAV,EAAcA,CAAd,EAAgB9vC,CAAhB,CAAH,EAAsB,OAAO8vC,CAAP;AAAS,CAAlF;;AACtXgsB,IAAI,CAACp3D,MAAL,CAAYumE,SAAZ,GAAsB,UAASjrE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,SAAM,CAACjuB,CAAC,GAAC67D,IAAI,CAACp3D,MAAL,CAAY6/C,OAAZ,CAAoBvkD,CAApB,EAAsBC,CAAtB,EAAwBiuB,CAAxB,CAAH,KAAgCluB,CAAC,CAACC,CAAD,CAAvC;AAA2C,CAAjF;;AAAkF67D,IAAI,CAACp3D,MAAL,CAAYwmE,OAAZ,GAAoB,UAASlrE,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAR,IAAaD,CAAb,EAAe,OAAM,CAAC,CAAP;;AAAS,SAAM,CAAC,CAAP;AAAS,CAAjE;;AAAkE87D,IAAI,CAACp3D,MAAL,CAAYymE,KAAZ,GAAkB,UAASnrE,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAR,IAAaD,CAAb,EAAe,OAAOA,CAAC,CAACC,CAAD,CAAR;AAAY,CAAzD;;AAA0D67D,IAAI,CAACp3D,MAAL,CAAY/C,MAAZ,GAAmB,UAAS3B,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAJ;AAAM,GAACA,CAAC,GAACjuB,CAAC,IAAID,CAAR,KAAY,OAAOA,CAAC,CAACC,CAAD,CAApB;AAAwB,SAAOiuB,CAAP;AAAS,CAAxE;;AAAyE4tC,IAAI,CAACp3D,MAAL,CAAY/I,GAAZ,GAAgB,UAASqE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAG,SAAOluB,CAAP,IAAUC,CAAC,IAAID,CAAlB,EAAoB,MAAM5B,KAAK,CAAC,0CAAwC6B,CAAxC,GAA0C,GAA3C,CAAX;AAA2D67D,MAAI,CAACp3D,MAAL,CAAYtF,GAAZ,CAAgBY,CAAhB,EAAkBC,CAAlB,EAAoBiuB,CAApB;AAAuB,CAAtI;;AAAuI4tC,IAAI,CAACp3D,MAAL,CAAY7I,GAAZ,GAAgB,UAASmE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,SAAO,SAAOluB,CAAP,IAAUC,CAAC,IAAID,CAAf,GAAiBA,CAAC,CAACC,CAAD,CAAlB,GAAsBiuB,CAA7B;AAA+B,CAA/D;;AAC9Z4tC,IAAI,CAACp3D,MAAL,CAAYtF,GAAZ,GAAgB,UAASY,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACluB,GAAC,CAACC,CAAD,CAAD,GAAKiuB,CAAL;AAAO,CAAvC;;AAAwC4tC,IAAI,CAACp3D,MAAL,CAAY0mE,cAAZ,GAA2B,UAASprE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,SAAOjuB,CAAC,IAAID,CAAL,GAAOA,CAAC,CAACC,CAAD,CAAR,GAAYD,CAAC,CAACC,CAAD,CAAD,GAAKiuB,CAAxB;AAA0B,CAArE;;AAAsE4tC,IAAI,CAACp3D,MAAL,CAAY2mE,0BAAZ,GAAuC,UAASrrE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAGjuB,CAAC,IAAID,CAAR,EAAU,OAAOA,CAAC,CAACC,CAAD,CAAR;AAAYiuB,GAAC,GAACA,CAAC,EAAH;AAAM,SAAOluB,CAAC,CAACC,CAAD,CAAD,GAAKiuB,CAAZ;AAAc,CAAjG;;AAAkG4tC,IAAI,CAACp3D,MAAL,CAAY4mE,MAAZ,GAAmB,UAAStrE,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAI,IAAIiuB,CAAR,IAAaluB,CAAb,EAAe,IAAG,EAAEkuB,CAAC,IAAIjuB,CAAP,KAAWD,CAAC,CAACkuB,CAAD,CAAD,KAAOjuB,CAAC,CAACiuB,CAAD,CAAtB,EAA0B,OAAM,CAAC,CAAP;;AAAS,OAAI,IAAI4hB,CAAR,IAAa7vC,CAAb,EAAe,IAAG,EAAE6vC,CAAC,IAAI9vC,CAAP,CAAH,EAAa,OAAM,CAAC,CAAP;;AAAS,SAAM,CAAC,CAAP;AAAS,CAAjI;;AAAkI87D,IAAI,CAACp3D,MAAL,CAAYk6B,KAAZ,GAAkB,UAAS5+B,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,EAAN;AAAA,MAASiuB,CAAT;;AAAW,OAAIA,CAAJ,IAASluB,CAAT,EAAWC,CAAC,CAACiuB,CAAD,CAAD,GAAKluB,CAAC,CAACkuB,CAAD,CAAN;;AAAU,SAAOjuB,CAAP;AAAS,CAAvE;;AAClV67D,IAAI,CAACp3D,MAAL,CAAY6mE,WAAZ,GAAwB,UAASvrE,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC67D,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAAN;;AAAqB,MAAG,YAAUC,CAAV,IAAa,WAASA,CAAzB,EAA2B;AAAC,QAAG67D,IAAI,CAAC3G,UAAL,CAAgBn1D,CAAC,CAAC4+B,KAAlB,CAAH,EAA4B,OAAO5+B,CAAC,CAAC4+B,KAAF,EAAP;AAAiB3+B,KAAC,GAAC,WAASA,CAAT,GAAW,EAAX,GAAc,EAAhB;;AAAmB,SAAI,IAAIiuB,CAAR,IAAaluB,CAAb,EAAeC,CAAC,CAACiuB,CAAD,CAAD,GAAK4tC,IAAI,CAACp3D,MAAL,CAAY6mE,WAAZ,CAAwBvrE,CAAC,CAACkuB,CAAD,CAAzB,CAAL;;AAAmC,WAAOjuB,CAAP;AAAS;;AAAA,SAAOD,CAAP;AAAS,CAAzN;;AAA0N87D,IAAI,CAACp3D,MAAL,CAAY8mE,SAAZ,GAAsB,UAASxrE,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,EAAN;AAAA,MAASiuB,CAAT;;AAAW,OAAIA,CAAJ,IAASluB,CAAT,EAAWC,CAAC,CAACD,CAAC,CAACkuB,CAAD,CAAF,CAAD,GAAQA,CAAR;;AAAU,SAAOjuB,CAAP;AAAS,CAA3E;;AAA4E67D,IAAI,CAACp3D,MAAL,CAAY+mE,iBAAZ,GAA8B,gGAAgGxxD,KAAhG,CAAsG,GAAtG,CAA9B;;AACtS6hD,IAAI,CAACp3D,MAAL,CAAYgnE,MAAZ,GAAmB,UAAS1rE,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAI,IAAIiuB,CAAJ,EAAM4hB,CAAN,EAAQ5sB,CAAC,GAAC,CAAd,EAAgBA,CAAC,GAACpa,SAAS,CAAClJ,MAA5B,EAAmCsjB,CAAC,EAApC,EAAuC;AAAC4sB,KAAC,GAAChnC,SAAS,CAACoa,CAAD,CAAX;;AAAe,SAAIgL,CAAJ,IAAS4hB,CAAT,EAAW9vC,CAAC,CAACkuB,CAAD,CAAD,GAAK4hB,CAAC,CAAC5hB,CAAD,CAAN;;AAAU,SAAI,IAAIuY,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACq1B,IAAI,CAACp3D,MAAL,CAAY+mE,iBAAZ,CAA8B7rE,MAA5C,EAAmD6mC,CAAC,EAApD,EAAuDvY,CAAC,GAAC4tC,IAAI,CAACp3D,MAAL,CAAY+mE,iBAAZ,CAA8BhlC,CAA9B,CAAF,EAAmCjqC,MAAM,CAACoZ,SAAP,CAAiB0C,cAAjB,CAAgC7B,IAAhC,CAAqCq5B,CAArC,EAAuC5hB,CAAvC,MAA4CluB,CAAC,CAACkuB,CAAD,CAAD,GAAK4hB,CAAC,CAAC5hB,CAAD,CAAlD,CAAnC;AAA0F;AAAC,CAA/P;;AACA4tC,IAAI,CAACp3D,MAAL,CAAYoX,MAAZ,GAAmB,UAAS9b,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC6I,SAAS,CAAClJ,MAAhB;AAAuB,MAAG,KAAGK,CAAH,IAAM67D,IAAI,CAAC56D,OAAL,CAAa4H,SAAS,CAAC,CAAD,CAAtB,CAAT,EAAoC,OAAOgzD,IAAI,CAACp3D,MAAL,CAAYoX,MAAZ,CAAmB2gB,KAAnB,CAAyB,IAAzB,EAA8B3zB,SAAS,CAAC,CAAD,CAAvC,CAAP;AAAmD,MAAG7I,CAAC,GAAC,CAAL,EAAO,MAAM7B,KAAK,CAAC,4BAAD,CAAX;;AAA0C,OAAI,IAAI8vB,CAAC,GAAC,EAAN,EAAS4hB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAAC7vC,CAAnB,EAAqB6vC,CAAC,IAAE,CAAxB,EAA0B5hB,CAAC,CAACplB,SAAS,CAACgnC,CAAD,CAAV,CAAD,GAAgBhnC,SAAS,CAACgnC,CAAC,GAAC,CAAH,CAAzB;;AAA+B,SAAO5hB,CAAP;AAAS,CAAhQ;;AAAiQ4tC,IAAI,CAACp3D,MAAL,CAAYinE,SAAZ,GAAsB,UAAS3rE,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC6I,SAAS,CAAClJ,MAAhB;AAAuB,MAAG,KAAGK,CAAH,IAAM67D,IAAI,CAAC56D,OAAL,CAAa4H,SAAS,CAAC,CAAD,CAAtB,CAAT,EAAoC,OAAOgzD,IAAI,CAACp3D,MAAL,CAAYinE,SAAZ,CAAsBlvC,KAAtB,CAA4B,IAA5B,EAAiC3zB,SAAS,CAAC,CAAD,CAA1C,CAAP;;AAAsD,OAAI,IAAIolB,CAAC,GAAC,EAAN,EAAS4hB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAAC7vC,CAAnB,EAAqB6vC,CAAC,EAAtB,EAAyB5hB,CAAC,CAACplB,SAAS,CAACgnC,CAAD,CAAV,CAAD,GAAgB,CAAC,CAAjB;;AAAmB,SAAO5hB,CAAP;AAAS,CAAxM;;AACjQ4tC,IAAI,CAACp3D,MAAL,CAAYknE,mBAAZ,GAAgC,UAAS5rE,CAAT,EAAW;AAAC,MAAIC,CAAC,GAACD,CAAN;AAAQxD,QAAM,CAACqvE,QAAP,IAAiB,CAACrvE,MAAM,CAACqvE,QAAP,CAAgB7rE,CAAhB,CAAlB,KAAuCC,CAAC,GAACzD,MAAM,CAACsf,MAAP,CAAc9b,CAAd,CAAF,EAAmBxD,MAAM,CAACsvE,MAAP,CAAc7rE,CAAd,CAA1D;AAA4E,SAAOA,CAAP;AAAS,CAAzI;;AAA0I67D,IAAI,CAACp3D,MAAL,CAAYqnE,eAAZ,GAA4B,UAAS/rE,CAAT,EAAW;AAAC,SAAM,CAAC,CAACxD,MAAM,CAACqvE,QAAT,IAAmBrvE,MAAM,CAACqvE,QAAP,CAAgB7rE,CAAhB,CAAzB;AAA4C,CAApF;;AAC1I87D,IAAI,CAACp3D,MAAL,CAAYsnE,mBAAZ,GAAgC,UAAShsE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAG,CAACluB,CAAJ,EAAM,OAAM,EAAN;AAAS,MAAG,CAACxD,MAAM,CAACyvE,mBAAR,IAA6B,CAACzvE,MAAM,CAAC60D,cAAxC,EAAuD,OAAOyK,IAAI,CAACp3D,MAAL,CAAYomE,OAAZ,CAAoB9qE,CAApB,CAAP;;AAA8B,OAAI,IAAI8vC,CAAC,GAAC,EAAV,EAAa9vC,CAAC,KAAGA,CAAC,KAAGxD,MAAM,CAACoZ,SAAX,IAAsB3V,CAAzB,CAAD,KAA+BD,CAAC,KAAGw3D,QAAQ,CAAC5hD,SAAb,IAAwBsY,CAAvD,CAAb,GAAwE;AAAC,SAAI,IAAIhL,CAAC,GAAC1mB,MAAM,CAACyvE,mBAAP,CAA2BjsE,CAA3B,CAAN,EAAoCymC,CAAC,GAAC,CAA1C,EAA4CA,CAAC,GAACvjB,CAAC,CAACtjB,MAAhD,EAAuD6mC,CAAC,EAAxD,EAA2DqJ,CAAC,CAAC5sB,CAAC,CAACujB,CAAD,CAAF,CAAD,GAAQ,CAAC,CAAT;;AAAWzmC,KAAC,GAACxD,MAAM,CAAC60D,cAAP,CAAsBrxD,CAAtB,CAAF;AAA2B;;AAAA,SAAO87D,IAAI,CAACp3D,MAAL,CAAYomE,OAAZ,CAAoBh7B,CAApB,CAAP;AAA8B,CAA5V;;AAA6VgsB,IAAI,CAACp3D,MAAL,CAAYwnE,aAAZ,GAA0B,UAASlsE,CAAT,EAAW;AAAC,SAAM,CAACA,CAAC,GAACxD,MAAM,CAAC60D,cAAP,CAAsBrxD,CAAC,CAAC4V,SAAxB,CAAH,KAAwC5V,CAAC,CAACvH,WAAhD;AAA4D,CAAlG;;AAAmGqjE,IAAI,CAACqQ,KAAL,GAAW,EAAX;;AAAcrQ,IAAI,CAACqQ,KAAL,CAAW/tE,KAAX,GAAiB,UAAS4B,CAAT,EAAW;AAAC,MAAG5B,KAAK,CAAC2pC,iBAAT,EAA2B3pC,KAAK,CAAC2pC,iBAAN,CAAwB,IAAxB,EAA6B+zB,IAAI,CAACqQ,KAAL,CAAW/tE,KAAxC,EAA3B,KAA8E;AAAC,QAAI6B,CAAC,GAAC7B,KAAK,GAAGoyD,KAAd;AAAoBvwD,KAAC,KAAG,KAAKuwD,KAAL,GAAWvwD,CAAd,CAAD;AAAkB;AAAAD,GAAC,KAAG,KAAK6nC,OAAL,GAAazK,MAAM,CAACp9B,CAAD,CAAtB,CAAD;AAA4B,OAAKosE,mBAAL,GAAyB,CAAC,CAA1B;AAA4B,CAA1M;;AAA2MtQ,IAAI,CAAC6H,QAAL,CAAc7H,IAAI,CAACqQ,KAAL,CAAW/tE,KAAzB,EAA+BA,KAA/B;AAAsC09D,IAAI,CAACqQ,KAAL,CAAW/tE,KAAX,CAAiBwX,SAAjB,CAA2BhT,IAA3B,GAAgC,aAAhC;AAA8Ck5D,IAAI,CAACuQ,GAAL,GAAS,EAAT;AAAYvQ,IAAI,CAACuQ,GAAL,CAASC,QAAT,GAAkB;AAACC,SAAO,EAAC,CAAT;AAAWC,WAAS,EAAC,CAArB;AAAuBC,MAAI,EAAC,CAA5B;AAA8BC,eAAa,EAAC,CAA5C;AAA8CC,kBAAgB,EAAC,CAA/D;AAAiEC,QAAM,EAAC,CAAxE;AAA0EC,wBAAsB,EAAC,CAAjG;AAAmGC,SAAO,EAAC,CAA3G;AAA6GC,UAAQ,EAAC,CAAtH;AAAwHC,eAAa,EAAC,EAAtI;AAAyIC,mBAAiB,EAAC,EAA3J;AAA8JC,UAAQ,EAAC;AAAvK,CAAlB;AAA6LpR,IAAI,CAACqR,OAAL,GAAa,EAAb;AAAgBrR,IAAI,CAACqR,OAAL,CAAaC,cAAb,GAA4BtR,IAAI,CAACW,KAAjC;;AAAuCX,IAAI,CAACqR,OAAL,CAAaE,cAAb,GAA4B,UAASrtE,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqQ,KAAL,CAAW/tE,KAAX,CAAiBqY,IAAjB,CAAsB,IAAtB,EAA2BqlD,IAAI,CAACqR,OAAL,CAAaG,KAAb,CAAmBttE,CAAnB,EAAqBC,CAArB,CAA3B;AAAoD,OAAKstE,cAAL,GAAoBvtE,CAApB;AAAsB,CAApH;;AAAqH87D,IAAI,CAAC6H,QAAL,CAAc7H,IAAI,CAACqR,OAAL,CAAaE,cAA3B,EAA0CvR,IAAI,CAACqQ,KAAL,CAAW/tE,KAArD;AAA4D09D,IAAI,CAACqR,OAAL,CAAaE,cAAb,CAA4Bz3D,SAA5B,CAAsChT,IAAtC,GAA2C,gBAA3C;;AAA4Dk5D,IAAI,CAACqR,OAAL,CAAaK,qBAAb,GAAmC,UAASxtE,CAAT,EAAW;AAAC,QAAMA,CAAN;AAAS,CAAxD;;AAAyD87D,IAAI,CAACqR,OAAL,CAAaM,aAAb,GAA2B3R,IAAI,CAACqR,OAAL,CAAaK,qBAAxC;;AACnxC1R,IAAI,CAACqR,OAAL,CAAaG,KAAb,GAAmB,UAASttE,CAAT,EAAWC,CAAX,EAAa;AAACD,GAAC,GAACA,CAAC,CAACia,KAAF,CAAQ,IAAR,CAAF;;AAAgB,OAAI,IAAIiU,CAAC,GAAC,EAAN,EAAS4hB,CAAC,GAAC9vC,CAAC,CAACJ,MAAF,GAAS,CAApB,EAAsBsjB,CAAC,GAAC,CAA5B,EAA8BA,CAAC,GAAC4sB,CAAhC,EAAkC5sB,CAAC,EAAnC,EAAsCgL,CAAC,IAAEluB,CAAC,CAACkjB,CAAD,CAAD,IAAMA,CAAC,GAACjjB,CAAC,CAACL,MAAJ,GAAWK,CAAC,CAACijB,CAAD,CAAZ,GAAgB,IAAtB,CAAH;;AAA+B,SAAOgL,CAAC,GAACluB,CAAC,CAAC8vC,CAAD,CAAV;AAAc,CAApI;;AAAqIgsB,IAAI,CAACqR,OAAL,CAAaO,gBAAb,GAA8B,UAAS1tE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,MAAI5sB,CAAC,GAAC,kBAAN;;AAAyB,MAAGgL,CAAH,EAAK;AAAChL,KAAC,IAAE,OAAKgL,CAAR;AAAU,QAAIuY,CAAC,GAACqJ,CAAN;AAAQ,GAAxB,MAA6B9vC,CAAC,KAAGkjB,CAAC,IAAE,OAAKljB,CAAR,EAAUymC,CAAC,GAACxmC,CAAf,CAAD;;AAAmBD,GAAC,GAAC,IAAI87D,IAAI,CAACqR,OAAL,CAAaE,cAAjB,CAAgC,KAAGnqD,CAAnC,EAAqCujB,CAAC,IAAE,EAAxC,CAAF;AAA8Cq1B,MAAI,CAACqR,OAAL,CAAaM,aAAb,CAA2BztE,CAA3B;AAA8B,CAArM;;AAAsM87D,IAAI,CAACqR,OAAL,CAAaQ,eAAb,GAA6B,UAAS3tE,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaC,cAAb,KAA8BtR,IAAI,CAACqR,OAAL,CAAaM,aAAb,GAA2BztE,CAAzD;AAA4D,CAArG;;AAC3U87D,IAAI,CAACqR,OAAL,CAAaS,MAAb,GAAoB,UAAS5tE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaC,cAAb,IAA6B,CAACptE,CAA9B,IAAiC87D,IAAI,CAACqR,OAAL,CAAaO,gBAAb,CAA8B,EAA9B,EAAiC,IAAjC,EAAsCztE,CAAtC,EAAwCvC,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAAxC,CAAjC;AAAkH,SAAO9I,CAAP;AAAS,CAA/J;;AAAgK87D,IAAI,CAACqR,OAAL,CAAaU,YAAb,GAA0B,UAAS7tE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaC,cAAb,IAA6B,QAAMptE,CAAnC,IAAsC87D,IAAI,CAACqR,OAAL,CAAaO,gBAAb,CAA8B,wBAA9B,EAAuD,CAAC1tE,CAAD,CAAvD,EAA2DC,CAA3D,EAA6DvC,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAA7D,CAAtC;AAA4I,SAAO9I,CAAP;AAAS,CAA/L;;AAChK87D,IAAI,CAACqR,OAAL,CAAaW,IAAb,GAAkB,UAAS9tE,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqR,OAAL,CAAaC,cAAb,IAA6BtR,IAAI,CAACqR,OAAL,CAAaM,aAAb,CAA2B,IAAI3R,IAAI,CAACqR,OAAL,CAAaE,cAAjB,CAAgC,aAAWrtE,CAAC,GAAC,OAAKA,CAAN,GAAQ,EAApB,CAAhC,EAAwDtC,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAAxD,CAA3B,CAA7B;AAA0J,CAA1L;;AAA2LgzD,IAAI,CAACqR,OAAL,CAAaY,YAAb,GAA0B,UAAS/tE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaC,cAAb,IAA6B,CAACtR,IAAI,CAACG,QAAL,CAAcj8D,CAAd,CAA9B,IAAgD87D,IAAI,CAACqR,OAAL,CAAaO,gBAAb,CAA8B,iCAA9B,EAAgE,CAAC5R,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAAD,EAAgBA,CAAhB,CAAhE,EAAmFC,CAAnF,EAAqFvC,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAArF,CAAhD;AAA8K,SAAO9I,CAAP;AAAS,CAAjO;;AAC3L87D,IAAI,CAACqR,OAAL,CAAaa,YAAb,GAA0B,UAAShuE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaC,cAAb,IAA6B,CAACtR,IAAI,CAAC9jD,QAAL,CAAchY,CAAd,CAA9B,IAAgD87D,IAAI,CAACqR,OAAL,CAAaO,gBAAb,CAA8B,iCAA9B,EAAgE,CAAC5R,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAAD,EAAgBA,CAAhB,CAAhE,EAAmFC,CAAnF,EAAqFvC,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAArF,CAAhD;AAA8K,SAAO9I,CAAP;AAAS,CAAjO;;AAAkO87D,IAAI,CAACqR,OAAL,CAAac,cAAb,GAA4B,UAASjuE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaC,cAAb,IAA6B,CAACtR,IAAI,CAAC3G,UAAL,CAAgBn1D,CAAhB,CAA9B,IAAkD87D,IAAI,CAACqR,OAAL,CAAaO,gBAAb,CAA8B,mCAA9B,EAAkE,CAAC5R,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAAD,EAAgBA,CAAhB,CAAlE,EAAqFC,CAArF,EAAuFvC,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAAvF,CAAlD;AAAkL,SAAO9I,CAAP;AAAS,CAAvO;;AAClO87D,IAAI,CAACqR,OAAL,CAAae,YAAb,GAA0B,UAASluE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaC,cAAb,IAA6B,CAACtR,IAAI,CAAC3jD,QAAL,CAAcnY,CAAd,CAA9B,IAAgD87D,IAAI,CAACqR,OAAL,CAAaO,gBAAb,CAA8B,iCAA9B,EAAgE,CAAC5R,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAAD,EAAgBA,CAAhB,CAAhE,EAAmFC,CAAnF,EAAqFvC,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAArF,CAAhD;AAA8K,SAAO9I,CAAP;AAAS,CAAjO;;AAAkO87D,IAAI,CAACqR,OAAL,CAAagB,WAAb,GAAyB,UAASnuE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaC,cAAb,IAA6B,CAACtR,IAAI,CAAC56D,OAAL,CAAalB,CAAb,CAA9B,IAA+C87D,IAAI,CAACqR,OAAL,CAAaO,gBAAb,CAA8B,gCAA9B,EAA+D,CAAC5R,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAAD,EAAgBA,CAAhB,CAA/D,EAAkFC,CAAlF,EAAoFvC,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAApF,CAA/C;AAA4K,SAAO9I,CAAP;AAAS,CAA9N;;AAClO87D,IAAI,CAACqR,OAAL,CAAaiB,aAAb,GAA2B,UAASpuE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaC,cAAb,IAA6B,CAACtR,IAAI,CAACE,SAAL,CAAeh8D,CAAf,CAA9B,IAAiD87D,IAAI,CAACqR,OAAL,CAAaO,gBAAb,CAA8B,kCAA9B,EAAiE,CAAC5R,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAAD,EAAgBA,CAAhB,CAAjE,EAAoFC,CAApF,EAAsFvC,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAAtF,CAAjD;AAAgL,SAAO9I,CAAP;AAAS,CAApO;;AAAqO87D,IAAI,CAACqR,OAAL,CAAakB,aAAb,GAA2B,UAASruE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,GAAC4tC,IAAI,CAACqR,OAAL,CAAaC,cAAd,IAA8BtR,IAAI,CAAC3jD,QAAL,CAAcnY,CAAd,KAAkBA,CAAC,CAACu8D,QAAF,IAAYT,IAAI,CAACuQ,GAAL,CAASC,QAAT,CAAkBC,OAA9E,IAAuFzQ,IAAI,CAACqR,OAAL,CAAaO,gBAAb,CAA8B,kCAA9B,EAAiE,CAAC5R,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAAD,EAAgBA,CAAhB,CAAjE,EAAoFC,CAApF,EAAsFvC,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAAtF,CAAvF;AAAsN,SAAO9I,CAAP;AAAS,CAA1Q;;AACrO87D,IAAI,CAACqR,OAAL,CAAamB,gBAAb,GAA8B,UAAStuE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,GAACgsB,IAAI,CAACqR,OAAL,CAAaC,cAAd,IAA8BptE,CAAC,YAAYC,CAA3C,IAA8C67D,IAAI,CAACqR,OAAL,CAAaO,gBAAb,CAA8B,oCAA9B,EAAmE,CAAC5R,IAAI,CAACqR,OAAL,CAAaoB,QAAb,CAAsBtuE,CAAtB,CAAD,EAA0B67D,IAAI,CAACqR,OAAL,CAAaoB,QAAb,CAAsBvuE,CAAtB,CAA1B,CAAnE,EAAuHkuB,CAAvH,EAAyHxwB,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAAzH,CAA9C;AAAgN,SAAO9I,CAAP;AAAS,CAAzQ;;AAA0Q87D,IAAI,CAACqR,OAAL,CAAaqB,YAAb,GAA0B,UAASxuE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,GAAC4tC,IAAI,CAACqR,OAAL,CAAaC,cAAd,IAA8B,YAAU,OAAOptE,CAAjB,IAAoB25D,QAAQ,CAAC35D,CAAD,CAA1D,IAA+D87D,IAAI,CAACqR,OAAL,CAAaO,gBAAb,CAA8B,kDAA9B,EAAiF,CAAC1tE,CAAD,CAAjF,EAAqFC,CAArF,EAAuFvC,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAAvF,CAA/D;AAA+L,SAAO9I,CAAP;AAAS,CAAlP;;AAC1Q87D,IAAI,CAACqR,OAAL,CAAasB,6BAAb,GAA2C,YAAU;AAAC,OAAI,IAAIzuE,CAAR,IAAaxD,MAAM,CAACoZ,SAApB,EAA8BkmD,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB9tE,CAAC,GAAC,gDAApB;AAAsE,CAA1J;;AAA2J87D,IAAI,CAACqR,OAAL,CAAaoB,QAAb,GAAsB,UAASvuE,CAAT,EAAW;AAAC,SAAOA,CAAC,YAAYw3D,QAAb,GAAsBx3D,CAAC,CAAC0uE,WAAF,IAAe1uE,CAAC,CAAC4C,IAAjB,IAAuB,mBAA7C,GAAiE5C,CAAC,YAAYxD,MAAb,GAAoBwD,CAAC,CAACvH,WAAF,CAAci2E,WAAd,IAA2B1uE,CAAC,CAACvH,WAAF,CAAcmK,IAAzC,IAA+CpG,MAAM,CAACoZ,SAAP,CAAiBY,QAAjB,CAA0BC,IAA1B,CAA+BzW,CAA/B,CAAnE,GAAqG,SAAOA,CAAP,GAAS,MAAT,GAAgB,OAAOA,CAApM;AAAsM,CAAxO;;AAAyO,IAAI2uE,IAAI,GAAC;AAACC,iBAAe,EAAC,EAAjB;AAAoBC,oBAAkB,EAAC,YAAU,CAAE,CAAnD;AAAoDC,eAAa,EAAC,YAAU,CAAE;AAA9E,CAAT;AAAyFH,IAAI,CAACC,eAAL,CAAqBG,SAArB,GAA+B;AAACC,SAAO,EAAC,CAAC,CAAV;AAAYC,QAAM,EAAC,CAAnB;AAAqBC,OAAK,EAAC,CAA3B;AAA6BC,OAAK,EAAC,CAAnC;AAAqCC,QAAM,EAAC,CAA5C;AAA8CC,OAAK,EAAC,CAApD;AAAsDC,SAAO,EAAC,CAA9D;AAAgEC,SAAO,EAAC,CAAxE;AAA0EC,MAAI,EAAC,CAA/E;AAAiFC,QAAM,EAAC,CAAxF;AAA0FC,OAAK,EAAC,EAAhG;AAAmGC,SAAO,EAAC,EAA3G;AAA8GC,OAAK,EAAC,EAApH;AAAuHC,QAAM,EAAC,EAA9H;AAAiIC,MAAI,EAAC,EAAtI;AAAyIC,UAAQ,EAAC,EAAlJ;AAAqJC,UAAQ,EAAC,EAA9J;AAAiKC,QAAM,EAAC,EAAxK;AAA2KC,QAAM,EAAC,EAAlL;AAAqLC,SAAO,EAAC,EAA7L;AAAgMC,SAAO,EAAC;AAAxM,CAA/B;AAA2OzB,IAAI,CAACC,eAAL,CAAqByB,QAArB,GAA8B;AAACrB,SAAO,EAAC,CAAC,CAAV;AAAYsB,QAAM,EAAC,CAAnB;AAAqBhB,SAAO,EAAC,CAA7B;AAA+BiB,WAAS,EAAC,CAAzC;AAA2CC,aAAW,EAAC,CAAvD;AAAyDC,WAAS,EAAC,CAAnE;AAAqElB,SAAO,EAAC;AAA7E,CAA9B;;AACxsBZ,IAAI,CAACC,eAAL,CAAqB8B,mBAArB,GAAyC,UAAS1wE,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqBG,SAA3B;AAAA,MAAqC7gD,CAAC,GAACygD,IAAI,CAACC,eAAL,CAAqByB,QAA5D;;AAAqE,UAAOrwE,CAAP;AAAU,SAAKC,CAAC,CAACovE,KAAP;AAAa,SAAKpvE,CAAC,CAACkvE,KAAP;AAAa,SAAKlvE,CAAC,CAAC4vE,MAAP;AAAc,SAAK5vE,CAAC,CAACmvE,MAAP;AAAc,SAAKnvE,CAAC,CAACgwE,MAAP;AAAc,SAAKhwE,CAAC,CAACiwE,MAAP;AAAc,SAAKjwE,CAAC,CAACuvE,IAAP;AAAY,SAAKvvE,CAAC,CAAC6vE,IAAP;AAAY,SAAK7vE,CAAC,CAACmwE,OAAP;AAAe,aAAOliD,CAAC,CAACoiD,MAAT;;AAAgB,SAAKrwE,CAAC,CAACgvE,MAAP;AAAc,SAAKhvE,CAAC,CAACqvE,OAAP;AAAe,SAAKrvE,CAAC,CAAC+vE,QAAP;AAAgB,SAAK/vE,CAAC,CAACkwE,OAAP;AAAe,aAAOjiD,CAAC,CAACohD,OAAT;;AAAiB,SAAKrvE,CAAC,CAACwvE,MAAP;AAAc,SAAKxvE,CAAC,CAAC0vE,OAAP;AAAe,SAAK1vE,CAAC,CAAC2vE,KAAP;AAAa,aAAO1hD,CAAC,CAACqiD,SAAT;;AAAmB,SAAKtwE,CAAC,CAACivE,KAAP;AAAa,SAAKjvE,CAAC,CAACsvE,OAAP;AAAe,SAAKtvE,CAAC,CAAC8vE,QAAP;AAAgB,aAAO7hD,CAAC,CAACqhD,OAAT;;AAAiB;AAAQ,aAAOrhD,CAAC,CAAC8gD,OAAT;AAAlW;AAAoX,CAA9e;;AACAL,IAAI,CAACC,eAAL,CAAqB+B,oBAArB,GAA0C,CAAC,CAA3C;AAA6ChC,IAAI,CAACC,eAAL,CAAqBgC,WAArB,GAAiC,qBAAjC;AAAuDjC,IAAI,CAACC,eAAL,CAAqBiC,WAArB,GAAiC,sBAAjC;AAAwDlC,IAAI,CAACC,eAAL,CAAqBkC,WAArB,GAAiC,qBAAjC;AAAuDnC,IAAI,CAACC,eAAL,CAAqBmC,WAArB,GAAiC,QAAjC;AAA0CpC,IAAI,CAACC,eAAL,CAAqBoC,WAArB,GAAiC,uBAAjC;AAAyDrC,IAAI,CAACC,eAAL,CAAqBqC,WAArB,GAAiC,sBAAjC;AAAwDtC,IAAI,CAACC,eAAL,CAAqBsC,SAArB,GAA+B,OAA/B;AAAuCvC,IAAI,CAACC,eAAL,CAAqBuC,SAArB,GAA+B,OAA/B;AAAuCxC,IAAI,CAACC,eAAL,CAAqBwC,SAArB,GAA+B,UAA/B;AAC5bzC,IAAI,CAACC,eAAL,CAAqByC,SAArB,GAA+B,UAA/B;AAA0C1C,IAAI,CAACC,eAAL,CAAqB0C,SAArB,GAA+B,gBAA/B;AAAgD3C,IAAI,CAACC,eAAL,CAAqB2C,SAArB,GAA+B,kBAA/B;AAAkD5C,IAAI,CAACC,eAAL,CAAqB4C,SAArB,GAA+B,qBAA/B;AAAqD7C,IAAI,CAACC,eAAL,CAAqB6C,SAArB,GAA+B,kCAA/B;AAAkE3V,IAAI,CAAC/zD,KAAL,GAAW,EAAX;AAAc+zD,IAAI,CAAC4V,uBAAL,GAA6B5V,IAAI,CAACa,YAAlC;AAA+Cb,IAAI,CAAC/zD,KAAL,CAAW4pE,uBAAX,GAAmC,OAAK7V,IAAI,CAACU,eAA7C;;AAA6DV,IAAI,CAAC/zD,KAAL,CAAW6pE,IAAX,GAAgB,UAAS5xE,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACA,CAAC,CAACJ,MAAF,GAAS,CAAV,CAAR;AAAqB,CAAjD;;AAAkDk8D,IAAI,CAAC/zD,KAAL,CAAW8D,IAAX,GAAgBiwD,IAAI,CAAC/zD,KAAL,CAAW6pE,IAA3B;AAC/a9V,IAAI,CAAC/zD,KAAL,CAAWH,OAAX,GAAmBk0D,IAAI,CAAC4V,uBAAL,KAA+B5V,IAAI,CAAC/zD,KAAL,CAAW4pE,uBAAX,IAAoCj0E,KAAK,CAACkY,SAAN,CAAgBhO,OAAnF,IAA4F,UAAS5H,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,QAAM5tE,CAAC,CAACJ,MAA5B;AAAoC,SAAOlC,KAAK,CAACkY,SAAN,CAAgBhO,OAAhB,CAAwB6O,IAAxB,CAA6BzW,CAA7B,EAA+BC,CAA/B,EAAiCiuB,CAAjC,CAAP;AAA2C,CAA3L,GAA4L,UAASluB,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACA,GAAC,GAAC,QAAMA,CAAN,GAAQ,CAAR,GAAU,IAAEA,CAAF,GAAI7lB,IAAI,CAACge,GAAL,CAAS,CAAT,EAAWrmB,CAAC,CAACJ,MAAF,GAASsuB,CAApB,CAAJ,GAA2BA,CAAvC;AAAyC,MAAG4tC,IAAI,CAAC9jD,QAAL,CAAchY,CAAd,CAAH,EAAoB,OAAO87D,IAAI,CAAC9jD,QAAL,CAAc/X,CAAd,KAAkB,KAAGA,CAAC,CAACL,MAAvB,GAA8BI,CAAC,CAAC4H,OAAF,CAAU3H,CAAV,EAAYiuB,CAAZ,CAA9B,GAA6C,CAAC,CAArD;;AAAuD,SAAKA,CAAC,GAACluB,CAAC,CAACJ,MAAT,EAAgBsuB,CAAC,EAAjB,EAAoB,IAAGA,CAAC,IAAIluB,CAAL,IAAQA,CAAC,CAACkuB,CAAD,CAAD,KAAOjuB,CAAlB,EAAoB,OAAOiuB,CAAP;;AAAS,SAAM,CAAC,CAAP;AAAS,CAA7Y;AACA4tC,IAAI,CAAC/zD,KAAL,CAAWq1D,WAAX,GAAuBtB,IAAI,CAAC4V,uBAAL,KAA+B5V,IAAI,CAAC/zD,KAAL,CAAW4pE,uBAAX,IAAoCj0E,KAAK,CAACkY,SAAN,CAAgBwnD,WAAnF,IAAgG,UAASp9D,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,QAAM5tE,CAAC,CAACJ,MAA5B;AAAoC,SAAOlC,KAAK,CAACkY,SAAN,CAAgBwnD,WAAhB,CAA4B3mD,IAA5B,CAAiCzW,CAAjC,EAAmCC,CAAnC,EAAqC,QAAMiuB,CAAN,GAAQluB,CAAC,CAACJ,MAAF,GAAS,CAAjB,GAAmBsuB,CAAxD,CAAP;AAAkE,CAAtN,GAAuN,UAASluB,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACA,GAAC,GAAC,QAAMA,CAAN,GAAQluB,CAAC,CAACJ,MAAF,GAAS,CAAjB,GAAmBsuB,CAArB;AAAuB,MAAEA,CAAF,KAAMA,CAAC,GAAC7lB,IAAI,CAACge,GAAL,CAAS,CAAT,EAAWrmB,CAAC,CAACJ,MAAF,GAASsuB,CAApB,CAAR;AAAgC,MAAG4tC,IAAI,CAAC9jD,QAAL,CAAchY,CAAd,CAAH,EAAoB,OAAO87D,IAAI,CAAC9jD,QAAL,CAAc/X,CAAd,KAAkB,KAAGA,CAAC,CAACL,MAAvB,GAA8BI,CAAC,CAACo9D,WAAF,CAAcn9D,CAAd,EAAgBiuB,CAAhB,CAA9B,GAAiD,CAAC,CAAzD;;AAA2D,SAAK,KAAGA,CAAR,EAAUA,CAAC,EAAX,EAAc,IAAGA,CAAC,IAAIluB,CAAL,IAAQA,CAAC,CAACkuB,CAAD,CAAD,KAAOjuB,CAAlB,EAAoB,OAAOiuB,CAAP;;AAAS,SAAM,CAAC,CAAP;AAAS,CAAxb;AACA4tC,IAAI,CAAC/zD,KAAL,CAAW+D,OAAX,GAAmBgwD,IAAI,CAAC4V,uBAAL,KAA+B5V,IAAI,CAAC/zD,KAAL,CAAW4pE,uBAAX,IAAoCj0E,KAAK,CAACkY,SAAN,CAAgB9J,OAAnF,IAA4F,UAAS9L,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,QAAM5tE,CAAC,CAACJ,MAA5B;AAAoClC,OAAK,CAACkY,SAAN,CAAgB9J,OAAhB,CAAwB2K,IAAxB,CAA6BzW,CAA7B,EAA+BC,CAA/B,EAAiCiuB,CAAjC;AAAoC,CAApL,GAAqL,UAASluB,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAI,IAAI4hB,CAAC,GAAC9vC,CAAC,CAACJ,MAAR,EAAesjB,CAAC,GAAC44C,IAAI,CAAC9jD,QAAL,CAAchY,CAAd,IAAiBA,CAAC,CAACia,KAAF,CAAQ,EAAR,CAAjB,GAA6Bja,CAA9C,EAAgDymC,CAAC,GAAC,CAAtD,EAAwDA,CAAC,GAACqJ,CAA1D,EAA4DrJ,CAAC,EAA7D,EAAgEA,CAAC,IAAIvjB,CAAL,IAAQjjB,CAAC,CAACwW,IAAF,CAAOyX,CAAP,EAAShL,CAAC,CAACujB,CAAD,CAAV,EAAcA,CAAd,EAAgBzmC,CAAhB,CAAR;AAA2B,CAAnT;;AAAoT87D,IAAI,CAAC/zD,KAAL,CAAW8pE,YAAX,GAAwB,UAAS7xE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC9vC,CAAC,CAACJ,MAAR;AAAA,MAAesjB,CAAC,GAAC44C,IAAI,CAAC9jD,QAAL,CAAchY,CAAd,IAAiBA,CAAC,CAACia,KAAF,CAAQ,EAAR,CAAjB,GAA6Bja,CAA9C;;AAAgD,OAAI,EAAE8vC,CAAN,EAAQ,KAAGA,CAAX,EAAa,EAAEA,CAAf,EAAiBA,CAAC,IAAI5sB,CAAL,IAAQjjB,CAAC,CAACwW,IAAF,CAAOyX,CAAP,EAAShL,CAAC,CAAC4sB,CAAD,CAAV,EAAcA,CAAd,EAAgB9vC,CAAhB,CAAR;AAA2B,CAApI;;AACpT87D,IAAI,CAAC/zD,KAAL,CAAW1H,MAAX,GAAkBy7D,IAAI,CAAC4V,uBAAL,KAA+B5V,IAAI,CAAC/zD,KAAL,CAAW4pE,uBAAX,IAAoCj0E,KAAK,CAACkY,SAAN,CAAgBvV,MAAnF,IAA2F,UAASL,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,QAAM5tE,CAAC,CAACJ,MAA5B;AAAoC,SAAOlC,KAAK,CAACkY,SAAN,CAAgBvV,MAAhB,CAAuBoW,IAAvB,CAA4BzW,CAA5B,EAA8BC,CAA9B,EAAgCiuB,CAAhC,CAAP;AAA0C,CAAzL,GAA0L,UAASluB,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAI,IAAI4hB,CAAC,GAAC9vC,CAAC,CAACJ,MAAR,EAAesjB,CAAC,GAAC,EAAjB,EAAoBujB,CAAC,GAAC,CAAtB,EAAwBvL,CAAC,GAAC4gC,IAAI,CAAC9jD,QAAL,CAAchY,CAAd,IAAiBA,CAAC,CAACia,KAAF,CAAQ,EAAR,CAAjB,GAA6Bja,CAAvD,EAAyD2wC,CAAC,GAAC,CAA/D,EAAiEA,CAAC,GAACb,CAAnE,EAAqEa,CAAC,EAAtE,EAAyE,IAAGA,CAAC,IAAIzV,CAAR,EAAU;AAAC,QAAInN,CAAC,GAACmN,CAAC,CAACyV,CAAD,CAAP;AAAW1wC,KAAC,CAACwW,IAAF,CAAOyX,CAAP,EAASH,CAAT,EAAW4iB,CAAX,EAAa3wC,CAAb,MAAkBkjB,CAAC,CAACujB,CAAC,EAAF,CAAD,GAAO1Y,CAAzB;AAA4B;;AAAA,SAAO7K,CAAP;AAAS,CAAhW;AACA44C,IAAI,CAAC/zD,KAAL,CAAWpL,GAAX,GAAem/D,IAAI,CAAC4V,uBAAL,KAA+B5V,IAAI,CAAC/zD,KAAL,CAAW4pE,uBAAX,IAAoCj0E,KAAK,CAACkY,SAAN,CAAgBjZ,GAAnF,IAAwF,UAASqD,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,QAAM5tE,CAAC,CAACJ,MAA5B;AAAoC,SAAOlC,KAAK,CAACkY,SAAN,CAAgBjZ,GAAhB,CAAoB8Z,IAApB,CAAyBzW,CAAzB,EAA2BC,CAA3B,EAA6BiuB,CAA7B,CAAP;AAAuC,CAAnL,GAAoL,UAASluB,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAI,IAAI4hB,CAAC,GAAC9vC,CAAC,CAACJ,MAAR,EAAesjB,CAAC,GAACxlB,KAAK,CAACoyC,CAAD,CAAtB,EAA0BrJ,CAAC,GAACq1B,IAAI,CAAC9jD,QAAL,CAAchY,CAAd,IAAiBA,CAAC,CAACia,KAAF,CAAQ,EAAR,CAAjB,GAA6Bja,CAAzD,EAA2Dk7B,CAAC,GAAC,CAAjE,EAAmEA,CAAC,GAAC4U,CAArE,EAAuE5U,CAAC,EAAxE,EAA2EA,CAAC,IAAIuL,CAAL,KAASvjB,CAAC,CAACgY,CAAD,CAAD,GAAKj7B,CAAC,CAACwW,IAAF,CAAOyX,CAAP,EAASuY,CAAC,CAACvL,CAAD,CAAV,EAAcA,CAAd,EAAgBl7B,CAAhB,CAAd;;AAAkC,SAAOkjB,CAAP;AAAS,CAAzU;AACA44C,IAAI,CAAC/zD,KAAL,CAAWlO,MAAX,GAAkBiiE,IAAI,CAAC4V,uBAAL,KAA+B5V,IAAI,CAAC/zD,KAAL,CAAW4pE,uBAAX,IAAoCj0E,KAAK,CAACkY,SAAN,CAAgB/b,MAAnF,IAA2F,UAASmG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAACgsB,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,QAAM5tE,CAAC,CAACJ,MAA5B;AAAoCkwC,GAAC,KAAG7vC,CAAC,GAAC67D,IAAI,CAACjgC,IAAL,CAAU57B,CAAV,EAAY6vC,CAAZ,CAAL,CAAD;AAAsB,SAAOpyC,KAAK,CAACkY,SAAN,CAAgB/b,MAAhB,CAAuB4c,IAAvB,CAA4BzW,CAA5B,EAA8BC,CAA9B,EAAgCiuB,CAAhC,CAAP;AAA0C,CAAjN,GAAkN,UAASluB,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,MAAI5sB,CAAC,GAACgL,CAAN;AAAQ4tC,MAAI,CAAC/zD,KAAL,CAAW+D,OAAX,CAAmB9L,CAAnB,EAAqB,UAASkuB,CAAT,EAAWgN,CAAX,EAAa;AAAChY,KAAC,GAACjjB,CAAC,CAACwW,IAAF,CAAOq5B,CAAP,EAAS5sB,CAAT,EAAWgL,CAAX,EAAagN,CAAb,EAAel7B,CAAf,CAAF;AAAoB,GAAvD;AAAyD,SAAOkjB,CAAP;AAAS,CAAhU;AACA44C,IAAI,CAAC/zD,KAAL,CAAW+pE,WAAX,GAAuBhW,IAAI,CAAC4V,uBAAL,KAA+B5V,IAAI,CAAC/zD,KAAL,CAAW4pE,uBAAX,IAAoCj0E,KAAK,CAACkY,SAAN,CAAgBk8D,WAAnF,IAAgG,UAAS9xE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAACgsB,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,QAAM5tE,CAAC,CAACJ,MAA5B;AAAoCk8D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,QAAM3tE,CAA1B;AAA6B6vC,GAAC,KAAG7vC,CAAC,GAAC67D,IAAI,CAACjgC,IAAL,CAAU57B,CAAV,EAAY6vC,CAAZ,CAAL,CAAD;AAAsB,SAAOpyC,KAAK,CAACkY,SAAN,CAAgBk8D,WAAhB,CAA4Br7D,IAA5B,CAAiCzW,CAAjC,EAAmCC,CAAnC,EAAqCiuB,CAArC,CAAP;AAA+C,CAAxP,GAAyP,UAASluB,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,MAAI5sB,CAAC,GAACgL,CAAN;AAAQ4tC,MAAI,CAAC/zD,KAAL,CAAW8pE,YAAX,CAAwB7xE,CAAxB,EAA0B,UAASkuB,CAAT,EAAWgN,CAAX,EAAa;AAAChY,KAAC,GAACjjB,CAAC,CAACwW,IAAF,CAAOq5B,CAAP,EAAS5sB,CAAT,EAAWgL,CAAX,EAAagN,CAAb,EAAel7B,CAAf,CAAF;AAAoB,GAA5D;AAA8D,SAAOkjB,CAAP;AAAS,CAAjX;AACA44C,IAAI,CAAC/zD,KAAL,CAAWlH,IAAX,GAAgBi7D,IAAI,CAAC4V,uBAAL,KAA+B5V,IAAI,CAAC/zD,KAAL,CAAW4pE,uBAAX,IAAoCj0E,KAAK,CAACkY,SAAN,CAAgB/U,IAAnF,IAAyF,UAASb,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,QAAM5tE,CAAC,CAACJ,MAA5B;AAAoC,SAAOlC,KAAK,CAACkY,SAAN,CAAgB/U,IAAhB,CAAqB4V,IAArB,CAA0BzW,CAA1B,EAA4BC,CAA5B,EAA8BiuB,CAA9B,CAAP;AAAwC,CAArL,GAAsL,UAASluB,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAI,IAAI4hB,CAAC,GAAC9vC,CAAC,CAACJ,MAAR,EAAesjB,CAAC,GAAC44C,IAAI,CAAC9jD,QAAL,CAAchY,CAAd,IAAiBA,CAAC,CAACia,KAAF,CAAQ,EAAR,CAAjB,GAA6Bja,CAA9C,EAAgDymC,CAAC,GAAC,CAAtD,EAAwDA,CAAC,GAACqJ,CAA1D,EAA4DrJ,CAAC,EAA7D,EAAgE,IAAGA,CAAC,IAAIvjB,CAAL,IAAQjjB,CAAC,CAACwW,IAAF,CAAOyX,CAAP,EAAShL,CAAC,CAACujB,CAAD,CAAV,EAAcA,CAAd,EAAgBzmC,CAAhB,CAAX,EAA8B,OAAM,CAAC,CAAP;;AAAS,SAAM,CAAC,CAAP;AAAS,CAAtU;AACA87D,IAAI,CAAC/zD,KAAL,CAAWlI,KAAX,GAAiBi8D,IAAI,CAAC4V,uBAAL,KAA+B5V,IAAI,CAAC/zD,KAAL,CAAW4pE,uBAAX,IAAoCj0E,KAAK,CAACkY,SAAN,CAAgB/V,KAAnF,IAA0F,UAASG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,QAAM5tE,CAAC,CAACJ,MAA5B;AAAoC,SAAOlC,KAAK,CAACkY,SAAN,CAAgB/V,KAAhB,CAAsB4W,IAAtB,CAA2BzW,CAA3B,EAA6BC,CAA7B,EAA+BiuB,CAA/B,CAAP;AAAyC,CAAvL,GAAwL,UAASluB,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAI,IAAI4hB,CAAC,GAAC9vC,CAAC,CAACJ,MAAR,EAAesjB,CAAC,GAAC44C,IAAI,CAAC9jD,QAAL,CAAchY,CAAd,IAAiBA,CAAC,CAACia,KAAF,CAAQ,EAAR,CAAjB,GAA6Bja,CAA9C,EAAgDymC,CAAC,GAAC,CAAtD,EAAwDA,CAAC,GAACqJ,CAA1D,EAA4DrJ,CAAC,EAA7D,EAAgE,IAAGA,CAAC,IAAIvjB,CAAL,IAAQ,CAACjjB,CAAC,CAACwW,IAAF,CAAOyX,CAAP,EAAShL,CAAC,CAACujB,CAAD,CAAV,EAAcA,CAAd,EAAgBzmC,CAAhB,CAAZ,EAA+B,OAAM,CAAC,CAAP;;AAAS,SAAM,CAAC,CAAP;AAAS,CAA1U;;AAA2U87D,IAAI,CAAC/zD,KAAL,CAAW1G,KAAX,GAAiB,UAASrB,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC,CAAN;AAAQgsB,MAAI,CAAC/zD,KAAL,CAAW+D,OAAX,CAAmB9L,CAAnB,EAAqB,UAASA,CAAT,EAAWymC,CAAX,EAAavL,CAAb,EAAe;AAACj7B,KAAC,CAACwW,IAAF,CAAOyX,CAAP,EAASluB,CAAT,EAAWymC,CAAX,EAAavL,CAAb,KAAiB,EAAE4U,CAAnB;AAAqB,GAA1D,EAA2D5hB,CAA3D;AAA8D,SAAO4hB,CAAP;AAAS,CAAhH;;AAC3UgsB,IAAI,CAAC/zD,KAAL,CAAWuN,IAAX,GAAgB,UAAStV,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACjuB,GAAC,GAAC67D,IAAI,CAAC/zD,KAAL,CAAWlG,SAAX,CAAqB7B,CAArB,EAAuBC,CAAvB,EAAyBiuB,CAAzB,CAAF;AAA8B,SAAO,IAAEjuB,CAAF,GAAI,IAAJ,GAAS67D,IAAI,CAAC9jD,QAAL,CAAchY,CAAd,IAAiBA,CAAC,CAACq+B,MAAF,CAASp+B,CAAT,CAAjB,GAA6BD,CAAC,CAACC,CAAD,CAA9C;AAAkD,CAAhH;;AAAiH67D,IAAI,CAAC/zD,KAAL,CAAWlG,SAAX,GAAqB,UAAS7B,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAI,IAAI4hB,CAAC,GAAC9vC,CAAC,CAACJ,MAAR,EAAesjB,CAAC,GAAC44C,IAAI,CAAC9jD,QAAL,CAAchY,CAAd,IAAiBA,CAAC,CAACia,KAAF,CAAQ,EAAR,CAAjB,GAA6Bja,CAA9C,EAAgDymC,CAAC,GAAC,CAAtD,EAAwDA,CAAC,GAACqJ,CAA1D,EAA4DrJ,CAAC,EAA7D,EAAgE,IAAGA,CAAC,IAAIvjB,CAAL,IAAQjjB,CAAC,CAACwW,IAAF,CAAOyX,CAAP,EAAShL,CAAC,CAACujB,CAAD,CAAV,EAAcA,CAAd,EAAgBzmC,CAAhB,CAAX,EAA8B,OAAOymC,CAAP;;AAAS,SAAM,CAAC,CAAP;AAAS,CAArJ;;AAAsJq1B,IAAI,CAAC/zD,KAAL,CAAWgqE,SAAX,GAAqB,UAAS/xE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACjuB,GAAC,GAAC67D,IAAI,CAAC/zD,KAAL,CAAWiqE,cAAX,CAA0BhyE,CAA1B,EAA4BC,CAA5B,EAA8BiuB,CAA9B,CAAF;AAAmC,SAAO,IAAEjuB,CAAF,GAAI,IAAJ,GAAS67D,IAAI,CAAC9jD,QAAL,CAAchY,CAAd,IAAiBA,CAAC,CAACq+B,MAAF,CAASp+B,CAAT,CAAjB,GAA6BD,CAAC,CAACC,CAAD,CAA9C;AAAkD,CAA1H;;AACvQ67D,IAAI,CAAC/zD,KAAL,CAAWiqE,cAAX,GAA0B,UAAShyE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC9vC,CAAC,CAACJ,MAAR;AAAA,MAAesjB,CAAC,GAAC44C,IAAI,CAAC9jD,QAAL,CAAchY,CAAd,IAAiBA,CAAC,CAACia,KAAF,CAAQ,EAAR,CAAjB,GAA6Bja,CAA9C;;AAAgD,OAAI,EAAE8vC,CAAN,EAAQ,KAAGA,CAAX,EAAaA,CAAC,EAAd,EAAiB,IAAGA,CAAC,IAAI5sB,CAAL,IAAQjjB,CAAC,CAACwW,IAAF,CAAOyX,CAAP,EAAShL,CAAC,CAAC4sB,CAAD,CAAV,EAAcA,CAAd,EAAgB9vC,CAAhB,CAAX,EAA8B,OAAO8vC,CAAP;;AAAS,SAAM,CAAC,CAAP;AAAS,CAA3J;;AAA4JgsB,IAAI,CAAC/zD,KAAL,CAAW4iE,QAAX,GAAoB,UAAS3qE,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO,KAAG67D,IAAI,CAAC/zD,KAAL,CAAWH,OAAX,CAAmB5H,CAAnB,EAAqBC,CAArB,CAAV;AAAkC,CAApE;;AAAqE67D,IAAI,CAAC/zD,KAAL,CAAWmjE,OAAX,GAAmB,UAASlrE,CAAT,EAAW;AAAC,SAAO,KAAGA,CAAC,CAACJ,MAAZ;AAAmB,CAAlD;;AAAmDk8D,IAAI,CAAC/zD,KAAL,CAAWojE,KAAX,GAAiB,UAASnrE,CAAT,EAAW;AAAC,MAAG,CAAC87D,IAAI,CAAC56D,OAAL,CAAalB,CAAb,CAAJ,EAAoB,KAAI,IAAIC,CAAC,GAACD,CAAC,CAACJ,MAAF,GAAS,CAAnB,EAAqB,KAAGK,CAAxB,EAA0BA,CAAC,EAA3B,EAA8B,OAAOD,CAAC,CAACC,CAAD,CAAR;AAAYD,GAAC,CAACJ,MAAF,GAAS,CAAT;AAAW,CAAtG;;AAAuGk8D,IAAI,CAAC/zD,KAAL,CAAWkqE,MAAX,GAAkB,UAASjyE,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAAC/zD,KAAL,CAAW4iE,QAAX,CAAoB3qE,CAApB,EAAsBC,CAAtB,KAA0BD,CAAC,CAACvB,IAAF,CAAOwB,CAAP,CAA1B;AAAoC,CAApE;;AAC3X67D,IAAI,CAAC/zD,KAAL,CAAWmqE,QAAX,GAAoB,UAASlyE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAAC/zD,KAAL,CAAWhG,MAAX,CAAkB/B,CAAlB,EAAoBkuB,CAApB,EAAsB,CAAtB,EAAwBjuB,CAAxB;AAA2B,CAA/D;;AAAgE67D,IAAI,CAAC/zD,KAAL,CAAWoqE,aAAX,GAAyB,UAASnyE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACuG,OAAL,CAAavG,IAAI,CAAC/zD,KAAL,CAAWhG,MAAxB,EAA+B/B,CAA/B,EAAiCkuB,CAAjC,EAAmC,CAAnC,EAAsCuO,KAAtC,CAA4C,IAA5C,EAAiDx8B,CAAjD;AAAoD,CAA7F;;AAA8F67D,IAAI,CAAC/zD,KAAL,CAAWqqE,YAAX,GAAwB,UAASpyE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAJ;AAAM,OAAGhnC,SAAS,CAAClJ,MAAb,IAAqB,KAAGkwC,CAAC,GAACgsB,IAAI,CAAC/zD,KAAL,CAAWH,OAAX,CAAmB5H,CAAnB,EAAqBkuB,CAArB,CAAL,CAArB,GAAmDluB,CAAC,CAACvB,IAAF,CAAOwB,CAAP,CAAnD,GAA6D67D,IAAI,CAAC/zD,KAAL,CAAWmqE,QAAX,CAAoBlyE,CAApB,EAAsBC,CAAtB,EAAwB6vC,CAAxB,CAA7D;AAAwF,CAAtI;;AAAuIgsB,IAAI,CAAC/zD,KAAL,CAAWpG,MAAX,GAAkB,UAAS3B,CAAT,EAAWC,CAAX,EAAa;AAACA,GAAC,GAAC67D,IAAI,CAAC/zD,KAAL,CAAWH,OAAX,CAAmB5H,CAAnB,EAAqBC,CAArB,CAAF;AAA0B,MAAIiuB,CAAJ;AAAM,GAACA,CAAC,GAAC,KAAGjuB,CAAN,KAAU67D,IAAI,CAAC/zD,KAAL,CAAWsqE,QAAX,CAAoBryE,CAApB,EAAsBC,CAAtB,CAAV;AAAmC,SAAOiuB,CAAP;AAAS,CAA5G;;AACrS4tC,IAAI,CAAC/zD,KAAL,CAAWuqE,UAAX,GAAsB,UAAStyE,CAAT,EAAWC,CAAX,EAAa;AAACA,GAAC,GAAC67D,IAAI,CAAC/zD,KAAL,CAAWq1D,WAAX,CAAuBp9D,CAAvB,EAAyBC,CAAzB,CAAF;AAA8B,SAAO,KAAGA,CAAH,IAAM67D,IAAI,CAAC/zD,KAAL,CAAWsqE,QAAX,CAAoBryE,CAApB,EAAsBC,CAAtB,GAAyB,CAAC,CAAhC,IAAmC,CAAC,CAA3C;AAA6C,CAA/G;;AAAgH67D,IAAI,CAAC/zD,KAAL,CAAWsqE,QAAX,GAAoB,UAASryE,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,QAAM5tE,CAAC,CAACJ,MAA5B;AAAoC,SAAO,KAAGlC,KAAK,CAACkY,SAAN,CAAgB7T,MAAhB,CAAuB0U,IAAvB,CAA4BzW,CAA5B,EAA8BC,CAA9B,EAAgC,CAAhC,EAAmCL,MAA7C;AAAoD,CAA1H;;AAA2Hk8D,IAAI,CAAC/zD,KAAL,CAAWwqE,QAAX,GAAoB,UAASvyE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACjuB,GAAC,GAAC67D,IAAI,CAAC/zD,KAAL,CAAWlG,SAAX,CAAqB7B,CAArB,EAAuBC,CAAvB,EAAyBiuB,CAAzB,CAAF;AAA8B,SAAO,KAAGjuB,CAAH,IAAM67D,IAAI,CAAC/zD,KAAL,CAAWsqE,QAAX,CAAoBryE,CAApB,EAAsBC,CAAtB,GAAyB,CAAC,CAAhC,IAAmC,CAAC,CAA3C;AAA6C,CAA/G;;AAAgH67D,IAAI,CAAC/zD,KAAL,CAAWyqE,WAAX,GAAuB,UAASxyE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC,CAAN;AAAQgsB,MAAI,CAAC/zD,KAAL,CAAW8pE,YAAX,CAAwB7xE,CAAxB,EAA0B,UAASkjB,CAAT,EAAWujB,CAAX,EAAa;AAACxmC,KAAC,CAACwW,IAAF,CAAOyX,CAAP,EAAShL,CAAT,EAAWujB,CAAX,EAAazmC,CAAb,KAAiB87D,IAAI,CAAC/zD,KAAL,CAAWsqE,QAAX,CAAoBryE,CAApB,EAAsBymC,CAAtB,CAAjB,IAA2CqJ,CAAC,EAA5C;AAA+C,GAAvF;AAAyF,SAAOA,CAAP;AAAS,CAAjJ;;AAC3VgsB,IAAI,CAAC/zD,KAAL,CAAW6uB,MAAX,GAAkB,UAAS52B,CAAT,EAAW;AAAC,SAAOtC,KAAK,CAACkY,SAAN,CAAgBghB,MAAhB,CAAuB6F,KAAvB,CAA6B,EAA7B,EAAgC3zB,SAAhC,CAAP;AAAkD,CAAhF;;AAAiFgzD,IAAI,CAAC/zD,KAAL,CAAW4S,IAAX,GAAgB,UAAS3a,CAAT,EAAW;AAAC,SAAOtC,KAAK,CAACkY,SAAN,CAAgBghB,MAAhB,CAAuB6F,KAAvB,CAA6B,EAA7B,EAAgC3zB,SAAhC,CAAP;AAAkD,CAA9E;;AAA+EgzD,IAAI,CAAC/zD,KAAL,CAAWvK,OAAX,GAAmB,UAASwC,CAAT,EAAW;AAAC,MAAIC,CAAC,GAACD,CAAC,CAACJ,MAAR;;AAAe,MAAG,IAAEK,CAAL,EAAO;AAAC,SAAI,IAAIiuB,CAAC,GAACxwB,KAAK,CAACuC,CAAD,CAAX,EAAe6vC,CAAC,GAAC,CAArB,EAAuBA,CAAC,GAAC7vC,CAAzB,EAA2B6vC,CAAC,EAA5B,EAA+B5hB,CAAC,CAAC4hB,CAAD,CAAD,GAAK9vC,CAAC,CAAC8vC,CAAD,CAAN;;AAAU,WAAO5hB,CAAP;AAAS;;AAAA,SAAM,EAAN;AAAS,CAAjH;;AAAkH4tC,IAAI,CAAC/zD,KAAL,CAAW62B,KAAX,GAAiBk9B,IAAI,CAAC/zD,KAAL,CAAWvK,OAA5B;;AAAoCs+D,IAAI,CAAC/zD,KAAL,CAAW2jE,MAAX,GAAkB,UAAS1rE,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACplB,SAAS,CAAClJ,MAAxB,EAA+BsuB,CAAC,EAAhC,EAAmC;AAAC,QAAI4hB,CAAC,GAAChnC,SAAS,CAAColB,CAAD,CAAf;;AAAmB,QAAG4tC,IAAI,CAAC2F,WAAL,CAAiB3xB,CAAjB,CAAH,EAAuB;AAAC,UAAI5sB,CAAC,GAACljB,CAAC,CAACJ,MAAF,IAAU,CAAhB;AAAA,UAAkB6mC,CAAC,GAACqJ,CAAC,CAAClwC,MAAF,IAAU,CAA9B;AAAgCI,OAAC,CAACJ,MAAF,GAASsjB,CAAC,GAACujB,CAAX;;AAAa,WAAI,IAAIvL,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACuL,CAAd,EAAgBvL,CAAC,EAAjB,EAAoBl7B,CAAC,CAACkjB,CAAC,GAACgY,CAAH,CAAD,GAAO4U,CAAC,CAAC5U,CAAD,CAAR;AAAY,KAArG,MAA0Gl7B,CAAC,CAACvB,IAAF,CAAOqxC,CAAP;AAAU;AAAC,CAA5M;;AACtTgsB,IAAI,CAAC/zD,KAAL,CAAWhG,MAAX,GAAkB,UAAS/B,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAACgsB,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,QAAM5tE,CAAC,CAACJ,MAA5B;AAAoC,SAAOlC,KAAK,CAACkY,SAAN,CAAgB7T,MAAhB,CAAuB06B,KAAvB,CAA6Bz8B,CAA7B,EAA+B87D,IAAI,CAAC/zD,KAAL,CAAWnG,KAAX,CAAiBkH,SAAjB,EAA2B,CAA3B,CAA/B,CAAP;AAAqE,CAA7I;;AAA8IgzD,IAAI,CAAC/zD,KAAL,CAAWnG,KAAX,GAAiB,UAAS5B,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,QAAM5tE,CAAC,CAACJ,MAA5B;AAAoC,SAAO,KAAGkJ,SAAS,CAAClJ,MAAb,GAAoBlC,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2BzW,CAA3B,EAA6BC,CAA7B,CAApB,GAAoDvC,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2BzW,CAA3B,EAA6BC,CAA7B,EAA+BiuB,CAA/B,CAA3D;AAA6F,CAAlK;;AAC9I4tC,IAAI,CAAC/zD,KAAL,CAAW0qE,gBAAX,GAA4B,UAASzyE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACjuB,GAAC,GAACA,CAAC,IAAED,CAAL;;AAAO,MAAI8vC,CAAC,GAAC,UAAS9vC,CAAT,EAAW;AAAC,WAAO87D,IAAI,CAAC3jD,QAAL,CAAcnY,CAAd,IAAiB,MAAI87D,IAAI,CAAC6F,MAAL,CAAY3hE,CAAZ,CAArB,GAAoC,CAAC,OAAOA,CAAR,EAAWq+B,MAAX,CAAkB,CAAlB,IAAqBr+B,CAAhE;AAAkE,GAApF;;AAAqFkuB,GAAC,GAACA,CAAC,IAAE4hB,CAAL;AAAOA,GAAC,GAAC,EAAF;;AAAK,OAAI,IAAI5sB,CAAC,GAAC,CAAN,EAAQujB,CAAC,GAAC,CAAd,EAAgBA,CAAC,GAACzmC,CAAC,CAACJ,MAApB,GAA4B;AAAC,QAAIs7B,CAAC,GAACl7B,CAAC,CAACymC,CAAC,EAAF,CAAP;AAAA,QAAakK,CAAC,GAACziB,CAAC,CAACgN,CAAD,CAAhB;AAAoB1+B,UAAM,CAACoZ,SAAP,CAAiB0C,cAAjB,CAAgC7B,IAAhC,CAAqCq5B,CAArC,EAAuCa,CAAvC,MAA4Cb,CAAC,CAACa,CAAD,CAAD,GAAK,CAAC,CAAN,EAAQ1wC,CAAC,CAACijB,CAAC,EAAF,CAAD,GAAOgY,CAA3D;AAA8D;;AAAAj7B,GAAC,CAACL,MAAF,GAASsjB,CAAT;AAAW,CAA9Q;;AAA+Q44C,IAAI,CAAC/zD,KAAL,CAAW2qE,YAAX,GAAwB,UAAS1yE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,SAAO4tC,IAAI,CAAC/zD,KAAL,CAAW4qE,aAAX,CAAyB3yE,CAAzB,EAA2BkuB,CAAC,IAAE4tC,IAAI,CAAC/zD,KAAL,CAAW6qE,cAAzC,EAAwD,CAAC,CAAzD,EAA2D3yE,CAA3D,CAAP;AAAqE,CAA7G;;AAA8G67D,IAAI,CAAC/zD,KAAL,CAAW8qE,YAAX,GAAwB,UAAS7yE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,SAAO4tC,IAAI,CAAC/zD,KAAL,CAAW4qE,aAAX,CAAyB3yE,CAAzB,EAA2BC,CAA3B,EAA6B,CAAC,CAA9B,EAAgC,KAAK,CAArC,EAAuCiuB,CAAvC,CAAP;AAAiD,CAAzF;;AAC7X4tC,IAAI,CAAC/zD,KAAL,CAAW4qE,aAAX,GAAyB,UAAS3yE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmB;AAAC,OAAI,IAAIujB,CAAC,GAAC,CAAN,EAAQvL,CAAC,GAACl7B,CAAC,CAACJ,MAAZ,EAAmB+wC,CAAvB,EAAyBlK,CAAC,GAACvL,CAA3B,GAA8B;AAAC,QAAInN,CAAC,GAAC0Y,CAAC,GAACvL,CAAF,IAAK,CAAX;AAAa,QAAI7D,CAAC,GAACnJ,CAAC,GAACjuB,CAAC,CAACwW,IAAF,CAAOyM,CAAP,EAASljB,CAAC,CAAC+tB,CAAD,CAAV,EAAcA,CAAd,EAAgB/tB,CAAhB,CAAD,GAAoBC,CAAC,CAAC6vC,CAAD,EAAG9vC,CAAC,CAAC+tB,CAAD,CAAJ,CAA5B;AAAqC,QAAEsJ,CAAF,GAAIoP,CAAC,GAAC1Y,CAAC,GAAC,CAAR,IAAWmN,CAAC,GAACnN,CAAF,EAAI4iB,CAAC,GAAC,CAACtZ,CAAlB;AAAqB;;AAAA,SAAOsZ,CAAC,GAAClK,CAAD,GAAG,CAACA,CAAZ;AAAc,CAAjK;;AAAkKq1B,IAAI,CAAC/zD,KAAL,CAAW3H,IAAX,GAAgB,UAASJ,CAAT,EAAWC,CAAX,EAAa;AAACD,GAAC,CAACI,IAAF,CAAOH,CAAC,IAAE67D,IAAI,CAAC/zD,KAAL,CAAW6qE,cAArB;AAAqC,CAAnE;;AAAoE9W,IAAI,CAAC/zD,KAAL,CAAW+qE,UAAX,GAAsB,UAAS9yE,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAI,IAAIiuB,CAAC,GAACxwB,KAAK,CAACsC,CAAC,CAACJ,MAAH,CAAX,EAAsBkwC,CAAC,GAAC,CAA5B,EAA8BA,CAAC,GAAC9vC,CAAC,CAACJ,MAAlC,EAAyCkwC,CAAC,EAA1C,EAA6C5hB,CAAC,CAAC4hB,CAAD,CAAD,GAAK;AAACnxC,SAAK,EAACmxC,CAAP;AAAS32C,SAAK,EAAC6G,CAAC,CAAC8vC,CAAD;AAAhB,GAAL;;AAA0B,MAAI5sB,CAAC,GAACjjB,CAAC,IAAE67D,IAAI,CAAC/zD,KAAL,CAAW6qE,cAApB;AAAmC9W,MAAI,CAAC/zD,KAAL,CAAW3H,IAAX,CAAgB8tB,CAAhB,EAAkB,UAASluB,CAAT,EAAWC,CAAX,EAAa;AAAC,WAAOijB,CAAC,CAACljB,CAAC,CAAC7G,KAAH,EAAS8G,CAAC,CAAC9G,KAAX,CAAD,IAAoB6G,CAAC,CAACrB,KAAF,GAAQsB,CAAC,CAACtB,KAArC;AAA2C,GAA3E;;AAA6E,OAAImxC,CAAC,GAAC,CAAN,EAAQA,CAAC,GAAC9vC,CAAC,CAACJ,MAAZ,EAAmBkwC,CAAC,EAApB,EAAuB9vC,CAAC,CAAC8vC,CAAD,CAAD,GAAK5hB,CAAC,CAAC4hB,CAAD,CAAD,CAAK32C,KAAV;AAAgB,CAAlQ;;AACtO2iE,IAAI,CAAC/zD,KAAL,CAAWgrE,SAAX,GAAqB,UAAS/yE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC5hB,CAAC,IAAE4tC,IAAI,CAAC/zD,KAAL,CAAW6qE,cAApB;AAAmC9W,MAAI,CAAC/zD,KAAL,CAAW3H,IAAX,CAAgBJ,CAAhB,EAAkB,UAASA,CAAT,EAAWkuB,CAAX,EAAa;AAAC,WAAO4hB,CAAC,CAAC7vC,CAAC,CAACD,CAAD,CAAF,EAAMC,CAAC,CAACiuB,CAAD,CAAP,CAAR;AAAoB,GAApD;AAAsD,CAA9H;;AAA+H4tC,IAAI,CAAC/zD,KAAL,CAAWirE,gBAAX,GAA4B,UAAShzE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAAC/zD,KAAL,CAAWgrE,SAAX,CAAqB/yE,CAArB,EAAuB,UAASA,CAAT,EAAW;AAAC,WAAOA,CAAC,CAACC,CAAD,CAAR;AAAY,GAA/C,EAAgDiuB,CAAhD;AAAmD,CAA/F;;AAAgG4tC,IAAI,CAAC/zD,KAAL,CAAWkrE,QAAX,GAAoB,UAASjzE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACjuB,GAAC,GAACA,CAAC,IAAE67D,IAAI,CAAC/zD,KAAL,CAAW6qE,cAAhB;;AAA+B,OAAI,IAAI9iC,CAAC,GAAC,CAAV,EAAYA,CAAC,GAAC9vC,CAAC,CAACJ,MAAhB,EAAuBkwC,CAAC,EAAxB,EAA2B;AAAC,QAAI5sB,CAAC,GAACjjB,CAAC,CAACD,CAAC,CAAC8vC,CAAC,GAAC,CAAH,CAAF,EAAQ9vC,CAAC,CAAC8vC,CAAD,CAAT,CAAP;AAAqB,QAAG,IAAE5sB,CAAF,IAAK,KAAGA,CAAH,IAAMgL,CAAd,EAAgB,OAAM,CAAC,CAAP;AAAS;;AAAA,SAAM,CAAC,CAAP;AAAS,CAAtJ;;AAC/N4tC,IAAI,CAAC/zD,KAAL,CAAWujE,MAAX,GAAkB,UAAStrE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAG,CAAC4tC,IAAI,CAAC2F,WAAL,CAAiBzhE,CAAjB,CAAD,IAAsB,CAAC87D,IAAI,CAAC2F,WAAL,CAAiBxhE,CAAjB,CAAvB,IAA4CD,CAAC,CAACJ,MAAF,IAAUK,CAAC,CAACL,MAA3D,EAAkE,OAAM,CAAC,CAAP;AAAS,MAAIkwC,CAAC,GAAC9vC,CAAC,CAACJ,MAAR;AAAesuB,GAAC,GAACA,CAAC,IAAE4tC,IAAI,CAAC/zD,KAAL,CAAWmrE,sBAAhB;;AAAuC,OAAI,IAAIhwD,CAAC,GAAC,CAAV,EAAYA,CAAC,GAAC4sB,CAAd,EAAgB5sB,CAAC,EAAjB,EAAoB,IAAG,CAACgL,CAAC,CAACluB,CAAC,CAACkjB,CAAD,CAAF,EAAMjjB,CAAC,CAACijB,CAAD,CAAP,CAAL,EAAiB,OAAM,CAAC,CAAP;;AAAS,SAAM,CAAC,CAAP;AAAS,CAA1N;;AAA2N44C,IAAI,CAAC/zD,KAAL,CAAWorE,QAAX,GAAoB,UAASnzE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACA,GAAC,GAACA,CAAC,IAAE4tC,IAAI,CAAC/zD,KAAL,CAAW6qE,cAAhB;;AAA+B,OAAI,IAAI9iC,CAAC,GAACznC,IAAI,CAACe,GAAL,CAASpJ,CAAC,CAACJ,MAAX,EAAkBK,CAAC,CAACL,MAApB,CAAN,EAAkCsjB,CAAC,GAAC,CAAxC,EAA0CA,CAAC,GAAC4sB,CAA5C,EAA8C5sB,CAAC,EAA/C,EAAkD;AAAC,QAAIujB,CAAC,GAACvY,CAAC,CAACluB,CAAC,CAACkjB,CAAD,CAAF,EAAMjjB,CAAC,CAACijB,CAAD,CAAP,CAAP;AAAmB,QAAG,KAAGujB,CAAN,EAAQ,OAAOA,CAAP;AAAS;;AAAA,SAAOq1B,IAAI,CAAC/zD,KAAL,CAAW6qE,cAAX,CAA0B5yE,CAAC,CAACJ,MAA5B,EAAmCK,CAAC,CAACL,MAArC,CAAP;AAAoD,CAA9M;;AAA+Mk8D,IAAI,CAAC/zD,KAAL,CAAW6qE,cAAX,GAA0B,UAAS5yE,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOD,CAAC,GAACC,CAAF,GAAI,CAAJ,GAAMD,CAAC,GAACC,CAAF,GAAI,CAAC,CAAL,GAAO,CAApB;AAAsB,CAA9D;;AAC1a67D,IAAI,CAAC/zD,KAAL,CAAWqrE,qBAAX,GAAiC,UAASpzE,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAM,CAAC67D,IAAI,CAAC/zD,KAAL,CAAW6qE,cAAX,CAA0B5yE,CAA1B,EAA4BC,CAA5B,CAAP;AAAsC,CAArF;;AAAsF67D,IAAI,CAAC/zD,KAAL,CAAWmrE,sBAAX,GAAkC,UAASlzE,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOD,CAAC,KAAGC,CAAX;AAAa,CAA7D;;AAA8D67D,IAAI,CAAC/zD,KAAL,CAAWsrE,YAAX,GAAwB,UAASrzE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACA,GAAC,GAAC4tC,IAAI,CAAC/zD,KAAL,CAAW2qE,YAAX,CAAwB1yE,CAAxB,EAA0BC,CAA1B,EAA4BiuB,CAA5B,CAAF;AAAiC,SAAO,IAAEA,CAAF,IAAK4tC,IAAI,CAAC/zD,KAAL,CAAWmqE,QAAX,CAAoBlyE,CAApB,EAAsBC,CAAtB,EAAwB,EAAEiuB,CAAC,GAAC,CAAJ,CAAxB,GAAgC,CAAC,CAAtC,IAAyC,CAAC,CAAjD;AAAmD,CAA5H;;AAA6H4tC,IAAI,CAAC/zD,KAAL,CAAWurE,YAAX,GAAwB,UAAStzE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACjuB,GAAC,GAAC67D,IAAI,CAAC/zD,KAAL,CAAW2qE,YAAX,CAAwB1yE,CAAxB,EAA0BC,CAA1B,EAA4BiuB,CAA5B,CAAF;AAAiC,SAAO,KAAGjuB,CAAH,GAAK67D,IAAI,CAAC/zD,KAAL,CAAWsqE,QAAX,CAAoBryE,CAApB,EAAsBC,CAAtB,CAAL,GAA8B,CAAC,CAAtC;AAAwC,CAAjH;;AACjR67D,IAAI,CAAC/zD,KAAL,CAAWoF,MAAX,GAAkB,UAASnN,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAI,IAAI4hB,CAAC,GAAC,EAAN,EAAS5sB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAACljB,CAAC,CAACJ,MAArB,EAA4BsjB,CAAC,EAA7B,EAAgC;AAAC,QAAIujB,CAAC,GAACzmC,CAAC,CAACkjB,CAAD,CAAP;AAAA,QAAWgY,CAAC,GAACj7B,CAAC,CAACwW,IAAF,CAAOyX,CAAP,EAASuY,CAAT,EAAWvjB,CAAX,EAAaljB,CAAb,CAAb;AAA6B87D,QAAI,CAACC,KAAL,CAAW7gC,CAAX,KAAe,CAAC4U,CAAC,CAAC5U,CAAD,CAAD,KAAO4U,CAAC,CAAC5U,CAAD,CAAD,GAAK,EAAZ,CAAD,EAAkBz8B,IAAlB,CAAuBgoC,CAAvB,CAAf;AAAyC;;AAAA,SAAOqJ,CAAP;AAAS,CAAlJ;;AAAmJgsB,IAAI,CAAC/zD,KAAL,CAAWwrE,QAAX,GAAoB,UAASvzE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC,EAAN;AAASgsB,MAAI,CAAC/zD,KAAL,CAAW+D,OAAX,CAAmB9L,CAAnB,EAAqB,UAASkjB,CAAT,EAAWujB,CAAX,EAAa;AAACqJ,KAAC,CAAC7vC,CAAC,CAACwW,IAAF,CAAOyX,CAAP,EAAShL,CAAT,EAAWujB,CAAX,EAAazmC,CAAb,CAAD,CAAD,GAAmBkjB,CAAnB;AAAqB,GAAxD;AAA0D,SAAO4sB,CAAP;AAAS,CAAhH;;AAAiHgsB,IAAI,CAAC/zD,KAAL,CAAWyrE,KAAX,GAAiB,UAASxzE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC,EAAN;AAAA,MAAS5sB,CAAC,GAAC,CAAX;AAAA,MAAaujB,CAAC,GAACzmC,CAAf;AAAiBkuB,GAAC,GAACA,CAAC,IAAE,CAAL;AAAO,OAAK,CAAL,KAASjuB,CAAT,KAAaijB,CAAC,GAACljB,CAAF,EAAIymC,CAAC,GAACxmC,CAAnB;AAAsB,MAAG,IAAEiuB,CAAC,IAAEuY,CAAC,GAACvjB,CAAJ,CAAN,EAAa,OAAM,EAAN;AAAS,MAAG,IAAEgL,CAAL,EAAO,KAAIluB,CAAC,GAACkjB,CAAN,EAAQljB,CAAC,GAACymC,CAAV,EAAYzmC,CAAC,IAAEkuB,CAAf,EAAiB4hB,CAAC,CAACrxC,IAAF,CAAOuB,CAAP,EAAxB,KAAuC,KAAIA,CAAC,GAACkjB,CAAN,EAAQljB,CAAC,GAACymC,CAAV,EAAYzmC,CAAC,IAAEkuB,CAAf,EAAiB4hB,CAAC,CAACrxC,IAAF,CAAOuB,CAAP;AAAU,SAAO8vC,CAAP;AAAS,CAAhL;;AACpQgsB,IAAI,CAAC/zD,KAAL,CAAW0rE,MAAX,GAAkB,UAASzzE,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAI,IAAIiuB,CAAC,GAAC,EAAN,EAAS4hB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAAC7vC,CAAnB,EAAqB6vC,CAAC,EAAtB,EAAyB5hB,CAAC,CAAC4hB,CAAD,CAAD,GAAK9vC,CAAL;;AAAO,SAAOkuB,CAAP;AAAS,CAAzE;;AAA0E4tC,IAAI,CAAC/zD,KAAL,CAAW2rE,OAAX,GAAmB,UAAS1zE,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC,EAAN,EAASiuB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAACplB,SAAS,CAAClJ,MAA7B,EAAoCsuB,CAAC,EAArC,EAAwC;AAAC,QAAI4hB,CAAC,GAAChnC,SAAS,CAAColB,CAAD,CAAf;AAAmB,QAAG4tC,IAAI,CAAC56D,OAAL,CAAa4uC,CAAb,CAAH,EAAmB,KAAI,IAAI5sB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAAC4sB,CAAC,CAAClwC,MAAhB,EAAuBsjB,CAAC,IAAE,IAA1B,EAA+B;AAAC,UAAIujB,CAAC,GAACq1B,IAAI,CAAC/zD,KAAL,CAAWnG,KAAX,CAAiBkuC,CAAjB,EAAmB5sB,CAAnB,EAAqBA,CAAC,GAAC,IAAvB,CAAN;AAAmCujB,OAAC,GAACq1B,IAAI,CAAC/zD,KAAL,CAAW2rE,OAAX,CAAmBj3C,KAAnB,CAAyB,IAAzB,EAA8BgK,CAA9B,CAAF;;AAAmC,WAAI,IAAIvL,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACuL,CAAC,CAAC7mC,MAAhB,EAAuBs7B,CAAC,EAAxB,EAA2Bj7B,CAAC,CAACxB,IAAF,CAAOgoC,CAAC,CAACvL,CAAD,CAAR;AAAa,KAAjK,MAAsKj7B,CAAC,CAACxB,IAAF,CAAOqxC,CAAP;AAAU;;AAAA,SAAO7vC,CAAP;AAAS,CAApR;;AAC1E67D,IAAI,CAAC/zD,KAAL,CAAW4rE,MAAX,GAAkB,UAAS3zE,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,QAAM5tE,CAAC,CAACJ,MAA5B;AAAoCI,GAAC,CAACJ,MAAF,KAAWK,CAAC,IAAED,CAAC,CAACJ,MAAL,EAAY,IAAEK,CAAF,GAAIvC,KAAK,CAACkY,SAAN,CAAgB7Q,OAAhB,CAAwB03B,KAAxB,CAA8Bz8B,CAA9B,EAAgCA,CAAC,CAAC+B,MAAF,CAAS,CAAC9B,CAAV,EAAYA,CAAZ,CAAhC,CAAJ,GAAoD,IAAEA,CAAF,IAAKvC,KAAK,CAACkY,SAAN,CAAgBnX,IAAhB,CAAqBg+B,KAArB,CAA2Bz8B,CAA3B,EAA6BA,CAAC,CAAC+B,MAAF,CAAS,CAAT,EAAW,CAAC9B,CAAZ,CAA7B,CAAhF;AAA8H,SAAOD,CAAP;AAAS,CAA3M;;AAA4M87D,IAAI,CAAC/zD,KAAL,CAAW6rE,QAAX,GAAoB,UAAS5zE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG3tE,CAAH,IAAMA,CAAC,GAACD,CAAC,CAACJ,MAA9B;AAAsCk8D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG1/C,CAAH,IAAMA,CAAC,GAACluB,CAAC,CAACJ,MAA9B;AAAsCK,GAAC,GAACvC,KAAK,CAACkY,SAAN,CAAgB7T,MAAhB,CAAuB0U,IAAvB,CAA4BzW,CAA5B,EAA8BC,CAA9B,EAAgC,CAAhC,CAAF;AAAqCvC,OAAK,CAACkY,SAAN,CAAgB7T,MAAhB,CAAuB0U,IAAvB,CAA4BzW,CAA5B,EAA8BkuB,CAA9B,EAAgC,CAAhC,EAAkCjuB,CAAC,CAAC,CAAD,CAAnC;AAAwC,CAA7L;;AAC5M67D,IAAI,CAAC/zD,KAAL,CAAW8rE,GAAX,GAAe,UAAS7zE,CAAT,EAAW;AAAC,MAAG,CAAC8I,SAAS,CAAClJ,MAAd,EAAqB,OAAM,EAAN;;AAAS,OAAI,IAAIK,CAAC,GAAC,EAAN,EAASiuB,CAAC,GAACplB,SAAS,CAAC,CAAD,CAAT,CAAalJ,MAAxB,EAA+BkwC,CAAC,GAAC,CAArC,EAAuCA,CAAC,GAAChnC,SAAS,CAAClJ,MAAnD,EAA0DkwC,CAAC,EAA3D,EAA8DhnC,SAAS,CAACgnC,CAAD,CAAT,CAAalwC,MAAb,GAAoBsuB,CAApB,KAAwBA,CAAC,GAACplB,SAAS,CAACgnC,CAAD,CAAT,CAAalwC,MAAvC;;AAA+C,OAAIkwC,CAAC,GAAC,CAAN,EAAQA,CAAC,GAAC5hB,CAAV,EAAY4hB,CAAC,EAAb,EAAgB;AAAC,SAAI,IAAI5sB,CAAC,GAAC,EAAN,EAASujB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAAC39B,SAAS,CAAClJ,MAA7B,EAAoC6mC,CAAC,EAArC,EAAwCvjB,CAAC,CAACzkB,IAAF,CAAOqK,SAAS,CAAC29B,CAAD,CAAT,CAAaqJ,CAAb,CAAP;;AAAwB7vC,KAAC,CAACxB,IAAF,CAAOykB,CAAP;AAAU;;AAAA,SAAOjjB,CAAP;AAAS,CAA1Q;;AAA2Q67D,IAAI,CAAC/zD,KAAL,CAAW+rE,OAAX,GAAmB,UAAS9zE,CAAT,EAAWC,CAAX,EAAa;AAACA,GAAC,GAACA,CAAC,IAAEoI,IAAI,CAACqlB,MAAV;;AAAiB,OAAI,IAAIQ,CAAC,GAACluB,CAAC,CAACJ,MAAF,GAAS,CAAnB,EAAqB,IAAEsuB,CAAvB,EAAyBA,CAAC,EAA1B,EAA6B;AAAC,QAAI4hB,CAAC,GAACznC,IAAI,CAACC,KAAL,CAAWrI,CAAC,MAAIiuB,CAAC,GAAC,CAAN,CAAZ,CAAN;AAAA,QAA4BhL,CAAC,GAACljB,CAAC,CAACkuB,CAAD,CAA/B;AAAmCluB,KAAC,CAACkuB,CAAD,CAAD,GAAKluB,CAAC,CAAC8vC,CAAD,CAAN;AAAU9vC,KAAC,CAAC8vC,CAAD,CAAD,GAAK5sB,CAAL;AAAO;AAAC,CAArI;;AAAsI44C,IAAI,CAAC/zD,KAAL,CAAWgsE,WAAX,GAAuB,UAAS/zE,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAAC,EAAN;AAAS4tC,MAAI,CAAC/zD,KAAL,CAAW+D,OAAX,CAAmB7L,CAAnB,EAAqB,UAASA,CAAT,EAAW;AAACiuB,KAAC,CAACzvB,IAAF,CAAOuB,CAAC,CAACC,CAAD,CAAR;AAAa,GAA9C;AAAgD,SAAOiuB,CAAP;AAAS,CAAvG;;AACjZ4tC,IAAI,CAAC/zD,KAAL,CAAWisE,SAAX,GAAqB,UAASh0E,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,SAAO4tC,IAAI,CAAC/zD,KAAL,CAAW6uB,MAAX,CAAkB6F,KAAlB,CAAwB,EAAxB,EAA2Bq/B,IAAI,CAAC/zD,KAAL,CAAWpL,GAAX,CAAeqD,CAAf,EAAiBC,CAAjB,EAAmBiuB,CAAnB,CAA3B,CAAP;AAAyD,CAA9F;;AAA+F4tC,IAAI,CAACv+B,KAAL,GAAW,EAAX;;AAAcu+B,IAAI,CAACv+B,KAAL,CAAW02C,iBAAX,GAA6B,UAASj0E,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC,EAAN,EAASiuB,CAAC,GAAC,CAAX,EAAa4hB,CAAC,GAAC,CAAnB,EAAqBA,CAAC,GAAC9vC,CAAC,CAACJ,MAAzB,EAAgCkwC,CAAC,EAAjC,EAAoC;AAAC,QAAI5sB,CAAC,GAACljB,CAAC,CAACiY,UAAF,CAAa63B,CAAb,CAAN;AAAsB,UAAI5sB,CAAJ,KAAQjjB,CAAC,CAACiuB,CAAC,EAAF,CAAD,GAAOhL,CAAC,GAAC,GAAT,EAAaA,CAAC,KAAG,CAAzB;AAA4BjjB,KAAC,CAACiuB,CAAC,EAAF,CAAD,GAAOhL,CAAP;AAAS;;AAAA,SAAOjjB,CAAP;AAAS,CAAlJ;;AAAmJ67D,IAAI,CAACv+B,KAAL,CAAW22C,iBAAX,GAA6B,UAASl0E,CAAT,EAAW;AAAC,MAAG,QAAMA,CAAC,CAACJ,MAAX,EAAkB,OAAOw9B,MAAM,CAACC,YAAP,CAAoBZ,KAApB,CAA0B,IAA1B,EAA+Bz8B,CAA/B,CAAP;;AAAyC,OAAI,IAAIC,CAAC,GAAC,EAAN,EAASiuB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAACluB,CAAC,CAACJ,MAArB,EAA4BsuB,CAAC,IAAE,IAA/B,EAAoC;AAAC,QAAI4hB,CAAC,GAACgsB,IAAI,CAAC/zD,KAAL,CAAWnG,KAAX,CAAiB5B,CAAjB,EAAmBkuB,CAAnB,EAAqBA,CAAC,GAAC,IAAvB,CAAN;AAAmCjuB,KAAC,IAAEm9B,MAAM,CAACC,YAAP,CAAoBZ,KAApB,CAA0B,IAA1B,EAA+BqT,CAA/B,CAAH;AAAqC;;AAAA,SAAO7vC,CAAP;AAAS,CAA1N;;AAChQ67D,IAAI,CAACv+B,KAAL,CAAW42C,cAAX,GAA0B,UAASn0E,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAAC/zD,KAAL,CAAWpL,GAAX,CAAeqD,CAAf,EAAiB,UAASA,CAAT,EAAW;AAACA,KAAC,GAACA,CAAC,CAACwW,QAAF,CAAW,EAAX,CAAF;AAAiB,WAAO,IAAExW,CAAC,CAACJ,MAAJ,GAAWI,CAAX,GAAa,MAAIA,CAAxB;AAA0B,GAAxE,EAA0E2a,IAA1E,CAA+E1a,CAAC,IAAE,EAAlF,CAAP;AAA6F,CAArI;;AAAsI67D,IAAI,CAACv+B,KAAL,CAAW62C,cAAX,GAA0B,UAASp0E,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG5tE,CAAC,CAACJ,MAAF,GAAS,CAAhC,EAAkC,yCAAlC;;AAA6E,OAAI,IAAIK,CAAC,GAAC,EAAN,EAASiuB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAACluB,CAAC,CAACJ,MAArB,EAA4BsuB,CAAC,IAAE,CAA/B,EAAiCjuB,CAAC,CAACxB,IAAF,CAAOub,QAAQ,CAACha,CAAC,CAAC88C,SAAF,CAAY5uB,CAAZ,EAAcA,CAAC,GAAC,CAAhB,CAAD,EAAoB,EAApB,CAAf;;AAAwC,SAAOjuB,CAAP;AAAS,CAArM;;AACtI67D,IAAI,CAACv+B,KAAL,CAAW82C,qBAAX,GAAiC,UAASr0E,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC,EAAN,EAASiuB,CAAC,GAAC,CAAX,EAAa4hB,CAAC,GAAC,CAAnB,EAAqBA,CAAC,GAAC9vC,CAAC,CAACJ,MAAzB,EAAgCkwC,CAAC,EAAjC,EAAoC;AAAC,QAAI5sB,CAAC,GAACljB,CAAC,CAACiY,UAAF,CAAa63B,CAAb,CAAN;AAAsB,UAAI5sB,CAAJ,GAAMjjB,CAAC,CAACiuB,CAAC,EAAF,CAAD,GAAOhL,CAAb,IAAgB,OAAKA,CAAL,GAAOjjB,CAAC,CAACiuB,CAAC,EAAF,CAAD,GAAOhL,CAAC,IAAE,CAAH,GAAK,GAAnB,IAAwB,UAAQA,CAAC,GAAC,KAAV,KAAkB4sB,CAAC,GAAC,CAAF,GAAI9vC,CAAC,CAACJ,MAAxB,IAAgC,UAAQI,CAAC,CAACiY,UAAF,CAAa63B,CAAC,GAAC,CAAf,IAAkB,KAA1B,CAAhC,IAAkE5sB,CAAC,GAAC,SAAO,CAACA,CAAC,GAAC,IAAH,KAAU,EAAjB,KAAsBljB,CAAC,CAACiY,UAAF,CAAa,EAAE63B,CAAf,IAAkB,IAAxC,CAAF,EAAgD7vC,CAAC,CAACiuB,CAAC,EAAF,CAAD,GAAOhL,CAAC,IAAE,EAAH,GAAM,GAA7D,EAAiEjjB,CAAC,CAACiuB,CAAC,EAAF,CAAD,GAAOhL,CAAC,IAAE,EAAH,GAAM,EAAN,GAAS,GAAnJ,IAAwJjjB,CAAC,CAACiuB,CAAC,EAAF,CAAD,GAAOhL,CAAC,IAAE,EAAH,GAAM,GAArK,EAAyKjjB,CAAC,CAACiuB,CAAC,EAAF,CAAD,GAAOhL,CAAC,IAAE,CAAH,GAAK,EAAL,GAAQ,GAAhN,GAAqNjjB,CAAC,CAACiuB,CAAC,EAAF,CAAD,GAAOhL,CAAC,GAAC,EAAF,GAAK,GAAjP;AAAsP;;AAAA,SAAOjjB,CAAP;AAAS,CAAvW;;AACA67D,IAAI,CAACv+B,KAAL,CAAW+2C,qBAAX,GAAiC,UAASt0E,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC,EAAN,EAASiuB,CAAC,GAAC,CAAX,EAAa4hB,CAAC,GAAC,CAAnB,EAAqB5hB,CAAC,GAACluB,CAAC,CAACJ,MAAzB,GAAiC;AAAC,QAAIsjB,CAAC,GAACljB,CAAC,CAACkuB,CAAC,EAAF,CAAP;AAAa,QAAG,MAAIhL,CAAP,EAASjjB,CAAC,CAAC6vC,CAAC,EAAF,CAAD,GAAO1S,MAAM,CAACC,YAAP,CAAoBna,CAApB,CAAP,CAAT,KAA4C,IAAG,MAAIA,CAAJ,IAAO,MAAIA,CAAd,EAAgB;AAAC,UAAIujB,CAAC,GAACzmC,CAAC,CAACkuB,CAAC,EAAF,CAAP;AAAajuB,OAAC,CAAC6vC,CAAC,EAAF,CAAD,GAAO1S,MAAM,CAACC,YAAP,CAAoB,CAACna,CAAC,GAAC,EAAH,KAAQ,CAAR,GAAUujB,CAAC,GAAC,EAAhC,CAAP;AAA2C,KAAzE,MAA8E,IAAG,MAAIvjB,CAAJ,IAAO,MAAIA,CAAd,EAAgB;AAACujB,OAAC,GAACzmC,CAAC,CAACkuB,CAAC,EAAF,CAAH;AAAS,UAAIgN,CAAC,GAACl7B,CAAC,CAACkuB,CAAC,EAAF,CAAP;AAAA,UAAayiB,CAAC,GAAC3wC,CAAC,CAACkuB,CAAC,EAAF,CAAhB;AAAsBhL,OAAC,GAAC,CAAC,CAACA,CAAC,GAAC,CAAH,KAAO,EAAP,GAAU,CAACujB,CAAC,GAAC,EAAH,KAAQ,EAAlB,GAAqB,CAACvL,CAAC,GAAC,EAAH,KAAQ,CAA7B,GAA+ByV,CAAC,GAAC,EAAlC,IAAsC,KAAxC;AAA8C1wC,OAAC,CAAC6vC,CAAC,EAAF,CAAD,GAAO1S,MAAM,CAACC,YAAP,CAAoB,SAAOna,CAAC,IAAE,EAAV,CAApB,CAAP;AAA0CjjB,OAAC,CAAC6vC,CAAC,EAAF,CAAD,GAAO1S,MAAM,CAACC,YAAP,CAAoB,SAAOna,CAAC,GAAC,IAAT,CAApB,CAAP;AAA2C,KAAnL,MAAwLujB,CAAC,GAACzmC,CAAC,CAACkuB,CAAC,EAAF,CAAH,EAASgN,CAAC,GAACl7B,CAAC,CAACkuB,CAAC,EAAF,CAAZ,EAAkBjuB,CAAC,CAAC6vC,CAAC,EAAF,CAAD,GAAO1S,MAAM,CAACC,YAAP,CAAoB,CAACna,CAAC,GAAC,EAAH,KAAQ,EAAR,GAAW,CAACujB,CAAC,GAAC,EAAH,KAAQ,CAAnB,GAAqBvL,CAAC,GAAC,EAA3C,CAAzB;AAAwE;;AAAA,SAAOj7B,CAAC,CAAC0a,IAAF,CAAO,EAAP,CAAP;AAAkB,CAAxe;;AACAmhD,IAAI,CAACv+B,KAAL,CAAWg3C,YAAX,GAAwB,UAASv0E,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,CAACJ,MAAF,IAAUK,CAAC,CAACL,MAAhC,EAAuC,8BAAvC;;AAAuE,OAAI,IAAIsuB,CAAC,GAAC,EAAN,EAAS4hB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAAC9vC,CAAC,CAACJ,MAArB,EAA4BkwC,CAAC,EAA7B,EAAgC5hB,CAAC,CAACzvB,IAAF,CAAOuB,CAAC,CAAC8vC,CAAD,CAAD,GAAK7vC,CAAC,CAAC6vC,CAAD,CAAb;;AAAkB,SAAO5hB,CAAP;AAAS,CAAxK;;AAAyK4tC,IAAI,CAACuQ,GAAL,CAASc,OAAT,GAAiB,EAAjB;;AAAoBrR,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBqH,gBAAjB,GAAkC,UAASx0E,CAAT,EAAW;AAAC,MAAG87D,IAAI,CAACqR,OAAL,CAAaC,cAAhB,EAA+B;AAAC,QAAIntE,CAAC,GAAC67D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBsH,UAAjB,CAA4Bz0E,CAA5B,CAAN;AAAqCC,KAAC,KAAG,CAACD,CAAD,IAAI,EAAEA,CAAC,YAAYC,CAAC,CAACy0E,QAAjB,KAA4B10E,CAAC,YAAYC,CAAC,CAAC00E,OAAlD,CAAD,IAA6D7Y,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,6DAAlB,EAAgFhS,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiByH,mBAAjB,CAAqC50E,CAArC,CAAhF,CAA7D;AAAsL;;AAAA,SAAOA,CAAP;AAAS,CAAlT;;AAC7L87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB0H,oBAAjB,GAAsC,UAAS70E,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG67D,IAAI,CAACqR,OAAL,CAAaC,cAAhB,EAA+B;AAAC,QAAIl/C,CAAC,GAAC4tC,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBsH,UAAjB,CAA4Bz0E,CAA5B,CAAN;AAAqCkuB,KAAC,IAAE,eAAa,OAAOA,CAAC,CAACjuB,CAAD,CAAxB,KAA8BD,CAAC,KAAGA,CAAC,YAAYkuB,CAAC,CAACjuB,CAAD,CAAd,IAAmB,EAAED,CAAC,YAAYkuB,CAAC,CAACwmD,QAAf,IAAyB10E,CAAC,YAAYkuB,CAAC,CAACymD,OAA1C,CAAtB,CAAD,IAA4E7Y,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,qEAAlB,EAAwF7tE,CAAxF,EAA0F67D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiByH,mBAAjB,CAAqC50E,CAArC,CAA1F,CAA1G;AAA8O;;AAAA,SAAOA,CAAP;AAAS,CAAhX;;AAAiX87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB2H,yBAAjB,GAA2C,UAAS90E,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB0H,oBAAjB,CAAsC70E,CAAtC,EAAwC,mBAAxC,CAAP;AAAoE,CAA3H;;AACjX87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB4H,yBAAjB,GAA2C,UAAS/0E,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB0H,oBAAjB,CAAsC70E,CAAtC,EAAwC,mBAAxC,CAAP;AAAoE,CAA3H;;AAA4H87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB6H,uBAAjB,GAAyC,UAASh1E,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB0H,oBAAjB,CAAsC70E,CAAtC,EAAwC,iBAAxC,CAAP;AAAkE,CAAvH;;AAAwH87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB8H,wBAAjB,GAA0C,UAASj1E,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB0H,oBAAjB,CAAsC70E,CAAtC,EAAwC,kBAAxC,CAAP;AAAmE,CAAzH;;AAA0H87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB+H,wBAAjB,GAA0C,UAASl1E,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB0H,oBAAjB,CAAsC70E,CAAtC,EAAwC,kBAAxC,CAAP;AAAmE,CAAzH;;AAC9W87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBgI,wBAAjB,GAA0C,UAASn1E,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB0H,oBAAjB,CAAsC70E,CAAtC,EAAwC,kBAAxC,CAAP;AAAmE,CAAzH;;AAA0H87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBiI,wBAAjB,GAA0C,UAASp1E,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB0H,oBAAjB,CAAsC70E,CAAtC,EAAwC,kBAAxC,CAAP;AAAmE,CAAzH;;AAA0H87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBkI,2BAAjB,GAA6C,UAASr1E,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB0H,oBAAjB,CAAsC70E,CAAtC,EAAwC,qBAAxC,CAAP;AAAsE,CAA/H;;AAAgI87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBmI,yBAAjB,GAA2C,UAASt1E,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB0H,oBAAjB,CAAsC70E,CAAtC,EAAwC,mBAAxC,CAAP;AAAoE,CAA3H;;AACpX87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBoI,wBAAjB,GAA0C,UAASv1E,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB0H,oBAAjB,CAAsC70E,CAAtC,EAAwC,kBAAxC,CAAP;AAAmE,CAAzH;;AAA0H87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBqI,uBAAjB,GAAyC,UAASx1E,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB0H,oBAAjB,CAAsC70E,CAAtC,EAAwC,iBAAxC,CAAP;AAAkE,CAAvH;;AAAwH87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBsI,wBAAjB,GAA0C,UAASz1E,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB0H,oBAAjB,CAAsC70E,CAAtC,EAAwC,kBAAxC,CAAP;AAAmE,CAAzH;;AAA0H87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBuI,yBAAjB,GAA2C,UAAS11E,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB0H,oBAAjB,CAAsC70E,CAAtC,EAAwC,mBAAxC,CAAP;AAAoE,CAA3H;;AAC5W87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBwI,yBAAjB,GAA2C,UAAS31E,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB0H,oBAAjB,CAAsC70E,CAAtC,EAAwC,mBAAxC,CAAP;AAAoE,CAA3H;;AAA4H87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiByI,yBAAjB,GAA2C,UAAS51E,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB0H,oBAAjB,CAAsC70E,CAAtC,EAAwC,mBAAxC,CAAP;AAAoE,CAA3H;;AAC5H87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiByH,mBAAjB,GAAqC,UAAS50E,CAAT,EAAW;AAAC,MAAG87D,IAAI,CAAC3jD,QAAL,CAAcnY,CAAd,CAAH,EAAoB,IAAG;AAAC,WAAOA,CAAC,CAACvH,WAAF,CAAci2E,WAAd,IAA2B1uE,CAAC,CAACvH,WAAF,CAAcmK,IAAzC,IAA+CpG,MAAM,CAACoZ,SAAP,CAAiBY,QAAjB,CAA0BC,IAA1B,CAA+BzW,CAA/B,CAAtD;AAAwF,GAA5F,CAA4F,OAAMC,CAAN,EAAQ;AAAC,WAAM,mCAAN;AAA0C,GAAnK,MAAwK,OAAO,KAAK,CAAL,KAASD,CAAT,GAAW,WAAX,GAAuB,SAAOA,CAAP,GAAS,MAAT,GAAgB,OAAOA,CAArD;AAAuD,CAAhR;;AAAiR87D,IAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBsH,UAAjB,GAA4B,UAASz0E,CAAT,EAAW;AAAC,MAAG;AAAC,QAAIC,CAAC,GAACD,CAAC,IAAEA,CAAC,CAAC61E,aAAX;AAAA,QAAyB3nD,CAAC,GAACjuB,CAAC,KAAGA,CAAC,CAAC61E,WAAF,IAAe71E,CAAC,CAAC81E,YAApB,CAA5B;AAA8D7nD,KAAC,GAACA,CAAC,IAAE4tC,IAAI,CAAC1gC,MAAV;AAAiB,QAAGlN,CAAC,CAACymD,OAAF,IAAWzmD,CAAC,CAACwmD,QAAhB,EAAyB,OAAOxmD,CAAP;AAAS,GAArH,CAAqH,OAAM4hB,CAAN,EAAQ,CAAE;;AAAA,SAAO,IAAP;AAAY,CAAnL;;AAAoLgsB,IAAI,CAACka,SAAL,GAAe,EAAf;;AAAkBla,IAAI,CAACka,SAAL,CAAeC,QAAf,GAAwB,UAASj2E,CAAT,EAAW;AAAC,SAAO,YAAU;AAAC,WAAOA,CAAP;AAAS,GAA3B;AAA4B,CAAhE;;AAAiE87D,IAAI,CAACka,SAAL,CAAeE,KAAf,GAAqB,YAAU;AAAC,SAAM,CAAC,CAAP;AAAS,CAAzC;;AAA0Cpa,IAAI,CAACka,SAAL,CAAeG,IAAf,GAAoB,YAAU;AAAC,SAAM,CAAC,CAAP;AAAS,CAAxC;;AAAyCra,IAAI,CAACka,SAAL,CAAeI,IAAf,GAAoB,YAAU;AAAC,SAAO,IAAP;AAAY,CAA3C;;AAA4Cta,IAAI,CAACka,SAAL,CAAeK,QAAf,GAAwB,UAASr2E,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOD,CAAP;AAAS,CAA/C;;AAAgD87D,IAAI,CAACka,SAAL,CAAe1zC,KAAf,GAAqB,UAAStiC,CAAT,EAAW;AAAC,SAAO,YAAU;AAAC,UAAM5B,KAAK,CAAC4B,CAAD,CAAX;AAAgB,GAAlC;AAAmC,CAApE;;AAAqE87D,IAAI,CAACka,SAAL,CAAelI,IAAf,GAAoB,UAAS9tE,CAAT,EAAW;AAAC,SAAO,YAAU;AAAC,UAAMA,CAAN;AAAS,GAA3B;AAA4B,CAA5D;;AAC5wB87D,IAAI,CAACka,SAAL,CAAeM,IAAf,GAAoB,UAASt2E,CAAT,EAAWC,CAAX,EAAa;AAACA,GAAC,GAACA,CAAC,IAAE,CAAL;AAAO,SAAO,YAAU;AAAC,WAAOD,CAAC,CAACy8B,KAAF,CAAQ,IAAR,EAAa/+B,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,EAAuC7I,CAAvC,CAAb,CAAP;AAA+D,GAAjF;AAAkF,CAA3H;;AAA4H67D,IAAI,CAACka,SAAL,CAAe3iE,GAAf,GAAmB,UAASrT,CAAT,EAAW;AAAC,SAAO,YAAU;AAAC,WAAO8I,SAAS,CAAC9I,CAAD,CAAhB;AAAoB,GAAtC;AAAuC,CAAtE;;AAAuE87D,IAAI,CAACka,SAAL,CAAeO,YAAf,GAA4B,UAASv2E,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAACxwB,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAAN;AAA8C,SAAO,YAAU;AAAC,QAAI7I,CAAC,GAACvC,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,CAAN;AAA4C7I,KAAC,CAACxB,IAAF,CAAOg+B,KAAP,CAAax8B,CAAb,EAAeiuB,CAAf;AAAkB,WAAOluB,CAAC,CAACy8B,KAAF,CAAQ,IAAR,EAAax8B,CAAb,CAAP;AAAuB,GAAvG;AAAwG,CAAhM;;AAAiM67D,IAAI,CAACka,SAAL,CAAeQ,eAAf,GAA+B,UAASx2E,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAACka,SAAL,CAAeS,QAAf,CAAwBz2E,CAAxB,EAA0B87D,IAAI,CAACka,SAAL,CAAeC,QAAf,CAAwBh2E,CAAxB,CAA1B,CAAP;AAA6D,CAA1G;;AACpY67D,IAAI,CAACka,SAAL,CAAeU,OAAf,GAAuB,UAAS12E,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO,UAASiuB,CAAT,EAAW;AAAC,WAAOjuB,CAAC,GAACD,CAAC,IAAEkuB,CAAJ,GAAMluB,CAAC,KAAGkuB,CAAlB;AAAoB,GAAvC;AAAwC,CAA7E;;AAA8E4tC,IAAI,CAACka,SAAL,CAAeW,OAAf,GAAuB,UAAS32E,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAACplB,SAAN;AAAA,MAAgBgnC,CAAC,GAAC5hB,CAAC,CAACtuB,MAApB;AAA2B,SAAO,YAAU;AAAC,QAAII,CAAJ;AAAM8vC,KAAC,KAAG9vC,CAAC,GAACkuB,CAAC,CAAC4hB,CAAC,GAAC,CAAH,CAAD,CAAOrT,KAAP,CAAa,IAAb,EAAkB3zB,SAAlB,CAAL,CAAD;;AAAoC,SAAI,IAAI7I,CAAC,GAAC6vC,CAAC,GAAC,CAAZ,EAAc,KAAG7vC,CAAjB,EAAmBA,CAAC,EAApB,EAAuBD,CAAC,GAACkuB,CAAC,CAACjuB,CAAD,CAAD,CAAKwW,IAAL,CAAU,IAAV,EAAezW,CAAf,CAAF;;AAAoB,WAAOA,CAAP;AAAS,GAAhH;AAAiH,CAAjL;;AAAkL87D,IAAI,CAACka,SAAL,CAAeS,QAAf,GAAwB,UAASz2E,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC6I,SAAN;AAAA,MAAgBolB,CAAC,GAACjuB,CAAC,CAACL,MAApB;AAA2B,SAAO,YAAU;AAAC,SAAI,IAAII,CAAJ,EAAMkjB,CAAC,GAAC,CAAZ,EAAcA,CAAC,GAACgL,CAAhB,EAAkBhL,CAAC,EAAnB,EAAsBljB,CAAC,GAACC,CAAC,CAACijB,CAAD,CAAD,CAAKuZ,KAAL,CAAW,IAAX,EAAgB3zB,SAAhB,CAAF;;AAA6B,WAAO9I,CAAP;AAAS,GAA9E;AAA+E,CAA9I;;AAChQ87D,IAAI,CAACka,SAAL,CAAeY,GAAf,GAAmB,UAAS52E,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC6I,SAAN;AAAA,MAAgBolB,CAAC,GAACjuB,CAAC,CAACL,MAApB;AAA2B,SAAO,YAAU;AAAC,SAAI,IAAII,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACkuB,CAAd,EAAgBluB,CAAC,EAAjB,EAAoB,IAAG,CAACC,CAAC,CAACD,CAAD,CAAD,CAAKy8B,KAAL,CAAW,IAAX,EAAgB3zB,SAAhB,CAAJ,EAA+B,OAAM,CAAC,CAAP;;AAAS,WAAM,CAAC,CAAP;AAAS,GAAvF;AAAwF,CAAlJ;;AAAmJgzD,IAAI,CAACka,SAAL,CAAea,EAAf,GAAkB,UAAS72E,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC6I,SAAN;AAAA,MAAgBolB,CAAC,GAACjuB,CAAC,CAACL,MAApB;AAA2B,SAAO,YAAU;AAAC,SAAI,IAAII,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACkuB,CAAd,EAAgBluB,CAAC,EAAjB,EAAoB,IAAGC,CAAC,CAACD,CAAD,CAAD,CAAKy8B,KAAL,CAAW,IAAX,EAAgB3zB,SAAhB,CAAH,EAA8B,OAAM,CAAC,CAAP;;AAAS,WAAM,CAAC,CAAP;AAAS,GAAtF;AAAuF,CAAhJ;;AAAiJgzD,IAAI,CAACka,SAAL,CAAec,GAAf,GAAmB,UAAS92E,CAAT,EAAW;AAAC,SAAO,YAAU;AAAC,WAAM,CAACA,CAAC,CAACy8B,KAAF,CAAQ,IAAR,EAAa3zB,SAAb,CAAP;AAA+B,GAAjD;AAAkD,CAAjF;;AACpSgzD,IAAI,CAACka,SAAL,CAAel6D,MAAf,GAAsB,UAAS9b,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAAC,YAAU,CAAE,CAAlB;;AAAmBA,GAAC,CAACtY,SAAF,GAAY5V,CAAC,CAAC4V,SAAd;AAAwBsY,GAAC,GAAC,IAAIA,CAAJ,EAAF;AAAQluB,GAAC,CAACy8B,KAAF,CAAQvO,CAAR,EAAUxwB,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAAV;AAAmD,SAAOolB,CAAP;AAAS,CAAnJ;;AAAoJ4tC,IAAI,CAACka,SAAL,CAAee,kBAAf,GAAkC,CAAC,CAAnC;;AAAqCjb,IAAI,CAACka,SAAL,CAAegB,gBAAf,GAAgC,UAASh3E,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,CAAC,CAAP;AAAA,MAASiuB,CAAT;AAAW,SAAO,YAAU;AAAC,QAAG,CAAC4tC,IAAI,CAACka,SAAL,CAAee,kBAAnB,EAAsC,OAAO/2E,CAAC,EAAR;AAAWC,KAAC,KAAGiuB,CAAC,GAACluB,CAAC,EAAH,EAAMC,CAAC,GAAC,CAAC,CAAZ,CAAD;AAAgB,WAAOiuB,CAAP;AAAS,GAA5F;AAA6F,CAApJ;;AAAqJ4tC,IAAI,CAACka,SAAL,CAAeiB,IAAf,GAAoB,UAASj3E,CAAT,EAAW;AAAC,MAAIC,CAAC,GAACD,CAAN;AAAQ,SAAO,YAAU;AAAC,QAAGC,CAAH,EAAK;AAAC,UAAID,CAAC,GAACC,CAAN;AAAQA,OAAC,GAAC,IAAF;AAAOD,OAAC;AAAG;AAAC,GAA5C;AAA6C,CAArF;;AAC9U87D,IAAI,CAACka,SAAL,CAAekB,QAAf,GAAwB,UAASl3E,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC,CAAN;AAAQ,SAAO,UAAS5sB,CAAT,EAAW;AAAC44C,QAAI,CAAC1gC,MAAL,CAAY+7C,YAAZ,CAAyBrnC,CAAzB;AAA4B,QAAIrJ,CAAC,GAAC39B,SAAN;AAAgBgnC,KAAC,GAACgsB,IAAI,CAAC1gC,MAAL,CAAYkrC,UAAZ,CAAuB,YAAU;AAACtmE,OAAC,CAACy8B,KAAF,CAAQvO,CAAR,EAAUuY,CAAV;AAAa,KAA/C,EAAgDxmC,CAAhD,CAAF;AAAqD,GAApH;AAAqH,CAArK;;AAAsK67D,IAAI,CAACka,SAAL,CAAeoB,QAAf,GAAwB,UAASp3E,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC,CAAN;AAAA,MAAQ5sB,CAAC,GAAC,CAAC,CAAX;AAAA,MAAaujB,CAAC,GAAC,EAAf;AAAA,MAAkBvL,CAAC,GAAC,YAAU;AAAC4U,KAAC,GAAC,CAAF;AAAI5sB,KAAC,KAAGA,CAAC,GAAC,CAAC,CAAH,EAAKytB,CAAC,EAAT,CAAD;AAAc,GAAjD;AAAA,MAAkDA,CAAC,GAAC,YAAU;AAACb,KAAC,GAACgsB,IAAI,CAAC1gC,MAAL,CAAYkrC,UAAZ,CAAuBprC,CAAvB,EAAyBj7B,CAAzB,CAAF;AAA8BD,KAAC,CAACy8B,KAAF,CAAQvO,CAAR,EAAUuY,CAAV;AAAa,GAA1G;;AAA2G,SAAO,UAASzmC,CAAT,EAAW;AAACymC,KAAC,GAAC39B,SAAF;AAAYgnC,KAAC,GAAC5sB,CAAC,GAAC,CAAC,CAAJ,GAAMytB,CAAC,EAAR;AAAW,GAA1C;AAA2C,CAA9L;;AAA+LmrB,IAAI,CAACka,SAAL,CAAeqB,SAAf,GAAyB,UAASr3E,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC,CAAN;AAAA,MAAQ5sB,CAAC,GAAC,YAAU;AAAC4sB,KAAC,GAAC,CAAF;AAAI,GAAzB;;AAA0B,SAAO,UAASrJ,CAAT,EAAW;AAACqJ,KAAC,KAAGA,CAAC,GAACgsB,IAAI,CAAC1gC,MAAL,CAAYkrC,UAAZ,CAAuBpjD,CAAvB,EAAyBjjB,CAAzB,CAAF,EAA8BD,CAAC,CAACy8B,KAAF,CAAQvO,CAAR,EAAUplB,SAAV,CAAjC,CAAD;AAAwD,GAA3E;AAA4E,CAA/I;;AAAgJgzD,IAAI,CAACuQ,GAAL,CAASiL,WAAT,GAAqB,YAAU,CAAE,CAAjC;;AAAkCxb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,GAAiB,UAASv3E,CAAT,EAAW;AAAC,OAAKw3E,QAAL,GAAcx3E,CAAd;AAAgB,CAA7C;;AAA8C87D,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB3hE,SAAjB,CAA2BY,QAA3B,GAAoC,YAAU;AAAC,SAAO,KAAKghE,QAAZ;AAAqB,CAApE;;AAAqE1b,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBE,CAAjB,GAAmB,IAAI3b,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,GAArB,CAAnB;AAA6Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBG,IAAjB,GAAsB,IAAI5b,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBI,OAAjB,GAAyB,IAAI7b,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,SAArB,CAAzB;AAAyDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBK,OAAjB,GAAyB,IAAI9b,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,SAArB,CAAzB;AAAyDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBM,MAAjB,GAAwB,IAAI/b,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBO,IAAjB,GAAsB,IAAIhc,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBQ,OAAjB,GAAyB,IAAIjc,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,SAArB,CAAzB;AACt8Bzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBS,KAAjB,GAAuB,IAAIlc,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBU,KAAjB,GAAuB,IAAInc,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB7mC,CAAjB,GAAmB,IAAIorB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,GAArB,CAAnB;AAA6Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBW,IAAjB,GAAsB,IAAIpc,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBY,QAAjB,GAA0B,IAAIrc,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,UAArB,CAA1B;AAA2Dzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBa,GAAjB,GAAqB,IAAItc,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBc,GAAjB,GAAqB,IAAIvc,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBe,GAAjB,GAAqB,IAAIxc,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBgB,UAAjB,GAA4B,IAAIzc,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,YAArB,CAA5B;AAA+Dzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBiB,IAAjB,GAAsB,IAAI1c,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AACvdzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBkB,EAAjB,GAAoB,IAAI3c,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBmB,MAAjB,GAAwB,IAAI5c,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBoB,MAAjB,GAAwB,IAAI7c,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBqB,OAAjB,GAAyB,IAAI9c,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,SAArB,CAAzB;AAAyDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBsB,MAAjB,GAAwB,IAAI/c,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBuB,IAAjB,GAAsB,IAAIhd,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBwB,IAAjB,GAAsB,IAAIjd,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiByB,GAAjB,GAAqB,IAAIld,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB0B,QAAjB,GAA0B,IAAInd,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,UAArB,CAA1B;AACpazb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB2B,OAAjB,GAAyB,IAAIpd,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,SAArB,CAAzB;AAAyDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB4B,IAAjB,GAAsB,IAAIrd,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB6B,QAAjB,GAA0B,IAAItd,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,UAArB,CAA1B;AAA2Dzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB8B,EAAjB,GAAoB,IAAIvd,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB+B,GAAjB,GAAqB,IAAIxd,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBgC,OAAjB,GAAyB,IAAIzd,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,SAArB,CAAzB;AAAyDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBiC,GAAjB,GAAqB,IAAI1d,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBkC,MAAjB,GAAwB,IAAI3d,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBmC,GAAjB,GAAqB,IAAI5d,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBoC,GAAjB,GAAqB,IAAI7d,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AACzdzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBqC,EAAjB,GAAoB,IAAI9d,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBsC,EAAjB,GAAoB,IAAI/d,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBuC,EAAjB,GAAoB,IAAIhe,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBwC,KAAjB,GAAuB,IAAIje,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiByC,QAAjB,GAA0B,IAAIle,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,UAArB,CAA1B;AAA2Dzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB0C,UAAjB,GAA4B,IAAIne,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,YAArB,CAA5B;AAA+Dzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB2C,MAAjB,GAAwB,IAAIpe,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB4C,IAAjB,GAAsB,IAAIre,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB6C,MAAjB,GAAwB,IAAIte,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB8C,IAAjB,GAAsB,IAAIve,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAC7dzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB+C,KAAjB,GAAuB,IAAIxe,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBgD,QAAjB,GAA0B,IAAIze,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,UAArB,CAA1B;AAA2Dzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBiD,EAAjB,GAAoB,IAAI1e,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBkD,EAAjB,GAAoB,IAAI3e,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBmD,EAAjB,GAAoB,IAAI5e,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBoD,EAAjB,GAAoB,IAAI7e,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBqD,EAAjB,GAAoB,IAAI9e,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBsD,EAAjB,GAAoB,IAAI/e,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBuD,IAAjB,GAAsB,IAAIhf,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBwD,MAAjB,GAAwB,IAAIjf,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAC7bzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiByD,MAAjB,GAAwB,IAAIlf,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB0D,EAAjB,GAAoB,IAAInf,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB2D,IAAjB,GAAsB,IAAIpf,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB5nC,CAAjB,GAAmB,IAAImsB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,GAArB,CAAnB;AAA6Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB4D,MAAjB,GAAwB,IAAIrf,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB6D,GAAjB,GAAqB,IAAItf,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB8D,KAAjB,GAAuB,IAAIvf,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB+D,GAAjB,GAAqB,IAAIxf,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBgE,OAAjB,GAAyB,IAAIzf,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,SAArB,CAAzB;AAAyDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBiE,GAAjB,GAAqB,IAAI1f,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAC7czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBkE,MAAjB,GAAwB,IAAI3f,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBmE,KAAjB,GAAuB,IAAI5f,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBoE,MAAjB,GAAwB,IAAI7f,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBqE,EAAjB,GAAoB,IAAI9f,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBsE,IAAjB,GAAsB,IAAI/f,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBuE,IAAjB,GAAsB,IAAIhgB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBwE,GAAjB,GAAqB,IAAIjgB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiByE,IAAjB,GAAsB,IAAIlgB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB0E,IAAjB,GAAsB,IAAIngB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB2E,IAAjB,GAAsB,IAAIpgB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAC/czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB4E,QAAjB,GAA0B,IAAIrgB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,UAArB,CAA1B;AAA2Dzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB6E,IAAjB,GAAsB,IAAItgB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB8E,KAAjB,GAAuB,IAAIvgB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB+E,GAAjB,GAAqB,IAAIxgB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBgF,QAAjB,GAA0B,IAAIzgB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,UAArB,CAA1B;AAA2Dzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBiF,QAAjB,GAA0B,IAAI1gB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,UAArB,CAA1B;AAA2Dzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBkF,MAAjB,GAAwB,IAAI3gB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBmF,EAAjB,GAAoB,IAAI5gB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBoF,QAAjB,GAA0B,IAAI7gB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,UAArB,CAA1B;AAChbzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBqF,MAAjB,GAAwB,IAAI9gB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBsF,MAAjB,GAAwB,IAAI/gB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB3kC,CAAjB,GAAmB,IAAIkpB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,GAArB,CAAnB;AAA6Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBuF,KAAjB,GAAuB,IAAIhhB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBwF,OAAjB,GAAyB,IAAIjhB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,SAArB,CAAzB;AAAyDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiByF,GAAjB,GAAqB,IAAIlhB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB0F,QAAjB,GAA0B,IAAInhB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,UAArB,CAA1B;AAA2Dzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBpoC,CAAjB,GAAmB,IAAI2sB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,GAArB,CAAnB;AAA6Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB2F,EAAjB,GAAoB,IAAIphB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB4F,EAAjB,GAAoB,IAAIrhB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AACjdzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB6F,GAAjB,GAAqB,IAAIthB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB8F,IAAjB,GAAsB,IAAIvhB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBxmC,CAAjB,GAAmB,IAAI+qB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,GAArB,CAAnB;AAA6Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB+F,IAAjB,GAAsB,IAAIxhB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBgG,MAAjB,GAAwB,IAAIzhB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBiG,OAAjB,GAAyB,IAAI1hB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,SAArB,CAAzB;AAAyDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBkG,MAAjB,GAAwB,IAAI3hB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBmG,KAAjB,GAAuB,IAAI5hB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBoG,MAAjB,GAAwB,IAAI7hB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBqG,IAAjB,GAAsB,IAAI9hB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AACvdzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBsG,MAAjB,GAAwB,IAAI/hB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBuG,MAAjB,GAAwB,IAAIhiB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,QAArB,CAAxB;AAAuDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBwG,KAAjB,GAAuB,IAAIjiB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiByG,GAAjB,GAAqB,IAAIliB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB0G,OAAjB,GAAyB,IAAIniB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,SAArB,CAAzB;AAAyDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB2G,GAAjB,GAAqB,IAAIpiB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB4G,GAAjB,GAAqB,IAAIriB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB6G,KAAjB,GAAuB,IAAItiB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB8G,KAAjB,GAAuB,IAAIviB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB+G,EAAjB,GAAoB,IAAIxiB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AACzdzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBgH,QAAjB,GAA0B,IAAIziB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,UAArB,CAA1B;AAA2Dzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBiH,QAAjB,GAA0B,IAAI1iB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,UAArB,CAA1B;AAA2Dzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBkH,KAAjB,GAAuB,IAAI3iB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBmH,EAAjB,GAAoB,IAAI5iB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBoH,KAAjB,GAAuB,IAAI7iB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBqH,IAAjB,GAAsB,IAAI9iB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,MAArB,CAAtB;AAAmDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBsH,KAAjB,GAAuB,IAAI/iB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBuH,EAAjB,GAAoB,IAAIhjB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiBwH,KAAjB,GAAuB,IAAIjjB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiByH,EAAjB,GAAoB,IAAIljB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAC3dzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB0H,CAAjB,GAAmB,IAAInjB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,GAArB,CAAnB;AAA6Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB2H,EAAjB,GAAoB,IAAIpjB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,IAArB,CAApB;AAA+Czb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB4H,GAAjB,GAAqB,IAAIrjB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB6H,KAAjB,GAAuB,IAAItjB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,OAArB,CAAvB;AAAqDzb,IAAI,CAACuQ,GAAL,CAASkL,OAAT,CAAiB8H,GAAjB,GAAqB,IAAIvjB,IAAI,CAACuQ,GAAL,CAASkL,OAAb,CAAqB,KAArB,CAArB;AAAiDzb,IAAI,CAACuQ,GAAL,CAASiT,IAAT,GAAc,EAAd;AAAiBxjB,IAAI,CAACuQ,GAAL,CAASiT,IAAT,CAAcC,UAAd,GAAyB;AAACC,MAAI,EAAC,CAAC,CAAP;AAASxlF,MAAI,EAAC,CAAC,CAAf;AAAiBylF,IAAE,EAAC,CAAC,CAArB;AAAuBC,KAAG,EAAC,CAAC,CAA5B;AAA8BC,SAAO,EAAC,CAAC,CAAvC;AAAyCC,OAAK,EAAC,CAAC,CAAhD;AAAkDC,IAAE,EAAC,CAAC,CAAtD;AAAwDC,KAAG,EAAC,CAAC,CAA7D;AAA+Dl/E,OAAK,EAAC,CAAC,CAAtE;AAAwEm/E,QAAM,EAAC,CAAC,CAAhF;AAAkFC,MAAI,EAAC,CAAC,CAAxF;AAA0FC,MAAI,EAAC,CAAC,CAAhG;AAAkGC,OAAK,EAAC,CAAC,CAAzG;AAA2G9rB,QAAM,EAAC,CAAC,CAAnH;AAAqH+rB,OAAK,EAAC,CAAC,CAA5H;AAA8HC,KAAG,EAAC,CAAC;AAAnI,CAAzB;;AAA+JtkB,IAAI,CAACuQ,GAAL,CAASiT,IAAT,CAAce,SAAd,GAAwB,UAASrgF,CAAT,EAAW;AAAC,SAAM,CAAC,CAAD,KAAK87D,IAAI,CAACuQ,GAAL,CAASiT,IAAT,CAAcC,UAAd,CAAyBv/E,CAAzB,CAAX;AAAuC,CAA3E;;AAA4E87D,IAAI,CAACyH,IAAL,GAAU,EAAV;AAAazH,IAAI,CAACyH,IAAL,CAAU+c,YAAV,GAAuB,EAAvB;AAA0BxkB,IAAI,CAACyH,IAAL,CAAU+c,YAAV,CAAuBC,oCAAvB,GAA4DzkB,IAAI,CAACoO,yBAAL,GAA+BpO,IAAI,CAACsO,wBAAL,CAA8BtO,IAAI,CAACoO,yBAAL,GAA+B,OAA7D,CAA/B,GAAqG,IAAjK;AAAsKpO,IAAI,CAAC/yB,MAAL,GAAY,EAAZ;;AAAe+yB,IAAI,CAAC/yB,MAAL,CAAYy3C,WAAZ,GAAwB,YAAU,CAAE,CAApC;;AAAqC1kB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,GAAkB,UAASzgF,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAKygF,gEAAL,GAAsE1gF,CAAC,KAAG87D,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBE,sCAAtB,IAA8D1gF,CAA9D,IAAiE,EAAvI;AAA0I,OAAK2gF,uDAAL,GAA6D9kB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBI,YAA/E;AAA4F,CAAtQ;;AAAuQ/kB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkB7qE,SAAlB,CAA4BkrE,+BAA5B,GAA4D,CAAC,CAA7D;;AAA+DhlB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkB7qE,SAAlB,CAA4BmrE,mBAA5B,GAAgD,YAAU;AAAC,SAAO,KAAKL,gEAAZ;AAA6E,CAAxI;;AACtjC5kB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkB7qE,SAAlB,CAA4BY,QAA5B,GAAqC,YAAU;AAAC,SAAM,WAAS,KAAKkqE,gEAAd,GAA+E,GAArF;AAAyF,CAAzI;;AAA0I5kB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,GAAyB,UAAShhF,CAAT,EAAW;AAAC,MAAGA,CAAC,YAAY87D,IAAI,CAAC/yB,MAAL,CAAY03C,KAAzB,IAAgCzgF,CAAC,CAACvH,WAAF,KAAgBqjE,IAAI,CAAC/yB,MAAL,CAAY03C,KAA5D,IAAmEzgF,CAAC,CAAC4gF,uDAAF,KAA4D9kB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBI,YAApJ,EAAiK,OAAO7gF,CAAC,CAAC0gF,gEAAT;AAA0E5kB,MAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,yCAAuC9tE,CAAvC,GAAyC,GAA3D;AAAgE,SAAM,kBAAN;AAAyB,CAAzW;;AAC1I87D,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkB9iF,IAAlB,GAAuB,UAASqC,CAAT,EAAW;AAAC,SAAO,IAAI87D,IAAI,CAAC/yB,MAAL,CAAY03C,KAAhB,CAAsB3kB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBE,sCAAxC,EAA+E3gF,CAA/E,CAAP;AAAyF,CAA5H;;AAA6H87D,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBI,YAAlB,GAA+B,EAA/B;AAAkC/kB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBE,sCAAlB,GAAyD,EAAzD;AAA4D7kB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBQ,KAAlB,GAAwBnlB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkB9iF,IAAlB,CAAuB,EAAvB,CAAxB;;AAAmDm+D,IAAI,CAACyH,IAAL,CAAU2d,UAAV,GAAqB,YAAU;AAAC,OAAKC,+CAAL,GAAqD,EAArD;AAAwD,OAAKC,mDAAL,GAAyDtlB,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBG,uCAA9E;AAAsH,CAA9M;;AAA+MvlB,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBtrE,SAArB,CAA+BkrE,+BAA/B,GAA+D,CAAC,CAAhE;AAAkEhlB,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBG,uCAArB,GAA6D,EAA7D;;AAAgEvlB,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBI,YAArB,GAAkC,UAASthF,CAAT,EAAW;AAACA,GAAC,GAAC87D,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAAF;AAA8B,SAAO,MAAIA,CAAC,CAACJ,MAAN,GAAak8D,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBD,KAAlC,GAAwCnlB,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBK,gDAArB,CAAsEvhF,CAAtE,CAA/C;AAAwH,CAApM;;AAC/lB87D,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBM,mBAArB,GAAyC,UAASxhF,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAI,IAAIiuB,CAAC,GAAC,EAAN,EAAS4hB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAAChnC,SAAS,CAAClJ,MAA7B,EAAoCkwC,CAAC,EAArC,EAAwC5hB,CAAC,CAACzvB,IAAF,CAAOq9D,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBO,UAArB,CAAgC34E,SAAS,CAACgnC,CAAD,CAAzC,CAAP;;AAAsD,SAAOgsB,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBK,gDAArB,CAAsE,MAAIzlB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAAJ,GAAgC,IAAhC,GAAqCkuB,CAAC,CAACvT,IAAF,CAAO,IAAP,CAArC,GAAkD,IAAxH,CAAP;AAAqI,CAA1R;;AAA2RmhD,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBQ,QAArB,GAA8B,UAAS1hF,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBK,gDAArB,CAAsEzlB,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBO,UAArB,CAAgCzhF,CAAhC,CAAtE,CAAP;AAAiH,CAA3J;;AAA4J87D,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBtrE,SAArB,CAA+BmrE,mBAA/B,GAAmD,YAAU;AAAC,SAAO,KAAKI,+CAAL,CAAqD3qE,QAArD,EAAP;AAAuE,CAArI;;AACvbslD,IAAI,CAACW,KAAL,KAAaX,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBtrE,SAArB,CAA+BY,QAA/B,GAAwC,YAAU;AAAC,SAAM,gBAAc,KAAK2qE,+CAAnB,GAAmE,GAAzE;AAA6E,CAA7I;;AAA+IrlB,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBF,MAArB,GAA4B,UAAShhF,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBS,mBAArB,CAAyC3hF,CAAzC,EAA4CwW,QAA5C,EAAP;AAA8D,CAAtG;;AAC/IslD,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBS,mBAArB,GAAyC,UAAS3hF,CAAT,EAAW;AAAC,MAAGA,CAAC,YAAY87D,IAAI,CAACyH,IAAL,CAAU2d,UAAvB,IAAmClhF,CAAC,CAACvH,WAAF,KAAgBqjE,IAAI,CAACyH,IAAL,CAAU2d,UAA7D,IAAyElhF,CAAC,CAACohF,mDAAF,KAAwDtlB,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBG,uCAAzJ,EAAiM,OAAOrhF,CAAC,CAACmhF,+CAAT;AAAyDrlB,MAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,8CAA4C9tE,CAA5C,GAA8C,YAA9C,GAA2D87D,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAA7E;AAA6F,SAAM,uBAAN;AAA8B,CAA1a;;AACA87D,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBO,UAArB,GAAgC,UAASzhF,CAAT,EAAW;AAAC,SAAOwH,IAAI,CAACC,SAAL,CAAezH,CAAf,EAAkBkZ,OAAlB,CAA0B,IAA1B,EAA+B,OAA/B,CAAP;AAA+C,CAA3F;;AAA4F4iD,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBK,gDAArB,GAAsE,UAASvhF,CAAT,EAAW;AAAC,SAAO,IAAI87D,IAAI,CAACyH,IAAL,CAAU2d,UAAd,EAAD,CAA2BU,qCAA3B,CAAiE5hF,CAAjE,CAAN;AAA0E,CAA5J;;AAC5F87D,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBtrE,SAArB,CAA+BgsE,qCAA/B,GAAqE,UAAS5hF,CAAT,EAAW;AAAC,OAAKmhF,+CAAL,GAAqDrlB,IAAI,CAACyH,IAAL,CAAU+c,YAAV,CAAuBC,oCAAvB,GAA4DzkB,IAAI,CAACyH,IAAL,CAAU+c,YAAV,CAAuBC,oCAAvB,CAA4DpX,YAA5D,CAAyEnpE,CAAzE,CAA5D,GAAwIA,CAA7L;AAA+L,SAAO,IAAP;AAAY,CAA5R;;AAA6R87D,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBD,KAArB,GAA2BnlB,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBK,gDAArB,CAAsE,EAAtE,CAA3B;AAAqGzlB,IAAI,CAAClgD,EAAL,GAAQ,EAAR;AAAWkgD,IAAI,CAAClgD,EAAL,CAAQimE,GAAR,GAAY,EAAZ;;AAAe/lB,IAAI,CAAClgD,EAAL,CAAQimE,GAAR,CAAYC,eAAZ,GAA4B,UAAS9hF,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAAClgD,EAAL,CAAQimE,GAAR,CAAYE,aAAZ,GAA4BC,eAA5B,CAA4ChiF,CAA5C,CAAP;AAAsD,CAA9F;;AAA+F87D,IAAI,CAAClgD,EAAL,CAAQimE,GAAR,CAAYI,eAAZ,GAA4B,UAASjiF,CAAT,EAAW;AAAC87D,MAAI,CAAClgD,EAAL,CAAQimE,GAAR,CAAYE,aAAZ,GAA4BG,eAA5B,CAA4CliF,CAA5C;AAA+C,CAAvF;;AAAwF87D,IAAI,CAAClgD,EAAL,CAAQimE,GAAR,CAAYE,aAAZ,GAA0B,YAAU;AAAC,MAAI/hF,CAAC,GAAC87D,IAAI,CAAClgD,EAAL,CAAQimE,GAAR,CAAYM,cAAZ,EAAN;AAAmC,MAAG,QAAMniF,CAAT,EAAW,OAAOA,CAAP;AAAS,QAAM5B,KAAK,CAAC,gDAAD,CAAX;AAA+D,CAA3J;;AACnlB09D,IAAI,CAAClgD,EAAL,CAAQimE,GAAR,CAAYM,cAAZ,GAA2B,YAAU;AAAC,SAAOrmB,IAAI,CAACC,KAAL,CAAWD,IAAI,CAAC1gC,MAAL,CAAYgnD,GAAvB,KAA6BtmB,IAAI,CAACC,KAAL,CAAWD,IAAI,CAAC1gC,MAAL,CAAYgnD,GAAZ,CAAgBJ,eAA3B,CAA7B,GAAyElmB,IAAI,CAAC1gC,MAAL,CAAYgnD,GAArF,GAAyFtmB,IAAI,CAACC,KAAL,CAAWD,IAAI,CAAC1gC,MAAL,CAAYinD,SAAvB,KAAmCvmB,IAAI,CAACC,KAAL,CAAWD,IAAI,CAAC1gC,MAAL,CAAYinD,SAAZ,CAAsBL,eAAjC,CAAnC,GAAqFlmB,IAAI,CAAC1gC,MAAL,CAAYinD,SAAjG,GAA2GvmB,IAAI,CAACC,KAAL,CAAWD,IAAI,CAAC1gC,MAAL,CAAY4mD,eAAvB,IAAwClmB,IAAI,CAAC1gC,MAA7C,GAAoD,IAA/P;AAAoQ,CAA1S;;AAA2S0gC,IAAI,CAAClgD,EAAL,CAAQimE,GAAR,CAAYS,yBAAZ,GAAsC,YAAU;AAAC,SAAO,QAAMxmB,IAAI,CAAClgD,EAAL,CAAQimE,GAAR,CAAYM,cAAZ,EAAb;AAA0C,CAA3F;;AAA4FrmB,IAAI,CAACymB,IAAL,GAAU,EAAV;AAAazmB,IAAI,CAACymB,IAAL,CAAUC,IAAV,GAAe,EAAf;AAAkB1mB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeC,SAAf,GAAyB,CAAC,CAA1B;AACta3mB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeE,MAAf,GAAsB5mB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeC,SAAf,IAA0B,CAAC,QAAM3mB,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAAN,IAAgD,QAAM6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAAtD,IAAgG,QAAM6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAAtG,IAAgJ,QAAM6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAAtJ,IAAgM,QAAM6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAAtM,IAAgP,QAAM6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAAtP,IAAgS,QAAM6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAAtS,IAAgV,QAAM6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAAtV,IAAgY,QAAM6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAAvY,MAAmb,KAAG6hC,IAAI,CAACY,MAAL,CAAY98D,MAAf,IACne,OAAKk8D,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,CAD8d,IAClc,OAAKgf,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,CADU,CAA1B,IAC6C,KAAGgf,IAAI,CAACY,MAAL,CAAY98D,MAAf,IAAuB,SAAOk8D,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAA9B,KAAyE,KAAG6hC,IAAI,CAACY,MAAL,CAAY98D,MAAf,IAAuB,OAAKk8D,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,CAA5B,IAAwD,OAAKgf,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,CAAtI,CAD7C,IACgN,KAAGgf,IAAI,CAACY,MAAL,CAAY98D,MAAf,KAAwB,OAAKk8D,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,CAAL,IAAiC,OAAKgf,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,CAA9D,MAA4F,UAAQgf,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAAR,IAAkD,UAAQ6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAA1D,IAAoG,UAAQ6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAA5G,IAAsJ,UAAQ6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAChe,CADge,EAC7d7iB,WAD6d,EAA9J,IAChT,UAAQ6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EADwS,IAC9P,UAAQ6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAD0J,CADhN,IAEiG,KAAG6hC,IAAI,CAACY,MAAL,CAAY98D,MAAf,KAAwB,OAAKk8D,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,CAAL,IAAiC,OAAKgf,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,CAA9D,MAA4F,UAAQgf,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAAR,IAAkD,UAAQ6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAA1D,IAAoG,UAAQ6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAA5G,IAAsJ,UAAQ6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAA9J,IAAwM,UAAQ6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAAhN,IAA0P,UAAQ6hC,IAAI,CAACY,MAAL,CAAY5f,SAAZ,CAAsB,CAAtB,EAAwB,CAAxB,EAA2B7iB,WAA3B,EAA9V,CAFvH;AAGA6hC,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeG,MAAf,GAAsB;AAACC,KAAG,EAAC,QAAL;AAAcC,KAAG,EAAC,QAAlB;AAA2BC,KAAG,EAAC,QAA/B;AAAwCC,KAAG,EAAC,QAA5C;AAAqDC,KAAG,EAAC;AAAzD,CAAtB;AAAyFlnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,GAAmB;AAACC,KAAG,EAAC,CAAL;AAAOC,KAAG,EAAC,CAAC,CAAZ;AAAcC,SAAO,EAAC;AAAtB,CAAnB;AAA4CtnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAea,KAAf,GAAqB,OAArB;AAA6BvnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAec,IAAf,GAAoB,MAApB;AAA2BxnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAee,UAAf,GAA0BznB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeE,MAAf,GAAsB5mB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAec,IAArC,GAA0CxnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAea,KAAnF;AAAyFvnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAegB,SAAf,GAAyB1nB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeE,MAAf,GAAsB5mB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAea,KAArC,GAA2CvnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAec,IAAnF;;AACtRxnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeiB,KAAf,GAAqB,UAASzjF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAM,YAAU,OAAOD,CAAjB,GAAmB,IAAEA,CAAF,GAAI87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBC,GAAvB,GAA2B,IAAEljF,CAAF,GAAI87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBE,GAAvB,GAA2BljF,CAAC,GAAC,IAAD,GAAM67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBG,OAAnG,GAA2G,QAAMpjF,CAAN,GAAQ,IAAR,GAAaA,CAAC,GAAC87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBE,GAApB,GAAwBrnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBC,GAA1K;AAA8K,CAAjN;;AAAkNpnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAekB,SAAf,GAAyB,6JAAzB;AAAuL5nB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAemB,SAAf,GAAyB,sFAAzB;AACzY7nB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeoB,YAAf,GAA4B,kBAA5B;;AAA+C9nB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeqB,kBAAf,GAAkC,UAAS7jF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOA,CAAC,GAACD,CAAC,CAACkZ,OAAF,CAAU4iD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeoB,YAAzB,EAAsC,EAAtC,CAAD,GAA2C5jF,CAAnD;AAAqD,CAArG;;AAAsG87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAesB,WAAf,GAA2B,IAAIxqE,MAAJ,CAAW,MAAIwiD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAemB,SAAnB,GAA6B,GAAxC,CAA3B;AAAwE7nB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeuB,WAAf,GAA2B,IAAIzqE,MAAJ,CAAW,MAAIwiD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAekB,SAAnB,GAA6B,GAAxC,CAA3B;;AAAwE5nB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAewB,SAAf,GAAyB,UAAShkF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAesB,WAAf,CAA2B1kE,IAA3B,CAAgC08C,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeqB,kBAAf,CAAkC7jF,CAAlC,EAAoCC,CAApC,CAAhC,CAAP;AAA+E,CAAtH;;AAAuH67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeyB,UAAf,GAA0BnoB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAewB,SAAzC;;AAC5ZloB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe0B,SAAf,GAAyB,UAASlkF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeuB,WAAf,CAA2B3kE,IAA3B,CAAgC08C,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeqB,kBAAf,CAAkC7jF,CAAlC,EAAoCC,CAApC,CAAhC,CAAP;AAA+E,CAAtH;;AAAuH67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe2B,MAAf,GAAsB,IAAI7qE,MAAJ,CAAW,OAAKwiD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAekB,SAApB,GAA8B,GAAzC,CAAtB;AAAoE5nB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe4B,MAAf,GAAsB,IAAI9qE,MAAJ,CAAW,OAAKwiD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAemB,SAApB,GAA8B,GAAzC,CAAtB;;AAAoE7nB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe6B,SAAf,GAAyB,UAASrkF,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe4B,MAAf,CAAsBhlE,IAAtB,CAA2Bpf,CAA3B,CAAP;AAAqC,CAA1E;;AAA2E87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe8B,SAAf,GAAyB,UAAStkF,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe2B,MAAf,CAAsB/kE,IAAtB,CAA2Bpf,CAA3B,CAAP;AAAqC,CAA1E;;AAA2E87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe+B,aAAf,GAA6B,UAASvkF,CAAT,EAAW;AAAC,SAAM,CAAC87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe8B,SAAf,CAAyBtkF,CAAzB,CAAD,IAA8B,CAAC87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe6B,SAAf,CAAyBrkF,CAAzB,CAArC;AAAiE,CAA1G;;AACrZ87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAegC,cAAf,GAA8B,IAAIlrE,MAAJ,CAAW,QAAMwiD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAemB,SAArB,GAA+B,KAA/B,GAAqC7nB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAekB,SAApD,GAA8D,GAAzE,CAA9B;AAA4G5nB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeiC,cAAf,GAA8B,IAAInrE,MAAJ,CAAW,QAAMwiD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAekB,SAArB,GAA+B,KAA/B,GAAqC5nB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAemB,SAApD,GAA8D,GAAzE,CAA9B;;AAA4G7nB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAekC,aAAf,GAA6B,UAAS1kF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeiC,cAAf,CAA8BrlE,IAA9B,CAAmC08C,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeqB,kBAAf,CAAkC7jF,CAAlC,EAAoCC,CAApC,CAAnC,CAAP;AAAkF,CAA7H;;AAA8H67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAemC,SAAf,GAAyB7oB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAekC,aAAxC;;AACtV5oB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeoC,aAAf,GAA6B,UAAS5kF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAegC,cAAf,CAA8BplE,IAA9B,CAAmC08C,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeqB,kBAAf,CAAkC7jF,CAAlC,EAAoCC,CAApC,CAAnC,CAAP;AAAkF,CAA7H;;AAA8H67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeqC,SAAf,GAAyB/oB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeoC,aAAxC;AAAsD9oB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAesC,gBAAf,GAAgC,cAAhC;;AAA+ChpB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeuC,aAAf,GAA6B,UAAS/kF,CAAT,EAAWC,CAAX,EAAa;AAACD,GAAC,GAAC87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeqB,kBAAf,CAAkC7jF,CAAlC,EAAoCC,CAApC,CAAF;AAAyC,SAAO67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAesC,gBAAf,CAAgC1lE,IAAhC,CAAqCpf,CAArC,KAAyC,CAAC87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe0B,SAAf,CAAyBlkF,CAAzB,CAAD,IAA8B,CAAC87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAewB,SAAf,CAAyBhkF,CAAzB,CAA/E;AAA2G,CAA/L;;AACnO87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAewC,kBAAf,GAAkC,IAAI1rE,MAAJ,CAAW,MAAIwiD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAekB,SAAnB,GAA6B,KAA7B,GAAmC5nB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAemB,SAAlD,GAA4D,KAAvE,CAAlC;AAAgH7nB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeyC,kBAAf,GAAkC,IAAI3rE,MAAJ,CAAW,MAAIwiD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAemB,SAAnB,GAA6B,KAA7B,GAAmC7nB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAekB,SAAlD,GAA4D,KAAvE,CAAlC;;AAAgH5nB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe0C,WAAf,GAA2B,UAASllF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAewC,kBAAf,CAAkC5lE,IAAlC,CAAuC08C,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeqB,kBAAf,CAAkC7jF,CAAlC,EAAoCC,CAApC,CAAvC,CAAP;AAAsF,CAA/H;;AAAgI67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe2C,aAAf,GAA6BrpB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe0C,WAA5C;;AAChWppB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe4C,WAAf,GAA2B,UAASplF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeyC,kBAAf,CAAkC7lE,IAAlC,CAAuC08C,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeqB,kBAAf,CAAkC7jF,CAAlC,EAAoCC,CAApC,CAAvC,CAAP;AAAsF,CAA/H;;AAAgI67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe6C,aAAf,GAA6BvpB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe4C,WAA5C;AAAwDtpB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe8C,aAAf,GAA6B,oHAA7B;;AAAkJxpB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe+C,aAAf,GAA6B,UAASvlF,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe8C,aAAf,CAA6BlmE,IAA7B,CAAkCpf,CAAlC,CAAP;AAA4C,CAArF;;AAAsF87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAegD,mBAAf,GAAmC,4CAAnC;;AACha1pB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeiD,kBAAf,GAAkC,UAASzlF,CAAT,EAAWC,CAAX,EAAa;AAACA,GAAC,GAAC,CAAC,KAAK,CAAL,KAASA,CAAT,GAAW67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAewB,SAAf,CAAyBhkF,CAAzB,CAAX,GAAuCC,CAAxC,IAA2C67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeG,MAAf,CAAsBK,GAAjE,GAAqElnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeG,MAAf,CAAsBI,GAA7F;AAAiG,SAAO/iF,CAAC,CAACkZ,OAAF,CAAU4iD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAegD,mBAAzB,EAA6CvlF,CAAC,GAAC,IAAF,GAAOA,CAApD,CAAP;AAA8D,CAA/M;;AAAgN67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAekD,gBAAf,GAAgC,UAAS1lF,CAAT,EAAW;AAAC,SAAM,OAAKA,CAAC,CAACq+B,MAAF,CAAS,CAAT,CAAL,GAAiBr+B,CAAC,CAACkZ,OAAF,CAAU,MAAV,EAAiB,YAAjB,CAAjB,GAAgD,qBAAmBlZ,CAAnB,GAAqB,SAA3E;AAAqF,CAAjI;;AAAkI87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAemD,gBAAf,GAAgC,UAAS3lF,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeG,MAAf,CAAsBE,GAAtB,GAA0B7iF,CAA1B,GAA4B87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeG,MAAf,CAAsBG,GAAzD;AAA6D,CAAzG;;AAClVhnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeoD,gBAAf,GAAgC,UAAS5lF,CAAT,EAAW;AAAC,SAAM,OAAKA,CAAC,CAACq+B,MAAF,CAAS,CAAT,CAAL,GAAiBr+B,CAAC,CAACkZ,OAAF,CAAU,MAAV,EAAiB,YAAjB,CAAjB,GAAgD,qBAAmBlZ,CAAnB,GAAqB,SAA3E;AAAqF,CAAjI;;AAAkI87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeqD,gBAAf,GAAgC,UAAS7lF,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeG,MAAf,CAAsBC,GAAtB,GAA0B5iF,CAA1B,GAA4B87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeG,MAAf,CAAsBG,GAAzD;AAA6D,CAAzG;;AAA0GhnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAesD,aAAf,GAA6B,oEAA7B;AAAkGhqB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeuD,OAAf,GAAuB,QAAvB;AAAgCjqB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAewD,QAAf,GAAwB,SAAxB;AAAkClqB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeyD,OAAf,GAAuB,OAAvB;;AAChZnqB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe0D,SAAf,GAAyB,UAASlmF,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACkZ,OAAF,CAAU4iD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAesD,aAAzB,EAAuC,cAAvC,EAAuD5sE,OAAvD,CAA+D4iD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeuD,OAA9E,EAAsF,MAAtF,EAA8F7sE,OAA9F,CAAsG4iD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAewD,QAArH,EAA8HlqB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAec,IAA7I,EAAmJpqE,OAAnJ,CAA2J4iD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeyD,OAA1K,EAAkLnqB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAea,KAAjM,CAAP;AAA+M,CAApP;;AAAqPvnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe2D,wBAAf,GAAwC,qBAAxC;AAA8DrqB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe4D,wBAAf,GAAwC,qBAAxC;;AACnTtqB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe6D,oBAAf,GAAoC,UAASrmF,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACkZ,OAAF,CAAU4iD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe2D,wBAAzB,EAAkD,UAAlD,EAA8DjtE,OAA9D,CAAsE4iD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe4D,wBAArF,EAA8G,UAA9G,CAAP;AAAiI,CAAjL;;AAAkLtqB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe8D,gBAAf,GAAgC,KAAhC;AAAsCxqB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe+D,cAAf,GAA8B,mBAA9B;AAAkDzqB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAegE,sBAAf,GAAsC,EAAtC;;AAC1Q1qB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeiE,iBAAf,GAAiC,UAASzmF,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAAC,CAAN;AAAA,MAAQ4hB,CAAC,GAAC,CAAV;AAAA,MAAY5sB,CAAC,GAAC,CAAC,CAAf;AAAiBljB,GAAC,GAAC87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeqB,kBAAf,CAAkC7jF,CAAlC,EAAoCC,CAApC,EAAuCga,KAAvC,CAA6C6hD,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe8D,gBAA5D,CAAF;;AAAgF,OAAIrmF,CAAC,GAAC,CAAN,EAAQA,CAAC,GAACD,CAAC,CAACJ,MAAZ,EAAmBK,CAAC,EAApB,EAAuB;AAAC,QAAIwmC,CAAC,GAACzmC,CAAC,CAACC,CAAD,CAAP;AAAW67D,QAAI,CAACymB,IAAL,CAAUC,IAAV,CAAekC,aAAf,CAA6Bj+C,CAA7B,KAAiCvY,CAAC,IAAG4hB,CAAC,EAAtC,IAA0CgsB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAesC,gBAAf,CAAgC1lE,IAAhC,CAAqCqnB,CAArC,IAAwCvjB,CAAC,GAAC,CAAC,CAA3C,GAA6C44C,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe0B,SAAf,CAAyBz9C,CAAzB,IAA4BqJ,CAAC,EAA7B,GAAgCgsB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAe+D,cAAf,CAA8BnnE,IAA9B,CAAmCqnB,CAAnC,MAAwCvjB,CAAC,GAAC,CAAC,CAA3C,CAAvH;AAAqK;;AAAA,SAAO,KAAG4sB,CAAH,GAAK5sB,CAAC,GAAC44C,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBC,GAApB,GAAwBpnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBG,OAAjD,GAAyDl1D,CAAC,GAAC4hB,CAAF,GAAIgsB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAegE,sBAAnB,GAA0C1qB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBE,GAA7D,GAAiErnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBC,GAApJ;AAAwJ,CAAhf;;AACApnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAekE,uBAAf,GAAuC,UAAS1mF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeiE,iBAAf,CAAiCzmF,CAAjC,EAAmCC,CAAnC,KAAuC67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBE,GAAjE;AAAqE,CAA1H;;AAA2HrnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAemE,qBAAf,GAAqC,UAAS3mF,CAAT,EAAWC,CAAX,EAAa;AAACD,GAAC,KAAGC,CAAC,GAAC67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeiB,KAAf,CAAqBxjF,CAArB,CAAL,CAAD,KAAiCD,CAAC,CAAC4mF,KAAF,CAAQC,SAAR,GAAkB5mF,CAAC,IAAE67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBE,GAAtB,GAA0BrnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAea,KAAzC,GAA+CvnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAec,IAAhF,EAAqFtjF,CAAC,CAACu2B,GAAF,GAAMt2B,CAAC,IAAE67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBE,GAAtB,GAA0B,KAA1B,GAAgC,KAA5J;AAAmK,CAAtN;;AAC3HrnB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAesE,iCAAf,GAAiD,UAAS9mF,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAO67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeiE,iBAAf,CAAiCxmF,CAAjC,CAAP;AAA4C,SAAK67D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBC,GAAxB;AAA4BljF,OAAC,CAACu2B,GAAF,GAAM,KAAN;AAAY;;AAAM,SAAKulC,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBE,GAAxB;AAA4BnjF,OAAC,CAACu2B,GAAF,GAAM,KAAN;AAAY;;AAAM;AAAQv2B,OAAC,CAACgiE,eAAF,CAAkB,KAAlB;AAAhJ;AAA0K,CAAzO;;AAA0OlG,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeuE,iBAAf,GAAiC,YAAU,CAAE,CAA7C;;AAA8CjrB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,GAA6B,YAAU;AAAC,OAAKC,uDAAL,GAA6D,EAA7D;AAAgE,OAAKC,WAAL,GAAiB,IAAjB;AAAsB,OAAKC,4DAAL,GAAkErrB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6B3F,uCAA/F;AAAuI,CAArQ;;AAAsQvlB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BpxE,SAA7B,CAAuCkrE,+BAAvC,GAAuE,CAAC,CAAxE;;AAA0EhlB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BpxE,SAA7B,CAAuCmrE,mBAAvC,GAA2D,YAAU;AAAC,SAAO,KAAKkG,uDAAL,CAA6DzwE,QAA7D,EAAP;AAA+E,CAArJ;;AACxmBslD,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BpxE,SAA7B,CAAuCwxE,uCAAvC,GAA+E,CAAC,CAAhF;;AAAkFtrB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BpxE,SAA7B,CAAuCyxE,YAAvC,GAAoD,YAAU;AAAC,SAAOvrB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBC,GAA1B;AAA8B,CAA7F;;AAClFpnB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BpxE,SAA7B,CAAuC0xE,eAAvC,GAAuD,UAAStnF,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAAC4tC,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BhG,MAA7B,CAAoC,IAApC,CAAN;AAAgD9yD,GAAC,GAAC4tC,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BO,iBAA7B,CAA+Cz7C,IAA/C,CAAoD5d,CAApD,CAAF;AAAyD,MAAI4hB,CAAC,GAAC5hB,CAAC,CAAC,CAAD,CAAD,IAAM,EAAZ;AAAe,SAAO4tC,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BQ,wDAA7B,CAAsFt5D,CAAC,CAAC,CAAD,CAAD,GAAK4tC,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BS,gBAA7B,CAA8C,GAA9C,EAAkDv5D,CAAC,CAAC,CAAD,CAAD,IAAM,EAAxD,EAA2DluB,CAA3D,CAAL,GAAmE87D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BS,gBAA7B,CAA8C,GAA9C,EAAkD33C,CAAlD,EAAoD7vC,CAApD,CAAzJ,CAAP;AAAwN,CAArZ;;AACA67D,IAAI,CAACW,KAAL,KAAaX,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BpxE,SAA7B,CAAuCY,QAAvC,GAAgD,YAAU;AAAC,SAAM,wBAAsB,KAAKywE,uDAA3B,GAAmF,GAAzF;AAA6F,CAArK;;AAAuKnrB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BhG,MAA7B,GAAoC,UAAShhF,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BU,sBAA7B,CAAoD1nF,CAApD,EAAuDwW,QAAvD,EAAP;AAAyE,CAAzH;;AACvKslD,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BU,sBAA7B,GAAoD,UAAS1nF,CAAT,EAAW;AAAC,MAAGA,CAAC,YAAY87D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAvB,IAA2ChnF,CAAC,CAACvH,WAAF,KAAgBqjE,IAAI,CAACyH,IAAL,CAAUyjB,kBAArE,IAAyFhnF,CAAC,CAACmnF,4DAAF,KAAiErrB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6B3F,uCAA1L,EAAkO,OAAOrhF,CAAC,CAACinF,uDAAT;AAAiEnrB,MAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,sDAAoD9tE,CAApD,GAAsD,YAAtD,GAAmE87D,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAArF;AAAqG,SAAM,+BAAN;AAAsC,CAA9e;;AACA87D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BW,gBAA7B,GAA8C,UAAS3nF,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACknF,WAAF,GAAclnF,CAAC,CAACknF,WAAhB,GAA4BprB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BhG,MAA7B,CAAoChhF,CAApC,CAAnC;AAA0E,CAApI;;AACA87D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BxvE,MAA7B,GAAoC,UAASxX,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAAC4tC,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAAN;AAAkC,MAAG,CAAC87D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BY,SAA7B,CAAuCxoE,IAAvC,CAA4C8O,CAA5C,CAAJ,EAAmD,MAAM9vB,KAAK,CAAC,wCAAsC8vB,CAAvC,CAAX;AAAqDluB,GAAC,GAACkuB,CAAC,CAAChV,OAAF,CAAU4iD,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6Ba,cAAvC,EAAsD,UAAS7nF,CAAT,EAAWkjB,CAAX,EAAa;AAAC,QAAG,CAAC1mB,MAAM,CAACoZ,SAAP,CAAiB0C,cAAjB,CAAgC7B,IAAhC,CAAqCxW,CAArC,EAAuCijB,CAAvC,CAAJ,EAA8C,MAAM9kB,KAAK,CAAC,oBAAkB8kB,CAAlB,GAAoB,wBAApB,GAA6CgL,CAA7C,GAA+C,+CAA/C,GAA+F1mB,IAAI,CAACC,SAAL,CAAexH,CAAf,CAAhG,CAAX;AAA8HD,KAAC,GAACC,CAAC,CAACijB,CAAD,CAAH;AAAO,WAAOljB,CAAC,YAAY87D,IAAI,CAAC/yB,MAAL,CAAY03C,KAAzB,GAA+B3kB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAA/B,GAC5bg9B,kBAAkB,CAACI,MAAM,CAACp9B,CAAD,CAAP,CADma;AACvZ,GADgK,CAAF;AAC5J,SAAO87D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BQ,wDAA7B,CAAsFxnF,CAAtF,CAAP;AAAgG,CADhI;;AACiI87D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6Ba,cAA7B,GAA4C,WAA5C;AAAwD/rB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BY,SAA7B,GAAuC,oFAAvC;AAA4H9rB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BO,iBAA7B,GAA+C,gCAA/C;;AACrTzrB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6Bc,gBAA7B,GAA8C,UAAS9nF,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,SAAOgsB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BxvE,MAA7B,CAAoCxX,CAApC,EAAsCC,CAAtC,EAAyCqnF,eAAzC,CAAyDp5D,CAAzD,EAA2D4hB,CAA3D,CAAP;AAAqE,CAArI;;AAAsIgsB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6B1F,YAA7B,GAA0C,UAASthF,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BQ,wDAA7B,CAAsF1rB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAAtF,CAAP;AAA0H,CAAhL;;AAAiL87D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6Be,aAA7B,GAA2C,UAAS/nF,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC,EAAN,EAASiuB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAACluB,CAAC,CAACJ,MAArB,EAA4BsuB,CAAC,EAA7B,EAAgCjuB,CAAC,IAAE67D,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAC,CAACkuB,CAAD,CAA1B,CAAH;;AAAkC,SAAO4tC,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BQ,wDAA7B,CAAsFvnF,CAAtF,CAAP;AAAgG,CAAzN;;AACvT67D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6B3F,uCAA7B,GAAqE,EAArE;;AACAvlB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BQ,wDAA7B,GAAsF,UAASxnF,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,IAAI67D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAd,EAAN;AAAuC/mF,GAAC,CAACgnF,uDAAF,GAA0DnrB,IAAI,CAACyH,IAAL,CAAU+c,YAAV,CAAuBC,oCAAvB,GAA4DzkB,IAAI,CAACyH,IAAL,CAAU+c,YAAV,CAAuBC,oCAAvB,CAA4DvX,eAA5D,CAA4EhpE,CAA5E,CAA5D,GAA2IA,CAArM;AAAuM87D,MAAI,CAACyH,IAAL,CAAU+c,YAAV,CAAuBC,oCAAvB,KAA8DtgF,CAAC,CAACinF,WAAF,GAAcprB,IAAI,CAACyH,IAAL,CAAU+c,YAAV,CAAuBC,oCAAvB,CAA4DhW,SAA5D,CAAsEvqE,CAAtE,CAA5E;AAAsJ,SAAOC,CAAP;AAAS,CAA/e;;AACA67D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BS,gBAA7B,GAA8C,UAASznF,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAG,QAAMA,CAAT,EAAW,OAAOjuB,CAAP;AAAS,MAAG67D,IAAI,CAAC9jD,QAAL,CAAckW,CAAd,CAAH,EAAoB,OAAOA,CAAC,GAACluB,CAAC,GAACg9B,kBAAkB,CAAC9O,CAAD,CAArB,GAAyB,EAAjC;;AAAoC,OAAI,IAAI4hB,CAAR,IAAa5hB,CAAb,EAAe;AAAC,QAAIhL,CAAC,GAACgL,CAAC,CAAC4hB,CAAD,CAAP;AAAW5sB,KAAC,GAAC44C,IAAI,CAAC56D,OAAL,CAAagiB,CAAb,IAAgBA,CAAhB,GAAkB,CAACA,CAAD,CAApB;;AAAwB,SAAI,IAAIujB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACvjB,CAAC,CAACtjB,MAAhB,EAAuB6mC,CAAC,EAAxB,EAA2B;AAAC,UAAIvL,CAAC,GAAChY,CAAC,CAACujB,CAAD,CAAP;AAAW,cAAMvL,CAAN,KAAUj7B,CAAC,KAAGA,CAAC,GAACD,CAAL,CAAD,EAASC,CAAC,IAAE,CAACA,CAAC,CAACL,MAAF,GAASI,CAAC,CAACJ,MAAX,GAAkB,GAAlB,GAAsB,EAAvB,IAA2Bo9B,kBAAkB,CAAC8S,CAAD,CAA7C,GAAiD,GAAjD,GAAqD9S,kBAAkB,CAACI,MAAM,CAAClC,CAAD,CAAP,CAA7F;AAA0G;AAAC;;AAAA,SAAOj7B,CAAP;AAAS,CAAxV;;AAAyV67D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,GAAqB,EAArB;;AAAwBlsB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBC,UAArB,GAAgC,UAASjoF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO,KAAGD,CAAC,CAACo9D,WAAF,CAAcn9D,CAAd,EAAgB,CAAhB,CAAV;AAA6B,CAA3E;;AAA4E67D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBE,QAArB,GAA8B,UAASloF,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAACluB,CAAC,CAACJ,MAAF,GAASK,CAAC,CAACL,MAAjB;AAAwB,SAAO,KAAGsuB,CAAH,IAAMluB,CAAC,CAAC4H,OAAF,CAAU3H,CAAV,EAAYiuB,CAAZ,KAAgBA,CAA7B;AAA+B,CAAnG;;AAAoG4tC,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBG,yBAArB,GAA+C,UAASnoF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO,KAAG67D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBI,sBAArB,CAA4CnoF,CAA5C,EAA8CD,CAAC,CAACkY,MAAF,CAAS,CAAT,EAAWjY,CAAC,CAACL,MAAb,CAA9C,CAAV;AAA8E,CAA3I;;AAA4Ik8D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBK,uBAArB,GAA6C,UAASroF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO,KAAG67D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBI,sBAArB,CAA4CnoF,CAA5C,EAA8CD,CAAC,CAACkY,MAAF,CAASlY,CAAC,CAACJ,MAAF,GAASK,CAAC,CAACL,MAApB,EAA2BK,CAAC,CAACL,MAA7B,CAA9C,CAAV;AAA8F,CAAzJ;;AAC7qBk8D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBM,qBAArB,GAA2C,UAAStoF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOD,CAAC,CAACi6B,WAAF,MAAiBh6B,CAAC,CAACg6B,WAAF,EAAxB;AAAwC,CAAjG;;AAAkG6hC,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBO,mBAArB,GAAyC,UAASvoF,CAAT,EAAW;AAAC,SAAM,cAAcof,IAAd,CAAmBpf,CAAnB,CAAN;AAA4B,CAAjF;;AAAkF87D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBvmD,IAArB,GAA0Bq6B,IAAI,CAACa,YAAL,IAAmBv/B,MAAM,CAACxnB,SAAP,CAAiB6rB,IAApC,GAAyC,UAASzhC,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACyhC,IAAF,EAAP;AAAgB,CAArE,GAAsE,UAASzhC,CAAT,EAAW;AAAC,SAAM,iCAAiC8rC,IAAjC,CAAsC9rC,CAAtC,EAAyC,CAAzC,CAAN;AAAkD,CAA9J;;AAA+J87D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBI,sBAArB,GAA4C,UAASpoF,CAAT,EAAWC,CAAX,EAAa;AAACD,GAAC,GAACo9B,MAAM,CAACp9B,CAAD,CAAN,CAAUi6B,WAAV,EAAF;AAA0Bh6B,GAAC,GAACm9B,MAAM,CAACn9B,CAAD,CAAN,CAAUg6B,WAAV,EAAF;AAA0B,SAAOj6B,CAAC,GAACC,CAAF,GAAI,CAAC,CAAL,GAAOD,CAAC,IAAEC,CAAH,GAAK,CAAL,GAAO,CAArB;AAAuB,CAArI;;AACnV67D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBQ,WAArB,GAAiC,UAASxoF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOD,CAAC,CAACkZ,OAAF,CAAU,eAAV,EAA0BjZ,CAAC,GAAC,QAAD,GAAU,MAArC,CAAP;AAAoD,CAAnG;;AACA67D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBS,UAArB,GAAgC,UAASzoF,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAGA,CAAH,EAAKD,CAAC,GAACA,CAAC,CAACkZ,OAAF,CAAU4iD,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBU,OAA/B,EAAuC,OAAvC,EAAgDxvE,OAAhD,CAAwD4iD,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBW,MAA7E,EAAoF,MAApF,EAA4FzvE,OAA5F,CAAoG4iD,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBY,MAAzH,EAAgI,MAAhI,EAAwI1vE,OAAxI,CAAgJ4iD,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBa,QAArK,EAA8K,QAA9K,EAAwL3vE,OAAxL,CAAgM4iD,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBc,gBAArN,EAAsO,OAAtO,EAA+O5vE,OAA/O,CAAuP4iD,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBe,QAA5Q,EAAqR,MAArR,CAAF,CAAL,KAAwS;AAAC,QAAG,CAACjtB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBgB,OAArB,CAA6B5pE,IAA7B,CAAkCpf,CAAlC,CAAJ,EAAyC,OAAOA,CAAP;AAAS,KAAC,CAAD,IAAIA,CAAC,CAAC4H,OAAF,CAAU,GAAV,CAAJ,KAAqB5H,CAAC,GAACA,CAAC,CAACkZ,OAAF,CAAU4iD,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBU,OAA/B,EAAuC,OAAvC,CAAvB;AAAwE,KAAC,CAAD,IAAI1oF,CAAC,CAAC4H,OAAF,CAAU,GAAV,CAAJ,KAAqB5H,CAAC,GAACA,CAAC,CAACkZ,OAAF,CAAU4iD,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBW,MAA/B,EACxe,MADwe,CAAvB;AACxc,KAAC,CAAD,IAAI3oF,CAAC,CAAC4H,OAAF,CAAU,GAAV,CAAJ,KAAqB5H,CAAC,GAACA,CAAC,CAACkZ,OAAF,CAAU4iD,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBY,MAA/B,EAAsC,MAAtC,CAAvB;AAAsE,KAAC,CAAD,IAAI5oF,CAAC,CAAC4H,OAAF,CAAU,GAAV,CAAJ,KAAqB5H,CAAC,GAACA,CAAC,CAACkZ,OAAF,CAAU4iD,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBa,QAA/B,EAAwC,QAAxC,CAAvB;AAA0E,KAAC,CAAD,IAAI7oF,CAAC,CAAC4H,OAAF,CAAU,GAAV,CAAJ,KAAqB5H,CAAC,GAACA,CAAC,CAACkZ,OAAF,CAAU4iD,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBc,gBAA/B,EAAgD,OAAhD,CAAvB;AAAiF,KAAC,CAAD,IAAI9oF,CAAC,CAAC4H,OAAF,CAAU,MAAV,CAAJ,KAAwB5H,CAAC,GAACA,CAAC,CAACkZ,OAAF,CAAU4iD,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBe,QAA/B,EAAwC,MAAxC,CAA1B;AAA2E;AAAA,SAAO/oF,CAAP;AAAS,CAD9T;;AAC+T87D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBU,OAArB,GAA6B,IAA7B;AAAkC5sB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBW,MAArB,GAA4B,IAA5B;AAAiC7sB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBY,MAArB,GAA4B,IAA5B;AAAiC9sB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBa,QAArB,GAA8B,IAA9B;AAAmC/sB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBc,gBAArB,GAAsC,IAAtC;AACtchtB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBe,QAArB,GAA8B,OAA9B;AAAsCjtB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBgB,OAArB,GAA6B,aAA7B;;AAA2CltB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBiB,gBAArB,GAAsC,UAASjpF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBQ,WAArB,CAAiCxoF,CAAC,CAACkZ,OAAF,CAAU,KAAV,EAAgB,SAAhB,CAAjC,EAA4DjZ,CAA5D,CAAP;AAAsE,CAA1H;;AAA2H67D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBrd,QAArB,GAA8B,UAAS3qE,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAM,CAAC,CAAD,IAAID,CAAC,CAAC4H,OAAF,CAAU3H,CAAV,CAAV;AAAuB,CAAnE;;AAAoE67D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBkB,uBAArB,GAA6C,UAASlpF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBrd,QAArB,CAA8B3qE,CAAC,CAACi6B,WAAF,EAA9B,EAA8Ch6B,CAAC,CAACg6B,WAAF,EAA9C,CAAP;AAAsE,CAAjI;;AAChR6hC,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBmB,eAArB,GAAqC,UAASnpF,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAAC,CAAN;AAAQluB,GAAC,GAAC87D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBvmD,IAArB,CAA0BrE,MAAM,CAACp9B,CAAD,CAAhC,EAAqCia,KAArC,CAA2C,GAA3C,CAAF;AAAkDha,GAAC,GAAC67D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBvmD,IAArB,CAA0BrE,MAAM,CAACn9B,CAAD,CAAhC,EAAqCga,KAArC,CAA2C,GAA3C,CAAF;;AAAkD,OAAI,IAAI61B,CAAC,GAACznC,IAAI,CAACge,GAAL,CAASrmB,CAAC,CAACJ,MAAX,EAAkBK,CAAC,CAACL,MAApB,CAAN,EAAkCsjB,CAAC,GAAC,CAAxC,EAA0C,KAAGgL,CAAH,IAAMhL,CAAC,GAAC4sB,CAAlD,EAAoD5sB,CAAC,EAArD,EAAwD;AAAC,QAAIujB,CAAC,GAACzmC,CAAC,CAACkjB,CAAD,CAAD,IAAM,EAAZ;AAAA,QAAegY,CAAC,GAACj7B,CAAC,CAACijB,CAAD,CAAD,IAAM,EAAvB;;AAA0B,OAAE;AAACujB,OAAC,GAAC,iBAAiBqF,IAAjB,CAAsBrF,CAAtB,KAA0B,CAAC,EAAD,EAAI,EAAJ,EAAO,EAAP,EAAU,EAAV,CAA5B;AAA0CvL,OAAC,GAAC,iBAAiB4Q,IAAjB,CAAsB5Q,CAAtB,KAA0B,CAAC,EAAD,EAAI,EAAJ,EAAO,EAAP,EAAU,EAAV,CAA5B;AAA0C,UAAG,KAAGuL,CAAC,CAAC,CAAD,CAAD,CAAK7mC,MAAR,IAAgB,KAAGs7B,CAAC,CAAC,CAAD,CAAD,CAAKt7B,MAA3B,EAAkC;AAAMsuB,OAAC,GAAC,KAAGuY,CAAC,CAAC,CAAD,CAAD,CAAK7mC,MAAR,GAAe,CAAf,GAAiBoa,QAAQ,CAACysB,CAAC,CAAC,CAAD,CAAF,EAAM,EAAN,CAA3B;AAAqC,UAAIkK,CAAC,GAAC,KAAGzV,CAAC,CAAC,CAAD,CAAD,CAAKt7B,MAAR,GAAe,CAAf,GAAiBoa,QAAQ,CAACkhB,CAAC,CAAC,CAAD,CAAF,EAAM,EAAN,CAA/B;AAAyChN,OAAC,GAAC4tC,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBoB,gBAArB,CAAsCl7D,CAAtC,EAAwCyiB,CAAxC,KAA4CmrB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBoB,gBAArB,CAAsC,KACnhB3iD,CAAC,CAAC,CAAD,CAAD,CAAK7mC,MADwe,EACje,KAAGs7B,CAAC,CAAC,CAAD,CAAD,CAAKt7B,MADyd,CAA5C,IACpak8D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBoB,gBAArB,CAAsC3iD,CAAC,CAAC,CAAD,CAAvC,EAA2CvL,CAAC,CAAC,CAAD,CAA5C,CADka;AACjXuL,OAAC,GAACA,CAAC,CAAC,CAAD,CAAH;AAAOvL,OAAC,GAACA,CAAC,CAAC,CAAD,CAAH;AAAO,KADsJ,QAChJ,KAAGhN,CAD6I;AAC1I;;AAAA,SAAOA,CAAP;AAAS,CADjH;;AACkH4tC,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBoB,gBAArB,GAAsC,UAASppF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOD,CAAC,GAACC,CAAF,GAAI,CAAC,CAAL,GAAOD,CAAC,GAACC,CAAF,GAAI,CAAJ,GAAM,CAApB;AAAsB,CAA1E;;AAA2E67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,GAAkB,YAAU;AAAC,OAAKC,4CAAL,GAAkD,EAAlD;AAAqD,OAAKC,gDAAL,GAAsDztB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBhI,uCAAxE;AAAgH,CAAlM;;AAAmMvlB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBG,gBAAlB,GAAmC,yBAAnC;AAA6D1tB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBzzE,SAAlB,CAA4BkrE,+BAA5B,GAA4D,CAAC,CAA7D;;AAA+DhlB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBzzE,SAAlB,CAA4BmrE,mBAA5B,GAAgD,YAAU;AAAC,SAAO,KAAKuI,4CAAL,CAAkD9yE,QAAlD,EAAP;AAAoE,CAA/H;;AAC5fslD,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBzzE,SAAlB,CAA4BwxE,uCAA5B,GAAoE,CAAC,CAArE;;AAAuEtrB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBzzE,SAAlB,CAA4ByxE,YAA5B,GAAyC,YAAU;AAAC,SAAOvrB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBC,GAA1B;AAA8B,CAAlF;;AAAmFpnB,IAAI,CAACW,KAAL,KAAaX,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBzzE,SAAlB,CAA4BY,QAA5B,GAAqC,YAAU;AAAC,SAAM,aAAW,KAAK8yE,4CAAhB,GAA6D,GAAnE;AAAuE,CAApI;;AAAsIxtB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBrI,MAAlB,GAAyB,UAAShhF,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB1B,gBAAlB,CAAmC3nF,CAAnC,EAAsCwW,QAAtC,EAAP;AAAwD,CAA7F;;AAChSslD,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB1B,gBAAlB,GAAmC,UAAS3nF,CAAT,EAAW;AAAC,MAAGA,CAAC,YAAY87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAvB,IAAgCrpF,CAAC,CAACvH,WAAF,KAAgBqjE,IAAI,CAACyH,IAAL,CAAU8lB,OAA1D,IAAmErpF,CAAC,CAACupF,gDAAF,KAAqDztB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBhI,uCAA7I,EAAqL,OAAOrhF,CAAC,CAACspF,4CAAT;AAAsDxtB,MAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,2CAAyC9tE,CAAzC,GAA2C,YAA3C,GAAwD87D,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAA1E;AAA0F,SAAM,oBAAN;AAA2B,CAA/Y;;AAAgZ87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB/H,YAAlB,GAA+B,UAASthF,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBI,6CAAlB,CAAgE3tB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAAhE,CAAP;AAAoG,CAA/I;;AAChZ87D,IAAI,CAACyH,IAAL,CAAUmmB,uBAAV,GAAkC,uNAAlC;;AAA0P5tB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBM,cAAlB,GAAiC,UAAS3pF,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACyH,IAAL,CAAUmmB,uBAAV,CAAkCtqE,IAAlC,CAAuCpf,CAAvC,CAAP;AAAiD,CAA9F;;AAA+F87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBO,QAAlB,GAA2B,UAAS5pF,CAAT,EAAW;AAACA,GAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAUmmB,uBAAV,CAAkCtqE,IAAlC,CAAuCpf,CAAC,CAAC+V,IAAzC,IAA+C+lD,IAAI,CAAClgD,EAAL,CAAQimE,GAAR,CAAYC,eAAZ,CAA4B9hF,CAA5B,CAA/C,GAA8E87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBG,gBAAlG;AAAmH,SAAO1tB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBI,6CAAlB,CAAgEzpF,CAAhE,CAAP;AAA0E,CAApO;;AACzV87D,IAAI,CAACyH,IAAL,CAAUsmB,iBAAV,GAA4B,uCAA5B;;AAAoE/tB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBS,WAAlB,GAA8B,UAAS9pF,CAAT,EAAW;AAACA,GAAC,GAACA,CAAC,CAACkZ,OAAF,CAAU,YAAV,EAAuB,EAAvB,CAAF;AAA6B,MAAIjZ,CAAC,GAACD,CAAC,CAAC+Y,KAAF,CAAQ+iD,IAAI,CAACyH,IAAL,CAAUsmB,iBAAlB,CAAN;AAA2C5pF,GAAC,GAACA,CAAC,IAAE67D,IAAI,CAACyH,IAAL,CAAUmmB,uBAAV,CAAkCtqE,IAAlC,CAAuCnf,CAAC,CAAC,CAAD,CAAxC,CAAL;AAAkD,SAAO67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBI,6CAAlB,CAAgExpF,CAAC,GAACD,CAAD,GAAG87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBG,gBAAtF,CAAP;AAA+G,CAAnR;;AAAoR1tB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBU,UAAlB,GAA6B,UAAS/pF,CAAT,EAAW;AAAC87D,MAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBG,yBAArB,CAA+CnoF,CAA/C,EAAiD,MAAjD,MAA2DA,CAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBG,gBAA/E;AAAiG,SAAO1tB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBI,6CAAlB,CAAgEzpF,CAAhE,CAAP;AAA0E,CAApN;;AACxV87D,IAAI,CAACyH,IAAL,CAAUymB,gBAAV,GAA2B,uEAA3B;;AAAmGluB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBY,UAAlB,GAA6B,UAASjqF,CAAT,EAAW;AAAC87D,MAAI,CAACyH,IAAL,CAAUymB,gBAAV,CAA2B5qE,IAA3B,CAAgC8d,kBAAkB,CAACl9B,CAAD,CAAlD,MAAyDA,CAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBG,gBAA7E;AAA+F,SAAO1tB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBI,6CAAlB,CAAgEzpF,CAAhE,CAAP;AAA0E,CAAlN;;AAAmN87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBa,wBAAlB,GAA2C,UAASlqF,CAAT,EAAW;AAAC87D,MAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBG,yBAArB,CAA+CnoF,CAA/C,EAAiD,sBAAjD,MAA2EA,CAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBG,gBAA/F;AAAiH,SAAO1tB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBI,6CAAlB,CAAgEzpF,CAAhE,CAAP;AAA0E,CAAlP;;AACtT87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBc,eAAlB,GAAkC,UAASnqF,CAAT,EAAW;AAAC87D,MAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBG,yBAArB,CAA+CnoF,CAA/C,EAAiD,iBAAjD,MAAsEA,CAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBG,gBAA1F;AAA4G,SAAO1tB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBI,6CAAlB,CAAgEzpF,CAAhE,CAAP;AAA0E,CAApO;;AAAqO87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBe,UAAlB,GAA6B,UAASpqF,CAAT,EAAW;AAAC87D,MAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBG,yBAArB,CAA+CnoF,CAA/C,EAAiD,MAAjD,KAA0D87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBgB,kBAAlB,CAAqCrqF,CAArC,CAA1D,KAAoGA,CAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBG,gBAAxH;AAA0I,SAAO1tB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBI,6CAAlB,CAAgEzpF,CAAhE,CAAP;AAA0E,CAA7P;;AACrO87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBgB,kBAAlB,GAAqC,UAASrqF,CAAT,EAAW;AAAC,MAAIC,CAAC,GAACD,CAAC,CAAC4H,OAAF,CAAU,GAAV,CAAN;AAAqB,MAAE3H,CAAF,KAAMD,CAAC,GAACA,CAAC,CAAC88C,SAAF,CAAY,CAAZ,EAAc78C,CAAd,CAAR;AAA0BA,GAAC,GAACD,CAAC,CAAC+Y,KAAF,CAAQ,aAAR,CAAF;AAAyB,MAAG,CAAC9Y,CAAJ,EAAM,OAAM,CAAC,CAAP;AAAS,MAAG,IAAEA,CAAC,CAACL,MAAP,EAAc,OAAM,CAAC,CAAP;AAASI,GAAC,GAACA,CAAC,CAAC+Y,KAAF,CAAQ,kBAAR,EAA4B,CAA5B,CAAF;AAAiC,MAAG,CAAC/Y,CAAJ,EAAM,OAAM,CAAC,CAAP;;AAAS,MAAG;AAACk9B,sBAAkB,CAACl9B,CAAD,CAAlB;AAAsB,GAA1B,CAA0B,OAAMkuB,CAAN,EAAQ;AAAC,WAAM,CAAC,CAAP;AAAS;;AAAA,SAAM,qCAAqC9O,IAArC,CAA0Cpf,CAA1C,CAAN;AAAmD,CAA9S;;AAA+S87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBiB,UAAlB,GAA6B,UAAStqF,CAAT,EAAW;AAAC87D,MAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBG,yBAArB,CAA+CnoF,CAA/C,EAAiD,QAAjD,MAA6DA,CAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBG,gBAAjF;AAAmG,SAAO1tB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBI,6CAAlB,CAAgEzpF,CAAhE,CAAP;AAA0E,CAAtN;;AAC/S87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBkB,0BAAlB,GAA6C,UAASvqF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBmB,qBAAlB,CAAwC,kCAAxC,EAA2ExqF,CAA3E,EAA6EC,CAA7E,CAAP;AAAuF,CAAlJ;;AAAmJ67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBoB,2BAAlB,GAA8C,UAASzqF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBmB,qBAAlB,CAAwC,+BAAxC,EAAwExqF,CAAxE,EAA0EC,CAA1E,CAAP;AAAoF,CAAhJ;;AAAiJ67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBqB,wBAAlB,GAA2C,UAAS1qF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBmB,qBAAlB,CAAwC,sCAAxC,EAA+ExqF,CAA/E,EAAiFC,CAAjF,CAAP;AAA2F,CAApJ;;AACpS67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBmB,qBAAlB,GAAwC,UAASxqF,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,GAACluB,CAAC,GAACA,CAAC,CAAC8rC,IAAF,CAAO7rC,CAAP,CAAH,KAAeD,CAAC,GAACA,CAAC,CAAC,CAAD,CAAH,EAAO,CAAC,CAAD,IAAI,CAACkuB,CAAC,YAAY4tC,IAAI,CAAC/yB,MAAL,CAAY03C,KAAzB,GAA+B,CAAC3kB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyB9yD,CAAzB,CAAD,CAA/B,GAA6DA,CAAC,CAACvxB,GAAF,CAAM,UAASqD,CAAT,EAAW;AAAC,WAAO87D,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAAP;AAAmC,GAArD,CAA9D,EAAsH4H,OAAtH,CAA8H5H,CAA9H,CAAJ,KAAuIC,CAAC,GAAC67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBG,gBAA3J,CAAtB,IAAoMvpF,CAAC,GAAC67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBG,gBAAxN;AAAyO,SAAO1tB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBI,6CAAlB,CAAgExpF,CAAhE,CAAP;AAA0E,CAA3W;;AAA4W67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBsB,sBAAlB,GAAyC,UAAS3qF,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBI,6CAAlB,CAAgE3tB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BhG,MAA7B,CAAoChhF,CAApC,CAAhE,CAAP;AAA+G,CAApK;;AAC5W87D,IAAI,CAACyH,IAAL,CAAUqnB,iBAAV,GAA4B,kDAA5B;AAA+E9uB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBwB,gBAAlB,GAAmC/uB,IAAI,CAACyH,IAAL,CAAUqnB,iBAA7C;;AAA+D9uB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBzsE,QAAlB,GAA2B,UAAS5c,CAAT,EAAW;AAAC,MAAGA,CAAC,YAAY87D,IAAI,CAACyH,IAAL,CAAU8lB,OAA1B,EAAkC,OAAOrpF,CAAP;AAASA,GAAC,GAAC,YAAU,OAAOA,CAAjB,IAAoBA,CAAC,CAAC8gF,+BAAtB,GAAsD9gF,CAAC,CAAC+gF,mBAAF,EAAtD,GAA8E3jD,MAAM,CAACp9B,CAAD,CAAtF;AAA0F87D,MAAI,CAACyH,IAAL,CAAUqnB,iBAAV,CAA4BxrE,IAA5B,CAAiCpf,CAAjC,MAAsCA,CAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBG,gBAA1D;AAA4E,SAAO1tB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBI,6CAAlB,CAAgEzpF,CAAhE,CAAP;AAA0E,CAAlU;;AAC9I87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkByB,uBAAlB,GAA0C,UAAS9qF,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAGD,CAAC,YAAY87D,IAAI,CAACyH,IAAL,CAAU8lB,OAA1B,EAAkC,OAAOrpF,CAAP;AAASA,GAAC,GAAC,YAAU,OAAOA,CAAjB,IAAoBA,CAAC,CAAC8gF,+BAAtB,GAAsD9gF,CAAC,CAAC+gF,mBAAF,EAAtD,GAA8E3jD,MAAM,CAACp9B,CAAD,CAAtF;AAA0F,MAAGC,CAAC,IAAE,UAAUmf,IAAV,CAAepf,CAAf,CAAH,KAAuBC,CAAC,GAAC67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBS,WAAlB,CAA8B9pF,CAA9B,CAAF,EAAmCC,CAAC,CAAC8gF,mBAAF,MAAyB/gF,CAAnF,CAAH,EAAyF,OAAOC,CAAP;AAAS67D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB9R,IAAI,CAACyH,IAAL,CAAUqnB,iBAAV,CAA4BxrE,IAA5B,CAAiCpf,CAAjC,CAApB,EAAwD,wCAAxD,EAAiGA,CAAjG,MAAsGA,CAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBG,gBAA1H;AAA4I,SAAO1tB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBI,6CAAlB,CAAgEzpF,CAAhE,CAAP;AAA0E,CAArf;;AACA87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBhI,uCAAlB,GAA0D,EAA1D;;AAA6DvlB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBI,6CAAlB,GAAgE,UAASzpF,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,IAAI67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAd,EAAN;AAA4BppF,GAAC,CAACqpF,4CAAF,GAA+CxtB,IAAI,CAACyH,IAAL,CAAU+c,YAAV,CAAuBC,oCAAvB,GAA4DzkB,IAAI,CAACyH,IAAL,CAAU+c,YAAV,CAAuBC,oCAAvB,CAA4DhW,SAA5D,CAAsEvqE,CAAtE,CAA5D,GAAqIA,CAApL;AAAsL,SAAOC,CAAP;AAAS,CAAvS;;AAAwS67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB0B,WAAlB,GAA8BjvB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBI,6CAAlB,CAAgE,aAAhE,CAA9B;;AAA6G3tB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,GAAoB,YAAU;AAAC,OAAKC,8CAAL,GAAoD,EAApD;AAAuD,OAAKC,kDAAL,GAAwDpvB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoB3J,uCAA5E;AAAoH,CAA1M;;AAA2MvlB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBp1E,SAApB,CAA8BkrE,+BAA9B,GAA8D,CAAC,CAA/D;AAAiEhlB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoB3J,uCAApB,GAA4D,EAA5D;;AAC9tBvlB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoB1J,YAApB,GAAiC,UAASthF,CAAT,EAAW;AAACA,GAAC,GAAC87D,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAAF;AAA8B,MAAG,MAAIA,CAAC,CAACJ,MAAT,EAAgB,OAAOk8D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoB/J,KAA3B;AAAiCnlB,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB9R,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBE,QAArB,CAA8BloF,CAA9B,EAAgC,GAAhC,CAApB,EAAyD,gDAA8CA,CAAvG;AAA0G87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB9R,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBrd,QAArB,CAA8B3qE,CAA9B,EAAgC,GAAhC,CAApB,EAAyD,oFAAkFA,CAA3I;AAA8I,SAAO87D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBG,+CAApB,CAAoEnrF,CAApE,CAAP;AAA8E,CAAlc;;AACA87D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBp1E,SAApB,CAA8BmrE,mBAA9B,GAAkD,YAAU;AAAC,SAAO,KAAKkK,8CAAZ;AAA2D,CAAxH;;AAAyHnvB,IAAI,CAACW,KAAL,KAAaX,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBp1E,SAApB,CAA8BY,QAA9B,GAAuC,YAAU;AAAC,SAAM,eAAa,KAAKy0E,8CAAlB,GAAiE,GAAvE;AAA2E,CAA1I;;AACzHnvB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBhK,MAApB,GAA2B,UAAShhF,CAAT,EAAW;AAAC,MAAGA,CAAC,YAAY87D,IAAI,CAACyH,IAAL,CAAUynB,SAAvB,IAAkChrF,CAAC,CAACvH,WAAF,KAAgBqjE,IAAI,CAACyH,IAAL,CAAUynB,SAA5D,IAAuEhrF,CAAC,CAACkrF,kDAAF,KAAuDpvB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoB3J,uCAArJ,EAA6L,OAAOrhF,CAAC,CAACirF,8CAAT;AAAwDnvB,MAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,6CAA2C9tE,CAA3C,GAA6C,YAA7C,GAA0D87D,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAA5E;AAA4F,SAAM,sBAAN;AAA6B,CAArZ;;AAAsZ87D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBG,+CAApB,GAAoE,UAASnrF,CAAT,EAAW;AAAC,SAAO,IAAI87D,IAAI,CAACyH,IAAL,CAAUynB,SAAd,EAAD,CAA0BpJ,qCAA1B,CAAgE5hF,CAAhE,CAAN;AAAyE,CAAzJ;;AACtZ87D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBp1E,SAApB,CAA8BgsE,qCAA9B,GAAoE,UAAS5hF,CAAT,EAAW;AAAC,OAAKirF,8CAAL,GAAoDjrF,CAApD;AAAsD,SAAO,IAAP;AAAY,CAAlJ;;AAAmJ87D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoB/J,KAApB,GAA0BnlB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBG,+CAApB,CAAoE,EAApE,CAA1B;AAAkGrvB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBxB,gBAApB,GAAqC,WAArC;;AACrP1tB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBlvE,MAApB,GAA2B,UAAS9b,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,EAAN;AAAA,MAASiuB,CAAT;;AAAW,OAAIA,CAAJ,IAASluB,CAAT,EAAW;AAAC,QAAG,CAAC,mBAAmBof,IAAnB,CAAwB8O,CAAxB,CAAJ,EAA+B,MAAM9vB,KAAK,CAAC,0CAAwC8vB,CAAzC,CAAX;AAAuD,QAAI4hB,CAAC,GAAC9vC,CAAC,CAACkuB,CAAD,CAAP;AAAW,YAAM4hB,CAAN,KAAUA,CAAC,GAACgsB,IAAI,CAAC56D,OAAL,CAAa4uC,CAAb,IAAgBgsB,IAAI,CAAC/zD,KAAL,CAAWpL,GAAX,CAAemzC,CAAf,EAAiBgsB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBI,sBAArC,EAA6DzwE,IAA7D,CAAkE,GAAlE,CAAhB,GAAuFmhD,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBI,sBAApB,CAA2Ct7C,CAA3C,CAAzF,EAAuI7vC,CAAC,IAAEiuB,CAAC,GAAC,GAAF,GAAM4hB,CAAN,GAAQ,GAA5J;AAAiK;;AAAA,SAAO7vC,CAAC,GAAC67D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBG,+CAApB,CAAoElrF,CAApE,CAAD,GAAwE67D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoB/J,KAApG;AAA0G,CAA1a;;AACAnlB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBI,sBAApB,GAA2C,UAASprF,CAAT,EAAW;AAAC,MAAGA,CAAC,YAAY87D,IAAI,CAACyH,IAAL,CAAU8lB,OAA1B,EAAkC,OAAM,UAAQvtB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBrI,MAAlB,CAAyBhhF,CAAzB,EAA4BkZ,OAA5B,CAAoC,IAApC,EAAyC,KAAzC,EAAgDA,OAAhD,CAAwD,QAAxD,EAAiE,MAAjE,CAAR,GAAiF,IAAvF;AAA4FlZ,GAAC,GAACA,CAAC,YAAY87D,IAAI,CAAC/yB,MAAL,CAAY03C,KAAzB,GAA+B3kB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAA/B,GAA2D87D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBK,4BAApB,CAAiDjuD,MAAM,CAACp9B,CAAD,CAAvD,CAA7D;AAAyH,MAAG,QAAQof,IAAR,CAAapf,CAAb,CAAH,EAAmB,MAAM,IAAI87D,IAAI,CAACqR,OAAL,CAAaE,cAAjB,CAAgC,sCAAhC,EAAuE,CAACrtE,CAAD,CAAvE,CAAN;AAAkF,SAAOA,CAAP;AAAS,CAA5Z;;AACA87D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBK,4BAApB,GAAiD,UAASrrF,CAAT,EAAW;AAAC,MAAIC,CAAC,GAACD,CAAC,CAACkZ,OAAF,CAAU4iD,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBM,aAA9B,EAA4C,IAA5C,EAAkDpyE,OAAlD,CAA0D4iD,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBM,aAA9E,EAA4F,IAA5F,EAAkGpyE,OAAlG,CAA0G4iD,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBO,OAA9H,EAAsI,KAAtI,CAAN;;AAAmJ,MAAGzvB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBQ,SAApB,CAA8BpsE,IAA9B,CAAmCnf,CAAnC,CAAH,EAAyC;AAAC,QAAG67D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBS,WAApB,CAAgCrsE,IAAhC,CAAqCpf,CAArC,CAAH,EAA2C,OAAO87D,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,2CAAyC9tE,CAA3D,GAA8D87D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBxB,gBAAzF;AAA0G,QAAG,CAAC1tB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBU,kBAApB,CAAuC1rF,CAAvC,CAAJ,EAA8C,OAAO87D,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,iDACtd9tE,CADoc,GACjc87D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBxB,gBADsa;AACrZ,QAAG,CAAC1tB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBW,0BAApB,CAA+C3rF,CAA/C,CAAJ,EAAsD,OAAO87D,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,kGAAgG9tE,CAAlH,GAAqH87D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBxB,gBAAhJ;AAAiK,GAD/C,MACoD,OAAO1tB,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,8BAA4BhS,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBY,oBAAhD,GAAqE,8BAArE,GAAoG5rF,CAAtH,GAAyH87D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBxB,gBAApJ;;AAAqK,SAAO1tB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBa,YAApB,CAAiC7rF,CAAjC,CAAP;AAA2C,CADpd;;AAEA87D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBU,kBAApB,GAAuC,UAAS1rF,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC,CAAC,CAAP,EAASiuB,CAAC,GAAC,CAAC,CAAZ,EAAc4hB,CAAC,GAAC,CAApB,EAAsBA,CAAC,GAAC9vC,CAAC,CAACJ,MAA1B,EAAiCkwC,CAAC,EAAlC,EAAqC;AAAC,QAAI5sB,CAAC,GAACljB,CAAC,CAACq+B,MAAF,CAASyR,CAAT,CAAN;AAAkB,WAAK5sB,CAAL,IAAQgL,CAAR,GAAUjuB,CAAC,GAAC,CAACA,CAAb,GAAe,OAAKijB,CAAL,IAAQjjB,CAAR,KAAYiuB,CAAC,GAAC,CAACA,CAAf,CAAf;AAAiC;;AAAA,SAAOjuB,CAAC,IAAEiuB,CAAV;AAAY,CAAxJ;;AAAyJ4tC,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBW,0BAApB,GAA+C,UAAS3rF,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC,CAAC,CAAP,EAASiuB,CAAC,GAAC,iBAAX,EAA6B4hB,CAAC,GAAC,CAAnC,EAAqCA,CAAC,GAAC9vC,CAAC,CAACJ,MAAzC,EAAgDkwC,CAAC,EAAjD,EAAoD;AAAC,QAAI5sB,CAAC,GAACljB,CAAC,CAACq+B,MAAF,CAASyR,CAAT,CAAN;;AAAkB,QAAG,OAAK5sB,CAAR,EAAU;AAAC,UAAGjjB,CAAH,EAAK,OAAM,CAAC,CAAP;AAASA,OAAC,GAAC,CAAC,CAAH;AAAK,KAA9B,MAAmC,IAAG,OAAKijB,CAAR,EAAU;AAAC,UAAG,CAACjjB,CAAJ,EAAM,OAAM,CAAC,CAAP;AAASA,OAAC,GAAC,CAAC,CAAH;AAAK,KAA/B,MAAoC,IAAG,CAACA,CAAD,IAAI,CAACiuB,CAAC,CAAC9O,IAAF,CAAO8D,CAAP,CAAR,EAAkB,OAAM,CAAC,CAAP;AAAS;;AAAA,SAAOjjB,CAAP;AAAS,CAA7O;;AAA8O67D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBY,oBAApB,GAAyC,8BAAzC;AACvY9vB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBQ,SAApB,GAA8B,IAAIlyE,MAAJ,CAAW,MAAIwiD,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBY,oBAAxB,GAA6C,IAAxD,CAA9B;AAA4F9vB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBO,OAApB,GAA4B,kFAA5B;AAA+GzvB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBM,aAApB,GAAkC,2HAAlC;AAA8JxvB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBS,WAApB,GAAgC,MAAhC;;AACzW3vB,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBa,YAApB,GAAiC,UAAS7rF,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACkZ,OAAF,CAAU4iD,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBO,OAA9B,EAAsC,UAASvrF,CAAT,EAAWkuB,CAAX,EAAa4hB,CAAb,EAAe5sB,CAAf,EAAiB;AAAC,QAAIjjB,CAAC,GAAC,EAAN;AAAS6vC,KAAC,GAACA,CAAC,CAAC52B,OAAF,CAAU,gBAAV,EAA2B,UAASlZ,CAAT,EAAWkuB,CAAX,EAAa4hB,CAAb,EAAe;AAAC7vC,OAAC,GAACiuB,CAAF;AAAI,aAAO4hB,CAAP;AAAS,KAAxD,CAAF;AAA4D9vC,KAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBzsE,QAAlB,CAA2BkzB,CAA3B,EAA8BixC,mBAA9B,EAAF;AAAsD,WAAO7yD,CAAC,GAACjuB,CAAF,GAAID,CAAJ,GAAMC,CAAN,GAAQijB,CAAf;AAAiB,GAApM,CAAP;AAA6M,CAA1P;;AAA2P44C,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBp0D,MAApB,GAA2B,UAAS52B,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,EAAN;AAAA,MAASiuB,CAAC,GAAC,UAASluB,CAAT,EAAW;AAAC87D,QAAI,CAAC56D,OAAL,CAAalB,CAAb,IAAgB87D,IAAI,CAAC/zD,KAAL,CAAW+D,OAAX,CAAmB9L,CAAnB,EAAqBkuB,CAArB,CAAhB,GAAwCjuB,CAAC,IAAE67D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBhK,MAApB,CAA2BhhF,CAA3B,CAA3C;AAAyE,GAAhG;;AAAiG87D,MAAI,CAAC/zD,KAAL,CAAW+D,OAAX,CAAmBhD,SAAnB,EAA6BolB,CAA7B;AAAgC,SAAOjuB,CAAC,GAAC67D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBG,+CAApB,CAAoElrF,CAApE,CAAD,GAAwE67D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoB/J,KAApG;AAA0G,CAAlR;;AAAmRnlB,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,GAAyB,YAAU;AAAC,OAAKC,mDAAL,GAAyD,EAAzD;AAA4D,OAAKC,wDAAL,GAA8DlwB,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBzK,uCAAvF;AAA+H,CAA/N;;AAAgOvlB,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBl2E,SAAzB,CAAmCkrE,+BAAnC,GAAmE,CAAC,CAApE;AAAsEhlB,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBzK,uCAAzB,GAAiE,EAAjE;;AACpzBvlB,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBG,UAAzB,GAAoC,UAASjsF,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG67D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBrd,QAArB,CAA8B3qE,CAA9B,EAAgC,GAAhC,CAAH,EAAwC,MAAM5B,KAAK,CAAC,uCAAqC4B,CAAtC,CAAX;AAAoD,MAAIkuB,CAAC,GAACluB,CAAC,CAACkZ,OAAF,CAAU,uCAAV,EAAkD,EAAlD,CAAN;AAA4D,MAAG,CAAC,qCAAqCkG,IAArC,CAA0C8O,CAA1C,CAAJ,EAAiD,MAAM9vB,KAAK,CAAC,6EAA2E4B,CAA5E,CAAX;AAA0F,MAAG,CAAC87D,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBI,oBAAzB,CAA8Ch+D,CAA9C,CAAJ,EAAqD,MAAM9vB,KAAK,CAAC,kDAAgD4B,CAAjD,CAAX;AAA+DC,GAAC,YAAY67D,IAAI,CAACyH,IAAL,CAAUynB,SAAvB,KAAmC/qF,CAAC,GAAC67D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBlvE,MAApB,CAA2B7b,CAA3B,CAArC;AACzcD,GAAC,GAACA,CAAC,GAAC,GAAF,GAAM87D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBhK,MAApB,CAA2B/gF,CAA3B,EAA8BiZ,OAA9B,CAAsC,IAAtC,EAA2C,OAA3C,CAAN,GAA0D,GAA5D;AAAgE,SAAO4iD,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBK,oDAAzB,CAA8EnsF,CAA9E,CAAP;AAAwF,CADxJ;;AACyJ87D,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBI,oBAAzB,GAA8C,UAASlsF,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC;AAAC,SAAI,GAAL;AAAS,SAAI;AAAb,GAAN,EAAwBiuB,CAAC,GAAC,EAA1B,EAA6B4hB,CAAC,GAAC,CAAnC,EAAqCA,CAAC,GAAC9vC,CAAC,CAACJ,MAAzC,EAAgDkwC,CAAC,EAAjD,EAAoD;AAAC,QAAI5sB,CAAC,GAACljB,CAAC,CAAC8vC,CAAD,CAAP;AAAW,QAAG7vC,CAAC,CAACijB,CAAD,CAAJ,EAAQgL,CAAC,CAACzvB,IAAF,CAAOwB,CAAC,CAACijB,CAAD,CAAR,EAAR,KAA0B,IAAG44C,IAAI,CAACp3D,MAAL,CAAYimE,QAAZ,CAAqB1qE,CAArB,EAAuBijB,CAAvB,KAA2BgL,CAAC,CAAC1tB,GAAF,MAAS0iB,CAAvC,EAAyC,OAAM,CAAC,CAAP;AAAS;;AAAA,SAAO,KAAGgL,CAAC,CAACtuB,MAAZ;AAAmB,CAAzN;;AACzJk8D,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBl1D,MAAzB,GAAgC,UAAS52B,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,EAAN;AAAA,MAASiuB,CAAC,GAAC,UAASluB,CAAT,EAAW;AAAC87D,QAAI,CAAC56D,OAAL,CAAalB,CAAb,IAAgB87D,IAAI,CAAC/zD,KAAL,CAAW+D,OAAX,CAAmB9L,CAAnB,EAAqBkuB,CAArB,CAAhB,GAAwCjuB,CAAC,IAAE67D,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyB9K,MAAzB,CAAgChhF,CAAhC,CAA3C;AAA8E,GAArG;;AAAsG87D,MAAI,CAAC/zD,KAAL,CAAW+D,OAAX,CAAmBhD,SAAnB,EAA6BolB,CAA7B;AAAgC,SAAO4tC,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBK,oDAAzB,CAA8ElsF,CAA9E,CAAP;AAAwF,CAA1Q;;AACA67D,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBxK,YAAzB,GAAsC,UAASthF,CAAT,EAAW;AAACA,GAAC,GAAC87D,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAAF;AAA8B,MAAG,MAAIA,CAAC,CAACJ,MAAT,EAAgB,OAAOk8D,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyB7K,KAAhC;AAAsCnlB,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,CAAC9R,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBrd,QAArB,CAA8B3qE,CAA9B,EAAgC,GAAhC,CAArB,EAA0D,oDAAkDA,CAA5G;AAA+G,SAAO87D,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBK,oDAAzB,CAA8EnsF,CAA9E,CAAP;AAAwF,CAA7U;;AAA8U87D,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBl2E,SAAzB,CAAmCmrE,mBAAnC,GAAuD,YAAU;AAAC,SAAO,KAAKgL,mDAAZ;AAAgE,CAAlI;;AAC9UjwB,IAAI,CAACW,KAAL,KAAaX,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBl2E,SAAzB,CAAmCY,QAAnC,GAA4C,YAAU;AAAC,SAAM,oBAAkB,KAAKu1E,mDAAvB,GAA2E,GAAjF;AAAqF,CAAzJ;;AACAjwB,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyB9K,MAAzB,GAAgC,UAAShhF,CAAT,EAAW;AAAC,MAAGA,CAAC,YAAY87D,IAAI,CAACyH,IAAL,CAAUuoB,cAAvB,IAAuC9rF,CAAC,CAACvH,WAAF,KAAgBqjE,IAAI,CAACyH,IAAL,CAAUuoB,cAAjE,IAAiF9rF,CAAC,CAACgsF,wDAAF,KAA6DlwB,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBzK,uCAA1K,EAAkN,OAAOrhF,CAAC,CAAC+rF,mDAAT;AAA6DjwB,MAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,kDAAgD9tE,CAAhD,GAAkD,YAAlD,GAA+D87D,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAAjF;AAAiG,SAAM,2BAAN;AAAkC,CAA9b;;AACA87D,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBK,oDAAzB,GAA8E,UAASnsF,CAAT,EAAW;AAAC,SAAO,IAAI87D,IAAI,CAACyH,IAAL,CAAUuoB,cAAd,EAAD,CAA+BlK,qCAA/B,CAAqE5hF,CAArE,CAAN;AAA8E,CAAxK;;AAAyK87D,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBl2E,SAAzB,CAAmCgsE,qCAAnC,GAAyE,UAAS5hF,CAAT,EAAW;AAAC,OAAK+rF,mDAAL,GAAyD/rF,CAAzD;AAA2D,SAAO,IAAP;AAAY,CAA5J;;AAA6J87D,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyB7K,KAAzB,GAA+BnlB,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBK,oDAAzB,CAA8E,EAA9E,CAA/B;AAAiHrwB,IAAI,CAACswB,IAAL,GAAU,EAAV;AAAatwB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,GAAoB,EAApB;AAAuBxJ,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,GAAyB,EAAzB;;AAA4BvwB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBC,yBAAzB,GAAmD,YAAU;AAAC,MAAItsF,CAAC,GAAC87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBE,aAAzB,EAAN;AAA+C,SAAOvsF,CAAC,KAAGA,CAAC,GAACA,CAAC,CAACslE,SAAP,CAAD,GAAmBtlE,CAAnB,GAAqB,EAA5B;AAA+B,CAA5I;;AAA6I87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBE,aAAzB,GAAuC,YAAU;AAAC,SAAOzwB,IAAI,CAAC1gC,MAAL,CAAYiqC,SAAnB;AAA6B,CAA/E;;AAAgFvJ,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBG,UAAzB,GAAoC1wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBC,yBAAzB,EAApC;;AAAyFxwB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBI,YAAzB,GAAsC,UAASzsF,CAAT,EAAW;AAAC87D,MAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBG,UAAzB,GAAoCxsF,CAAC,IAAE87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBC,yBAAzB,EAAvC;AAA4F,CAA9I;;AAC7yBxwB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBK,YAAzB,GAAsC,YAAU;AAAC,SAAO5wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBG,UAAhC;AAA2C,CAA5F;;AAA6F1wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,GAAwC,UAAS3sF,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC67D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBK,YAAzB,EAAN;AAA8C,SAAO5wB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBrd,QAArB,CAA8B1qE,CAA9B,EAAgCD,CAAhC,CAAP;AAA0C,CAA5I;;AAA6I87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBO,wBAAzB,GAAkD,UAAS5sF,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC67D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBK,YAAzB,EAAN;AAA8C,SAAO5wB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBkB,uBAArB,CAA6CjpF,CAA7C,EAA+CD,CAA/C,CAAP;AAAyD,CAArK;;AAC1O87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBQ,oBAAzB,GAA8C,UAAS7sF,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC,wCAAN,EAA+CiuB,CAAC,GAAC,EAAjD,EAAoD4hB,CAAxD,EAA0DA,CAAC,GAAC7vC,CAAC,CAAC6rC,IAAF,CAAO9rC,CAAP,CAA5D,GAAuEkuB,CAAC,CAACzvB,IAAF,CAAO,CAACqxC,CAAC,CAAC,CAAD,CAAF,EAAMA,CAAC,CAAC,CAAD,CAAP,EAAWA,CAAC,CAAC,CAAD,CAAD,IAAM,KAAK,CAAtB,CAAP;;AAAiC,SAAO5hB,CAAP;AAAS,CAA3K;;AAA4K4tC,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,GAA4B,EAA5B;;AAA+BhxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BC,WAA5B,GAAwC,YAAU;AAAC,SAAOjxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,OAAxC,CAAP;AAAwD,CAA3G;;AAA4G7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BE,QAA5B,GAAqC,YAAU;AAAC,SAAOlxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,SAAxC,KAAoD7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,MAAxC,CAA3D;AAA2G,CAA3J;;AAA4J7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BG,cAA5B,GAA2C,YAAU;AAAC,SAAOnxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,MAAxC,CAAP;AAAuD,CAA7G;;AAA8G7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BI,kBAA5B,GAA+C,YAAU;AAAC,SAAOpxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,MAAxC,CAAP;AAAuD,CAAjH;;AACjkB7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BK,mBAA5B,GAAgD,YAAU;AAAC,SAAOrxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,KAAxC,CAAP;AAAsD,CAAjH;;AAAkH7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BM,aAA5B,GAA0C,YAAU;AAAC,SAAOtxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,SAAxC,KAAoD7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,OAAxC,CAA3D;AAA4G,CAAjK;;AAClH7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BO,YAA5B,GAAyC,YAAU;AAAC,SAAOvxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,QAAxC,KAAmD,EAAE7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BQ,YAA5B,MAA4CxxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BS,WAA5B,EAA5C,IAAuFzxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BC,WAA5B,EAAvF,IAAkIjxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BG,cAA5B,EAAlI,IAAgLnxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BI,kBAA5B,EAAhL,IAAkOpxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BK,mBAA5B,EAAlO,IAAqRrxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BM,aAA5B,EAArR,IAAkUtxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BU,MAA5B,EAAlU,IAAwW1xB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,SAAxC,CAA1W,CAA1D;AAAwd,CAA5gB;;AACA7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BS,WAA5B,GAAwC,YAAU;AAAC,SAAOzxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,OAAxC,CAAP;AAAwD,CAA3G;;AAA4G7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BW,gBAA5B,GAA6C,YAAU;AAAC,SAAM,CAAC3xB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,MAAxC,KAAiD7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,QAAxC,CAAlD,KAAsG,CAAC7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BO,YAA5B,EAAvG,IAAmJ,CAACvxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BQ,YAA5B,EAApJ,IAAgM,CAACxxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BS,WAA5B,EAAjM,IAA4O,CAACzxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BM,aAA5B,EAA7O,IAA0RtxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,aAAxC,CAAhS;AAAuV,CAA/Y;;AAC5G7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BQ,YAA5B,GAAyC,YAAU;AAAC,SAAM,CAACxxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,QAAxC,KAAmD7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,OAAxC,CAApD,KAAuG,CAAC7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BG,cAA5B,EAA9G;AAA2J,CAA/M;;AAAgNnxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BY,oBAA5B,GAAiD,YAAU;AAAC,SAAO5xB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,SAAxC,KAAoD,EAAE7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4Ba,QAA5B,MAAwC7xB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4Bc,SAA5B,EAAxC,IAAiF9xB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4Be,OAA5B,EAAjF,IAAwH/xB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BU,MAA5B,EAA1H,CAA3D;AAA2N,CAAvR;;AAChN1xB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4Be,OAA5B,GAAoC/xB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BC,WAAhE;AAA4EjxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BgB,IAA5B,GAAiChyB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BE,QAA7D;AAAsElxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BiB,MAA5B,GAAmCjyB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BG,cAA/D;AAA8EnxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BkB,cAA5B,GAA2ClyB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BI,kBAAvE;AAA0FpxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BmB,eAA5B,GAA4CnyB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BK,mBAAxE;AAA4FrxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4Bc,SAA5B,GAAsC9xB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BM,aAAlE;AACtZtxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BoB,QAA5B,GAAqCpyB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BO,YAAjE;AAA8EvxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BqB,OAA5B,GAAoCryB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BS,WAAhE;AAA4EzxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BsB,YAA5B,GAAyCtyB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BW,gBAArE;AAAsF3xB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4Ba,QAA5B,GAAqC7xB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BQ,YAAjE;AAA8ExxB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BuB,gBAA5B,GAA6CvyB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BY,oBAAzE;;AAA8F5xB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BU,MAA5B,GAAmC,YAAU;AAAC,SAAO1xB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,MAAxC,CAAP;AAAuD,CAArG;;AAC5Z7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BwB,UAA5B,GAAuC,YAAU;AAAC,WAAStuF,CAAT,CAAWA,CAAX,EAAa;AAACA,KAAC,GAAC87D,IAAI,CAAC/zD,KAAL,CAAWuN,IAAX,CAAgBtV,CAAhB,EAAkB8vC,CAAlB,CAAF;AAAuB,WAAO5hB,CAAC,CAACluB,CAAD,CAAD,IAAM,EAAb;AAAgB;;AAAA,MAAIC,CAAC,GAAC67D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBK,YAAzB,EAAN;AAA8C,MAAG5wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BgB,IAA5B,EAAH,EAAsC,OAAOhyB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4ByB,aAA5B,CAA0CtuF,CAA1C,CAAP;AAAoDA,GAAC,GAAC67D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBQ,oBAAzB,CAA8C5sF,CAA9C,CAAF;AAAmD,MAAIiuB,CAAC,GAAC,EAAN;AAAS4tC,MAAI,CAAC/zD,KAAL,CAAW+D,OAAX,CAAmB7L,CAAnB,EAAqB,UAASD,CAAT,EAAW;AAACkuB,KAAC,CAACluB,CAAC,CAAC,CAAD,CAAF,CAAD,GAAQA,CAAC,CAAC,CAAD,CAAT;AAAa,GAA9C;AAAgD,MAAI8vC,CAAC,GAACgsB,IAAI,CAACuG,OAAL,CAAavG,IAAI,CAACp3D,MAAL,CAAYsmE,WAAzB,EAAqC98C,CAArC,CAAN;AAA8C,SAAO4tC,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4Be,OAA5B,KAAsC7tF,CAAC,CAAC,CAAC,SAAD,EAAW,OAAX,CAAD,CAAvC,GAA6D87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BiB,MAA5B,KAAqC/tF,CAAC,CAAC,CAAC,MAAD,CAAD,CAAtC,GAC7c87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BkB,cAA5B,KAA6ChuF,CAAC,CAAC,CAAC,KAAD,CAAD,CAA9C,GAAwD87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4Ba,QAA5B,KAAuC3tF,CAAC,CAAC,CAAC,QAAD,EAAU,OAAV,CAAD,CAAxC,GAA6D,CAACC,CAAC,GAACA,CAAC,CAAC,CAAD,CAAJ,KAAUA,CAAC,CAAC,CAAD,CAAX,IAAgB,EADoQ;AACjQ,CADxI;;AACyI67D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4B0B,iBAA5B,GAA8C,UAASxuF,CAAT,EAAW;AAAC,SAAO,KAAG87D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBmB,eAArB,CAAqCrtB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BwB,UAA5B,EAArC,EAA8EtuF,CAA9E,CAAV;AAA2F,CAArJ;;AACzI87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4ByB,aAA5B,GAA0C,UAASvuF,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,iBAAiB6rC,IAAjB,CAAsB9rC,CAAtB,CAAN;AAA+B,MAAGC,CAAC,IAAEA,CAAC,CAAC,CAAD,CAAP,EAAW,OAAOA,CAAC,CAAC,CAAD,CAAR;AAAYA,GAAC,GAAC,EAAF;AAAK,MAAIiuB,CAAC,GAAC,kBAAkB4d,IAAlB,CAAuB9rC,CAAvB,CAAN;AAAgC,MAAGkuB,CAAC,IAAEA,CAAC,CAAC,CAAD,CAAP,EAAW,IAAGluB,CAAC,GAAC,mBAAmB8rC,IAAnB,CAAwB9rC,CAAxB,CAAF,EAA6B,SAAOkuB,CAAC,CAAC,CAAD,CAAxC;AAA4C,QAAGluB,CAAC,IAAEA,CAAC,CAAC,CAAD,CAAP,EAAW,QAAOA,CAAC,CAAC,CAAD,CAAR;AAAa,WAAK,KAAL;AAAWC,SAAC,GAAC,KAAF;AAAQ;;AAAM,WAAK,KAAL;AAAWA,SAAC,GAAC,KAAF;AAAQ;;AAAM,WAAK,KAAL;AAAWA,SAAC,GAAC,MAAF;AAAS;;AAAM,WAAK,KAAL;AAAWA,SAAC,GAAC,MAAF;AAApG,KAAX,MAA6HA,CAAC,GAAC,KAAF;AAAzK,SAAsLA,CAAC,GAACiuB,CAAC,CAAC,CAAD,CAAH;AAAO,SAAOjuB,CAAP;AAAS,CAAlW;;AAAmW67D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,GAAmB,YAAU;AAAC,OAAKC,6CAAL,GAAmD,EAAnD;AAAsD,OAAKC,iDAAL,GAAuD7yB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBpN,uCAA1E;AAAkH,OAAKuN,IAAL,GAAU,IAAV;AAAe,CAArN;;AAAsN9yB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB74E,SAAnB,CAA6BwxE,uCAA7B,GAAqE,CAAC,CAAtE;;AAAwEtrB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB74E,SAAnB,CAA6ByxE,YAA7B,GAA0C,YAAU;AAAC,SAAO,KAAKuH,IAAZ;AAAiB,CAAtE;;AAAuE9yB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB74E,SAAnB,CAA6BkrE,+BAA7B,GAA6D,CAAC,CAA9D;;AAAgEhlB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB74E,SAAnB,CAA6BmrE,mBAA7B,GAAiD,YAAU;AAAC,SAAO,KAAK2N,6CAAL,CAAmDl4E,QAAnD,EAAP;AAAqE,CAAjI;;AACxwBslD,IAAI,CAACW,KAAL,KAAaX,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB74E,SAAnB,CAA6BY,QAA7B,GAAsC,YAAU;AAAC,SAAM,cAAY,KAAKk4E,6CAAjB,GAA+D,GAArE;AAAyE,CAAvI;;AAAyI5yB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBzN,MAAnB,GAA0B,UAAShhF,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBI,iBAAnB,CAAqC7uF,CAArC,EAAwCwW,QAAxC,EAAP;AAA0D,CAAhG;;AACzIslD,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBI,iBAAnB,GAAqC,UAAS7uF,CAAT,EAAW;AAAC,MAAGA,CAAC,YAAY87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAvB,IAAiCzuF,CAAC,CAACvH,WAAF,KAAgBqjE,IAAI,CAACyH,IAAL,CAAUkrB,QAA3D,IAAqEzuF,CAAC,CAAC2uF,iDAAF,KAAsD7yB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBpN,uCAAjJ,EAAyL,OAAOrhF,CAAC,CAAC0uF,6CAAT;AAAuD5yB,MAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,4CAA0C9tE,CAA1C,GAA4C,YAA5C,GAAyD87D,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAA3E;AAA2F,SAAM,qBAAN;AAA4B,CAAxZ;;AACA87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBhG,UAAnB,GAA8B,UAASzoF,CAAT,EAAW;AAAC,MAAGA,CAAC,YAAY87D,IAAI,CAACyH,IAAL,CAAUkrB,QAA1B,EAAmC,OAAOzuF,CAAP;AAAS,MAAIC,CAAC,GAAC,YAAU,OAAOD,CAAvB;AAAA,MAAyBkuB,CAAC,GAAC,IAA3B;AAAgCjuB,GAAC,IAAED,CAAC,CAAConF,uCAAL,KAA+Cl5D,CAAC,GAACluB,CAAC,CAACqnF,YAAF,EAAjD;AAAmErnF,GAAC,GAACC,CAAC,IAAED,CAAC,CAAC8gF,+BAAL,GAAqC9gF,CAAC,CAAC+gF,mBAAF,EAArC,GAA6D3jD,MAAM,CAACp9B,CAAD,CAArE;AAAyE,SAAO87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBK,8CAAnB,CAAkEhzB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBS,UAArB,CAAgCzoF,CAAhC,CAAlE,EAAqGkuB,CAArG,CAAP;AAA+G,CAAjX;;AACA4tC,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBM,4BAAnB,GAAgD,UAAS/uF,CAAT,EAAW;AAAC,MAAGA,CAAC,YAAY87D,IAAI,CAACyH,IAAL,CAAUkrB,QAA1B,EAAmC,OAAOzuF,CAAP;AAASA,GAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBhG,UAAnB,CAA8BzoF,CAA9B,CAAF;AAAmC,SAAO87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBK,8CAAnB,CAAkEhzB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBQ,WAArB,CAAiC1sB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBzN,MAAnB,CAA0BhhF,CAA1B,CAAjC,CAAlE,EAAiIA,CAAC,CAACqnF,YAAF,EAAjI,CAAP;AAA0J,CAArS;;AACAvrB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBO,qCAAnB,GAAyD,UAAShvF,CAAT,EAAW;AAAC,MAAGA,CAAC,YAAY87D,IAAI,CAACyH,IAAL,CAAUkrB,QAA1B,EAAmC,OAAOzuF,CAAP;AAASA,GAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBhG,UAAnB,CAA8BzoF,CAA9B,CAAF;AAAmC,SAAO87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBK,8CAAnB,CAAkEhzB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBiB,gBAArB,CAAsCntB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBzN,MAAnB,CAA0BhhF,CAA1B,CAAtC,CAAlE,EAAsIA,CAAC,CAACqnF,YAAF,EAAtI,CAAP;AAA+J,CAAnT;;AAAoTvrB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB9wF,IAAnB,GAAwBm+D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBhG,UAA3C;AAAsD3sB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBQ,mBAAnB,GAAuC,iBAAvC;AAC1WnzB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBS,eAAnB,GAAmC;AAACC,QAAM,EAAC,CAAC,CAAT;AAAWC,MAAI,EAAC,CAAC,CAAjB;AAAmBnuF,MAAI,EAAC,CAAC,CAAzB;AAA2BouF,YAAU,EAAC,CAAC,CAAvC;AAAyCC,MAAI,EAAC,CAAC,CAA/C;AAAiDC,UAAQ,EAAC,CAAC,CAA3D;AAA6DC,QAAM,EAAC,CAAC,CAArE;AAAuEzqB,KAAG,EAAC,CAAC;AAA5E,CAAnC;AAAkHjJ,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBgB,sBAAnB,GAA0C;AAAC5X,QAAM,EAAC,CAAC,CAAT;AAAWK,MAAI,EAAC,CAAC,CAAjB;AAAmB6B,OAAK,EAAC,CAAC,CAA1B;AAA4BoB,QAAM,EAAC,CAAC,CAApC;AAAsCU,MAAI,EAAC,CAAC,CAA5C;AAA8CI,MAAI,EAAC,CAAC,CAApD;AAAsDG,MAAI,EAAC,CAAC,CAA5D;AAA8DK,QAAM,EAAC,CAAC,CAAtE;AAAwEc,QAAM,EAAC,CAAC,CAAhF;AAAkFQ,OAAK,EAAC,CAAC,CAAzF;AAA2FI,KAAG,EAAC,CAAC,CAAhG;AAAkGI,UAAQ,EAAC,CAAC;AAA5G,CAA1C;;AAAyJziB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB3yE,MAAnB,GAA0B,UAAS9b,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBiB,aAAnB,CAAiCtyD,MAAM,CAACp9B,CAAD,CAAvC;AAA4C,SAAO87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBkB,iDAAnB,CAAqEvyD,MAAM,CAACp9B,CAAD,CAA3E,EAA+EC,CAA/E,EAAiFiuB,CAAjF,CAAP;AAA2F,CAAjL;;AAC3Q4tC,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBiB,aAAnB,GAAiC,UAAS1vF,CAAT,EAAW;AAAC,MAAG,CAAC87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBQ,mBAAnB,CAAuC7vE,IAAvC,CAA4Cpf,CAA5C,CAAJ,EAAmD,MAAM5B,KAAK,CAAC,uBAAqB4B,CAArB,GAAuB,IAAxB,CAAX;AAAyC,MAAGA,CAAC,CAAC6pB,WAAF,MAAkBiyC,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBgB,sBAAxC,EAA+D,MAAMrxF,KAAK,CAAC,eAAa4B,CAAb,GAAe,gCAAhB,CAAX;AAA8D,CAAtQ;;AACA87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBmB,YAAnB,GAAgC,UAAS5vF,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC9vC,GAAC,IAAE87D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BhG,MAA7B,CAAoChhF,CAApC,CAAH;AAA0C,MAAIkjB,CAAC,GAAC,EAAN;AAASA,GAAC,CAAC6hD,GAAF,GAAM/kE,CAAC,IAAE,IAAT;AAAckjB,GAAC,CAAC2sE,MAAF,GAAS5vF,CAAC,IAAE67D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBzN,MAAnB,CAA0B/gF,CAA1B,CAAZ;AAAyCD,GAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBqB,iBAAnB,CAAqC5sE,CAArC,EAAuC;AAAC6sE,WAAO,EAAC;AAAT,GAAvC,EAAoD7hE,CAApD,CAAF;AAAyD,SAAO4tC,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBkB,iDAAnB,CAAqE,QAArE,EAA8E3vF,CAA9E,EAAgF8vC,CAAhF,CAAP;AAA0F,CAA/S;;AACAgsB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBuB,mBAAnB,GAAuC,UAAShwF,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,MAAG,CAACgsB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBwB,mBAAnB,EAAJ,EAA6C,MAAM7xF,KAAK,CAAC,iDAAD,CAAX;AAA+D,MAAI8kB,CAAC,GAAC,EAAN;AAASA,GAAC,CAAC6hD,GAAF,GAAM/kE,CAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBrI,MAAlB,CAAyBllB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBzsE,QAAlB,CAA2B5c,CAA3B,CAAzB,CAAD,GAAyD,IAAhE;AAAqEkjB,GAAC,CAAC2sE,MAAF,GAAS5vF,CAAC,IAAE,IAAZ;AAAiBijB,GAAC,CAAC6sE,OAAF,GAAU,EAAV;AAAa/vF,GAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBqB,iBAAnB,CAAqC5sE,CAArC,EAAuC,EAAvC,EAA0CgL,CAA1C,CAAF;AAA+C,SAAO4tC,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBkB,iDAAnB,CAAqE,QAArE,EAA8E3vF,CAA9E,EAAgF8vC,CAAhF,CAAP;AAA0F,CAA1Z;;AACAgsB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBwB,mBAAnB,GAAuC,YAAU;AAAC,SAAOn0B,IAAI,CAAC1gC,MAAL,CAAY80D,iBAAZ,IAA+B,aAAYp0B,IAAI,CAAC1gC,MAAL,CAAY80D,iBAAZ,CAA8Bt6E,SAAhF;AAA0F,CAA5I;;AAA6IkmD,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB0B,eAAnB,GAAmC,UAASnwF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BhG,MAA7B,CAAoChhF,CAApC;AAAuCA,GAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBqB,iBAAnB,CAAqC;AAAC/qB,OAAG,EAAC/kE;AAAL,GAArC,EAA6C,EAA7C,EAAgDC,CAAhD,CAAF;AAAqD,SAAO67D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBkB,iDAAnB,CAAqE,QAArE,EAA8E3vF,CAA9E,CAAP;AAAwF,CAArO;;AAC7I87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBtlB,YAAnB,GAAgC,UAASnpE,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAI,IAAIiuB,CAAR,IAAajuB,CAAb,EAAe;AAAC,QAAI6vC,CAAC,GAAC5hB,CAAC,CAAC+L,WAAF,EAAN;AAAsB,QAAG,cAAY6V,CAAZ,IAAe,SAAOA,CAAtB,IAAyB,UAAQA,CAAjC,IAAoC,UAAQA,CAA/C,EAAiD,MAAM1xC,KAAK,CAAC,iBAAe0xC,CAAf,GAAiB,aAAlB,CAAX;AAA6C;;AAAA5hB,GAAC,GAAC,EAAF;AAAKluB,GAAC,GAAC87D,IAAI,CAAC/zD,KAAL,CAAW6uB,MAAX,CAAkB52B,CAAlB,CAAF;;AAAuB,OAAI8vC,CAAC,GAAC,CAAN,EAAQA,CAAC,GAAC9vC,CAAC,CAACJ,MAAZ,EAAmBkwC,CAAC,EAApB,EAAuB5hB,CAAC,IAAE4tC,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBF,MAArB,CAA4BhhF,CAAC,CAAC8vC,CAAD,CAA7B,CAAH;;AAAqC9vC,GAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBK,8CAAnB,CAAkE5gE,CAAlE,EAAoE4tC,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBG,OAAvF,CAAF;AAAkG,SAAOtnB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBkB,iDAAnB,CAAqE,QAArE,EAA8E1vF,CAA9E,EAAgFD,CAAhF,CAAP;AAA0F,CAAtc;;AACA87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB2B,WAAnB,GAA+B,UAASpwF,CAAT,EAAWC,CAAX,EAAa;AAACA,GAAC,GAAC67D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBqB,iBAAnB,CAAqC;AAAC/5E,QAAI,EAAC;AAAN,GAArC,EAAuD,EAAvD,EAA0D9V,CAA1D,CAAF;AAA+D,MAAIiuB,CAAC,GAAC,EAAN;AAASluB,GAAC,GAAC87D,IAAI,CAAC/zD,KAAL,CAAW6uB,MAAX,CAAkB52B,CAAlB,CAAF;;AAAuB,OAAI,IAAI8vC,CAAC,GAAC,CAAV,EAAYA,CAAC,GAAC9vC,CAAC,CAACJ,MAAhB,EAAuBkwC,CAAC,EAAxB,EAA2B5hB,CAAC,IAAE4tC,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyB9K,MAAzB,CAAgChhF,CAAC,CAAC8vC,CAAD,CAAjC,CAAH;;AAAyC9vC,GAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBK,8CAAnB,CAAkE5gE,CAAlE,EAAoE4tC,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBG,OAAvF,CAAF;AAAkG,SAAOtnB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBkB,iDAAnB,CAAqE,OAArE,EAA6E1vF,CAA7E,EAA+ED,CAA/E,CAAP;AAAyF,CAA3Y;;AACA87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB4B,iBAAnB,GAAqC,UAASrwF,CAAT,EAAWC,CAAX,EAAa;AAACD,GAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBrI,MAAlB,CAAyBllB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBzsE,QAAlB,CAA2B5c,CAA3B,CAAzB,CAAF;AAA0D,GAAC87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BgB,IAA5B,MAAoChyB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BiB,MAA5B,EAArC,KAA4EjyB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBrd,QAArB,CAA8B3qE,CAA9B,EAAgC,GAAhC,CAA5E,KAAmHA,CAAC,GAAC,MAAIA,CAAC,CAACkZ,OAAF,CAAU,IAAV,EAAe,KAAf,CAAJ,GAA0B,GAA/I;AAAoJ,SAAO4iD,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBkB,iDAAnB,CAAqE,MAArE,EAA4E;AAAC,kBAAa,SAAd;AAAwBnxE,WAAO,EAAC,CAACve,CAAC,IAAE,CAAJ,IAAO,QAAP,GAAgBD;AAAhD,GAA5E,CAAP;AAAuI,CAAxY;;AACA87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB6B,oBAAnB,GAAwC,UAAStwF,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAGA,CAAC,YAAY4tC,IAAI,CAAC/yB,MAAL,CAAY03C,KAA5B,EAAkCvyD,CAAC,GAAC4tC,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyB9yD,CAAzB,CAAF,CAAlC,KAAqE,IAAG,WAASjuB,CAAC,CAACg6B,WAAF,EAAZ,EAA4B/L,CAAC,GAAC4tC,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB8B,cAAnB,CAAkCriE,CAAlC,CAAF,CAA5B,KAAuE;AAAC,QAAG,OAAO9O,IAAP,CAAYnf,CAAZ,CAAH,EAAkB,MAAM7B,KAAK,CAAC,gBAAc6B,CAAd,GAAgB,uCAAhB,GAAwDiuB,CAAxD,GAA0D,UAA3D,CAAX;AAAkF,QAAGjuB,CAAC,CAACg6B,WAAF,MAAkB6hC,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBS,eAAxC,EAAwD,IAAGhhE,CAAC,YAAY4tC,IAAI,CAACyH,IAAL,CAAUyjB,kBAA1B,EAA6C94D,CAAC,GAAC4tC,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BhG,MAA7B,CAAoC9yD,CAApC,CAAF,CAA7C,KAA2F,IAAGA,CAAC,YAAY4tC,IAAI,CAACyH,IAAL,CAAU8lB,OAA1B,EAAkCn7D,CAAC,GAAC4tC,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBrI,MAAlB,CAAyB9yD,CAAzB,CAAF,CAAlC,KACvb,IAAG4tC,IAAI,CAAC9jD,QAAL,CAAckW,CAAd,CAAH,EAAoBA,CAAC,GAAC4tC,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBzsE,QAAlB,CAA2BsR,CAA3B,EAA8B6yD,mBAA9B,EAAF,CAApB,KAA+E,MAAM3iF,KAAK,CAAC,gBAAc6B,CAAd,GAAgB,YAAhB,GAA6BD,CAA7B,GAA+B,qEAA/B,GAAqGkuB,CAArG,GAAuG,UAAxG,CAAX;AAAgI;AAAAA,GAAC,CAAC4yD,+BAAF,KAAoC5yD,CAAC,GAACA,CAAC,CAAC6yD,mBAAF,EAAtC;AAA+DjlB,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB9R,IAAI,CAAC9jD,QAAL,CAAckW,CAAd,KAAkB4tC,IAAI,CAACG,QAAL,CAAc/tC,CAAd,CAAtC,EAAuD,0CAAwC,OAAOA,CAA/C,GAAiD,eAAjD,GAAiEA,CAAxH;AAA2H,SAAOjuB,CAAC,GAAC,IAAF,GAAO67D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBS,UAArB,CAAgCrrD,MAAM,CAAClP,CAAD,CAAtC,CAAP,GAAkD,GAAzD;AAA6D,CAD3c;;AAEA4tC,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB8B,cAAnB,GAAkC,UAASvwF,CAAT,EAAW;AAAC,MAAG,CAAC87D,IAAI,CAAC3jD,QAAL,CAAcnY,CAAd,CAAJ,EAAqB,MAAM5B,KAAK,CAAC,oFAAkF,OAAO4B,CAAzF,GAA2F,UAA3F,GAAsGA,CAAvG,CAAX;AAAqHA,GAAC,YAAY87D,IAAI,CAACyH,IAAL,CAAUynB,SAAvB,KAAmChrF,CAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBlvE,MAApB,CAA2B9b,CAA3B,CAArC;AAAoE,SAAO87D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBhK,MAApB,CAA2BhhF,CAA3B,CAAP;AAAqC,CAAjS;;AAAkS87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB+B,aAAnB,GAAiC,UAASxwF,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC7vC,GAAC,GAAC67D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB3yE,MAAnB,CAA0B7b,CAA1B,EAA4BiuB,CAA5B,EAA8B4hB,CAA9B,CAAF;AAAmC7vC,GAAC,CAAC2uF,IAAF,GAAO5uF,CAAP;AAAS,SAAOC,CAAP;AAAS,CAAxG;;AAClS67D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB9zE,IAAnB,GAAwB,UAAS3a,CAAT,EAAWC,CAAX,EAAa;AAACD,GAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBhG,UAAnB,CAA8BzoF,CAA9B,CAAF;;AAAmC,MAAIkuB,CAAC,GAACluB,CAAC,CAACqnF,YAAF,EAAN;AAAA,MAAuBv3C,CAAC,GAAC,EAAzB;AAAA,MAA4B5sB,CAAC,GAAC,UAASljB,CAAT,EAAW;AAAC87D,QAAI,CAAC56D,OAAL,CAAalB,CAAb,IAAgB87D,IAAI,CAAC/zD,KAAL,CAAW+D,OAAX,CAAmB9L,CAAnB,EAAqBkjB,CAArB,CAAhB,IAAyCljB,CAAC,GAAC87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBhG,UAAnB,CAA8BzoF,CAA9B,CAAF,EAAmC8vC,CAAC,CAACrxC,IAAF,CAAOq9D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBzN,MAAnB,CAA0BhhF,CAA1B,CAAP,CAAnC,EAAwEA,CAAC,GAACA,CAAC,CAACqnF,YAAF,EAA1E,EAA2Fn5D,CAAC,IAAE4tC,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBG,OAAtB,GAA8Bl1D,CAAC,GAACluB,CAAhC,GAAkCA,CAAC,IAAE87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBG,OAAtB,IAA+Bl1D,CAAC,IAAEluB,CAAlC,KAAsCkuB,CAAC,GAAC,IAAxC,CAAtK;AAAqN,GAA/P;;AAAgQ4tC,MAAI,CAAC/zD,KAAL,CAAW+D,OAAX,CAAmB7L,CAAnB,EAAqBijB,CAArB;AAAwB,SAAO44C,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBK,8CAAnB,CAAkEh/C,CAAC,CAACn1B,IAAF,CAAOmhD,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBzN,MAAnB,CAA0BhhF,CAA1B,CAAP,CAAlE,EAAuGkuB,CAAvG,CAAP;AAAiH,CAAld;;AACA4tC,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB73D,MAAnB,GAA0B,UAAS52B,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB9zE,IAAnB,CAAwBmhD,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBxN,KAA3C,EAAiDvjF,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,CAAjD,CAAP;AAA+F,CAArI;;AAAsIgzD,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBgC,aAAnB,GAAiC,UAASzwF,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAAC4tC,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB73D,MAAnB,CAA0BklC,IAAI,CAAC/zD,KAAL,CAAWnG,KAAX,CAAiBkH,SAAjB,EAA2B,CAA3B,CAA1B,CAAN;AAA+DolB,GAAC,CAAC0gE,IAAF,GAAO5uF,CAAP;AAAS,SAAOkuB,CAAP;AAAS,CAAhI;;AAAiI4tC,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBpN,uCAAnB,GAA2D,EAA3D;;AAA8DvlB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBK,8CAAnB,GAAkE,UAAS9uF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO,IAAI67D,IAAI,CAACyH,IAAL,CAAUkrB,QAAd,EAAD,CAAyB7M,qCAAzB,CAA+D5hF,CAA/D,EAAiEC,CAAjE,CAAN;AAA0E,CAA1J;;AACrU67D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB74E,SAAnB,CAA6BgsE,qCAA7B,GAAmE,UAAS5hF,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAKyuF,6CAAL,GAAmD5yB,IAAI,CAACyH,IAAL,CAAU+c,YAAV,CAAuBC,oCAAvB,GAA4DzkB,IAAI,CAACyH,IAAL,CAAU+c,YAAV,CAAuBC,oCAAvB,CAA4D3X,UAA5D,CAAuE5oE,CAAvE,CAA5D,GAAsIA,CAAzL;AAA2L,OAAK4uF,IAAL,GAAU3uF,CAAV;AAAY,SAAO,IAAP;AAAY,CAApS;;AACA67D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBkB,iDAAnB,GAAqE,UAAS3vF,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC,IAAN;AAAW,MAAI5sB,CAAC,GAAC,MAAIljB,CAAJ,GAAM87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBiC,mBAAnB,CAAuC1wF,CAAvC,EAAyCC,CAAzC,CAAZ;AAAwD67D,MAAI,CAACiD,eAAL,CAAqB7wC,CAArB,IAAwB4tC,IAAI,CAAC56D,OAAL,CAAagtB,CAAb,MAAkBA,CAAC,GAAC,CAACA,CAAD,CAApB,CAAxB,GAAiDA,CAAC,GAAC,EAAnD;AAAsD4tC,MAAI,CAACuQ,GAAL,CAASiT,IAAT,CAAce,SAAd,CAAwBrgF,CAAC,CAACi6B,WAAF,EAAxB,KAA0C6hC,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,CAAC1/C,CAAC,CAACtuB,MAAvB,EAA8B,eAAaI,CAAb,GAAe,2BAA7C,GAA0EkjB,CAAC,IAAE,GAAvH,KAA6H4sB,CAAC,GAACgsB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB73D,MAAnB,CAA0B1I,CAA1B,CAAF,EAA+BhL,CAAC,IAAE,MAAI44C,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBzN,MAAnB,CAA0BlxC,CAA1B,CAAJ,GAAiC,IAAjC,GAAsC9vC,CAAtC,GAAwC,GAA1E,EAA8E8vC,CAAC,GAACA,CAAC,CAACu3C,YAAF,EAA7M;AAA+N,GAACrnF,CAAC,GAACC,CAAC,IAAEA,CAAC,CAACs2B,GAAR,MAAeuZ,CAAC,GAAC,oBAAoB1wB,IAApB,CAAyBpf,CAAzB,IAA4B87D,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBG,OAA/C,GAC9b,IAD6a;AACva,SAAOtnB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBK,8CAAnB,CAAkE5rE,CAAlE,EAAoE4sB,CAApE,CAAP;AAA8E,CADpF;;AACqFgsB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBiC,mBAAnB,GAAuC,UAAS1wF,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAAC,EAAN;AAAS,MAAGjuB,CAAH,EAAK,KAAI,IAAI6vC,CAAR,IAAa7vC,CAAb,EAAe;AAAC,QAAG,CAAC67D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBQ,mBAAnB,CAAuC7vE,IAAvC,CAA4C0wB,CAA5C,CAAJ,EAAmD,MAAM1xC,KAAK,CAAC,6BAA2B0xC,CAA3B,GAA6B,IAA9B,CAAX;AAA+C,QAAI5sB,CAAC,GAACjjB,CAAC,CAAC6vC,CAAD,CAAP;AAAWgsB,QAAI,CAACiD,eAAL,CAAqB77C,CAArB,MAA0BgL,CAAC,IAAE,MAAI4tC,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmB6B,oBAAnB,CAAwCtwF,CAAxC,EAA0C8vC,CAA1C,EAA4C5sB,CAA5C,CAAjC;AAAiF;AAAA,SAAOgL,CAAP;AAAS,CAA1R;;AACrF4tC,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBqB,iBAAnB,GAAqC,UAAS9vF,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC,EAAN;AAAA,MAAS5sB,CAAT;;AAAW,OAAIA,CAAJ,IAASljB,CAAT,EAAW87D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB1qD,CAAC,CAAC+W,WAAF,MAAiB/W,CAArC,EAAuC,oBAAvC,GAA6D4sB,CAAC,CAAC5sB,CAAD,CAAD,GAAKljB,CAAC,CAACkjB,CAAD,CAAnE;;AAAuE,OAAIA,CAAJ,IAASjjB,CAAT,EAAW67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB1qD,CAAC,CAAC+W,WAAF,MAAiB/W,CAArC,EAAuC,oBAAvC,GAA6D4sB,CAAC,CAAC5sB,CAAD,CAAD,GAAKjjB,CAAC,CAACijB,CAAD,CAAnE;;AAAuE,OAAIA,CAAJ,IAASgL,CAAT,EAAW;AAAC,QAAIuY,CAAC,GAACvjB,CAAC,CAAC+W,WAAF,EAAN;AAAsB,QAAGwM,CAAC,IAAIzmC,CAAR,EAAU,MAAM5B,KAAK,CAAC,sBAAoBqoC,CAApB,GAAsB,oBAAtB,GAA2CvjB,CAA3C,GAA6C,gBAA7C,GAA8DgL,CAAC,CAAChL,CAAD,CAA/D,GAAmE,GAApE,CAAX;AAAoFujB,KAAC,IAAIxmC,CAAL,IAAQ,OAAO6vC,CAAC,CAACrJ,CAAD,CAAhB;AAAoBqJ,KAAC,CAAC5sB,CAAD,CAAD,GAAKgL,CAAC,CAAChL,CAAD,CAAN;AAAU;;AAAA,SAAO4sB,CAAP;AAAS,CAA3Y;;AACAgsB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBkC,YAAnB,GAAgC70B,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBK,8CAAnB,CAAkE,iBAAlE,EAAoFhzB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBG,OAAvG,CAAhC;AAAgJtnB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBxN,KAAnB,GAAyBnlB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBK,8CAAnB,CAAkE,EAAlE,EAAqEhzB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBG,OAAxF,CAAzB;AAA0HtnB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBhW,EAAnB,GAAsB3c,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBK,8CAAnB,CAAkE,MAAlE,EAAyEhzB,IAAI,CAACymB,IAAL,CAAUC,IAAV,CAAeS,GAAf,CAAmBG,OAA5F,CAAtB;AAA2HtnB,IAAI,CAACyH,IAAL,CAAUqtB,oBAAV,GAA+B,EAA/B;;AAAkC90B,IAAI,CAACyH,IAAL,CAAUqtB,oBAAV,CAA+BC,4CAA/B,GAA4E,UAAS7wF,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaa,YAAb,CAA0BlS,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAA1B,EAAsD,4BAAtD;AAAoF87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,CAAC9R,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBO,mBAArB,CAAyCzsB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAAzC,CAArB,EAA2F,sCAA3F;AAAmI,SAAO87D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBK,8CAAnB,CAAkE7uF,CAAlE,EAAoEiuB,CAAC,IAAE,IAAvE,CAAP;AAAoF,CAAvY;;AACva4tC,IAAI,CAACyH,IAAL,CAAUqtB,oBAAV,CAA+BE,8CAA/B,GAA8E,UAAS9wF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqR,OAAL,CAAaa,YAAb,CAA0BlS,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAA1B,EAAsD,4BAAtD;AAAoF87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,CAAC9R,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBO,mBAArB,CAAyCzsB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAAzC,CAArB,EAA2F,sCAA3F;AAAmI,SAAO87D,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBK,gDAArB,CAAsEthF,CAAtE,CAAP;AAAgF,CAAnY;;AACA67D,IAAI,CAACyH,IAAL,CAAUqtB,oBAAV,CAA+BG,6CAA/B,GAA6E,UAAS/wF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqR,OAAL,CAAaa,YAAb,CAA0BlS,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAA1B,EAAsD,4BAAtD;AAAoF87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,CAAC9R,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBO,mBAArB,CAAyCzsB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAAzC,CAArB,EAA2F,sCAA3F;AAAmI,SAAO87D,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBG,+CAApB,CAAoElrF,CAApE,CAAP;AAA8E,CAAhY;;AACA67D,IAAI,CAACyH,IAAL,CAAUqtB,oBAAV,CAA+BI,kDAA/B,GAAkF,UAAShxF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqR,OAAL,CAAaa,YAAb,CAA0BlS,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAA1B,EAAsD,4BAAtD;AAAoF87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,CAAC9R,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBO,mBAArB,CAAyCzsB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAAzC,CAArB,EAA2F,sCAA3F;AAAmI,SAAO87D,IAAI,CAACyH,IAAL,CAAUuoB,cAAV,CAAyBK,oDAAzB,CAA8ElsF,CAA9E,CAAP;AAAwF,CAA/Y;;AACA67D,IAAI,CAACyH,IAAL,CAAUqtB,oBAAV,CAA+BK,2CAA/B,GAA2E,UAASjxF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqR,OAAL,CAAaa,YAAb,CAA0BlS,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAA1B,EAAsD,4BAAtD;AAAoF87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,CAAC9R,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBO,mBAArB,CAAyCzsB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAAzC,CAArB,EAA2F,sCAA3F;AAAmI,SAAO87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkBI,6CAAlB,CAAgExpF,CAAhE,CAAP;AAA0E,CAA1X;;AACA67D,IAAI,CAACyH,IAAL,CAAUqtB,oBAAV,CAA+BM,sDAA/B,GAAsF,UAASlxF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqR,OAAL,CAAaa,YAAb,CAA0BlS,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAA1B,EAAsD,4BAAtD;AAAoF87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,CAAC9R,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBO,mBAArB,CAAyCzsB,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyBhhF,CAAzB,CAAzC,CAArB,EAA2F,sCAA3F;AAAmI,SAAO87D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BQ,wDAA7B,CAAsFvnF,CAAtF,CAAP;AAAgG,CAA3Z;;AAA4Z67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,GAAc,EAAd;AAAiBr1B,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcC,0BAAd,GAAyC;AAACC,YAAU,EAAC,YAAZ;AAAyBC,UAAQ,EAAC,UAAlC;AAA6CC,aAAW,EAAC,aAAzD;AAAuEC,WAAS,EAAC;AAAjF,CAAzC;;AAAuI11B,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcM,kBAAd,GAAiC,UAASzxF,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACluB,GAAC,CAAC0xF,kBAAF,CAAqBzxF,CAArB,EAAuB67D,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBI,iBAAnB,CAAqC3gE,CAArC,CAAvB;AAAgE,CAAjH;;AAAkH4tC,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcQ,+BAAd,GAA8C;AAAC1V,MAAI,EAAC,CAAC,CAAP;AAASsB,QAAM,EAAC,CAAC,CAAjB;AAAmBQ,OAAK,EAAC,CAAC,CAA1B;AAA4BI,KAAG,EAAC,CAAC,CAAjC;AAAmCI,UAAQ,EAAC,CAAC;AAA7C,CAA9C;AACtqBziB,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcS,4BAAd,GAA2C91B,IAAI,CAACka,SAAL,CAAegB,gBAAf,CAAgC,YAAU;AAAC,MAAGlb,IAAI,CAACW,KAAL,IAAY,gBAAc,OAAOe,QAApC,EAA6C,OAAM,CAAC,CAAP;AAAS,MAAIx9D,CAAC,GAACw9D,QAAQ,CAACkF,aAAT,CAAuB,KAAvB,CAAN;AAAA,MAAoCziE,CAAC,GAACu9D,QAAQ,CAACkF,aAAT,CAAuB,KAAvB,CAAtC;AAAoEziE,GAAC,CAAC2iE,WAAF,CAAcpF,QAAQ,CAACkF,aAAT,CAAuB,KAAvB,CAAd;AAA6C1iE,GAAC,CAAC4iE,WAAF,CAAc3iE,CAAd;AAAiB,MAAG67D,IAAI,CAACW,KAAL,IAAY,CAACz8D,CAAC,CAAC6xF,UAAlB,EAA6B,OAAM,CAAC,CAAP;AAAS5xF,GAAC,GAACD,CAAC,CAAC6xF,UAAF,CAAaA,UAAf;AAA0B7xF,GAAC,CAAC8xF,SAAF,GAAYh2B,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBI,iBAAnB,CAAqC/yB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBxN,KAAxD,CAAZ;AAA2E,SAAM,CAAChhF,CAAC,CAAC8xF,aAAT;AAAuB,CAArY,CAA3C;;AACAj2B,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAca,gCAAd,GAA+C,UAAShyF,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcS,4BAAd,EAAH,EAAgD,OAAK5xF,CAAC,CAACiyF,SAAP,GAAkBjyF,CAAC,CAAC+iE,WAAF,CAAc/iE,CAAC,CAACiyF,SAAhB;AAA2BjyF,GAAC,CAAC8xF,SAAF,GAAYh2B,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBI,iBAAnB,CAAqC5uF,CAArC,CAAZ;AAAoD,CAA9M;;AACA67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAce,YAAd,GAA2B,UAASlyF,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG67D,IAAI,CAACqR,OAAL,CAAaC,cAAhB,EAA+B;AAAC,QAAIl/C,CAAC,GAACluB,CAAC,CAACmyF,OAAF,CAAUtoE,WAAV,EAAN;AAA8B,QAAGiyC,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcQ,+BAAd,CAA8CzjE,CAA9C,CAAH,EAAoD,MAAM9vB,KAAK,CAAC,iEAA+D4B,CAAC,CAACmyF,OAAjE,GAAyE,GAA1E,CAAX;AAA2F;;AAAAr2B,MAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAca,gCAAd,CAA+ChyF,CAA/C,EAAiDC,CAAjD;AAAoD,CAA1S;;AAA2S67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAciB,YAAd,GAA2B,UAASpyF,CAAT,EAAWC,CAAX,EAAa;AAACD,GAAC,CAACqyF,SAAF,GAAYv2B,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBI,iBAAnB,CAAqC5uF,CAArC,CAAZ;AAAoD,CAA7F;;AAC3S67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcmB,oBAAd,GAAmC,UAAStyF,CAAT,EAAWC,CAAX,EAAa;AAACA,GAAC,GAACA,CAAC,YAAY67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAvB,GAA+BppF,CAA/B,GAAiC67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkByB,uBAAlB,CAA0C7qF,CAA1C,CAAnC;AAAgF67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBqI,uBAAjB,CAAyCx1E,CAAzC,EAA4CmvF,MAA5C,GAAmDrzB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB1B,gBAAlB,CAAmC1nF,CAAnC,CAAnD;AAAyF,CAA1N;;AAA2N67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcoB,mBAAd,GAAkC,UAASvyF,CAAT,EAAWC,CAAX,EAAa;AAACA,GAAC,GAACA,CAAC,YAAY67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAvB,GAA+BppF,CAA/B,GAAiC67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkByB,uBAAlB,CAA0C7qF,CAA1C,CAAnC;AAAgF67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB4H,yBAAjB,CAA2C/0E,CAA3C,EAA8CwyF,UAA9C,GAAyD12B,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB1B,gBAAlB,CAAmC1nF,CAAnC,CAAzD;AAA+F,CAA/N;;AAC3N67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcsB,kBAAd,GAAiC,UAASzyF,CAAT,EAAWC,CAAX,EAAa;AAACA,GAAC,GAACA,CAAC,YAAY67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAvB,GAA+BppF,CAA/B,GAAiC67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkByB,uBAAlB,CAA0C7qF,CAA1C,CAAnC;AAAgF67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBiI,wBAAjB,CAA0Cp1E,CAA1C,EAA6CwyF,UAA7C,GAAwD12B,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB1B,gBAAlB,CAAmC1nF,CAAnC,CAAxD;AAA8F,CAA7N;;AAA8N67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcuB,QAAd,GAAuB,UAAS1yF,CAAT,EAAWC,CAAX,EAAa;AAACD,GAAC,CAAC4mF,KAAF,CAAQ+L,OAAR,GAAgB72B,IAAI,CAACyH,IAAL,CAAUynB,SAAV,CAAoBhK,MAApB,CAA2B/gF,CAA3B,CAAhB;AAA8C,CAAnF;;AAAoF67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcyB,aAAd,GAA4B,UAAS5yF,CAAT,EAAWC,CAAX,EAAa;AAACD,GAAC,CAACo2B,KAAF,CAAQ0lC,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBI,iBAAnB,CAAqC5uF,CAArC,CAAR;AAAiD,CAA3F;;AAClT67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAc0B,aAAd,GAA4B,UAAS7yF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB2H,yBAAjB,CAA2C90E,CAA3C;AAA8CC,GAAC,GAACA,CAAC,YAAY67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAvB,GAA+BppF,CAA/B,GAAiC67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkByB,uBAAlB,CAA0C7qF,CAA1C,CAAnC;AAAgFD,GAAC,CAACsvF,IAAF,GAAOxzB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB1B,gBAAlB,CAAmC1nF,CAAnC,CAAP;AAA6C,CAArN;;AAAsN67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAc2B,WAAd,GAA0B,UAAS9yF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB8H,wBAAjB,CAA0Cj1E,CAA1C;;AAA6C,MAAG,EAAEC,CAAC,YAAY67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAzB,CAAH,EAAqC;AAAC,QAAIn7D,CAAC,GAAC,iBAAiB9O,IAAjB,CAAsBnf,CAAtB,CAAN;AAA+BA,KAAC,GAAC67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkByB,uBAAlB,CAA0C7qF,CAA1C,EAA4CiuB,CAA5C,CAAF;AAAiD;;AAAAluB,GAAC,CAAC+kE,GAAF,GAAMjJ,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB1B,gBAAlB,CAAmC1nF,CAAnC,CAAN;AAA4C,CAAvP;;AACtN67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAc4B,WAAd,GAA0B,UAAS/yF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB+H,wBAAjB,CAA0Cl1E,CAA1C;;AAA6C,MAAG,EAAEC,CAAC,YAAY67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAzB,CAAH,EAAqC;AAAC,QAAIn7D,CAAC,GAAC,iBAAiB9O,IAAjB,CAAsBnf,CAAtB,CAAN;AAA+BA,KAAC,GAAC67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkByB,uBAAlB,CAA0C7qF,CAA1C,EAA4CiuB,CAA5C,CAAF;AAAiD;;AAAAluB,GAAC,CAAC+kE,GAAF,GAAMjJ,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB1B,gBAAlB,CAAmC1nF,CAAnC,CAAN;AAA4C,CAAvP;;AAAwP67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAc6B,WAAd,GAA0B,UAAShzF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBgI,wBAAjB,CAA0Cn1E,CAA1C;;AAA6C,MAAG,EAAEC,CAAC,YAAY67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAzB,CAAH,EAAqC;AAAC,QAAIn7D,CAAC,GAAC,iBAAiB9O,IAAjB,CAAsBnf,CAAtB,CAAN;AAA+BA,KAAC,GAAC67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkByB,uBAAlB,CAA0C7qF,CAA1C,EAA4CiuB,CAA5C,CAAF;AAAiD;;AAAAluB,GAAC,CAAC+kE,GAAF,GAAMjJ,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB1B,gBAAlB,CAAmC1nF,CAAnC,CAAN;AAA4C,CAAvP;;AACxP67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAc8B,WAAd,GAA0B,UAASjzF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBoI,wBAAjB,CAA0Cv1E,CAA1C;AAA6CA,GAAC,CAAC+kE,GAAF,GAAMjJ,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BU,sBAA7B,CAAoDznF,CAApD,CAAN;AAA6D,CAAlJ;;AAAmJ67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAc+B,WAAd,GAA0B,UAASlzF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBsI,wBAAjB,CAA0Cz1E,CAA1C;AAA6CA,GAAC,CAAC+kE,GAAF,GAAMjJ,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BW,gBAA7B,CAA8C1nF,CAA9C,CAAN;AAAuD,CAA5I;;AAA6I67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcgC,YAAd,GAA2B,UAASnzF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBuI,yBAAjB,CAA2C11E,CAA3C;AAA8CA,GAAC,CAAC+kE,GAAF,GAAMjJ,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BW,gBAA7B,CAA8C1nF,CAA9C,CAAN;AAAuD,CAA9I;;AAChS67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAciC,eAAd,GAA8B,UAASpzF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBuI,yBAAjB,CAA2C11E,CAA3C;AAA8CA,GAAC,CAAC6vF,MAAF,GAAS/zB,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBI,iBAAnB,CAAqC5uF,CAArC,CAAT;AAAiD,CAA3I;;AACA67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAckC,iBAAd,GAAgC,UAASrzF,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiB6H,uBAAjB,CAAyCh1E,CAAzC;AAA4CA,GAAC,CAACszF,GAAF,GAAMplE,CAAN;AAAQ4tC,MAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBkB,uBAArB,CAA6Ch7D,CAA7C,EAA+C,YAA/C,KAA8D4tC,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB3tE,CAAC,YAAY67D,IAAI,CAACyH,IAAL,CAAUyjB,kBAA3C,EAA8D,oEAA9D,GAAoIhnF,CAAC,CAACsvF,IAAF,GAAOxzB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BW,gBAA7B,CAA8C1nF,CAA9C,CAAzM,IAA2PD,CAAC,CAACsvF,IAAF,GAAOrvF,CAAC,YAAY67D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAvB,GAA0ClrB,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BW,gBAA7B,CAA8C1nF,CAA9C,CAA1C,GAA2FA,CAAC,YAAY67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAvB,GAA+BvtB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB1B,gBAAlB,CAAmC1nF,CAAnC,CAA/B,GACjc67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB1B,gBAAlB,CAAmC7rB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkByB,uBAAlB,CAA0C7qF,CAA1C,CAAnC,CADoG;AACnB,CADjF;;AACkF67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcoC,aAAd,GAA4B,UAASvzF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBwI,yBAAjB,CAA2C31E,CAA3C;AAA8CA,GAAC,CAACiB,IAAF,GAAO66D,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BU,sBAA7B,CAAoDznF,CAApD,CAAP;AAA8D,CAAtJ;;AAAuJ67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcqC,YAAd,GAA2B,UAASxzF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiByI,yBAAjB,CAA2C51E,CAA3C;AAA8CA,GAAC,CAAC+kE,GAAF,GAAMjJ,IAAI,CAACyH,IAAL,CAAUyjB,kBAAV,CAA6BU,sBAA7B,CAAoDznF,CAApD,CAAN;AAA6D,GAACA,CAAC,GAAC67D,IAAI,CAACwB,cAAL,EAAH,KAA2Bt9D,CAAC,CAAC6oE,YAAF,CAAe,OAAf,EAAuB5oE,CAAvB,CAA3B;AAAqD,CAAzM;;AACzO67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcsC,gBAAd,GAA+B,UAASzzF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiByI,yBAAjB,CAA2C51E,CAA3C;AAA8CA,GAAC,CAAC0zF,IAAF,GAAO53B,IAAI,CAACyH,IAAL,CAAU2d,UAAV,CAAqBS,mBAArB,CAAyC1hF,CAAzC,CAAP;AAAmD,GAACA,CAAC,GAAC67D,IAAI,CAACwB,cAAL,EAAH,KAA2Bt9D,CAAC,CAAC6oE,YAAF,CAAe,OAAf,EAAuB5oE,CAAvB,CAA3B;AAAqD,CAAnM;;AAAoM67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcwC,eAAd,GAA8B,UAAS3zF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBqH,gBAAjB,CAAkCx0E,CAAlC;AAAqCC,GAAC,GAACA,CAAC,YAAY67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAvB,GAA+BppF,CAA/B,GAAiC67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkByB,uBAAlB,CAA0C7qF,CAA1C,CAAnC;AAAgFD,GAAC,CAACsvF,IAAF,GAAOxzB,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB1B,gBAAlB,CAAmC1nF,CAAnC,CAAP;AAA6C,CAA9M;;AACpM67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAcyC,cAAd,GAA6B,UAAS5zF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBqH,gBAAjB,CAAkCx0E,CAAlC;AAAqCC,GAAC,GAACA,CAAC,YAAY67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAvB,GAA+BppF,CAA/B,GAAiC67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkByB,uBAAlB,CAA0C7qF,CAA1C,CAAnC;AAAgFD,GAAC,CAACvD,MAAF,CAASq/D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB1B,gBAAlB,CAAmC1nF,CAAnC,CAAT;AAAgD,CAAhN;;AAAiN67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAc0C,eAAd,GAA8B,UAAS7zF,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACuQ,GAAL,CAASc,OAAT,CAAiBqH,gBAAjB,CAAkCx0E,CAAlC;AAAqCC,GAAC,GAACA,CAAC,YAAY67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAvB,GAA+BppF,CAA/B,GAAiC67D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkByB,uBAAlB,CAA0C7qF,CAA1C,CAAnC;AAAgFD,GAAC,CAACkZ,OAAF,CAAU4iD,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB1B,gBAAlB,CAAmC1nF,CAAnC,CAAV;AAAiD,CAAlN;;AACjN67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAc2C,YAAd,GAA2B,UAAS9zF,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmB;AAACljB,GAAC,GAACA,CAAC,YAAY87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAvB,GAA+BrpF,CAA/B,GAAiC87D,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkByB,uBAAlB,CAA0C9qF,CAA1C,CAAnC;AAAgF,SAAM,CAACC,CAAC,IAAE67D,IAAI,CAAC1gC,MAAT,EAAiBtb,IAAjB,CAAsBg8C,IAAI,CAACyH,IAAL,CAAU8lB,OAAV,CAAkB1B,gBAAlB,CAAmC3nF,CAAnC,CAAtB,EAA4DkuB,CAAC,GAAC4tC,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkBO,MAAlB,CAAyB9yD,CAAzB,CAAD,GAA6B,EAA1F,EAA6F4hB,CAA7F,EAA+F5sB,CAA/F,CAAN;AAAwG,CAAvO;;AAAwO44C,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAc4C,mBAAd,GAAkC,UAAS/zF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAc6C,eAAd,CAA8Bh0F,CAA9B,EAAgCC,CAAhC,EAAkC,WAAlC,CAAP;AAAsD,CAAtG;;AAAuG67D,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAc6C,eAAd,GAA8B,UAASh0F,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,SAAOluB,CAAC,CAACg0F,eAAF,CAAkBl4B,IAAI,CAACyH,IAAL,CAAUkrB,QAAV,CAAmBI,iBAAnB,CAAqC5uF,CAArC,CAAlB,EAA0DiuB,CAA1D,CAAP;AAAoE,CAAlH;;AAC/U4tC,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAc8C,mBAAd,GAAkC,UAASj0F,CAAT,EAAW;AAAC,MAAG,CAAC,cAAcof,IAAd,CAAmBpf,CAAC,CAAC+V,IAArB,CAAJ,EAA+B,MAAM3X,KAAK,CAAC,oEAAD,CAAX;AAAkF,MAAI6B,CAAC,GAAC67D,IAAI,CAAC1gC,MAAL,CAAYgnD,GAAZ,CAAgBJ,eAAhB,CAAgChiF,CAAhC,CAAN;AAAyCA,GAAC,GAAC,IAAI87D,IAAI,CAAC1gC,MAAL,CAAY84D,KAAhB,EAAF;;AAAwBl0F,GAAC,CAAC+oE,MAAF,GAAS,YAAU;AAACjN,QAAI,CAAC1gC,MAAL,CAAYgnD,GAAZ,CAAgBF,eAAhB,CAAgCjiF,CAAhC;AAAmC,GAAvD;;AAAwD67D,MAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAc2B,WAAd,CAA0B9yF,CAA1B,EAA4B87D,IAAI,CAACyH,IAAL,CAAUqtB,oBAAV,CAA+BK,2CAA/B,CAA2En1B,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkB9iF,IAAlB,CAAuB,iBAAvB,CAA3E,EAAqHsC,CAArH,CAA5B;AAAqJ,SAAOD,CAAP;AAAS,CAAtb;;AAAub87D,IAAI,CAAC/yB,MAAL,CAAYorD,sBAAZ,GAAmC,CAAC,CAApC;AAAsCr4B,IAAI,CAAC/yB,MAAL,CAAYqrD,6BAAZ,GAA0C,CAAC,CAA3C;AAA6Ct4B,IAAI,CAAC/yB,MAAL,CAAYsrD,OAAZ,GAAoB;AAACC,MAAI,EAAC;AAAN,CAApB;AAAoCx4B,IAAI,CAAC/yB,MAAL,CAAYk/C,UAAZ,GAAuBnsB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBC,UAA5C;AAAuDnsB,IAAI,CAAC/yB,MAAL,CAAYm/C,QAAZ,GAAqBpsB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBE,QAA1C;AAAmDpsB,IAAI,CAAC/yB,MAAL,CAAYo/C,yBAAZ,GAAsCrsB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBG,yBAA3D;AAAqFrsB,IAAI,CAAC/yB,MAAL,CAAYs/C,uBAAZ,GAAoCvsB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBK,uBAAzD;AAAiFvsB,IAAI,CAAC/yB,MAAL,CAAYu/C,qBAAZ,GAAkCxsB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBM,qBAAvD;;AAC9zBxsB,IAAI,CAAC/yB,MAAL,CAAYwrD,IAAZ,GAAiB,UAASv0F,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAI,IAAIiuB,CAAC,GAACluB,CAAC,CAACia,KAAF,CAAQ,IAAR,CAAN,EAAoB61B,CAAC,GAAC,EAAtB,EAAyB5sB,CAAC,GAACxlB,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2B3N,SAA3B,EAAqC,CAArC,CAA/B,EAAuEoa,CAAC,CAACtjB,MAAF,IAAU,IAAEsuB,CAAC,CAACtuB,MAArF,GAA6FkwC,CAAC,IAAE5hB,CAAC,CAAC5tB,KAAF,KAAU4iB,CAAC,CAAC5iB,KAAF,EAAb;;AAAuB,SAAOwvC,CAAC,GAAC5hB,CAAC,CAACvT,IAAF,CAAO,IAAP,CAAT;AAAsB,CAAzK;;AAA0KmhD,IAAI,CAAC/yB,MAAL,CAAYyrD,kBAAZ,GAA+B,UAASx0F,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACkZ,OAAF,CAAU,YAAV,EAAuB,GAAvB,EAA4BA,OAA5B,CAAoC,YAApC,EAAiD,EAAjD,CAAP;AAA4D,CAAvG;;AAAwG4iD,IAAI,CAAC/yB,MAAL,CAAYw/C,mBAAZ,GAAgCzsB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBO,mBAArD;;AAAyEzsB,IAAI,CAAC/yB,MAAL,CAAY0rD,aAAZ,GAA0B,UAASz0F,CAAT,EAAW;AAAC,SAAO,KAAGA,CAAC,CAACJ,MAAZ;AAAmB,CAAzD;;AAA0Dk8D,IAAI,CAAC/yB,MAAL,CAAYmiC,OAAZ,GAAoBpP,IAAI,CAAC/yB,MAAL,CAAYw/C,mBAAhC;;AAAoDzsB,IAAI,CAAC/yB,MAAL,CAAY2rD,uBAAZ,GAAoC,UAAS10F,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAAC/yB,MAAL,CAAYw/C,mBAAZ,CAAgCzsB,IAAI,CAAC/yB,MAAL,CAAY4rD,QAAZ,CAAqB30F,CAArB,CAAhC,CAAP;AAAgE,CAAhH;;AACzc87D,IAAI,CAAC/yB,MAAL,CAAY6rD,WAAZ,GAAwB94B,IAAI,CAAC/yB,MAAL,CAAY2rD,uBAApC;;AAA4D54B,IAAI,CAAC/yB,MAAL,CAAY8rD,oBAAZ,GAAiC,UAAS70F,CAAT,EAAW;AAAC,SAAM,CAAC,aAAaof,IAAb,CAAkBpf,CAAlB,CAAP;AAA4B,CAAzE;;AAA0E87D,IAAI,CAAC/yB,MAAL,CAAY+rD,OAAZ,GAAoB,UAAS90F,CAAT,EAAW;AAAC,SAAM,CAAC,YAAYof,IAAZ,CAAiBpf,CAAjB,CAAP;AAA2B,CAA3D;;AAA4D87D,IAAI,CAAC/yB,MAAL,CAAYgsD,SAAZ,GAAsB,UAAS/0F,CAAT,EAAW;AAAC,SAAM,CAAC,SAASof,IAAT,CAAcpf,CAAd,CAAP;AAAwB,CAA1D;;AAA2D87D,IAAI,CAAC/yB,MAAL,CAAYisD,cAAZ,GAA2B,UAASh1F,CAAT,EAAW;AAAC,SAAM,CAAC,eAAeof,IAAf,CAAoBpf,CAApB,CAAP;AAA8B,CAArE;;AAAsE87D,IAAI,CAAC/yB,MAAL,CAAYksD,OAAZ,GAAoB,UAASj1F,CAAT,EAAW;AAAC,SAAM,OAAKA,CAAX;AAAa,CAA7C;;AAA8C87D,IAAI,CAAC/yB,MAAL,CAAYmsD,aAAZ,GAA0B,UAASl1F,CAAT,EAAW;AAAC,SAAO,KAAGA,CAAC,CAACJ,MAAL,IAAa,OAAKI,CAAlB,IAAqB,OAAKA,CAA1B,IAA6B,YAAUA,CAAV,IAAa,YAAUA,CAA3D;AAA6D,CAAnG;;AACjX87D,IAAI,CAAC/yB,MAAL,CAAYosD,aAAZ,GAA0B,UAASn1F,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACkZ,OAAF,CAAU,gBAAV,EAA2B,GAA3B,CAAP;AAAuC,CAA7E;;AAA8E4iD,IAAI,CAAC/yB,MAAL,CAAYqsD,oBAAZ,GAAiC,UAASp1F,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACkZ,OAAF,CAAU,eAAV,EAA0B,IAA1B,CAAP;AAAuC,CAApF;;AAAqF4iD,IAAI,CAAC/yB,MAAL,CAAYssD,mBAAZ,GAAgC,UAASr1F,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACkZ,OAAF,CAAU,UAAV,EAAqB,GAArB,CAAP;AAAiC,CAA7E;;AAA8E4iD,IAAI,CAAC/yB,MAAL,CAAYusD,eAAZ,GAA4B,UAASt1F,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACkZ,OAAF,CAAU,cAAV,EAAyB,GAAzB,CAAP;AAAqC,CAA7E;;AAA8E4iD,IAAI,CAAC/yB,MAAL,CAAYwsD,sBAAZ,GAAmC,UAASv1F,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACkZ,OAAF,CAAU,aAAV,EAAwB,GAAxB,EAA6BA,OAA7B,CAAqC,0BAArC,EAAgE,EAAhE,CAAP;AAA2E,CAA1H;;AAA2H4iD,IAAI,CAAC/yB,MAAL,CAAYtH,IAAZ,GAAiBq6B,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBvmD,IAAtC;;AAC1bq6B,IAAI,CAAC/yB,MAAL,CAAYysD,QAAZ,GAAqB,UAASx1F,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACkZ,OAAF,CAAU,YAAV,EAAuB,EAAvB,CAAP;AAAkC,CAAnE;;AAAoE4iD,IAAI,CAAC/yB,MAAL,CAAYxC,SAAZ,GAAsB,UAASvmC,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACkZ,OAAF,CAAU,YAAV,EAAuB,EAAvB,CAAP;AAAkC,CAApE;;AAAqE4iD,IAAI,CAAC/yB,MAAL,CAAYq/C,sBAAZ,GAAmCtsB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBI,sBAAxD;;AACzItsB,IAAI,CAAC/yB,MAAL,CAAY0sD,mBAAZ,GAAgC,UAASz1F,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAGluB,CAAC,IAAEC,CAAN,EAAQ,OAAO,CAAP;AAAS,MAAG,CAACD,CAAJ,EAAM,OAAM,CAAC,CAAP;AAAS,MAAG,CAACC,CAAJ,EAAM,OAAO,CAAP;;AAAS,OAAI,IAAI6vC,CAAC,GAAC9vC,CAAC,CAACi6B,WAAF,GAAgBlhB,KAAhB,CAAsBmV,CAAtB,CAAN,EAA+BhL,CAAC,GAACjjB,CAAC,CAACg6B,WAAF,GAAgBlhB,KAAhB,CAAsBmV,CAAtB,CAAjC,EAA0DuY,CAAC,GAACp+B,IAAI,CAACe,GAAL,CAAS0mC,CAAC,CAAClwC,MAAX,EAAkBsjB,CAAC,CAACtjB,MAApB,CAA5D,EAAwFs7B,CAAC,GAAC,CAA9F,EAAgGA,CAAC,GAACuL,CAAlG,EAAoGvL,CAAC,EAArG,EAAwG;AAAChN,KAAC,GAAC4hB,CAAC,CAAC5U,CAAD,CAAH;AAAO,QAAIyV,CAAC,GAACztB,CAAC,CAACgY,CAAD,CAAP;AAAW,QAAGhN,CAAC,IAAEyiB,CAAN,EAAQ,OAAO3wC,CAAC,GAACga,QAAQ,CAACkU,CAAD,EAAG,EAAH,CAAV,EAAiB,CAAC7mB,KAAK,CAACrH,CAAD,CAAN,KAAYC,CAAC,GAAC+Z,QAAQ,CAAC22B,CAAD,EAAG,EAAH,CAAV,EAAiB,CAACtpC,KAAK,CAACpH,CAAD,CAAN,IAAWD,CAAC,GAACC,CAA1C,IAA6CD,CAAC,GAACC,CAA/C,GAAiDiuB,CAAC,GAACyiB,CAAF,GAAI,CAAC,CAAL,GAAO,CAAhF;AAAkF;;AAAA,SAAOb,CAAC,CAAClwC,MAAF,IAAUsjB,CAAC,CAACtjB,MAAZ,GAAmBkwC,CAAC,CAAClwC,MAAF,GAASsjB,CAAC,CAACtjB,MAA9B,GAAqCI,CAAC,GAACC,CAAF,GAAI,CAAC,CAAL,GAAO,CAAnD;AAAqD,CAAzW;;AAA0W67D,IAAI,CAAC/yB,MAAL,CAAY2sD,eAAZ,GAA4B,UAAS11F,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAAC/yB,MAAL,CAAY0sD,mBAAZ,CAAgCz1F,CAAhC,EAAkCC,CAAlC,EAAoC,UAApC,CAAP;AAAuD,CAAjG;;AAC1W67D,IAAI,CAAC/yB,MAAL,CAAY4sD,iBAAZ,GAA8B,UAAS31F,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAAC/yB,MAAL,CAAY0sD,mBAAZ,CAAgCz1F,CAAhC,EAAkCC,CAAlC,EAAoC,gBAApC,CAAP;AAA6D,CAAzG;;AAA0G67D,IAAI,CAAC/yB,MAAL,CAAY6sD,eAAZ,GAA4B95B,IAAI,CAAC/yB,MAAL,CAAY4sD,iBAAxC;;AAA0D75B,IAAI,CAAC/yB,MAAL,CAAY8sD,SAAZ,GAAsB,UAAS71F,CAAT,EAAW;AAAC,SAAOg9B,kBAAkB,CAACI,MAAM,CAACp9B,CAAD,CAAP,CAAzB;AAAqC,CAAvE;;AAAwE87D,IAAI,CAAC/yB,MAAL,CAAY+sD,SAAZ,GAAsB,UAAS91F,CAAT,EAAW;AAAC,SAAOk9B,kBAAkB,CAACl9B,CAAC,CAACkZ,OAAF,CAAU,KAAV,EAAgB,GAAhB,CAAD,CAAzB;AAAgD,CAAlF;;AAAmF4iD,IAAI,CAAC/yB,MAAL,CAAYy/C,WAAZ,GAAwB1sB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBQ,WAA7C;;AAC/T1sB,IAAI,CAAC/yB,MAAL,CAAY0/C,UAAZ,GAAuB,UAASzoF,CAAT,EAAWC,CAAX,EAAa;AAACD,GAAC,GAAC87D,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBS,UAArB,CAAgCzoF,CAAhC,EAAkCC,CAAlC,CAAF;AAAuC67D,MAAI,CAAC/yB,MAAL,CAAYorD,sBAAZ,KAAqCn0F,CAAC,GAACA,CAAC,CAACkZ,OAAF,CAAU4iD,IAAI,CAAC/yB,MAAL,CAAYgtD,KAAtB,EAA4B,QAA5B,CAAvC;AAA8E,SAAO/1F,CAAP;AAAS,CAAnK;;AAAoK87D,IAAI,CAAC/yB,MAAL,CAAYgtD,KAAZ,GAAkB,IAAlB;;AAAuBj6B,IAAI,CAAC/yB,MAAL,CAAYitD,gBAAZ,GAA6B,UAASh2F,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAAC/yB,MAAL,CAAY4hC,QAAZ,CAAqB3qE,CAArB,EAAuB,GAAvB,IAA4B,CAAC87D,IAAI,CAAC/yB,MAAL,CAAYqrD,6BAAb,IAA4C,cAAat4B,IAAI,CAAC1gC,MAA9D,GAAqE0gC,IAAI,CAAC/yB,MAAL,CAAYktD,yBAAZ,CAAsCj2F,CAAtC,CAArE,GAA8G87D,IAAI,CAAC/yB,MAAL,CAAYmtD,wBAAZ,CAAqCl2F,CAArC,CAA1I,GAAkLA,CAAzL;AAA2L,CAApO;;AAC3L87D,IAAI,CAAC/yB,MAAL,CAAYotD,4BAAZ,GAAyC,UAASn2F,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAAC/yB,MAAL,CAAY4hC,QAAZ,CAAqB3qE,CAArB,EAAuB,GAAvB,IAA4B87D,IAAI,CAAC/yB,MAAL,CAAYktD,yBAAZ,CAAsCj2F,CAAtC,EAAwCC,CAAxC,CAA5B,GAAuED,CAA9E;AAAgF,CAAvI;;AACA87D,IAAI,CAAC/yB,MAAL,CAAYktD,yBAAZ,GAAsC,UAASj2F,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAAC;AAAC,aAAQ,GAAT;AAAa,YAAO,GAApB;AAAwB,YAAO,GAA/B;AAAmC,cAAS;AAA5C,GAAN;AAAuD,MAAI4hB,CAAC,GAAC7vC,CAAC,GAACA,CAAC,CAACyiE,aAAF,CAAgB,KAAhB,CAAD,GAAwB5G,IAAI,CAAC1gC,MAAL,CAAYoiC,QAAZ,CAAqBkF,aAArB,CAAmC,KAAnC,CAA/B;AAAyE,SAAO1iE,CAAC,CAACkZ,OAAF,CAAU4iD,IAAI,CAAC/yB,MAAL,CAAYqtD,oBAAtB,EAA2C,UAASp2F,CAAT,EAAWC,CAAX,EAAa;AAAC,QAAIijB,CAAC,GAACgL,CAAC,CAACluB,CAAD,CAAP;AAAW,QAAGkjB,CAAH,EAAK,OAAOA,CAAP;AAAS,WAAKjjB,CAAC,CAACo+B,MAAF,CAAS,CAAT,CAAL,KAAmBp+B,CAAC,GAAC9C,MAAM,CAAC,MAAI8C,CAAC,CAACiY,MAAF,CAAS,CAAT,CAAL,CAAR,EAA0B7Q,KAAK,CAACpH,CAAD,CAAL,KAAWijB,CAAC,GAACka,MAAM,CAACC,YAAP,CAAoBp9B,CAApB,CAAb,CAA7C;AAAmFijB,KAAC,KAAG44C,IAAI,CAACuQ,GAAL,CAAS8kB,IAAT,CAAce,YAAd,CAA2BpiD,CAA3B,EAA6BgsB,IAAI,CAACyH,IAAL,CAAUqtB,oBAAV,CAA+BC,4CAA/B,CAA4E/0B,IAAI,CAAC/yB,MAAL,CAAY03C,KAAZ,CAAkB9iF,IAAlB,CAAuB,qBAAvB,CAA5E,EACjYqC,CAAC,GAAC,GAD+X,CAA7B,GAC5VkjB,CAAC,GAAC4sB,CAAC,CAAC+hD,UAAF,CAAawE,SAAb,CAAuBz0F,KAAvB,CAA6B,CAA7B,EAA+B,CAAC,CAAhC,CADuV,CAAD;AAClT,WAAOssB,CAAC,CAACluB,CAAD,CAAD,GAAKkjB,CAAZ;AAAc,GAD+H,CAAP;AACtH,CAD9D;;AAC+D44C,IAAI,CAAC/yB,MAAL,CAAYmtD,wBAAZ,GAAqC,UAASl2F,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACkZ,OAAF,CAAU,YAAV,EAAuB,UAASlZ,CAAT,EAAWkuB,CAAX,EAAa;AAAC,YAAOA,CAAP;AAAU,WAAK,KAAL;AAAW,eAAM,GAAN;;AAAU,WAAK,IAAL;AAAU,eAAM,GAAN;;AAAU,WAAK,IAAL;AAAU,eAAM,GAAN;;AAAU,WAAK,MAAL;AAAY,eAAM,GAAN;;AAAU;AAAQ,eAAM,OAAKA,CAAC,CAACmQ,MAAF,CAAS,CAAT,CAAL,KAAmBnQ,CAAC,GAAC/wB,MAAM,CAAC,MAAI+wB,CAAC,CAAChW,MAAF,CAAS,CAAT,CAAL,CAAR,EAA0B7Q,KAAK,CAAC6mB,CAAD,CAAlD,IAAuDluB,CAAvD,GAAyDo9B,MAAM,CAACC,YAAP,CAAoBnP,CAApB,CAA/D;AAArG;AAA4L,GAAjO,CAAP;AAA0O,CAA3R;;AAA4R4tC,IAAI,CAAC/yB,MAAL,CAAYqtD,oBAAZ,GAAiC,iBAAjC;;AAAmDt6B,IAAI,CAAC/yB,MAAL,CAAYkgD,gBAAZ,GAA6B,UAASjpF,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAAC/yB,MAAL,CAAYy/C,WAAZ,CAAwBxoF,CAAC,CAACkZ,OAAF,CAAU,KAAV,EAAgB,SAAhB,CAAxB,EAAmDjZ,CAAnD,CAAP;AAA6D,CAAxG;;AAC9Y67D,IAAI,CAAC/yB,MAAL,CAAYutD,cAAZ,GAA2B,UAASt2F,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACkZ,OAAF,CAAU,aAAV,EAAwB,OAAK4iD,IAAI,CAAC/yB,MAAL,CAAYsrD,OAAZ,CAAoBC,IAAjD,CAAP;AAA8D,CAArG;;AAAsGx4B,IAAI,CAAC/yB,MAAL,CAAYwtD,WAAZ,GAAwB,UAASv2F,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAI,IAAIiuB,CAAC,GAACjuB,CAAC,CAACL,MAAR,EAAekwC,CAAC,GAAC,CAArB,EAAuBA,CAAC,GAAC5hB,CAAzB,EAA2B4hB,CAAC,EAA5B,EAA+B;AAAC,QAAI5sB,CAAC,GAAC,KAAGgL,CAAH,GAAKjuB,CAAL,GAAOA,CAAC,CAACo+B,MAAF,CAASyR,CAAT,CAAb;AAAyB,QAAG9vC,CAAC,CAACq+B,MAAF,CAAS,CAAT,KAAanb,CAAb,IAAgBljB,CAAC,CAACq+B,MAAF,CAASr+B,CAAC,CAACJ,MAAF,GAAS,CAAlB,KAAsBsjB,CAAzC,EAA2C,OAAOljB,CAAC,CAAC88C,SAAF,CAAY,CAAZ,EAAc98C,CAAC,CAACJ,MAAF,GAAS,CAAvB,CAAP;AAAiC;;AAAA,SAAOI,CAAP;AAAS,CAApL;;AAAqL87D,IAAI,CAAC/yB,MAAL,CAAYytD,QAAZ,GAAqB,UAASx2F,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACA,GAAC,KAAGluB,CAAC,GAAC87D,IAAI,CAAC/yB,MAAL,CAAYitD,gBAAZ,CAA6Bh2F,CAA7B,CAAL,CAAD;AAAuCA,GAAC,CAACJ,MAAF,GAASK,CAAT,KAAaD,CAAC,GAACA,CAAC,CAAC88C,SAAF,CAAY,CAAZ,EAAc78C,CAAC,GAAC,CAAhB,IAAmB,KAAlC;AAAyCiuB,GAAC,KAAGluB,CAAC,GAAC87D,IAAI,CAAC/yB,MAAL,CAAY0/C,UAAZ,CAAuBzoF,CAAvB,CAAL,CAAD;AAAiC,SAAOA,CAAP;AAAS,CAA/J;;AAC3R87D,IAAI,CAAC/yB,MAAL,CAAY0tD,cAAZ,GAA2B,UAASz2F,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC5hB,GAAC,KAAGluB,CAAC,GAAC87D,IAAI,CAAC/yB,MAAL,CAAYitD,gBAAZ,CAA6Bh2F,CAA7B,CAAL,CAAD;;AAAuC,MAAG8vC,CAAC,IAAE9vC,CAAC,CAACJ,MAAF,GAASK,CAAf,EAAiB;AAAC6vC,KAAC,GAAC7vC,CAAF,KAAM6vC,CAAC,GAAC7vC,CAAR;AAAW,QAAIijB,CAAC,GAACljB,CAAC,CAACJ,MAAF,GAASkwC,CAAf;AAAiB9vC,KAAC,GAACA,CAAC,CAAC88C,SAAF,CAAY,CAAZ,EAAc78C,CAAC,GAAC6vC,CAAhB,IAAmB,KAAnB,GAAyB9vC,CAAC,CAAC88C,SAAF,CAAY55B,CAAZ,CAA3B;AAA0C,GAAxF,MAA6FljB,CAAC,CAACJ,MAAF,GAASK,CAAT,KAAa6vC,CAAC,GAACznC,IAAI,CAACC,KAAL,CAAWrI,CAAC,GAAC,CAAb,CAAF,EAAkBijB,CAAC,GAACljB,CAAC,CAACJ,MAAF,GAASkwC,CAA7B,EAA+B9vC,CAAC,GAACA,CAAC,CAAC88C,SAAF,CAAY,CAAZ,EAAchN,CAAC,GAAC7vC,CAAC,GAAC,CAAlB,IAAqB,KAArB,GAA2BD,CAAC,CAAC88C,SAAF,CAAY55B,CAAZ,CAAzE;;AAAyFgL,GAAC,KAAGluB,CAAC,GAAC87D,IAAI,CAAC/yB,MAAL,CAAY0/C,UAAZ,CAAuBzoF,CAAvB,CAAL,CAAD;AAAiC,SAAOA,CAAP;AAAS,CAApT;;AAAqT87D,IAAI,CAAC/yB,MAAL,CAAY2tD,mBAAZ,GAAgC;AAAC,UAAO,KAAR;AAAc,QAAK,KAAnB;AAAyB,QAAK,KAA9B;AAAoC,QAAK,KAAzC;AAA+C,QAAK,KAApD;AAA0D,QAAK,KAA/D;AAAqE,UAAO,OAA5E;AAAoF,OAAI,KAAxF;AAA8F,QAAK,MAAnG;AAA0G,OAAI;AAA9G,CAAhC;AAAyJ56B,IAAI,CAAC/yB,MAAL,CAAY4tD,cAAZ,GAA2B;AAAC,OAAI;AAAL,CAA3B;;AAC9c76B,IAAI,CAAC/yB,MAAL,CAAYnI,KAAZ,GAAkB,UAAS5gC,CAAT,EAAW;AAACA,GAAC,GAACo9B,MAAM,CAACp9B,CAAD,CAAR;;AAAY,OAAI,IAAIC,CAAC,GAAC,CAAC,GAAD,CAAN,EAAYiuB,CAAC,GAAC,CAAlB,EAAoBA,CAAC,GAACluB,CAAC,CAACJ,MAAxB,EAA+BsuB,CAAC,EAAhC,EAAmC;AAAC,QAAI4hB,CAAC,GAAC9vC,CAAC,CAACq+B,MAAF,CAASnQ,CAAT,CAAN;AAAA,QAAkBhL,CAAC,GAAC4sB,CAAC,CAAC73B,UAAF,CAAa,CAAb,CAApB;AAAoChY,KAAC,CAACiuB,CAAC,GAAC,CAAH,CAAD,GAAO4tC,IAAI,CAAC/yB,MAAL,CAAY2tD,mBAAZ,CAAgC5mD,CAAhC,MAAqC,KAAG5sB,CAAH,IAAM,MAAIA,CAAV,GAAY4sB,CAAZ,GAAcgsB,IAAI,CAAC/yB,MAAL,CAAY6tD,UAAZ,CAAuB9mD,CAAvB,CAAnD,CAAP;AAAqF;;AAAA7vC,GAAC,CAACxB,IAAF,CAAO,GAAP;AAAY,SAAOwB,CAAC,CAAC0a,IAAF,CAAO,EAAP,CAAP;AAAkB,CAArO;;AAAsOmhD,IAAI,CAAC/yB,MAAL,CAAY8tD,YAAZ,GAAyB,UAAS72F,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC,EAAN,EAASiuB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAACluB,CAAC,CAACJ,MAArB,EAA4BsuB,CAAC,EAA7B,EAAgCjuB,CAAC,CAACiuB,CAAD,CAAD,GAAK4tC,IAAI,CAAC/yB,MAAL,CAAY6tD,UAAZ,CAAuB52F,CAAC,CAACq+B,MAAF,CAASnQ,CAAT,CAAvB,CAAL;;AAAyC,SAAOjuB,CAAC,CAAC0a,IAAF,CAAO,EAAP,CAAP;AAAkB,CAAhI;;AACtOmhD,IAAI,CAAC/yB,MAAL,CAAY6tD,UAAZ,GAAuB,UAAS52F,CAAT,EAAW;AAAC,MAAGA,CAAC,IAAI87D,IAAI,CAAC/yB,MAAL,CAAY4tD,cAApB,EAAmC,OAAO76B,IAAI,CAAC/yB,MAAL,CAAY4tD,cAAZ,CAA2B32F,CAA3B,CAAP;AAAqC,MAAGA,CAAC,IAAI87D,IAAI,CAAC/yB,MAAL,CAAY2tD,mBAApB,EAAwC,OAAO56B,IAAI,CAAC/yB,MAAL,CAAY4tD,cAAZ,CAA2B32F,CAA3B,IAA8B87D,IAAI,CAAC/yB,MAAL,CAAY2tD,mBAAZ,CAAgC12F,CAAhC,CAArC;AAAwE,MAAIC,CAAC,GAACD,CAAC,CAACiY,UAAF,CAAa,CAAb,CAAN;AAAsB,MAAG,KAAGhY,CAAH,IAAM,MAAIA,CAAb,EAAe,IAAIiuB,CAAC,GAACluB,CAAN,CAAf,KAA2B;AAAC,QAAG,MAAIC,CAAP,EAAS;AAAC,UAAGiuB,CAAC,GAAC,KAAF,EAAQ,KAAGjuB,CAAH,IAAM,MAAIA,CAArB,EAAuBiuB,CAAC,IAAE,GAAH;AAAO,KAAxC,MAA6CA,CAAC,GAAC,KAAF,EAAQ,OAAKjuB,CAAL,KAASiuB,CAAC,IAAE,GAAZ,CAAR;;AAAyBA,KAAC,IAAEjuB,CAAC,CAACuW,QAAF,CAAW,EAAX,EAAeqT,WAAf,EAAH;AAAgC;AAAA,SAAOiyC,IAAI,CAAC/yB,MAAL,CAAY4tD,cAAZ,CAA2B32F,CAA3B,IAA8BkuB,CAArC;AAAuC,CAA1Z;;AAA2Z4tC,IAAI,CAAC/yB,MAAL,CAAY4hC,QAAZ,GAAqB7O,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBrd,QAA1C;AAAmD7O,IAAI,CAAC/yB,MAAL,CAAYmgD,uBAAZ,GAAoCptB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBkB,uBAAzD;;AAC9cptB,IAAI,CAAC/yB,MAAL,CAAY+tD,OAAZ,GAAoB,UAAS92F,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOD,CAAC,IAAEC,CAAH,GAAKD,CAAC,CAACia,KAAF,CAAQha,CAAR,EAAWL,MAAX,GAAkB,CAAvB,GAAyB,CAAhC;AAAkC,CAApE;;AAAqEk8D,IAAI,CAAC/yB,MAAL,CAAYspC,QAAZ,GAAqB,UAASryE,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC9vC,CAAN;AAAQ,OAAGC,CAAH,IAAMA,CAAC,GAACD,CAAC,CAACJ,MAAV,IAAkB,IAAEsuB,CAApB,KAAwB4hB,CAAC,GAAC9vC,CAAC,CAACkY,MAAF,CAAS,CAAT,EAAWjY,CAAX,IAAcD,CAAC,CAACkY,MAAF,CAASjY,CAAC,GAACiuB,CAAX,EAAaluB,CAAC,CAACJ,MAAF,GAASK,CAAT,GAAWiuB,CAAxB,CAAxC;AAAoE,SAAO4hB,CAAP;AAAS,CAA1H;;AAA2HgsB,IAAI,CAAC/yB,MAAL,CAAYpnC,MAAZ,GAAmB,UAAS3B,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOD,CAAC,CAACkZ,OAAF,CAAUjZ,CAAV,EAAY,EAAZ,CAAP;AAAuB,CAAxD;;AAAyD67D,IAAI,CAAC/yB,MAAL,CAAYguD,SAAZ,GAAsB,UAAS/2F,CAAT,EAAWC,CAAX,EAAa;AAACA,GAAC,GAAC,IAAIqZ,MAAJ,CAAWwiD,IAAI,CAAC/yB,MAAL,CAAYiuD,YAAZ,CAAyB/2F,CAAzB,CAAX,EAAuC,GAAvC,CAAF;AAA8C,SAAOD,CAAC,CAACkZ,OAAF,CAAUjZ,CAAV,EAAY,EAAZ,CAAP;AAAuB,CAAzG;;AAA0G67D,IAAI,CAAC/yB,MAAL,CAAYkuD,UAAZ,GAAuB,UAASj3F,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACjuB,GAAC,GAAC,IAAIqZ,MAAJ,CAAWwiD,IAAI,CAAC/yB,MAAL,CAAYiuD,YAAZ,CAAyB/2F,CAAzB,CAAX,EAAuC,GAAvC,CAAF;AAA8C,SAAOD,CAAC,CAACkZ,OAAF,CAAUjZ,CAAV,EAAYiuB,CAAC,CAAChV,OAAF,CAAU,KAAV,EAAgB,MAAhB,CAAZ,CAAP;AAA4C,CAAjI;;AACnW4iD,IAAI,CAAC/yB,MAAL,CAAYiuD,YAAZ,GAAyB,UAASh3F,CAAT,EAAW;AAAC,SAAOo9B,MAAM,CAACp9B,CAAD,CAAN,CAAUkZ,OAAV,CAAkB,+BAAlB,EAAkD,MAAlD,EAA0DA,OAA1D,CAAkE,OAAlE,EAA0E,OAA1E,CAAP;AAA0F,CAA/H;;AAAgI4iD,IAAI,CAAC/yB,MAAL,CAAY0qC,MAAZ,GAAmBr2C,MAAM,CAACxnB,SAAP,CAAiB69D,MAAjB,GAAwB,UAASzzE,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOD,CAAC,CAACyzE,MAAF,CAASxzE,CAAT,CAAP;AAAmB,CAAzD,GAA0D,UAASD,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOvC,KAAK,CAACuC,CAAC,GAAC,CAAH,CAAL,CAAW0a,IAAX,CAAgB3a,CAAhB,CAAP;AAA0B,CAArH;;AAAsH87D,IAAI,CAAC/yB,MAAL,CAAYmuD,SAAZ,GAAsB,UAASl3F,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACluB,GAAC,GAAC87D,IAAI,CAACC,KAAL,CAAW7tC,CAAX,IAAcluB,CAAC,CAACyZ,OAAF,CAAUyU,CAAV,CAAd,GAA2BkP,MAAM,CAACp9B,CAAD,CAAnC;AAAuCkuB,GAAC,GAACluB,CAAC,CAAC4H,OAAF,CAAU,GAAV,CAAF;AAAiB,GAAC,CAAD,IAAIsmB,CAAJ,KAAQA,CAAC,GAACluB,CAAC,CAACJ,MAAZ;AAAoB,SAAOk8D,IAAI,CAAC/yB,MAAL,CAAY0qC,MAAZ,CAAmB,GAAnB,EAAuBprE,IAAI,CAACge,GAAL,CAAS,CAAT,EAAWpmB,CAAC,GAACiuB,CAAb,CAAvB,IAAwCluB,CAA/C;AAAiD,CAAnK;;AAAoK87D,IAAI,CAAC/yB,MAAL,CAAY4rD,QAAZ,GAAqB,UAAS30F,CAAT,EAAW;AAAC,SAAO,QAAMA,CAAN,GAAQ,EAAR,GAAWo9B,MAAM,CAACp9B,CAAD,CAAxB;AAA4B,CAA7D;;AAC1Z87D,IAAI,CAAC/yB,MAAL,CAAYouD,WAAZ,GAAwB,UAASn3F,CAAT,EAAW;AAAC,SAAOtC,KAAK,CAACkY,SAAN,CAAgB+E,IAAhB,CAAqBlE,IAArB,CAA0B3N,SAA1B,EAAoC,EAApC,CAAP;AAA+C,CAAnF;;AAAoFgzD,IAAI,CAAC/yB,MAAL,CAAYquD,eAAZ,GAA4B,YAAU;AAAC,SAAO/uF,IAAI,CAACC,KAAL,CAAW,aAAWD,IAAI,CAACqlB,MAAL,EAAtB,EAAqClX,QAArC,CAA8C,EAA9C,IAAkDnO,IAAI,CAACuF,GAAL,CAASvF,IAAI,CAACC,KAAL,CAAW,aAAWD,IAAI,CAACqlB,MAAL,EAAtB,IAAqCouC,IAAI,CAAC3zD,GAAL,EAA9C,EAA0DqO,QAA1D,CAAmE,EAAnE,CAAzD;AAAgI,CAAvK;;AAAwKslD,IAAI,CAAC/yB,MAAL,CAAYogD,eAAZ,GAA4BrtB,IAAI,CAAC/yB,MAAL,CAAYi/C,QAAZ,CAAqBmB,eAAjD;;AAAiErtB,IAAI,CAAC/yB,MAAL,CAAYsuD,QAAZ,GAAqB,UAASr3F,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC,CAAN,EAAQiuB,CAAC,GAAC,CAAd,EAAgBA,CAAC,GAACluB,CAAC,CAACJ,MAApB,EAA2B,EAAEsuB,CAA7B,EAA+BjuB,CAAC,GAAC,KAAGA,CAAH,GAAKD,CAAC,CAACiY,UAAF,CAAaiW,CAAb,CAAL,KAAuB,CAAzB;;AAA2B,SAAOjuB,CAAP;AAAS,CAApG;;AAAqG67D,IAAI,CAAC/yB,MAAL,CAAYuuD,oBAAZ,GAAiC,aAAWjvF,IAAI,CAACqlB,MAAL,EAAX,GAAyB,CAA1D;;AAClaouC,IAAI,CAAC/yB,MAAL,CAAYwuD,kBAAZ,GAA+B,YAAU;AAAC,SAAM,UAAQz7B,IAAI,CAAC/yB,MAAL,CAAYuuD,oBAAZ,EAAd;AAAiD,CAA3F;;AAA4Fx7B,IAAI,CAAC/yB,MAAL,CAAYyuD,QAAZ,GAAqB,UAASx3F,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC9C,MAAM,CAAC6C,CAAD,CAAZ;AAAgB,SAAO,KAAGC,CAAH,IAAM67D,IAAI,CAAC/yB,MAAL,CAAYw/C,mBAAZ,CAAgCvoF,CAAhC,CAAN,GAAyCwI,GAAzC,GAA6CvI,CAApD;AAAsD,CAAvG;;AAAwG67D,IAAI,CAAC/yB,MAAL,CAAY0uD,gBAAZ,GAA6B,UAASz3F,CAAT,EAAW;AAAC,SAAM,yBAAyBof,IAAzB,CAA8Bpf,CAA9B,CAAN;AAAuC,CAAhF;;AAAiF87D,IAAI,CAAC/yB,MAAL,CAAY2uD,gBAAZ,GAA6B,UAAS13F,CAAT,EAAW;AAAC,SAAM,mBAAmBof,IAAnB,CAAwBpf,CAAxB,CAAN;AAAiC,CAA1E;;AAA2E87D,IAAI,CAAC/yB,MAAL,CAAY4uD,WAAZ,GAAwB,UAAS33F,CAAT,EAAW;AAAC,SAAOo9B,MAAM,CAACp9B,CAAD,CAAN,CAAUkZ,OAAV,CAAkB,YAAlB,EAA+B,UAASlZ,CAAT,EAAWkuB,CAAX,EAAa;AAAC,WAAOA,CAAC,CAACrE,WAAF,EAAP;AAAuB,GAApE,CAAP;AAA6E,CAAjH;;AAChWiyC,IAAI,CAAC/yB,MAAL,CAAY6uD,cAAZ,GAA2B,UAAS53F,CAAT,EAAW;AAAC,SAAOo9B,MAAM,CAACp9B,CAAD,CAAN,CAAUkZ,OAAV,CAAkB,UAAlB,EAA6B,KAA7B,EAAoC+gB,WAApC,EAAP;AAAyD,CAAhG;;AAAiG6hC,IAAI,CAAC/yB,MAAL,CAAY8uD,WAAZ,GAAwB,UAAS73F,CAAT,EAAWC,CAAX,EAAa;AAACA,GAAC,GAAC67D,IAAI,CAAC9jD,QAAL,CAAc/X,CAAd,IAAiB67D,IAAI,CAAC/yB,MAAL,CAAYiuD,YAAZ,CAAyB/2F,CAAzB,CAAjB,GAA6C,KAA/C;AAAqD,SAAOD,CAAC,CAACkZ,OAAF,CAAU,IAAII,MAAJ,CAAW,QAAMrZ,CAAC,GAAC,OAAKA,CAAL,GAAO,IAAR,GAAa,EAApB,IAAwB,UAAnC,EAA8C,GAA9C,CAAV,EAA6D,UAASD,CAAT,EAAWC,CAAX,EAAaijB,CAAb,EAAe;AAAC,WAAOjjB,CAAC,GAACijB,CAAC,CAAC2G,WAAF,EAAT;AAAyB,GAAtG,CAAP;AAA+G,CAA1M;;AAA2MiyC,IAAI,CAAC/yB,MAAL,CAAY+uD,UAAZ,GAAuB,UAAS93F,CAAT,EAAW;AAAC,SAAOo9B,MAAM,CAACp9B,CAAC,CAACq+B,MAAF,CAAS,CAAT,CAAD,CAAN,CAAoBxU,WAApB,KAAkCuT,MAAM,CAACp9B,CAAC,CAACkY,MAAF,CAAS,CAAT,CAAD,CAAN,CAAoB+hB,WAApB,EAAzC;AAA2E,CAA9G;;AAC5S6hC,IAAI,CAAC/yB,MAAL,CAAY/uB,QAAZ,GAAqB,UAASha,CAAT,EAAW;AAAC25D,UAAQ,CAAC35D,CAAD,CAAR,KAAcA,CAAC,GAACo9B,MAAM,CAACp9B,CAAD,CAAtB;AAA2B,SAAO87D,IAAI,CAAC9jD,QAAL,CAAchY,CAAd,IAAiB,YAAYof,IAAZ,CAAiBpf,CAAjB,IAAoBga,QAAQ,CAACha,CAAD,EAAG,EAAH,CAA5B,GAAmCga,QAAQ,CAACha,CAAD,EAAG,EAAH,CAA5D,GAAmEwI,GAA1E;AAA8E,CAA1I;;AAA2IszD,IAAI,CAAC/yB,MAAL,CAAYgvD,UAAZ,GAAuB,UAAS/3F,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACluB,GAAC,GAACA,CAAC,CAACia,KAAF,CAAQha,CAAR,CAAF;;AAAa,OAAI,IAAI6vC,CAAC,GAAC,EAAV,EAAa,IAAE5hB,CAAF,IAAKluB,CAAC,CAACJ,MAApB,GAA4BkwC,CAAC,CAACrxC,IAAF,CAAOuB,CAAC,CAACM,KAAF,EAAP,GAAkB4tB,CAAC,EAAnB;;AAAsBluB,GAAC,CAACJ,MAAF,IAAUkwC,CAAC,CAACrxC,IAAF,CAAOuB,CAAC,CAAC2a,IAAF,CAAO1a,CAAP,CAAP,CAAV;AAA4B,SAAO6vC,CAAP;AAAS,CAA3I;;AAA4IgsB,IAAI,CAAC/yB,MAAL,CAAYivD,aAAZ,GAA0B,UAASh4F,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAGA,CAAH,EAAK,YAAU,OAAOA,CAAjB,KAAqBA,CAAC,GAAC,CAACA,CAAD,CAAvB,EAAL,KAAsC,OAAOD,CAAP;;AAAS,OAAI,IAAIkuB,CAAC,GAAC,CAAC,CAAP,EAAS4hB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAAC7vC,CAAC,CAACL,MAArB,EAA4BkwC,CAAC,EAA7B,EAAgC,IAAG,MAAI7vC,CAAC,CAAC6vC,CAAD,CAAR,EAAY;AAAC,QAAI5sB,CAAC,GAACljB,CAAC,CAACo9D,WAAF,CAAcn9D,CAAC,CAAC6vC,CAAD,CAAf,CAAN;AAA0B5sB,KAAC,GAACgL,CAAF,KAAMA,CAAC,GAAChL,CAAR;AAAW;;AAAA,SAAM,CAAC,CAAD,IAAIgL,CAAJ,GAAMluB,CAAN,GAAQA,CAAC,CAAC4B,KAAF,CAAQssB,CAAC,GAAC,CAAV,CAAd;AAA2B,CAApM;;AACvR4tC,IAAI,CAAC/yB,MAAL,CAAYkvD,YAAZ,GAAyB,UAASj4F,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAAC,EAAN;AAAA,MAAS4hB,CAAC,GAAC,EAAX;AAAc,MAAG9vC,CAAC,IAAEC,CAAN,EAAQ,OAAO,CAAP;AAAS,MAAG,CAACD,CAAC,CAACJ,MAAH,IAAW,CAACK,CAAC,CAACL,MAAjB,EAAwB,OAAOyI,IAAI,CAACge,GAAL,CAASrmB,CAAC,CAACJ,MAAX,EAAkBK,CAAC,CAACL,MAApB,CAAP;;AAAmC,OAAI,IAAIsjB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjjB,CAAC,CAACL,MAAF,GAAS,CAAvB,EAAyBsjB,CAAC,EAA1B,EAA6BgL,CAAC,CAAChL,CAAD,CAAD,GAAKA,CAAL;;AAAO,OAAIA,CAAC,GAAC,CAAN,EAAQA,CAAC,GAACljB,CAAC,CAACJ,MAAZ,EAAmBsjB,CAAC,EAApB,EAAuB;AAAC4sB,KAAC,CAAC,CAAD,CAAD,GAAK5sB,CAAC,GAAC,CAAP;;AAAS,SAAI,IAAIujB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACxmC,CAAC,CAACL,MAAhB,EAAuB6mC,CAAC,EAAxB,EAA2BqJ,CAAC,CAACrJ,CAAC,GAAC,CAAH,CAAD,GAAOp+B,IAAI,CAACe,GAAL,CAAS0mC,CAAC,CAACrJ,CAAD,CAAD,GAAK,CAAd,EAAgBvY,CAAC,CAACuY,CAAC,GAAC,CAAH,CAAD,GAAO,CAAvB,EAAyBvY,CAAC,CAACuY,CAAD,CAAD,GAAKtpC,MAAM,CAAC6C,CAAC,CAACkjB,CAAD,CAAD,IAAMjjB,CAAC,CAACwmC,CAAD,CAAR,CAApC,CAAP;;AAAyD,SAAIA,CAAC,GAAC,CAAN,EAAQA,CAAC,GAACvY,CAAC,CAACtuB,MAAZ,EAAmB6mC,CAAC,EAApB,EAAuBvY,CAAC,CAACuY,CAAD,CAAD,GAAKqJ,CAAC,CAACrJ,CAAD,CAAN;AAAU;;AAAA,SAAOqJ,CAAC,CAAC7vC,CAAC,CAACL,MAAH,CAAR;AAAmB,CAA9U;;AAA+Uk8D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,GAA2B,EAA3B;;AAA8Bp8B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BC,QAA3B,GAAoC,YAAU;AAAC,SAAOr8B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,QAAxC,CAAP;AAAyD,CAAxG;;AAAyG7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BE,SAA3B,GAAqC,YAAU;AAAC,SAAOt8B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,SAAxC,KAAoD7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,MAAxC,CAA3D;AAA2G,CAA3J;;AAA4J7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BnK,MAA3B,GAAkC,YAAU;AAAC,SAAOjyB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,MAAxC,CAAP;AAAuD,CAApG;;AAClnB7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BG,QAA3B,GAAoC,YAAU;AAAC,SAAOv8B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBO,wBAAzB,CAAkD,QAAlD,KAA6D,CAAC9wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BnK,MAA3B,EAArE;AAAyG,CAAxJ;;AAAyJjyB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BI,OAA3B,GAAmC,YAAU;AAAC,SAAOx8B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,OAAxC,KAAkD,CAAC7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BG,QAA3B,EAAnD,IAA0F,CAACv8B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BE,SAA3B,EAA3F,IAAmI,CAACt8B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BnK,MAA3B,EAA3I;AAA+K,CAA7N;;AACzJjyB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2B5J,UAA3B,GAAsC,YAAU;AAAC,MAAItuF,CAAC,GAAC87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBK,YAAzB,EAAN;;AAA8C,MAAG1sF,CAAH,EAAK;AAACA,KAAC,GAAC87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBQ,oBAAzB,CAA8C7sF,CAA9C,CAAF;AAAmD,QAAIC,CAAC,GAAC67D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BK,eAA3B,CAA2Cv4F,CAA3C,CAAN;AAAoD,QAAGC,CAAH,EAAK,OAAM,WAASA,CAAC,CAAC,CAAD,CAAV,GAAc67D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BM,iBAA3B,CAA6Cx4F,CAA7C,EAA+C,SAA/C,CAAd,GAAwEC,CAAC,CAAC,CAAD,CAA/E;AAAmFD,KAAC,GAACA,CAAC,CAAC,CAAD,CAAH;AAAO,QAAIkuB,CAAJ;AAAM,QAAGluB,CAAC,KAAGkuB,CAAC,GAACluB,CAAC,CAAC,CAAD,CAAN,CAAD,KAAckuB,CAAC,GAAC,qBAAqB4d,IAArB,CAA0B5d,CAA1B,CAAhB,CAAH,EAAiD,OAAOA,CAAC,CAAC,CAAD,CAAR;AAAY;;AAAA,SAAM,EAAN;AAAS,CAAvX;;AACA4tC,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BK,eAA3B,GAA2C,UAASv4F,CAAT,EAAW;AAAC,MAAG,CAAC87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BnK,MAA3B,EAAJ,EAAwC,OAAO/tF,CAAC,CAAC,CAAD,CAAR;;AAAY,OAAI,IAAIC,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACD,CAAC,CAACJ,MAAhB,EAAuBK,CAAC,EAAxB,EAA2B;AAAC,QAAIiuB,CAAC,GAACluB,CAAC,CAACC,CAAD,CAAP;AAAW,QAAG,UAAQiuB,CAAC,CAAC,CAAD,CAAZ,EAAgB,OAAOA,CAAP;AAAS;AAAC,CAA5K;;AAA6K4tC,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2B1J,iBAA3B,GAA6C,UAASxuF,CAAT,EAAW;AAAC,SAAO,KAAG87D,IAAI,CAAC/yB,MAAL,CAAYogD,eAAZ,CAA4BrtB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2B5J,UAA3B,EAA5B,EAAoEtuF,CAApE,CAAV;AAAiF,CAA1I;;AAA2I87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BM,iBAA3B,GAA6C,UAASx4F,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAM,CAACD,CAAC,GAAC87D,IAAI,CAAC/zD,KAAL,CAAWuN,IAAX,CAAgBtV,CAAhB,EAAkB,UAASA,CAAT,EAAW;AAAC,WAAOC,CAAC,IAAED,CAAC,CAAC,CAAD,CAAX;AAAe,GAA7C,CAAH,KAAoDA,CAAC,CAAC,CAAD,CAArD,IAA0D,EAAhE;AAAmE,CAA9H;;AAA+H87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,GAA6B,EAA7B;;AAAgCymC,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BojE,SAA7B,GAAuC,YAAU;AAAC,SAAO38B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,SAAxC,CAAP;AAA0D,CAA5G;;AAA6G7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BqjE,MAA7B,GAAoC,YAAU;AAAC,SAAO58B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,MAAxC,CAAP;AAAuD,CAAtG;;AAAuG7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BsjE,QAA7B,GAAsC,YAAU;AAAC,SAAO78B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,QAAxC,KAAmD,CAAC7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,MAAxC,CAApD,IAAqG,CAAC7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,MAAxC,CAA7G;AAA6J,CAA9M;;AAA+M7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BujE,MAA7B,GAAoC,YAAU;AAAC,SAAO98B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,MAAxC,CAAP;AAAuD,CAAtG;;AAC13B7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BwjE,KAA7B,GAAmC,YAAU;AAAC,SAAO/8B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BsjE,QAA7B,MAAyC78B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BujE,MAA7B,EAAzC,IAAgF98B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BqjE,MAA7B,EAAvF;AAA6H,CAA3K;;AAA4K58B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6ByjE,WAA7B,GAAyC,YAAU;AAAC,SAAOh9B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,WAAxC,CAAP;AAA4D,CAAhH;;AAAiH7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6B0jE,OAA7B,GAAqC,YAAU;AAAC,SAAOj9B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,OAAxC,CAAP;AAAwD,CAAxG;;AAAyG7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6B2jE,SAA7B,GAAuC,YAAU;AAAC,SAAOl9B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,SAAxC,CAAP;AAA0D,CAA5G;;AACtY7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6B4jE,UAA7B,GAAwC,YAAU;AAAC,SAAOn9B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,MAAxC,CAAP;AAAuD,CAA1G;;AAA2G7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6B6jE,YAA7B,GAA0C,YAAU;AAAC,SAAOp9B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,OAAxC,CAAP;AAAwD,CAA7G;;AAA8G7wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6B8jE,OAA7B,GAAqC,YAAU;AAAC,SAAOr9B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBO,wBAAzB,CAAkD,OAAlD,CAAP;AAAkE,CAAlH;;AAAmH9wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6B+jE,UAA7B,GAAwC,YAAU;AAAC,SAAOt9B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBO,wBAAzB,CAAkD,MAAlD,CAAP;AAAiE,CAApH;;AAC5U9wB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6Bi5D,UAA7B,GAAwC,YAAU;AAAC,MAAItuF,CAAC,GAAC87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBK,YAAzB,EAAN;AAAA,MAA8CzsF,CAAC,GAAC,EAAhD;AAAmD67D,MAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6B2jE,SAA7B,MAA0C/4F,CAAC,GAAC,gCAAF,EAAmCA,CAAC,GAAC,CAACD,CAAC,GAACC,CAAC,CAAC6rC,IAAF,CAAO9rC,CAAP,CAAH,IAAcA,CAAC,CAAC,CAAD,CAAf,GAAmB,KAAlG,IAAyG87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BwjE,KAA7B,MAAsC54F,CAAC,GAAC,uCAAF,EAA0CA,CAAC,GAAC,CAACD,CAAC,GAACC,CAAC,CAAC6rC,IAAF,CAAO9rC,CAAP,CAAH,KAAeA,CAAC,CAAC,CAAD,CAAD,CAAKkZ,OAAL,CAAa,IAAb,EAAkB,GAAlB,CAAjG,IAAyH4iD,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6ByjE,WAA7B,MAA4C74F,CAAC,GAAC,qBAAF,EAAwBA,CAAC,GAAC,CAACD,CAAC,GAACC,CAAC,CAAC6rC,IAAF,CAAO9rC,CAAP,CAAH,IAAcA,CAAC,CAAC,CAAD,CAAD,CAAKkZ,OAAL,CAAa,IAAb,EAAkB,GAAlB,CAAd,GAAqC,IAA3G,IAAiH4iD,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6B8jE,OAA7B,MAAwCl5F,CAAC,GAAC,mBAAF,EACjeA,CAAC,GAAC,CAACD,CAAC,GAACC,CAAC,CAAC6rC,IAAF,CAAO9rC,CAAP,CAAH,KAAeA,CAAC,CAAC,CAAD,CADua,IACla87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BojE,SAA7B,MAA0Cx4F,CAAC,GAAC,2BAAF,EAA8BA,CAAC,GAAC,CAACD,CAAC,GAACC,CAAC,CAAC6rC,IAAF,CAAO9rC,CAAP,CAAH,KAAeA,CAAC,CAAC,CAAD,CAA1F,IAA+F87D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6B4jE,UAA7B,OAA4Ch5F,CAAC,GAAC,wCAAF,EAA2CA,CAAC,GAAC,CAACD,CAAC,GAACC,CAAC,CAAC6rC,IAAF,CAAO9rC,CAAP,CAAH,KAAeA,CAAC,CAAC,CAAD,CAAzG,CADhB;AAC8H,SAAOC,CAAC,IAAE,EAAV;AAAa,CADjP;;AACkP67D,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6Bm5D,iBAA7B,GAA+C,UAASxuF,CAAT,EAAW;AAAC,SAAO,KAAG87D,IAAI,CAAC/yB,MAAL,CAAYogD,eAAZ,CAA4BrtB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6Bi5D,UAA7B,EAA5B,EAAsEtuF,CAAtE,CAAV;AAAmF,CAA9I;;AAA+I87D,IAAI,CAACu9B,OAAL,GAAa,EAAb;;AAAgBv9B,IAAI,CAACu9B,OAAL,CAAa30F,MAAb,GAAoB,UAAS1E,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOA,CAAP;AAAS,CAA3C;;AAA4C67D,IAAI,CAACu9B,OAAL,CAAaC,cAAb,GAA4B,UAASt5F,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOD,CAAP;AAAS,CAAnD;;AAAoD87D,IAAI,CAACu9B,OAAL,CAAaE,SAAb,GAAuB,UAASv5F,CAAT,EAAW;AAAC87D,MAAI,CAACu9B,OAAL,CAAaE,SAAb,CAAuB,GAAvB,EAA4Bv5F,CAA5B;AAA+B,SAAOA,CAAP;AAAS,CAA3E;;AAA4E87D,IAAI,CAACu9B,OAAL,CAAaE,SAAb,CAAuB,GAAvB,IAA4Bz9B,IAAI,CAAC4D,YAAjC;;AAA8C5D,IAAI,CAACu9B,OAAL,CAAaG,iBAAb,GAA+B,UAASx5F,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG;AAAC,WAAO67D,IAAI,CAACu9B,OAAL,CAAaE,SAAb,CAAuBv5F,CAAC,CAACC,CAAD,CAAxB,GAA6B,CAAC,CAArC;AAAuC,GAA3C,CAA2C,OAAMiuB,CAAN,EAAQ,CAAE;;AAAA,SAAM,CAAC,CAAP;AAAS,CAA3G;;AAA4G4tC,IAAI,CAACu9B,OAAL,CAAaI,KAAb,GAAmB,UAASz5F,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAACA,GAAC,GAACA,CAAC,GAACA,CAAC,CAAC7vC,CAAD,CAAF,GAAMA,CAAT;AAAW,SAAOzD,MAAM,CAACoZ,SAAP,CAAiB0C,cAAjB,CAAgC7B,IAAhC,CAAqCzW,CAArC,EAAuC8vC,CAAvC,IAA0C9vC,CAAC,CAAC8vC,CAAD,CAA3C,GAA+C9vC,CAAC,CAAC8vC,CAAD,CAAD,GAAK5hB,CAAC,CAACjuB,CAAD,CAA5D;AAAgE,CAAhH;;AAAiH67D,IAAI,CAACwJ,SAAL,GAAe,EAAf;AAAkBxJ,IAAI,CAACwJ,SAAL,CAAeo0B,SAAf,GAAyB,CAAC,CAA1B;AAA4B59B,IAAI,CAACwJ,SAAL,CAAeq0B,WAAf,GAA2B,CAAC,CAA5B;AAA8B79B,IAAI,CAACwJ,SAAL,CAAes0B,YAAf,GAA4B,CAAC,CAA7B;AAA+B99B,IAAI,CAACwJ,SAAL,CAAeu0B,aAAf,GAA6B,CAAC,CAA9B;AAAgC/9B,IAAI,CAACwJ,SAAL,CAAew0B,oBAAf,GAAoC,CAAC,CAArC;AAAuCh+B,IAAI,CAACwJ,SAAL,CAAey0B,YAAf,GAA4B,CAAC,CAA7B;AAA+Bj+B,IAAI,CAACwJ,SAAL,CAAe00B,kBAAf,GAAkC,CAAC,CAAnC;AAAqCl+B,IAAI,CAACwJ,SAAL,CAAe20B,cAAf,GAA8Bn+B,IAAI,CAACwJ,SAAL,CAAeo0B,SAAf,IAA0B59B,IAAI,CAACwJ,SAAL,CAAeq0B,WAAzC,IAAsD79B,IAAI,CAACwJ,SAAL,CAAes0B,YAArE,IAAmF99B,IAAI,CAACwJ,SAAL,CAAew0B,oBAAlG,IAAwHh+B,IAAI,CAACwJ,SAAL,CAAeu0B,aAAvI,IAAsJ/9B,IAAI,CAACwJ,SAAL,CAAey0B,YAAnM;;AAAgNj+B,IAAI,CAACwJ,SAAL,CAAe40B,kBAAf,GAAkC,YAAU;AAAC,SAAOp+B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBK,YAAzB,EAAP;AAA+C,CAA5F;;AAC9wC5wB,IAAI,CAACwJ,SAAL,CAAe60B,iBAAf,GAAiC,YAAU;AAAC,SAAOr+B,IAAI,CAAC1gC,MAAL,CAAYiqC,SAAZ,IAAuB,IAA9B;AAAmC,CAA/E;;AAAgFvJ,IAAI,CAACwJ,SAAL,CAAe80B,YAAf,GAA4B,YAAU;AAAC,SAAOt+B,IAAI,CAACwJ,SAAL,CAAe60B,iBAAf,EAAP;AAA0C,CAAjF;;AAAkFr+B,IAAI,CAACwJ,SAAL,CAAe+0B,KAAf,GAAqBv+B,IAAI,CAACwJ,SAAL,CAAe20B,cAAf,GAA8Bn+B,IAAI,CAACwJ,SAAL,CAAey0B,YAA7C,GAA0Dj+B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4Be,OAA5B,EAA/E;AAAqH/xB,IAAI,CAACwJ,SAAL,CAAeg1B,EAAf,GAAkBx+B,IAAI,CAACwJ,SAAL,CAAe20B,cAAf,GAA8Bn+B,IAAI,CAACwJ,SAAL,CAAeo0B,SAA7C,GAAuD59B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BgB,IAA5B,EAAzE;AAA4GhyB,IAAI,CAACwJ,SAAL,CAAei1B,IAAf,GAAoBz+B,IAAI,CAACwJ,SAAL,CAAe20B,cAAf,GAA8Bn+B,IAAI,CAACwJ,SAAL,CAAeq0B,WAA7C,GAAyD79B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BnK,MAA3B,EAA7E;AACnYjyB,IAAI,CAACwJ,SAAL,CAAek1B,UAAf,GAA0B1+B,IAAI,CAACwJ,SAAL,CAAei1B,IAAf,IAAqBz+B,IAAI,CAACwJ,SAAL,CAAeg1B,EAA9D;AAAiEx+B,IAAI,CAACwJ,SAAL,CAAem1B,KAAf,GAAqB3+B,IAAI,CAACwJ,SAAL,CAAe20B,cAAf,GAA8Bn+B,IAAI,CAACwJ,SAAL,CAAes0B,YAA7C,GAA0D99B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BI,OAA3B,EAA/E;AAAoHx8B,IAAI,CAACwJ,SAAL,CAAeo1B,MAAf,GAAsB5+B,IAAI,CAACwJ,SAAL,CAAe20B,cAAf,GAA8Bn+B,IAAI,CAACwJ,SAAL,CAAeu0B,aAAf,IAA8B/9B,IAAI,CAACwJ,SAAL,CAAew0B,oBAA3E,GAAgGh+B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB4yB,MAApB,CAA2BG,QAA3B,EAAtH;;AAA4Jv8B,IAAI,CAACwJ,SAAL,CAAeq1B,SAAf,GAAyB,YAAU;AAAC,SAAO7+B,IAAI,CAACwJ,SAAL,CAAeo1B,MAAf,IAAuB5+B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoB+mB,IAApB,CAAyBM,cAAzB,CAAwC,QAAxC,CAA9B;AAAgF,CAApH;;AACjV7wB,IAAI,CAACwJ,SAAL,CAAes1B,MAAf,GAAsB9+B,IAAI,CAACwJ,SAAL,CAAew0B,oBAAf,IAAqCh+B,IAAI,CAACwJ,SAAL,CAAeq1B,SAAf,EAA3D;AAAsF7+B,IAAI,CAACwJ,SAAL,CAAeu1B,MAAf,GAAsB/+B,IAAI,CAACwJ,SAAL,CAAeo1B,MAArC;;AAA4C5+B,IAAI,CAACwJ,SAAL,CAAew1B,kBAAf,GAAkC,YAAU;AAAC,MAAI96F,CAAC,GAAC87D,IAAI,CAACwJ,SAAL,CAAe60B,iBAAf,EAAN;AAAyC,SAAOn6F,CAAC,IAAEA,CAAC,CAACq1B,QAAL,IAAe,EAAtB;AAAyB,CAA/G;;AAAgHymC,IAAI,CAACwJ,SAAL,CAAey1B,QAAf,GAAwBj/B,IAAI,CAACwJ,SAAL,CAAew1B,kBAAf,EAAxB;AAA4Dh/B,IAAI,CAACwJ,SAAL,CAAe01B,UAAf,GAA0B,CAAC,CAA3B;AAA6Bl/B,IAAI,CAACwJ,SAAL,CAAe21B,cAAf,GAA8B,CAAC,CAA/B;AAAiCn/B,IAAI,CAACwJ,SAAL,CAAe41B,YAAf,GAA4B,CAAC,CAA7B;AAA+Bp/B,IAAI,CAACwJ,SAAL,CAAe61B,UAAf,GAA0B,CAAC,CAA3B;AAA6Br/B,IAAI,CAACwJ,SAAL,CAAe81B,cAAf,GAA8B,CAAC,CAA/B;AAAiCt/B,IAAI,CAACwJ,SAAL,CAAe+1B,aAAf,GAA6B,CAAC,CAA9B;AACzcv/B,IAAI,CAACwJ,SAAL,CAAeg2B,WAAf,GAA2B,CAAC,CAA5B;AAA8Bx/B,IAAI,CAACwJ,SAAL,CAAei2B,WAAf,GAA2B,CAAC,CAA5B;AAA8Bz/B,IAAI,CAACwJ,SAAL,CAAek2B,YAAf,GAA4B,CAAC,CAA7B;AAA+B1/B,IAAI,CAACwJ,SAAL,CAAem2B,eAAf,GAA+B,CAAC,CAAhC;AAAkC3/B,IAAI,CAACwJ,SAAL,CAAeo2B,eAAf,GAA+B5/B,IAAI,CAACwJ,SAAL,CAAe01B,UAAf,IAA2Bl/B,IAAI,CAACwJ,SAAL,CAAe21B,cAA1C,IAA0Dn/B,IAAI,CAACwJ,SAAL,CAAe41B,YAAzE,IAAuFp/B,IAAI,CAACwJ,SAAL,CAAe61B,UAAtG,IAAkHr/B,IAAI,CAACwJ,SAAL,CAAe81B,cAAjI,IAAiJt/B,IAAI,CAACwJ,SAAL,CAAe+1B,aAAhK,IAA+Kv/B,IAAI,CAACwJ,SAAL,CAAeg2B,WAA9L,IAA2Mx/B,IAAI,CAACwJ,SAAL,CAAei2B,WAAzP;AAAqQz/B,IAAI,CAACwJ,SAAL,CAAeq2B,GAAf,GAAmB7/B,IAAI,CAACwJ,SAAL,CAAeo2B,eAAf,GAA+B5/B,IAAI,CAACwJ,SAAL,CAAe01B,UAA9C,GAAyDl/B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6ByjE,WAA7B,EAA5E;AAClYh9B,IAAI,CAACwJ,SAAL,CAAes2B,OAAf,GAAuB9/B,IAAI,CAACwJ,SAAL,CAAeo2B,eAAf,GAA+B5/B,IAAI,CAACwJ,SAAL,CAAe21B,cAA9C,GAA6Dn/B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6B2jE,SAA7B,EAApF;;AAA6Hl9B,IAAI,CAACwJ,SAAL,CAAeu2B,cAAf,GAA8B,YAAU;AAAC,SAAO//B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6B0jE,OAA7B,MAAwCj9B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6B4jE,UAA7B,EAA/C;AAAyF,CAAlI;;AAAmIn9B,IAAI,CAACwJ,SAAL,CAAew2B,KAAf,GAAqBhgC,IAAI,CAACwJ,SAAL,CAAeo2B,eAAf,GAA+B5/B,IAAI,CAACwJ,SAAL,CAAe41B,YAA9C,GAA2Dp/B,IAAI,CAACwJ,SAAL,CAAeu2B,cAAf,EAAhF;;AAAgH//B,IAAI,CAACwJ,SAAL,CAAey2B,MAAf,GAAsB,YAAU;AAAC,MAAI/7F,CAAC,GAAC87D,IAAI,CAACwJ,SAAL,CAAe60B,iBAAf,EAAN;AAAyC,SAAM,CAAC,CAACn6F,CAAF,IAAK87D,IAAI,CAAC/yB,MAAL,CAAY4hC,QAAZ,CAAqB3qE,CAAC,CAACg8F,UAAF,IAAc,EAAnC,EAAsC,KAAtC,CAAX;AAAwD,CAAlI;;AAChXlgC,IAAI,CAACwJ,SAAL,CAAe22B,GAAf,GAAmBngC,IAAI,CAACwJ,SAAL,CAAeo2B,eAAf,GAA+B5/B,IAAI,CAACwJ,SAAL,CAAe61B,UAA9C,GAAyDr/B,IAAI,CAACwJ,SAAL,CAAey2B,MAAf,EAA5E;AAAoGjgC,IAAI,CAACwJ,SAAL,CAAe42B,OAAf,GAAuBpgC,IAAI,CAACwJ,SAAL,CAAeo2B,eAAf,GAA+B5/B,IAAI,CAACwJ,SAAL,CAAe81B,cAA9C,GAA6Dt/B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BojE,SAA7B,EAApF;AAA6H38B,IAAI,CAACwJ,SAAL,CAAe62B,MAAf,GAAsBrgC,IAAI,CAACwJ,SAAL,CAAeo2B,eAAf,GAA+B5/B,IAAI,CAACwJ,SAAL,CAAe+1B,aAA9C,GAA4Dv/B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BsjE,QAA7B,EAAlF;AAA0H78B,IAAI,CAACwJ,SAAL,CAAe82B,IAAf,GAAoBtgC,IAAI,CAACwJ,SAAL,CAAeo2B,eAAf,GAA+B5/B,IAAI,CAACwJ,SAAL,CAAeg2B,WAA9C,GAA0Dx/B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BujE,MAA7B,EAA9E;AAC3V98B,IAAI,CAACwJ,SAAL,CAAe+2B,IAAf,GAAoBvgC,IAAI,CAACwJ,SAAL,CAAeo2B,eAAf,GAA+B5/B,IAAI,CAACwJ,SAAL,CAAei2B,WAA9C,GAA0Dz/B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BqjE,MAA7B,EAA9E;AAAoH58B,IAAI,CAACwJ,SAAL,CAAeg3B,GAAf,GAAmBxgC,IAAI,CAACwJ,SAAL,CAAeo2B,eAAf,GAA+B5/B,IAAI,CAACwJ,SAAL,CAAe+1B,aAAf,IAA8Bv/B,IAAI,CAACwJ,SAAL,CAAeg2B,WAA7C,IAA0Dx/B,IAAI,CAACwJ,SAAL,CAAei2B,WAAxG,GAAoHz/B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BwjE,KAA7B,EAAvI;AAA4K/8B,IAAI,CAACwJ,SAAL,CAAei3B,KAAf,GAAqBzgC,IAAI,CAACwJ,SAAL,CAAeo2B,eAAf,GAA+B5/B,IAAI,CAACwJ,SAAL,CAAek2B,YAA9C,GAA2D1/B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6B8jE,OAA7B,EAAhF;AAAuHr9B,IAAI,CAACwJ,SAAL,CAAek3B,QAAf,GAAwB1gC,IAAI,CAACwJ,SAAL,CAAeo2B,eAAf,GAA+B5/B,IAAI,CAACwJ,SAAL,CAAem2B,eAA9C,GAA8D3/B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6B+jE,UAA7B,EAAtF;;AACvZt9B,IAAI,CAACwJ,SAAL,CAAem3B,iBAAf,GAAiC,YAAU;AAAC,MAAIz8F,CAAC,GAAC,EAAN;AAAA,MAASC,CAAC,GAAC67D,IAAI,CAACwJ,SAAL,CAAeo3B,sBAAf,EAAX;AAAmDz8F,GAAC,KAAGD,CAAC,GAACC,CAAC,GAACA,CAAC,CAAC,CAAD,CAAF,GAAM,EAAZ,CAAD;AAAiB,SAAO67D,IAAI,CAACwJ,SAAL,CAAeg1B,EAAf,KAAoBr6F,CAAC,GAAC67D,IAAI,CAACwJ,SAAL,CAAeq3B,gBAAf,EAAF,EAAoC,QAAM18F,CAAN,IAASA,CAAC,GAACuZ,UAAU,CAACxZ,CAAD,CAA7E,IAAkFo9B,MAAM,CAACn9B,CAAD,CAAxF,GAA4FD,CAAnG;AAAqG,CAArN;;AACA87D,IAAI,CAACwJ,SAAL,CAAeo3B,sBAAf,GAAsC,YAAU;AAAC,MAAI18F,CAAC,GAAC87D,IAAI,CAACwJ,SAAL,CAAe40B,kBAAf,EAAN;AAA0C,MAAGp+B,IAAI,CAACwJ,SAAL,CAAem1B,KAAlB,EAAwB,OAAM,qBAAqB3uD,IAArB,CAA0B9rC,CAA1B,CAAN;AAAmC,MAAG87D,IAAI,CAACwJ,SAAL,CAAei1B,IAAlB,EAAuB,OAAM,kBAAkBzuD,IAAlB,CAAuB9rC,CAAvB,CAAN;AAAgC,MAAG87D,IAAI,CAACwJ,SAAL,CAAeg1B,EAAlB,EAAqB,OAAM,mCAAmCxuD,IAAnC,CAAwC9rC,CAAxC,CAAN;AAAiD,MAAG87D,IAAI,CAACwJ,SAAL,CAAeo1B,MAAlB,EAAyB,OAAM,gBAAgB5uD,IAAhB,CAAqB9rC,CAArB,CAAN;AAA8B,MAAG87D,IAAI,CAACwJ,SAAL,CAAe+0B,KAAlB,EAAwB,OAAM,yBAAyBvuD,IAAzB,CAA8B9rC,CAA9B,CAAN;AAAuC,CAAzY;;AAA0Y87D,IAAI,CAACwJ,SAAL,CAAeq3B,gBAAf,GAAgC,YAAU;AAAC,MAAI38F,CAAC,GAAC87D,IAAI,CAAC1gC,MAAL,CAAYoiC,QAAlB;AAA2B,SAAOx9D,CAAC,GAACA,CAAC,CAAC48F,YAAH,GAAgB,KAAK,CAA7B;AAA+B,CAArG;;AAC1Y9gC,IAAI,CAACwJ,SAAL,CAAeu3B,OAAf,GAAuB/gC,IAAI,CAACwJ,SAAL,CAAem3B,iBAAf,EAAvB;;AAA0D3gC,IAAI,CAACwJ,SAAL,CAAe5iC,OAAf,GAAuB,UAAS1iC,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAAC/yB,MAAL,CAAYogD,eAAZ,CAA4BnpF,CAA5B,EAA8BC,CAA9B,CAAP;AAAwC,CAA7E;;AAA8E67D,IAAI,CAACwJ,SAAL,CAAew3B,uBAAf,GAAuC,EAAvC;;AAA0ChhC,IAAI,CAACwJ,SAAL,CAAekpB,iBAAf,GAAiC,UAASxuF,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACwJ,SAAL,CAAe00B,kBAAf,IAAmCl+B,IAAI,CAACu9B,OAAL,CAAaI,KAAb,CAAmB39B,IAAI,CAACwJ,SAAL,CAAew3B,uBAAlC,EAA0D98F,CAA1D,EAA4D,YAAU;AAAC,WAAO,KAAG87D,IAAI,CAAC/yB,MAAL,CAAYogD,eAAZ,CAA4BrtB,IAAI,CAACwJ,SAAL,CAAeu3B,OAA3C,EAAmD78F,CAAnD,CAAV;AAAgE,GAAvI,CAA1C;AAAmL,CAAhO;;AAAiO87D,IAAI,CAACwJ,SAAL,CAAey3B,SAAf,GAAyBjhC,IAAI,CAACwJ,SAAL,CAAekpB,iBAAxC;;AACnZ1yB,IAAI,CAACwJ,SAAL,CAAe03B,sBAAf,GAAsC,UAASh9F,CAAT,EAAW;AAAC,SAAO7C,MAAM,CAAC2+D,IAAI,CAACwJ,SAAL,CAAe23B,aAAhB,CAAN,IAAsCj9F,CAA7C;AAA+C,CAAjG;;AAAkG87D,IAAI,CAACwJ,SAAL,CAAe43B,cAAf,GAA8BphC,IAAI,CAACwJ,SAAL,CAAe03B,sBAA7C;;AAAoElhC,IAAI,CAACwJ,SAAL,CAAe23B,aAAf,GAA6B,YAAU;AAAC,MAAGnhC,IAAI,CAAC1gC,MAAL,CAAYoiC,QAAZ,IAAsB1B,IAAI,CAACwJ,SAAL,CAAeg1B,EAAxC,EAA2C,OAAOx+B,IAAI,CAACwJ,SAAL,CAAeq3B,gBAAf,EAAP;AAAyC,CAA/F,EAA7B;;AAA+H7gC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,GAAuB,EAAvB;AAA0BrhC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBC,cAAvB,GAAsC,CAAC,CAAvC;AAAyCthC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuB9B,aAAvB,GAAqC,CAAC,CAAtC;AAAwCv/B,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuB7B,WAAvB,GAAmC,CAAC,CAApC;AAAsCx/B,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuB/B,cAAvB,GAAsC,CAAC,CAAvC;AAAyCt/B,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBE,aAAvB,GAAqC,CAAC,CAAtC;AAAwCvhC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBG,aAAvB,GAAqC,CAAC,CAAtC;AACvgBxhC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBI,cAAvB,GAAsCzhC,IAAI,CAACwJ,SAAL,CAAeo0B,SAAf,IAA0B59B,IAAI,CAACwJ,SAAL,CAAeq0B,WAAzC,IAAsD79B,IAAI,CAACwJ,SAAL,CAAey0B,YAArE,IAAmFj+B,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBC,cAA1G,IAA0HthC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuB9B,aAAjJ,IAAgKv/B,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuB7B,WAAvL,IAAoMx/B,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuB/B,cAA3N,IAA2Ot/B,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBE,aAAlQ,IAAiRvhC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBG,aAA9U;AAA4VxhC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuB9C,KAAvB,GAA6Bv+B,IAAI,CAACwJ,SAAL,CAAe+0B,KAA5C;AAAkDv+B,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuB7C,EAAvB,GAA0Bx+B,IAAI,CAACwJ,SAAL,CAAeg1B,EAAzC;AAA4Cx+B,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuB5C,IAAvB,GAA4Bz+B,IAAI,CAACwJ,SAAL,CAAei1B,IAA3C;AAC1bz+B,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBK,OAAvB,GAA+B1hC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBI,cAAvB,GAAsCzhC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBC,cAA7D,GAA4EthC,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4Bc,SAA5B,EAA3G;;AAAmJ9xB,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBM,eAAvB,GAAuC,YAAU;AAAC,SAAO3hC,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BsjE,QAA7B,MAAyC78B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BqjE,MAA7B,EAAhD;AAAsF,CAAxI;;AAAyI58B,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBhB,MAAvB,GAA8BrgC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBI,cAAvB,GAAsCzhC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuB9B,aAA7D,GAA2Ev/B,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBM,eAAvB,EAAzG;AAC5R3hC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBf,IAAvB,GAA4BtgC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBI,cAAvB,GAAsCzhC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuB7B,WAA7D,GAAyEx/B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BujE,MAA7B,EAArG;AAA2I98B,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBjB,OAAvB,GAA+BpgC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBI,cAAvB,GAAsCzhC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuB/B,cAA7D,GAA4Et/B,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BuB,gBAA5B,EAA3G;AAA0JvyB,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBO,MAAvB,GAA8B5hC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBI,cAAvB,GAAsCzhC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBE,aAA7D,GAA2EvhC,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4Ba,QAA5B,EAAzG;;AACrS7xB,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBQ,gBAAvB,GAAwC,YAAU;AAAC,SAAO7hC,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBwnB,OAApB,CAA4BoB,QAA5B,MAAwC,CAACpyB,IAAI,CAACswB,IAAL,CAAU9mB,SAAV,CAAoBjwC,QAApB,CAA6BwjE,KAA7B,EAAhD;AAAqF,CAAxI;;AAAyI/8B,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBtC,MAAvB,GAA8B/+B,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBI,cAAvB,GAAsCzhC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBG,aAA7D,GAA2ExhC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBQ,gBAAvB,EAAzG;AAAmJ7hC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,GAAkB,EAAlB;AAAqB29B,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBy/D,wBAAlB,GAA2C,gEAA3C;AAA4G9hC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB0/D,YAAlB,GAA+B/hC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBy/D,wBAAlB,GAA2C,KAA1E;AAAgF9hC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB2/D,oBAAlB,GAAuChiC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBy/D,wBAAlB,GAA2C,KAAlF;AAAwF9hC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB4/D,QAAlB,GAA2B;AAACC,SAAO,EAAC,CAAT;AAAWC,YAAU,EAAC,CAAtB;AAAwBC,SAAO,EAAC,CAAhC;AAAkCC,qBAAmB,EAAC,CAAtD;AAAwDC,oBAAkB,EAAC;AAA3E,CAA3B;AAAyGtiC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBkgE,aAAlB,GAAgC,IAAhC;;AAC9qBviC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBmgE,UAAlB,GAA6B,UAASt+F,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAAC/yB,MAAL,CAAY4hC,QAAZ,CAAqB7O,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBkgE,aAAvC,EAAqDr+F,CAArD,CAAP;AAA+D,CAAxG;;AAAyG87D,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBogE,eAAlB,GAAkC,EAAlC;AAAqCziC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBqgE,cAAlB,GAAiC,IAAjC;AAAsC1iC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBsgE,sBAAlB,GAAyC3iC,IAAI,CAACwJ,SAAL,CAAem1B,KAAf,IAAsB3+B,IAAI,CAACwJ,SAAL,CAAeo1B,MAAf,IAAuB,CAAC5+B,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBtC,MAArE,IAA6E/+B,IAAI,CAACwJ,SAAL,CAAe+0B,KAArI;AAA2Iv+B,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBugE,kBAAlB,GAAqC5iC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBsgE,sBAAlB,IAA0C,cAAY,OAAO3iC,IAAI,CAAC1gC,MAAL,CAAYujE,IAA9G;AAC/T7iC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBygE,kBAAlB,GAAqC9iC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBsgE,sBAAlB,IAA0C,CAAC3iC,IAAI,CAACwJ,SAAL,CAAe63B,OAAf,CAAuBtC,MAAxB,IAAgC,CAAC/+B,IAAI,CAACwJ,SAAL,CAAeg1B,EAAhD,IAAoD,cAAY,OAAOx+B,IAAI,CAAC1gC,MAAL,CAAY0uC,IAAlK;;AACAhO,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB0gE,eAAlB,GAAkC,UAAS7+F,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB9R,IAAI,CAAC2F,WAAL,CAAiBzhE,CAAjB,CAApB,EAAwC,+CAAxC;AAAyF,OAAK,CAAL,KAASC,CAAT,KAAaA,CAAC,GAAC67D,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB4/D,QAAlB,CAA2BC,OAA1C;AAAmDliC,MAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB2gE,KAAlB;AAA0B7+F,GAAC,GAAC67D,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBogE,eAAlB,CAAkCt+F,CAAlC,CAAF;;AAAuC,OAAI,IAAIiuB,CAAC,GAAC,EAAN,EAAS4hB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAAC9vC,CAAC,CAACJ,MAArB,EAA4BkwC,CAAC,IAAE,CAA/B,EAAiC;AAAC,QAAI5sB,CAAC,GAACljB,CAAC,CAAC8vC,CAAD,CAAP;AAAA,QAAWrJ,CAAC,GAACqJ,CAAC,GAAC,CAAF,GAAI9vC,CAAC,CAACJ,MAAnB;AAAA,QAA0Bs7B,CAAC,GAACuL,CAAC,GAACzmC,CAAC,CAAC8vC,CAAC,GAAC,CAAH,CAAF,GAAQ,CAArC;AAAA,QAAuCa,CAAC,GAACb,CAAC,GAAC,CAAF,GAAI9vC,CAAC,CAACJ,MAA/C;AAAA,QAAsDmuB,CAAC,GAAC4iB,CAAC,GAAC3wC,CAAC,CAAC8vC,CAAC,GAAC,CAAH,CAAF,GAAQ,CAAjE;AAAA,QAAmEzY,CAAC,GAACnU,CAAC,IAAE,CAAxE;AAA0EA,KAAC,GAAC,CAACA,CAAC,GAAC,CAAH,KAAO,CAAP,GAASgY,CAAC,IAAE,CAAd;AAAgBA,KAAC,GAAC,CAACA,CAAC,GAAC,EAAH,KAAQ,CAAR,GAAUnN,CAAC,IAAE,CAAf;AAAiBA,KAAC,IAAE,EAAH;AAAM4iB,KAAC,KAAG5iB,CAAC,GAAC,EAAF,EAAK0Y,CAAC,KAAGvL,CAAC,GAAC,EAAL,CAAT,CAAD;AAAoBhN,KAAC,CAACzvB,IAAF,CAAOwB,CAAC,CAACo3B,CAAD,CAAR,EAAYp3B,CAAC,CAACijB,CAAD,CAAb,EAAiBjjB,CAAC,CAACi7B,CAAD,CAAD,IAAM,EAAvB,EAA0Bj7B,CAAC,CAAC8tB,CAAD,CAAD,IAAM,EAAhC;AAAoC;;AAAA,SAAOG,CAAC,CAACvT,IAAF,CAAO,EAAP,CAAP;AAAkB,CAA1d;;AACAmhD,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB4gE,YAAlB,GAA+B,UAAS/+F,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO67D,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBugE,kBAAlB,IAAsC,CAACz+F,CAAvC,GAAyC67D,IAAI,CAAC1gC,MAAL,CAAYujE,IAAZ,CAAiB3+F,CAAjB,CAAzC,GAA6D87D,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB0gE,eAAlB,CAAkC/iC,IAAI,CAACv+B,KAAL,CAAW02C,iBAAX,CAA6Bj0E,CAA7B,CAAlC,EAAkEC,CAAlE,CAApE;AAAyI,CAAtL;;AAAuL67D,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB6gE,YAAlB,GAA+B,UAASh/F,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG67D,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBygE,kBAAlB,IAAsC,CAAC3+F,CAA1C,EAA4C,OAAO67D,IAAI,CAAC1gC,MAAL,CAAY0uC,IAAZ,CAAiB9pE,CAAjB,CAAP;AAA2B,MAAIkuB,CAAC,GAAC,EAAN;AAAS4tC,MAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB8gE,qBAAlB,CAAwCj/F,CAAxC,EAA0C,UAASA,CAAT,EAAW;AAACkuB,KAAC,IAAEkP,MAAM,CAACC,YAAP,CAAoBr9B,CAApB,CAAH;AAA0B,GAAhF;AAAkF,SAAOkuB,CAAP;AAAS,CAAxN;;AACvL4tC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB+gE,uBAAlB,GAA0C,UAASl/F,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAAC,EAAN;AAAS4tC,MAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB8gE,qBAAlB,CAAwCj/F,CAAxC,EAA0C,UAASA,CAAT,EAAW;AAACkuB,KAAC,CAACzvB,IAAF,CAAOuB,CAAP;AAAU,GAAhE;AAAkE,SAAOkuB,CAAP;AAAS,CAA5I;;AACA4tC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBghE,wBAAlB,GAA2C,UAASn/F,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,CAAC9R,IAAI,CAACwJ,SAAL,CAAeg1B,EAAhB,IAAoBx+B,IAAI,CAACwJ,SAAL,CAAekpB,iBAAf,CAAiC,IAAjC,CAAxC,EAA+E,uCAA/E;AAAwH,MAAIvuF,CAAC,GAACD,CAAC,CAACJ,MAAR;AAAA,MAAesuB,CAAC,GAAC,IAAEjuB,CAAF,GAAI,CAArB;AAAuBiuB,GAAC,GAAC,CAAF,GAAIA,CAAC,GAAC7lB,IAAI,CAACC,KAAL,CAAW4lB,CAAX,CAAN,GAAoB4tC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBmgE,UAAlB,CAA6Bt+F,CAAC,CAACC,CAAC,GAAC,CAAH,CAA9B,MAAuCiuB,CAAC,GAAC4tC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBmgE,UAAlB,CAA6Bt+F,CAAC,CAACC,CAAC,GAAC,CAAH,CAA9B,IAAqCiuB,CAAC,GAAC,CAAvC,GAAyCA,CAAC,GAAC,CAApF,CAApB;AAA2G,MAAI4hB,CAAC,GAAC,IAAI/zB,UAAJ,CAAemS,CAAf,CAAN;AAAA,MAAwBhL,CAAC,GAAC,CAA1B;AAA4B44C,MAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB8gE,qBAAlB,CAAwCj/F,CAAxC,EAA0C,UAASA,CAAT,EAAW;AAAC8vC,KAAC,CAAC5sB,CAAC,EAAF,CAAD,GAAOljB,CAAP;AAAS,GAA/D;AAAiE,SAAO8vC,CAAC,CAACsvD,QAAF,CAAW,CAAX,EAAal8E,CAAb,CAAP;AAAuB,CAAra;;AACA44C,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB8gE,qBAAlB,GAAwC,UAASj/F,CAAT,EAAWC,CAAX,EAAa;AAAC,WAASiuB,CAAT,CAAWjuB,CAAX,EAAa;AAAC,WAAK6vC,CAAC,GAAC9vC,CAAC,CAACJ,MAAT,GAAiB;AAAC,UAAIsuB,CAAC,GAACluB,CAAC,CAACq+B,MAAF,CAASyR,CAAC,EAAV,CAAN;AAAA,UAAoB5sB,CAAC,GAAC44C,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBqgE,cAAlB,CAAiCtwE,CAAjC,CAAtB;AAA0D,UAAG,QAAMhL,CAAT,EAAW,OAAOA,CAAP;AAAS,UAAG,CAAC44C,IAAI,CAAC/yB,MAAL,CAAYw/C,mBAAZ,CAAgCr6D,CAAhC,CAAJ,EAAuC,MAAM9vB,KAAK,CAAC,sCAAoC8vB,CAArC,CAAX;AAAoD;;AAAA,WAAOjuB,CAAP;AAAS;;AAAA67D,MAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB2gE,KAAlB;;AAA0B,OAAI,IAAIhvD,CAAC,GAAC,CAAV,IAAc;AAAC,QAAI5sB,CAAC,GAACgL,CAAC,CAAC,CAAC,CAAF,CAAP;AAAA,QAAYuY,CAAC,GAACvY,CAAC,CAAC,CAAD,CAAf;AAAA,QAAmBgN,CAAC,GAAChN,CAAC,CAAC,EAAD,CAAtB;AAAA,QAA2ByiB,CAAC,GAACziB,CAAC,CAAC,EAAD,CAA9B;AAAmC,QAAG,OAAKyiB,CAAL,IAAQ,CAAC,CAAD,KAAKztB,CAAhB,EAAkB;AAAMjjB,KAAC,CAACijB,CAAC,IAAE,CAAH,GAAKujB,CAAC,IAAE,CAAT,CAAD;AAAa,UAAIvL,CAAJ,KAAQj7B,CAAC,CAACwmC,CAAC,IAAE,CAAH,GAAK,GAAL,GAASvL,CAAC,IAAE,CAAb,CAAD,EAAiB,MAAIyV,CAAJ,IAAO1wC,CAAC,CAACi7B,CAAC,IAAE,CAAH,GAAK,GAAL,GAASyV,CAAV,CAAjC;AAA+C;AAAC,CAAza;;AACAmrB,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB2gE,KAAlB,GAAwB,YAAU;AAAC,MAAG,CAAChjC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBqgE,cAAtB,EAAqC;AAAC1iC,QAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBqgE,cAAlB,GAAiC,EAAjC;;AAAoC,SAAI,IAAIx+F,CAAC,GAAC87D,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBy/D,wBAAlB,CAA2C3jF,KAA3C,CAAiD,EAAjD,CAAN,EAA2Dha,CAAC,GAAC,CAAC,KAAD,EAAO,IAAP,EAAY,KAAZ,EAAkB,KAAlB,EAAwB,IAAxB,CAA7D,EAA2FiuB,CAAC,GAAC,CAAjG,EAAmG,IAAEA,CAArG,EAAuGA,CAAC,EAAxG,EAA2G;AAAC,UAAI4hB,CAAC,GAAC9vC,CAAC,CAAC42B,MAAF,CAAS32B,CAAC,CAACiuB,CAAD,CAAD,CAAKjU,KAAL,CAAW,EAAX,CAAT,CAAN;AAA+B6hD,UAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBogE,eAAlB,CAAkCrwE,CAAlC,IAAqC4hB,CAArC;;AAAuC,WAAI,IAAI5sB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAAC4sB,CAAC,CAAClwC,MAAhB,EAAuBsjB,CAAC,EAAxB,EAA2B;AAAC,YAAIujB,CAAC,GAACqJ,CAAC,CAAC5sB,CAAD,CAAP;AAAA,YAAWgY,CAAC,GAAC4gC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBqgE,cAAlB,CAAiC/3D,CAAjC,CAAb;AAAiD,aAAK,CAAL,KAASvL,CAAT,GAAW4gC,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBqgE,cAAlB,CAAiC/3D,CAAjC,IAAoCvjB,CAA/C,GAAiD44C,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB1yC,CAAC,KAAGhY,CAAxB,CAAjD;AAA4E;AAAC;AAAC;AAAC,CAA3b;;AAA4byrD,IAAI,CAAC0wB,KAAL,GAAW,EAAX;AAAc1wB,IAAI,CAAC0wB,KAAL,CAAWC,UAAX,GAAsB,CAAtB;AAAwB3wB,IAAI,CAAC0wB,KAAL,CAAWE,WAAX,GAAuB,CAAvB;;AAAyB5wB,IAAI,CAAC0wB,KAAL,CAAWG,WAAX,GAAuB,UAASx/F,CAAT,EAAW;AAAC,MAAIC,CAAC,GAACD,CAAC,KAAG,CAAV;AAAYA,GAAC,GAACqI,IAAI,CAACC,KAAL,CAAW,CAACtI,CAAC,GAACC,CAAH,IAAM0uE,IAAI,CAACC,eAAL,CAAqByC,SAAtC,MAAmD,CAArD;AAAuD1C,MAAI,CAAC0wB,KAAL,CAAWC,UAAX,GAAsBr/F,CAAtB;AAAwB0uE,MAAI,CAAC0wB,KAAL,CAAWE,WAAX,GAAuBv/F,CAAvB;AAAyB,CAAvJ;;AAAwJ2uE,IAAI,CAAC0wB,KAAL,CAAWI,UAAX,GAAsB,UAASz/F,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,IAAED,CAAR;AAAUA,GAAC,GAACqI,IAAI,CAACuF,GAAL,CAAS5N,CAAT,CAAF;AAAc,MAAIkuB,CAAC,GAACluB,CAAC,KAAG,CAAV;AAAYA,GAAC,GAACqI,IAAI,CAACC,KAAL,CAAW,CAACtI,CAAC,GAACkuB,CAAH,IAAMygD,IAAI,CAACC,eAAL,CAAqByC,SAAtC,CAAF;AAAmDrxE,GAAC,MAAI,CAAL;AAAOC,GAAC,KAAGD,CAAC,GAAC,CAACA,CAAD,KAAK,CAAP,EAASkuB,CAAC,GAAC,CAAC,CAACA,CAAD,KAAK,CAAN,IAAS,CAApB,EAAsB,aAAWA,CAAX,KAAeA,CAAC,GAAC,CAAF,EAAIluB,CAAC,EAAL,EAAQ,aAAWA,CAAX,KAAeA,CAAC,GAAC,CAAjB,CAAvB,CAAzB,CAAD;AAAuE2uE,MAAI,CAAC0wB,KAAL,CAAWC,UAAX,GAAsBpxE,CAAtB;AAAwBygD,MAAI,CAAC0wB,KAAL,CAAWE,WAAX,GAAuBv/F,CAAvB;AAAyB,CAAxP;;AACnpB2uE,IAAI,CAAC0wB,KAAL,CAAWK,aAAX,GAAyB,UAAS1/F,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,IAAED,CAAR;AAAUA,GAAC,GAAC,IAAEqI,IAAI,CAACuF,GAAL,CAAS5N,CAAT,CAAJ;AAAgB2uE,MAAI,CAAC0wB,KAAL,CAAWG,WAAX,CAAuBx/F,CAAvB;AAA0BA,GAAC,GAAC2uE,IAAI,CAAC0wB,KAAL,CAAWC,UAAb;AAAwB,MAAIpxE,CAAC,GAACygD,IAAI,CAAC0wB,KAAL,CAAWE,WAAjB;AAA6Bt/F,GAAC,KAAG,KAAGD,CAAH,GAAK,KAAGkuB,CAAH,GAAKA,CAAC,GAACluB,CAAC,GAAC,UAAT,IAAqBkuB,CAAC,IAAGluB,CAAC,GAAC,UAA3B,CAAL,GAA4CA,CAAC,EAAhD,CAAD;AAAqD2uE,MAAI,CAAC0wB,KAAL,CAAWC,UAAX,GAAsBt/F,CAAtB;AAAwB2uE,MAAI,CAAC0wB,KAAL,CAAWE,WAAX,GAAuBrxE,CAAvB;AAAyB,CAApP;;AACAygD,IAAI,CAAC0wB,KAAL,CAAWM,YAAX,GAAwB,UAAS3/F,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,IAAED,CAAF,GAAI,CAAJ,GAAM,CAAZ;AAAcA,GAAC,GAACC,CAAC,GAAC,CAACD,CAAF,GAAIA,CAAP;AAAS,MAAG,MAAIA,CAAP,EAAS,IAAE,IAAEA,CAAJ,IAAO2uE,IAAI,CAAC0wB,KAAL,CAAWE,WAAX,GAAuB,CAAvB,EAAyB5wB,IAAI,CAAC0wB,KAAL,CAAWC,UAAX,GAAsB,CAAtD,KAA0D3wB,IAAI,CAAC0wB,KAAL,CAAWE,WAAX,GAAuB,CAAvB,EAAyB5wB,IAAI,CAAC0wB,KAAL,CAAWC,UAAX,GAAsB,UAAzG,EAAT,KAAmI,IAAGj4F,KAAK,CAACrH,CAAD,CAAR,EAAY2uE,IAAI,CAAC0wB,KAAL,CAAWE,WAAX,GAAuB,CAAvB,EAAyB5wB,IAAI,CAAC0wB,KAAL,CAAWC,UAAX,GAAsB,UAA/C,CAAZ,KAA2E,IAAGt/F,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqBkC,WAA1B,EAAsCnC,IAAI,CAAC0wB,KAAL,CAAWE,WAAX,GAAuB,CAAvB,EAAyB5wB,IAAI,CAAC0wB,KAAL,CAAWC,UAAX,GAAsB,CAACr/F,CAAC,IAAE,EAAH,GAAM,UAAP,MAAqB,CAApE,CAAtC,KAAiH,IAAGD,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqBiC,WAA1B,EAAsC7wE,CAAC,GAACqI,IAAI,CAACwQ,KAAL,CAAW7Y,CAAC,GAACqI,IAAI,CAACm2B,GAAL,CAAS,CAAT,EAAW,CAAC,GAAZ,CAAb,CAAF,EAAiCmwC,IAAI,CAAC0wB,KAAL,CAAWE,WAAX,GAAuB,CAAxD,EAA0D5wB,IAAI,CAAC0wB,KAAL,CAAWC,UAAX,GAAsB,CAACr/F,CAAC,IAAE,EAAH,GACjfD,CADgf,MAC3e,CAD2Z,CAAtC,KAC/W;AAAC,QAAIkuB,CAAC,GAAC7lB,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACu3F,GAAL,CAAS5/F,CAAT,IAAYqI,IAAI,CAACw3F,GAA5B,CAAN;AAAuC7/F,KAAC,IAAEqI,IAAI,CAACm2B,GAAL,CAAS,CAAT,EAAW,CAACtQ,CAAZ,CAAH;AAAkBluB,KAAC,GAACqI,IAAI,CAACwQ,KAAL,CAAW7Y,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqBuC,SAAlC,CAAF;AAA+C,gBAAUnxE,CAAV,IAAa,EAAEkuB,CAAf;AAAiBygD,QAAI,CAAC0wB,KAAL,CAAWE,WAAX,GAAuB,CAAvB;AAAyB5wB,QAAI,CAAC0wB,KAAL,CAAWC,UAAX,GAAsB,CAACr/F,CAAC,IAAE,EAAH,GAAMiuB,CAAC,GAAC,GAAF,IAAO,EAAb,GAAgBluB,CAAC,GAAC,OAAnB,MAA8B,CAApD;AAAsD;AAAC,CADrN;;AAEA2uE,IAAI,CAAC0wB,KAAL,CAAWS,YAAX,GAAwB,UAAS9/F,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,IAAED,CAAF,GAAI,CAAJ,GAAM,CAAZ;AAAcA,GAAC,GAACC,CAAC,GAAC,CAACD,CAAF,GAAIA,CAAP;AAAS,MAAG,MAAIA,CAAP,EAAS2uE,IAAI,CAAC0wB,KAAL,CAAWE,WAAX,GAAuB,IAAE,IAAEv/F,CAAJ,GAAM,CAAN,GAAQ,UAA/B,EAA0C2uE,IAAI,CAAC0wB,KAAL,CAAWC,UAAX,GAAsB,CAAhE,CAAT,KAAgF,IAAGj4F,KAAK,CAACrH,CAAD,CAAR,EAAY2uE,IAAI,CAAC0wB,KAAL,CAAWE,WAAX,GAAuB,UAAvB,EAAkC5wB,IAAI,CAAC0wB,KAAL,CAAWC,UAAX,GAAsB,UAAxD,CAAZ,KAAoF,IAAGt/F,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqBqC,WAA1B,EAAsCtC,IAAI,CAAC0wB,KAAL,CAAWE,WAAX,GAAuB,CAACt/F,CAAC,IAAE,EAAH,GAAM,UAAP,MAAqB,CAA5C,EAA8C0uE,IAAI,CAAC0wB,KAAL,CAAWC,UAAX,GAAsB,CAApE,CAAtC,KAAiH,IAAGt/F,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqBoC,WAA1B,EAAsC;AAAC,QAAI9iD,CAAC,GAACluB,CAAC,GAACqI,IAAI,CAACm2B,GAAL,CAAS,CAAT,EAAW,CAAC,IAAZ,CAAR;AAA0Bx+B,KAAC,GAACkuB,CAAC,GAACygD,IAAI,CAACC,eAAL,CAAqByC,SAAzB;AAAmC1C,QAAI,CAAC0wB,KAAL,CAAWE,WAAX,GAAuB,CAACt/F,CAAC,IAAE,EAAH,GAAMD,CAAP,MAAY,CAAnC;AAAqC2uE,QAAI,CAAC0wB,KAAL,CAAWC,UAAX,GAAsBpxE,CAAC,KAAG,CAA1B;AAA4B,GAArK,MAAyK;AAACA,KAAC,GAC3fluB,CAD0f;AACxf,QAAI8vC,CAAC,GAAC,CAAN;AAAQ,QAAG,KAAG5hB,CAAN,EAAQ,OAAK,KAAGA,CAAH,IAAM,OAAK4hB,CAAhB,GAAmBA,CAAC,IAAG5hB,CAAC,IAAE,CAAP,CAA3B,KAAyC,OAAK,IAAEA,CAAF,IAAK,CAAC,IAAD,GAAM4hB,CAAhB,GAAmB5hB,CAAC,IAAE,CAAH,EAAK4hB,CAAC,EAAN;AAAS5hB,KAAC,GAACluB,CAAC,GAACqI,IAAI,CAACm2B,GAAL,CAAS,CAAT,EAAW,CAACsR,CAAZ,CAAJ;AAAmB9vC,KAAC,GAACkuB,CAAC,GAACygD,IAAI,CAACC,eAAL,CAAqBsC,SAAvB,GAAiC,OAAnC;AAA2ChjD,KAAC,GAACA,CAAC,GAACygD,IAAI,CAACC,eAAL,CAAqB0C,SAAvB,KAAmC,CAArC;AAAuC3C,QAAI,CAAC0wB,KAAL,CAAWE,WAAX,GAAuB,CAACt/F,CAAC,IAAE,EAAH,GAAM6vC,CAAC,GAAC,IAAF,IAAQ,EAAd,GAAiB9vC,CAAlB,MAAuB,CAA9C;AAAgD2uE,QAAI,CAAC0wB,KAAL,CAAWC,UAAX,GAAsBpxE,CAAtB;AAAwB;AAAC,CAD7P;;AAEAygD,IAAI,CAAC0wB,KAAL,CAAWU,WAAX,GAAuB,UAAS//F,CAAT,EAAW;AAAC,MAAIC,CAAC,GAACD,CAAC,CAACiY,UAAF,CAAa,CAAb,CAAN;AAAA,MAAsBiW,CAAC,GAACluB,CAAC,CAACiY,UAAF,CAAa,CAAb,CAAxB;AAAA,MAAwC63B,CAAC,GAAC9vC,CAAC,CAACiY,UAAF,CAAa,CAAb,CAA1C;AAAA,MAA0DiL,CAAC,GAACljB,CAAC,CAACiY,UAAF,CAAa,CAAb,CAA5D;AAAA,MAA4EwuB,CAAC,GAACzmC,CAAC,CAACiY,UAAF,CAAa,CAAb,CAA9E;AAAA,MAA8FijB,CAAC,GAACl7B,CAAC,CAACiY,UAAF,CAAa,CAAb,CAAhG;AAAA,MAAgH04B,CAAC,GAAC3wC,CAAC,CAACiY,UAAF,CAAa,CAAb,CAAlH;AAAkIjY,GAAC,GAACA,CAAC,CAACiY,UAAF,CAAa,CAAb,CAAF;AAAkB02D,MAAI,CAAC0wB,KAAL,CAAWC,UAAX,GAAsBr/F,CAAC,IAAEiuB,CAAC,IAAE,CAAL,CAAD,IAAU4hB,CAAC,IAAE,EAAb,KAAkB5sB,CAAC,IAAE,EAArB,MAA2B,CAAjD;AAAmDyrD,MAAI,CAAC0wB,KAAL,CAAWE,WAAX,GAAuB94D,CAAC,IAAEvL,CAAC,IAAE,CAAL,CAAD,IAAUyV,CAAC,IAAE,EAAb,KAAkB3wC,CAAC,IAAE,EAArB,MAA2B,CAAlD;AAAoD,CAA9R;;AAA+R2uE,IAAI,CAAC0wB,KAAL,CAAWW,UAAX,GAAsB,UAAShgG,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOA,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqByC,SAAvB,IAAkCrxE,CAAC,KAAG,CAAtC,CAAP;AAAgD,CAApF;;AAC/R2uE,IAAI,CAAC0wB,KAAL,CAAWY,SAAX,GAAqB,UAASjgG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAACjuB,CAAC,GAAC,UAAR;AAAmBiuB,GAAC,KAAGluB,CAAC,GAAC,CAACA,CAAD,GAAG,CAAH,KAAO,CAAT,EAAWC,CAAC,GAAC,CAACA,CAAD,KAAK,CAAlB,EAAoB,KAAGD,CAAH,KAAOC,CAAC,GAACA,CAAC,GAAC,CAAF,KAAM,CAAf,CAAvB,CAAD;AAA2CD,GAAC,GAAC2uE,IAAI,CAAC0wB,KAAL,CAAWW,UAAX,CAAsBhgG,CAAtB,EAAwBC,CAAxB,CAAF;AAA6B,SAAOiuB,CAAC,GAAC,CAACluB,CAAF,GAAIA,CAAZ;AAAc,CAA5I;;AAA6I2uE,IAAI,CAAC0wB,KAAL,CAAWa,UAAX,GAAsB,UAASlgG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC7vC,CAAC,IAAE,EAAT;AAAY,SAAOiuB,CAAC,CAACluB,CAAC,IAAE,CAAH,GAAK8vC,CAAN,EAAQ,CAAC7vC,CAAC,IAAE,CAAH,GAAKD,CAAC,KAAG,EAAV,IAAc8vC,CAAtB,CAAR;AAAiC,CAAnF;;AAAoF6+B,IAAI,CAAC0wB,KAAL,CAAWc,YAAX,GAAwB,UAASngG,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO0uE,IAAI,CAAC0wB,KAAL,CAAWe,YAAX,CAAwBpgG,CAAxB,EAA0BC,CAA1B,EAA4B0uE,IAAI,CAAC0wB,KAAL,CAAWY,SAAvC,CAAP;AAAyD,CAA/F;;AAAgGtxB,IAAI,CAAC0wB,KAAL,CAAWe,YAAX,GAAwB,UAASpgG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC,EAAE9vC,CAAC,GAAC,CAAJ,CAAN;AAAa,SAAOkuB,CAAC,CAAC,CAACluB,CAAC,KAAG,CAAJ,GAAMC,CAAC,IAAE,EAAV,IAAc6vC,CAAf,EAAiB7vC,CAAC,KAAG,CAAJ,GAAM6vC,CAAvB,CAAR;AAAkC,CAAvF;;AACjU6+B,IAAI,CAAC0wB,KAAL,CAAWgB,WAAX,GAAuB,UAASrgG,CAAT,EAAWC,CAAX,EAAa;AAACA,GAAC,GAAC,KAAGD,CAAC,IAAE,EAAN,IAAU,CAAZ;AAAc,MAAIkuB,CAAC,GAACluB,CAAC,KAAG,EAAJ,GAAO,GAAb;AAAiBA,GAAC,IAAE,OAAH;AAAW,SAAO,OAAKkuB,CAAL,GAAOluB,CAAC,GAACwI,GAAD,GAAK83F,QAAQ,GAACrgG,CAAtB,GAAwB,KAAGiuB,CAAH,GAAKjuB,CAAC,GAACoI,IAAI,CAACm2B,GAAL,CAAS,CAAT,EAAW,CAAC,GAAZ,CAAF,GAAmBx+B,CAAxB,GAA0BC,CAAC,GAACoI,IAAI,CAACm2B,GAAL,CAAS,CAAT,EAAWtQ,CAAC,GAAC,GAAb,CAAF,IAAqBluB,CAAC,GAACqI,IAAI,CAACm2B,GAAL,CAAS,CAAT,EAAW,EAAX,CAAvB,CAAzD;AAAgG,CAA/K;;AAAgLmwC,IAAI,CAAC0wB,KAAL,CAAWkB,WAAX,GAAuB,UAASvgG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAAC,KAAGjuB,CAAC,IAAE,EAAN,IAAU,CAAhB;AAAA,MAAkB6vC,CAAC,GAAC7vC,CAAC,KAAG,EAAJ,GAAO,IAA3B;AAAgCD,GAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqByC,SAArB,IAAgCpxE,CAAC,GAAC,OAAlC,IAA2CD,CAA7C;AAA+C,SAAO,QAAM8vC,CAAN,GAAQ9vC,CAAC,GAACwI,GAAD,GAAK83F,QAAQ,GAACpyE,CAAvB,GAAyB,KAAG4hB,CAAH,GAAK5hB,CAAC,GAAC7lB,IAAI,CAACm2B,GAAL,CAAS,CAAT,EAAW,CAAC,IAAZ,CAAF,GAAoBx+B,CAAzB,GAA2BkuB,CAAC,GAAC7lB,IAAI,CAACm2B,GAAL,CAAS,CAAT,EAAWsR,CAAC,GAAC,IAAb,CAAF,IAAsB9vC,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqB0C,SAA7C,CAA3D;AAAmH,CAAvO;;AAChL3C,IAAI,CAAC0wB,KAAL,CAAWmB,UAAX,GAAsB,UAASxgG,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOm9B,MAAM,CAACC,YAAP,CAAoBr9B,CAAC,KAAG,CAAJ,GAAM,GAA1B,EAA8BA,CAAC,KAAG,CAAJ,GAAM,GAApC,EAAwCA,CAAC,KAAG,EAAJ,GAAO,GAA/C,EAAmDA,CAAC,KAAG,EAAJ,GAAO,GAA1D,EAA8DC,CAAC,KAAG,CAAJ,GAAM,GAApE,EAAwEA,CAAC,KAAG,CAAJ,GAAM,GAA9E,EAAkFA,CAAC,KAAG,EAAJ,GAAO,GAAzF,EAA6FA,CAAC,KAAG,EAAJ,GAAO,GAApG,CAAP;AAAgH,CAApJ;;AAAqJ0uE,IAAI,CAAC0wB,KAAL,CAAWoB,MAAX,GAAkB,mBAAmBxmF,KAAnB,CAAyB,EAAzB,CAAlB;AAA+C00D,IAAI,CAAC0wB,KAAL,CAAWqB,eAAX,GAA2B,EAA3B;AAA8B/xB,IAAI,CAAC0wB,KAAL,CAAWsB,YAAX,GAAwB,EAAxB;;AAClOhyB,IAAI,CAAC0wB,KAAL,CAAWuB,yBAAX,GAAqC,UAAS5gG,CAAT,EAAWC,CAAX,EAAa;AAAC,WAASiuB,CAAT,CAAWluB,CAAX,EAAaC,CAAb,EAAe;AAACD,KAAC,GAACA,CAAC,GAACo9B,MAAM,CAACp9B,CAAD,CAAP,GAAW,EAAd;AAAiB,WAAOC,CAAC,GAAC,UAAU2B,KAAV,CAAgB5B,CAAC,CAACJ,MAAlB,IAA0BI,CAA3B,GAA6BA,CAArC;AAAuC;;AAAA,MAAG,WAASC,CAAZ,EAAc,OAAM,KAAG0uE,IAAI,CAAC0wB,KAAL,CAAWW,UAAX,CAAsBhgG,CAAtB,EAAwBC,CAAxB,CAAT;AAAoC,MAAI6vC,CAAC,GAAC,CAAC9vC,CAAC,KAAG,EAAJ,GAAOC,CAAC,IAAE,CAAX,MAAgB,CAAhB,GAAkB,QAAxB;AAAiCA,GAAC,GAACA,CAAC,IAAE,EAAH,GAAM,KAAR;AAAcD,GAAC,GAAC,CAACA,CAAC,GAAC,QAAH,IAAa,UAAQ8vC,CAArB,GAAuB,UAAQ7vC,CAAjC;AAAmC6vC,GAAC,IAAE,UAAQ7vC,CAAX;AAAaA,GAAC,IAAE,CAAH;AAAK,SAAKD,CAAL,KAAS8vC,CAAC,IAAEznC,IAAI,CAACC,KAAL,CAAWtI,CAAC,GAAC,GAAb,CAAH,EAAqBA,CAAC,IAAE,GAAjC;AAAsC,SAAK8vC,CAAL,KAAS7vC,CAAC,IAAEoI,IAAI,CAACC,KAAL,CAAWwnC,CAAC,GAAC,GAAb,CAAH,EAAqBA,CAAC,IAAE,GAAjC;AAAsC,SAAO5hB,CAAC,CAACjuB,CAAD,EAAG,CAAH,CAAD,GAAOiuB,CAAC,CAAC4hB,CAAD,EAAG7vC,CAAH,CAAR,GAAciuB,CAAC,CAACluB,CAAD,EAAG,CAAH,CAAtB;AAA4B,CAAzX;;AACA2uE,IAAI,CAAC0wB,KAAL,CAAWwB,uBAAX,GAAmC,UAAS7gG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAACjuB,CAAC,GAAC,UAAR;AAAmBiuB,GAAC,KAAGluB,CAAC,GAAC,CAACA,CAAD,GAAG,CAAH,KAAO,CAAT,EAAWC,CAAC,GAAC,CAACA,CAAD,IAAI,KAAGD,CAAH,GAAK,CAAL,GAAO,CAAX,MAAgB,CAAhC,CAAD;AAAoCA,GAAC,GAAC2uE,IAAI,CAAC0wB,KAAL,CAAWuB,yBAAX,CAAqC5gG,CAArC,EAAuCC,CAAvC,CAAF;AAA4C,SAAOiuB,CAAC,GAAC,MAAIluB,CAAL,GAAOA,CAAf;AAAiB,CAArK;;AAAsK2uE,IAAI,CAAC0wB,KAAL,CAAWyB,qBAAX,GAAiC,UAAS9gG,CAAT,EAAWC,CAAX,EAAa;AAAC0uE,MAAI,CAAC0wB,KAAL,CAAWU,WAAX,CAAuB//F,CAAvB;AAA0BA,GAAC,GAAC2uE,IAAI,CAAC0wB,KAAL,CAAWC,UAAb;AAAwB,MAAIpxE,CAAC,GAACygD,IAAI,CAAC0wB,KAAL,CAAWE,WAAjB;AAA6B,SAAOt/F,CAAC,GAAC0uE,IAAI,CAAC0wB,KAAL,CAAWwB,uBAAX,CAAmC7gG,CAAnC,EAAqCkuB,CAArC,CAAD,GAAyCygD,IAAI,CAAC0wB,KAAL,CAAWuB,yBAAX,CAAqC5gG,CAArC,EAAuCkuB,CAAvC,CAAjD;AAA2F,CAAzN;;AACtKygD,IAAI,CAAC0wB,KAAL,CAAW0B,2BAAX,GAAuC,UAAS/gG,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAI,IAAIiuB,CAAC,GAACxwB,KAAK,CAACsC,CAAC,CAACJ,MAAH,CAAX,EAAsBkwC,CAAC,GAAC,CAA5B,EAA8BA,CAAC,GAAC9vC,CAAC,CAACJ,MAAlC,EAAyCkwC,CAAC,EAA1C,EAA6C5hB,CAAC,CAAC4hB,CAAD,CAAD,GAAK6+B,IAAI,CAAC0wB,KAAL,CAAWyB,qBAAX,CAAiC9gG,CAAC,CAAC8vC,CAAD,CAAlC,EAAsC7vC,CAAtC,CAAL;;AAA8C,SAAOiuB,CAAP;AAAS,CAAzJ;;AACAygD,IAAI,CAAC0wB,KAAL,CAAW2B,qBAAX,GAAiC,UAAShhG,CAAT,EAAW;AAAC,WAASC,CAAT,CAAWD,CAAX,EAAaC,CAAb,EAAe;AAAC,SAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAY,IAAEA,CAAF,KAAM,MAAIluB,CAAJ,IAAO,IAAEC,CAAf,CAAZ,EAA8BiuB,CAAC,EAA/B,EAAkCjuB,CAAC,GAACD,CAAC,GAACkjB,CAAC,CAACgL,CAAD,CAAH,GAAOjuB,CAAT,EAAWijB,CAAC,CAACgL,CAAD,CAAD,GAAKjuB,CAAC,GAAC,GAAlB,EAAsBA,CAAC,MAAI,CAA3B;AAA6B;;AAAA,WAASiuB,CAAT,GAAY;AAAC,SAAI,IAAIluB,CAAC,GAAC,CAAV,EAAY,IAAEA,CAAd,EAAgBA,CAAC,EAAjB,EAAoBkjB,CAAC,CAACljB,CAAD,CAAD,GAAK,CAACkjB,CAAC,CAACljB,CAAD,CAAF,GAAM,GAAX;AAAe;;AAAA87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,IAAE5tE,CAAC,CAACJ,MAAxB;AAAgC,MAAIkwC,CAAC,GAAC,CAAC,CAAP;AAAS,UAAM9vC,CAAC,CAAC,CAAD,CAAP,KAAa8vC,CAAC,GAAC,CAAC,CAAH,EAAK9vC,CAAC,GAACA,CAAC,CAAC4B,KAAF,CAAQ,CAAR,CAApB;;AAAgC,OAAI,IAAIshB,CAAC,GAAC,CAAC,CAAD,EAAG,CAAH,EAAK,CAAL,EAAO,CAAP,EAAS,CAAT,EAAW,CAAX,EAAa,CAAb,EAAe,CAAf,CAAN,EAAwBujB,CAAC,GAAC,CAA9B,EAAgCA,CAAC,GAACzmC,CAAC,CAACJ,MAApC,EAA2C6mC,CAAC,EAA5C,EAA+CxmC,CAAC,CAAC,EAAD,EAAID,CAAC,CAACiY,UAAF,CAAawuB,CAAb,IAAgBkoC,IAAI,CAAC0wB,KAAL,CAAWqB,eAA/B,CAAD;;AAAiD5wD,GAAC,KAAG5hB,CAAC,IAAGjuB,CAAC,CAAC,CAAD,EAAG,CAAH,CAAR,CAAD;AAAgB,SAAO67D,IAAI,CAACv+B,KAAL,CAAW22C,iBAAX,CAA6BhxD,CAA7B,CAAP;AAAuC,CAA5Y;;AAA6YyrD,IAAI,CAAC0wB,KAAL,CAAW4B,kBAAX,GAA8B,UAASjhG,CAAT,EAAW;AAAC2uE,MAAI,CAAC0wB,KAAL,CAAWU,WAAX,CAAuBpxB,IAAI,CAAC0wB,KAAL,CAAW2B,qBAAX,CAAiChhG,CAAjC,CAAvB;AAA4D,CAAtG;;AAC7Y2uE,IAAI,CAAC0wB,KAAL,CAAW6B,WAAX,GAAuB,UAASlhG,CAAT,EAAW;AAAC,SAAOo9B,MAAM,CAACC,YAAP,CAAoB,KAAGr9B,CAAH,GAAK2uE,IAAI,CAAC0wB,KAAL,CAAWqB,eAAX,GAA2B1gG,CAAhC,GAAkC2uE,IAAI,CAAC0wB,KAAL,CAAWsB,YAAX,GAAwB,EAAxB,GAA2B3gG,CAAjF,CAAP;AAA2F,CAA9H;;AAA+H2uE,IAAI,CAAC0wB,KAAL,CAAW8B,gBAAX,GAA4B,UAASnhG,CAAT,EAAW;AAAC,SAAOA,CAAC,IAAE2uE,IAAI,CAAC0wB,KAAL,CAAWsB,YAAd,GAA2B3gG,CAAC,GAAC2uE,IAAI,CAAC0wB,KAAL,CAAWsB,YAAb,GAA0B,EAArD,GAAwD3gG,CAAC,GAAC2uE,IAAI,CAAC0wB,KAAL,CAAWqB,eAA5E;AAA4F,CAApI;;AAAqI/xB,IAAI,CAAC0wB,KAAL,CAAW+B,iBAAX,GAA6B,UAASphG,CAAT,EAAW;AAAC,MAAIC,CAAC,GAACvC,KAAK,CAAC,EAAD,CAAX;AAAgBuC,GAAC,CAAC,CAAD,CAAD,GAAK,GAAL;AAASA,GAAC,CAAC,CAAD,CAAD,GAAK,GAAL;;AAAS,OAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAY,IAAEA,CAAd,EAAgBA,CAAC,EAAjB,EAAoB;AAAC,QAAI4hB,CAAC,GAAC9vC,CAAC,CAACiY,UAAF,CAAa,IAAEiW,CAAf,CAAN;AAAwBjuB,KAAC,CAAC,IAAEiuB,CAAF,GAAI,CAAL,CAAD,GAASygD,IAAI,CAAC0wB,KAAL,CAAW6B,WAAX,CAAuBpxD,CAAC,IAAE,CAA1B,CAAT;AAAsC7vC,KAAC,CAAC,IAAEiuB,CAAF,GAAI,CAAL,CAAD,GAASygD,IAAI,CAAC0wB,KAAL,CAAW6B,WAAX,CAAuBpxD,CAAC,GAAC,EAAzB,CAAT;AAAsC;;AAAA,SAAO7vC,CAAC,CAAC0a,IAAF,CAAO,EAAP,CAAP;AAAkB,CAAtN;;AACpQg0D,IAAI,CAAC0wB,KAAL,CAAWgC,iBAAX,GAA6B,UAASrhG,CAAT,EAAW;AAACA,GAAC,GAACA,CAAC,CAACi6B,WAAF,EAAF;AAAkB6hC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,MAAI5tE,CAAC,CAACJ,MAA1B;AAAkCk8D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,OAAK5tE,CAAC,CAAC,CAAD,CAA1B;AAA+B87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,OAAK5tE,CAAC,CAAC,CAAD,CAA1B;;AAA+B,OAAI,IAAIC,CAAC,GAAC,EAAN,EAASiuB,CAAC,GAAC,CAAf,EAAiB,IAAEA,CAAnB,EAAqBA,CAAC,EAAtB,EAAyB;AAAC,QAAI4hB,CAAC,GAAC6+B,IAAI,CAAC0wB,KAAL,CAAW8B,gBAAX,CAA4BnhG,CAAC,CAACiY,UAAF,CAAa,IAAEiW,CAAF,GAAI,CAAjB,CAA5B,CAAN;AAAA,QAAuDhL,CAAC,GAACyrD,IAAI,CAAC0wB,KAAL,CAAW8B,gBAAX,CAA4BnhG,CAAC,CAACiY,UAAF,CAAa,IAAEiW,CAAF,GAAI,CAAjB,CAA5B,CAAzD;AAA0GjuB,KAAC,GAACm9B,MAAM,CAACC,YAAP,CAAoB,KAAGyS,CAAH,GAAK5sB,CAAzB,IAA4BjjB,CAA9B;AAAgC;;AAAA,SAAOA,CAAP;AAAS,CAAxU;;AACA0uE,IAAI,CAAC0wB,KAAL,CAAWiC,cAAX,GAA0B,UAASthG,CAAT,EAAWC,CAAX,EAAa;AAAC0uE,MAAI,CAAC0wB,KAAL,CAAWU,WAAX,CAAuB//F,CAAvB;AAA0BA,GAAC,GAAC2uE,IAAI,CAAC0wB,KAAL,CAAWC,UAAb;AAAwB,MAAIpxE,CAAC,GAACygD,IAAI,CAAC0wB,KAAL,CAAWE,WAAjB;AAA6B,SAAOt/F,CAAC,GAAC0uE,IAAI,CAAC0wB,KAAL,CAAWY,SAAX,CAAqBjgG,CAArB,EAAuBkuB,CAAvB,CAAD,GAA2BygD,IAAI,CAAC0wB,KAAL,CAAWW,UAAX,CAAsBhgG,CAAtB,EAAwBkuB,CAAxB,CAAnC;AAA8D,CAArL;;AAAsLygD,IAAI,CAAC0wB,KAAL,CAAWkC,cAAX,GAA0B,UAASvhG,CAAT,EAAW;AAAC2uE,MAAI,CAAC0wB,KAAL,CAAWI,UAAX,CAAsBz/F,CAAtB;AAAyB,SAAO2uE,IAAI,CAAC0wB,KAAL,CAAWmB,UAAX,CAAsB7xB,IAAI,CAAC0wB,KAAL,CAAWC,UAAjC,EAA4C3wB,IAAI,CAAC0wB,KAAL,CAAWE,WAAvD,CAAP;AAA2E,CAA1I;;AAA2I5wB,IAAI,CAAC0wB,KAAL,CAAWmC,YAAX,GAAwB,UAASxhG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAI,IAAI4hB,CAAC,GAAC,CAAN,EAAQ5sB,CAAC,GAACjjB,CAAd,EAAgBijB,CAAC,GAACgL,CAAlB,EAAoBhL,CAAC,EAArB,EAAwB4sB,CAAC,IAAE9vC,CAAC,CAACkjB,CAAD,CAAD,IAAM,CAAT;;AAAW,SAAOgL,CAAC,GAACjuB,CAAF,GAAI6vC,CAAX;AAAa,CAAxF;;AACjU6+B,IAAI,CAAC0wB,KAAL,CAAWoC,iBAAX,GAA6B,UAASzhG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,MAAI5sB,CAAC,GAAC,CAAN;AAAQ4sB,GAAC,GAAC,IAAEA,CAAF,GAAI6+B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAApC;AAA2C,MAAG,MAAIxgC,CAAP,EAAS,OAAK7vC,CAAC,GAACiuB,CAAF,IAAKluB,CAAC,CAACC,CAAC,EAAF,CAAD,IAAQ6vC,CAAlB,GAAqB,KAAI5sB,CAAC,EAAL,IAAU;AAAC,QAAIujB,CAAC,GAACzmC,CAAC,CAACC,CAAC,EAAF,CAAP;AAAa,QAAG,MAAIwmC,CAAC,GAAC,GAAN,CAAH,EAAc;AAAM,GAA1E,MAA+E,OAAKxmC,CAAC,GAACiuB,CAAP,GAAU;AAAC,SAAIuY,CAAC,GAACqJ,CAAN,EAAQ,MAAIrJ,CAAZ,GAAe;AAAC,UAAGzmC,CAAC,CAACC,CAAD,CAAD,KAAOwmC,CAAC,GAAC,GAAF,GAAM,GAAb,CAAH,EAAqB,OAAOvjB,CAAP;AAASjjB,OAAC;AAAGwmC,OAAC,KAAG,CAAJ;AAAM;;AAAA,QAAGzmC,CAAC,CAACC,CAAC,EAAF,CAAD,IAAQwmC,CAAX,EAAa;;AAAM,SAAIvjB,CAAC,EAAL,EAAQujB,CAAC,GAACzmC,CAAC,CAACC,CAAC,EAAF,CAAH,EAAS,MAAIwmC,CAAC,GAAC,GAAN,CAAjB,EAA6B;AAAE;AAAA,SAAOvjB,CAAP;AAAS,CAA/S;;AAAgTyrD,IAAI,CAAC0wB,KAAL,CAAWqC,iBAAX,GAA6B,UAAS1hG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmB;AAAC,MAAIujB,CAAC,GAAC,CAAN;AAAQ,MAAG,MAAIqJ,CAAP,EAAS,OAAK7vC,CAAC,GAACiuB,CAAF,IAAKluB,CAAC,CAACC,CAAC,EAAF,CAAD,IAAQ6vC,CAAlB,GAAqBrJ,CAAC,IAAGxmC,CAAC,IAAEijB,CAAP,CAA9B,KAA4C,OAAKjjB,CAAC,GAACiuB,CAAP,GAAU;AAAC,SAAI,IAAIgN,CAAC,GAAC4U,CAAV,EAAY,MAAI5U,CAAhB,GAAmB;AAAC,UAAGl7B,CAAC,CAACC,CAAC,EAAF,CAAD,KAASi7B,CAAC,GAAC,GAAF,GAAM,GAAf,CAAH,EAAuB,OAAOuL,CAAP;AAASvL,OAAC,KAAG,CAAJ;AAAM;;AAAA,QAAGl7B,CAAC,CAACC,CAAC,EAAF,CAAD,IAAQi7B,CAAX,EAAa;AAAMuL,KAAC;AAAGxmC,KAAC,IAAEijB,CAAH;AAAK;AAAA,SAAOujB,CAAP;AAAS,CAA/M;;AAChTkoC,IAAI,CAAC0wB,KAAL,CAAWsC,kBAAX,GAA8B,UAAS3hG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,SAAO6+B,IAAI,CAAC0wB,KAAL,CAAWqC,iBAAX,CAA6B1hG,CAA7B,EAA+BC,CAA/B,EAAiCiuB,CAAjC,EAAmC,IAAE4hB,CAAF,GAAI6+B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bd,OAArE,EAA6E,CAA7E,CAAP;AAAuF,CAAvI;;AAAwIZ,IAAI,CAAC0wB,KAAL,CAAWuC,kBAAX,GAA8B,UAAS5hG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,SAAO6+B,IAAI,CAAC0wB,KAAL,CAAWqC,iBAAX,CAA6B1hG,CAA7B,EAA+BC,CAA/B,EAAiCiuB,CAAjC,EAAmC,IAAE4hB,CAAF,GAAI6+B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAArE,EAA6E,CAA7E,CAAP;AAAuF,CAAvI;;AACxIX,IAAI,CAAC0wB,KAAL,CAAWwC,oBAAX,GAAgC,UAAS7hG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,MAAI5sB,CAAC,GAAC,CAAN;;AAAQ,OAAI4sB,CAAC,GAAC,IAAEA,CAAF,GAAI6+B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAxC,EAAkDtwE,CAAC,GAACiuB,CAApD,GAAuD;AAAC,SAAI,IAAIuY,CAAC,GAACqJ,CAAV,EAAY,MAAIrJ,CAAhB,GAAmB;AAAC,UAAGzmC,CAAC,CAACC,CAAC,EAAF,CAAD,KAASwmC,CAAC,GAAC,GAAF,GAAM,GAAf,CAAH,EAAuB,OAAOvjB,CAAP;AAASujB,OAAC,KAAG,CAAJ;AAAM;;AAAA,QAAGzmC,CAAC,CAACC,CAAC,EAAF,CAAD,IAAQwmC,CAAX,EAAa;AAAMvjB,KAAC;;AAAG,SAAI,IAAIgY,CAAC,GAAC,CAAN,EAAQyV,CAAC,GAAC,CAAd,EAAgBlK,CAAC,GAACzmC,CAAC,CAACC,CAAC,EAAF,CAAH,EAASi7B,CAAC,IAAE,CAACuL,CAAC,GAAC,GAAH,IAAQkK,CAApB,EAAsBA,CAAC,IAAE,GAAzB,EAA6B,MAAIlK,CAAC,GAAC,GAAN,CAA7C,EAAyD;;AAACxmC,KAAC,IAAEi7B,CAAH;AAAK;;AAAA,SAAOhY,CAAP;AAAS,CAA3Q;;AAA4QyrD,IAAI,CAAC0wB,KAAL,CAAWyC,sBAAX,GAAkC,UAAS9hG,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,GAAN;;AAAU,MAAGD,CAAH,EAAK;AAACA,KAAC,GAAC2uE,IAAI,CAAC0wB,KAAL,CAAW0C,sBAAX,CAAkC/hG,CAAlC,CAAF;;AAAuC,SAAI,IAAIkuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACluB,CAAC,CAACJ,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2BjuB,CAAC,IAAE,KAAH,EAAS,KAAGD,CAAC,CAACkuB,CAAD,CAAJ,KAAUjuB,CAAC,IAAE,GAAb,CAAT,EAA2BA,CAAC,IAAED,CAAC,CAACkuB,CAAD,CAAD,CAAK1X,QAAL,CAAc,EAAd,CAA9B;AAAgD;;AAAA,SAAOvW,CAAC,GAAC,GAAT;AAAa,CAA7L;;AAC5Q0uE,IAAI,CAAC0wB,KAAL,CAAW2C,uBAAX,GAAmC,UAAShiG,CAAT,EAAW;AAAC,SAAM,aAAW,OAAOA,CAAlB,GAAoB87D,IAAI,CAAC/yB,MAAL,CAAYnI,KAAZ,CAAkB5gC,CAAlB,CAApB,GAAyCA,CAAC,CAACwW,QAAF,EAA/C;AAA4D,CAA3G;;AAA4Gm4D,IAAI,CAAC0wB,KAAL,CAAWprB,iBAAX,GAA6B,UAASj0E,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC,IAAI8b,UAAJ,CAAe/b,CAAC,CAACJ,MAAjB,CAAN,EAA+BsuB,CAAC,GAAC,CAArC,EAAuCA,CAAC,GAACluB,CAAC,CAACJ,MAA3C,EAAkDsuB,CAAC,EAAnD,EAAsD;AAAC,QAAI4hB,CAAC,GAAC9vC,CAAC,CAACiY,UAAF,CAAaiW,CAAb,CAAN;AAAsB,QAAG,MAAI4hB,CAAP,EAAS,MAAM1xC,KAAK,CAAC,mEAAD,CAAX;AAAiF6B,KAAC,CAACiuB,CAAD,CAAD,GAAK4hB,CAAL;AAAO;;AAAA,SAAO7vC,CAAP;AAAS,CAAhO;;AAC5G0uE,IAAI,CAAC0wB,KAAL,CAAW0C,sBAAX,GAAkC,UAAS/hG,CAAT,EAAW;AAAC,MAAGA,CAAC,CAACvH,WAAF,KAAgBsjB,UAAnB,EAA8B,OAAO/b,CAAP;AAAS,MAAGA,CAAC,CAACvH,WAAF,KAAgBogE,WAAhB,IAA6B,eAAa,OAAO78C,MAApB,IAA4Bhc,CAAC,CAACvH,WAAF,KAAgBujB,MAAzE,IAAiFhc,CAAC,CAACvH,WAAF,KAAgBiF,KAApG,EAA0G,OAAO,IAAIqe,UAAJ,CAAe/b,CAAf,CAAP;AAAyB,MAAGA,CAAC,CAACvH,WAAF,KAAgB2kC,MAAnB,EAA0B,OAAO0+B,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBghE,wBAAlB,CAA2Cn/F,CAA3C,CAAP;AAAqD87D,MAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,qCAAlB;AAAyD,SAAO,IAAI/xD,UAAJ,CAAe,CAAf,CAAP;AAAyB,CAAzX;;AAA0X4yD,IAAI,CAACszB,aAAL,GAAmB,UAASjiG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAKg0E,MAAL,GAAY,IAAZ;AAAiB,OAAKC,OAAL,GAAa,KAAKC,IAAL,GAAU,KAAKC,MAAL,GAAY,CAAnC;AAAqC,OAAKC,MAAL,GAAY,CAAC,CAAb;AAAetiG,GAAC,IAAE,KAAKuiG,QAAL,CAAcviG,CAAd,EAAgBC,CAAhB,EAAkBiuB,CAAlB,CAAH;AAAwB,CAAhI;;AAAiIygD,IAAI,CAACszB,aAAL,CAAmBO,cAAnB,GAAkC,EAAlC;;AAAqC7zB,IAAI,CAACszB,aAAL,CAAmBriF,KAAnB,GAAyB,UAAS5f,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAGygD,IAAI,CAACszB,aAAL,CAAmBO,cAAnB,CAAkC5iG,MAArC,EAA4C;AAAC,QAAIkwC,CAAC,GAAC6+B,IAAI,CAACszB,aAAL,CAAmBO,cAAnB,CAAkChiG,GAAlC,EAAN;AAA8CR,KAAC,IAAE8vC,CAAC,CAACyyD,QAAF,CAAWviG,CAAX,EAAaC,CAAb,EAAeiuB,CAAf,CAAH;AAAqB,WAAO4hB,CAAP;AAAS;;AAAA,SAAO,IAAI6+B,IAAI,CAACszB,aAAT,CAAuBjiG,CAAvB,EAAyBC,CAAzB,EAA2BiuB,CAA3B,CAAP;AAAqC,CAAvM;;AAAwMygD,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B6sF,IAA7B,GAAkC,YAAU;AAAC,OAAKt3B,KAAL;AAAa,QAAIwD,IAAI,CAACszB,aAAL,CAAmBO,cAAnB,CAAkC5iG,MAAtC,IAA8C+uE,IAAI,CAACszB,aAAL,CAAmBO,cAAnB,CAAkC/jG,IAAlC,CAAuC,IAAvC,CAA9C;AAA2F,CAArJ;;AACxuBkwE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BgpB,KAA7B,GAAmC,YAAU;AAAC,SAAO+vC,IAAI,CAACszB,aAAL,CAAmBriF,KAAnB,CAAyB,KAAKsiF,MAA9B,EAAqC,KAAKG,MAA1C,EAAiD,KAAKD,IAAL,GAAU,KAAKC,MAAhE,CAAP;AAA+E,CAA7H;;AAA8H1zB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6Bu1D,KAA7B,GAAmC,YAAU;AAAC,OAAK+2B,MAAL,GAAY,IAAZ;AAAiB,OAAKC,OAAL,GAAa,KAAKC,IAAL,GAAU,KAAKC,MAAL,GAAY,CAAnC;AAAqC,OAAKC,MAAL,GAAY,CAAC,CAAb;AAAe,CAAnH;;AAAoH3zB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B8sF,SAA7B,GAAuC,YAAU;AAAC,SAAO,KAAKR,MAAZ;AAAmB,CAArE;;AAClPvzB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B2sF,QAA7B,GAAsC,UAASviG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAKg0E,MAAL,GAAYvzB,IAAI,CAAC0wB,KAAL,CAAW0C,sBAAX,CAAkC/hG,CAAlC,CAAZ;AAAiD,OAAKqiG,MAAL,GAAY,KAAK,CAAL,KAASpiG,CAAT,GAAWA,CAAX,GAAa,CAAzB;AAA2B,OAAKmiG,IAAL,GAAU,KAAK,CAAL,KAASl0E,CAAT,GAAW,KAAKm0E,MAAL,GAAYn0E,CAAvB,GAAyB,KAAKg0E,MAAL,CAAYtiG,MAA/C;AAAsD,OAAKuiG,OAAL,GAAa,KAAKE,MAAlB;AAAyB,CAAjN;;AAAkN1zB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B+sF,MAA7B,GAAoC,YAAU;AAAC,SAAO,KAAKP,IAAZ;AAAiB,CAAhE;;AAAiEzzB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BgtF,MAA7B,GAAoC,UAAS5iG,CAAT,EAAW;AAAC,OAAKoiG,IAAL,GAAUpiG,CAAV;AAAY,CAA5D;;AAA6D2uE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BkpB,KAA7B,GAAmC,YAAU;AAAC,OAAKqjE,OAAL,GAAa,KAAKE,MAAlB;AAAyB,CAAvE;;AAAwE1zB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BitF,SAA7B,GAAuC,YAAU;AAAC,SAAO,KAAKV,OAAZ;AAAoB,CAAtE;;AACxZxzB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BktF,SAA7B,GAAuC,UAAS9iG,CAAT,EAAW;AAAC,OAAKmiG,OAAL,GAAaniG,CAAb;AAAe,CAAlE;;AAAmE2uE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BmtF,OAA7B,GAAqC,UAAS/iG,CAAT,EAAW;AAAC,OAAKmiG,OAAL,IAAcniG,CAAd;AAAgB87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAKu0B,OAAL,IAAc,KAAKC,IAAvC;AAA6C,CAA9G;;AAA+GzzB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BotF,KAA7B,GAAmC,YAAU;AAAC,SAAO,KAAKb,OAAL,IAAc,KAAKC,IAA1B;AAA+B,CAA7E;;AAA8EzzB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BqtF,OAA7B,GAAqC,YAAU;AAAC,SAAO,KAAKd,OAAL,GAAa,KAAKC,IAAzB;AAA8B,CAA9E;;AAA+EzzB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BiN,QAA7B,GAAsC,YAAU;AAAC,SAAO,KAAKy/E,MAAL,IAAa,IAAE,KAAKH,OAApB,IAA6B,KAAKA,OAAL,GAAa,KAAKC,IAAtD;AAA2D,CAA5G;;AAC/UzzB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BstF,iBAA7B,GAA+C,UAASljG,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC,GAAN,EAAUiuB,CAAC,GAAC,CAAZ,EAAc4hB,CAAC,GAAC,CAAhB,EAAkB5sB,CAAC,GAAC,CAAxB,EAA0B,IAAEA,CAAF,IAAK,OAAKjjB,CAApC,EAAsCijB,CAAC,EAAvC,EAA0CjjB,CAAC,GAAC,KAAKiiG,MAAL,CAAY,KAAKC,OAAL,EAAZ,CAAF,EAA8Bj0E,CAAC,IAAE,CAACjuB,CAAC,GAAC,GAAH,KAAS,IAAEijB,CAA5C;;AAA8C,SAAKjjB,CAAL,KAASA,CAAC,GAAC,KAAKiiG,MAAL,CAAY,KAAKC,OAAL,EAAZ,CAAF,EAA8Bj0E,CAAC,IAAE,CAACjuB,CAAC,GAAC,GAAH,KAAS,EAA1C,EAA6C6vC,CAAC,IAAE,CAAC7vC,CAAC,GAAC,GAAH,KAAS,CAAlE;AAAqE,MAAG,OAAKA,CAAR,EAAU,KAAIijB,CAAC,GAAC,CAAN,EAAQ,IAAEA,CAAF,IAAK,OAAKjjB,CAAlB,EAAoBijB,CAAC,EAArB,EAAwBjjB,CAAC,GAAC,KAAKiiG,MAAL,CAAY,KAAKC,OAAL,EAAZ,CAAF,EAA8BryD,CAAC,IAAE,CAAC7vC,CAAC,GAAC,GAAH,KAAS,IAAEijB,CAAF,GAAI,CAA9C;AAAgD,MAAG,MAAIjjB,CAAP,EAAS,OAAOD,CAAC,CAACkuB,CAAC,KAAG,CAAL,EAAO4hB,CAAC,KAAG,CAAX,CAAR;AAAsBgsB,MAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,6CAAlB;AAAiE,OAAKw0B,MAAL,GAAY,CAAC,CAAb;AAAe,CAAzZ;;AACA3zB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6ButF,uBAA7B,GAAqD,UAASnjG,CAAT,EAAW;AAAC,SAAO,KAAKkjG,iBAAL,CAAuB,UAASjjG,CAAT,EAAWiuB,CAAX,EAAa;AAAC,WAAOygD,IAAI,CAAC0wB,KAAL,CAAWe,YAAX,CAAwBngG,CAAxB,EAA0BiuB,CAA1B,EAA4BluB,CAA5B,CAAP;AAAsC,GAA3E,CAAP;AAAoF,CAArJ;;AAAsJ2uE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BwtF,gBAA7B,GAA8C,UAASpjG,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,KAAKiiG,MAAX;AAAA,MAAkBh0E,CAAC,GAAC,KAAKi0E,OAAzB;AAAiC,OAAKA,OAAL,IAAc,CAAd;;AAAgB,OAAI,IAAIryD,CAAC,GAAC,CAAN,EAAQ5sB,CAAC,GAAC,CAAV,EAAYujB,CAAC,GAACvY,CAAC,GAAC,CAApB,EAAsBuY,CAAC,IAAEvY,CAAzB,EAA2BuY,CAAC,EAA5B,EAA+BqJ,CAAC,GAACA,CAAC,IAAE,CAAH,GAAK7vC,CAAC,CAACwmC,CAAD,CAAR,EAAYvjB,CAAC,GAACA,CAAC,IAAE,CAAH,GAAKjjB,CAAC,CAACwmC,CAAC,GAAC,CAAH,CAApB;;AAA0B,SAAOzmC,CAAC,CAAC8vC,CAAD,EAAG5sB,CAAH,CAAR;AAAc,CAAlL;;AAAmLyrD,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BytF,UAA7B,GAAwC,YAAU;AAAC,SAAK,KAAKnB,MAAL,CAAY,KAAKC,OAAjB,IAA0B,GAA/B,GAAoC,KAAKA,OAAL;;AAAe,OAAKA,OAAL;AAAe,CAArH;;AACzUxzB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B0tF,YAA7B,GAA0C,UAAStjG,CAAT,EAAW;AAAC,SAAK,MAAIA,CAAT,GAAY,KAAKmiG,OAAL,IAAeniG,CAAC,MAAI,CAApB;;AAAsB,OAAKmiG,OAAL;AAAe,CAAvG;;AACAxzB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B2tF,oBAA7B,GAAkD,YAAU;AAAC,MAAIvjG,CAAC,GAAC,KAAKkiG,MAAX;AAAkB,MAAIjiG,CAAC,GAACD,CAAC,CAAC,KAAKmiG,OAAL,GAAa,CAAd,CAAP;AAAwB,MAAIj0E,CAAC,GAACjuB,CAAC,GAAC,GAAR;AAAY,MAAG,MAAIA,CAAP,EAAS,OAAO,KAAKkiG,OAAL,IAAc,CAAd,EAAgBrmC,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAKu0B,OAAL,IAAc,KAAKC,IAAvC,CAAhB,EAA6Dl0E,CAApE;AAAsEjuB,GAAC,GAACD,CAAC,CAAC,KAAKmiG,OAAL,GAAa,CAAd,CAAH;AAAoBj0E,GAAC,IAAE,CAACjuB,CAAC,GAAC,GAAH,KAAS,CAAZ;AAAc,MAAG,MAAIA,CAAP,EAAS,OAAO,KAAKkiG,OAAL,IAAc,CAAd,EAAgBrmC,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAKu0B,OAAL,IAAc,KAAKC,IAAvC,CAAhB,EAA6Dl0E,CAApE;AAAsEjuB,GAAC,GAACD,CAAC,CAAC,KAAKmiG,OAAL,GAAa,CAAd,CAAH;AAAoBj0E,GAAC,IAAE,CAACjuB,CAAC,GAAC,GAAH,KAAS,EAAZ;AAAe,MAAG,MAAIA,CAAP,EAAS,OAAO,KAAKkiG,OAAL,IAAc,CAAd,EAAgBrmC,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAKu0B,OAAL,IAAc,KAAKC,IAAvC,CAAhB,EAA6Dl0E,CAApE;AAAsEjuB,GAAC,GAACD,CAAC,CAAC,KAAKmiG,OAAL,GAAa,CAAd,CAAH;AAAoBj0E,GAAC,IAAE,CAACjuB,CAAC,GAAC,GAAH,KAAS,EAAZ;AAAe,MAAG,MAAIA,CAAP,EAAS,OAAO,KAAKkiG,OAAL,IAAc,CAAd,EAAgBrmC,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAKu0B,OAAL,IAC5f,KAAKC,IADme,CAAhB,EAC7cl0E,CADsc;AACpcjuB,GAAC,GAACD,CAAC,CAAC,KAAKmiG,OAAL,GAAa,CAAd,CAAH;AAAoBj0E,GAAC,IAAE,CAACjuB,CAAC,GAAC,EAAH,KAAQ,EAAX;AAAc,MAAG,MAAIA,CAAP,EAAS,OAAO,KAAKkiG,OAAL,IAAc,CAAd,EAAgBrmC,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAKu0B,OAAL,IAAc,KAAKC,IAAvC,CAAhB,EAA6Dl0E,CAAC,KAAG,CAAxE;AAA0E,OAAKi0E,OAAL,IAAc,CAAd;AAAgB,SAAKniG,CAAC,CAAC,KAAKmiG,OAAL,EAAD,CAAN,IAAwB,OAAKniG,CAAC,CAAC,KAAKmiG,OAAL,EAAD,CAA9B,IAAgD,OAAKniG,CAAC,CAAC,KAAKmiG,OAAL,EAAD,CAAtD,IAAwE,OAAKniG,CAAC,CAAC,KAAKmiG,OAAL,EAAD,CAA9E,IAAgG,OAAKniG,CAAC,CAAC,KAAKmiG,OAAL,EAAD,CAAtG,IAAwHrmC,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,CAAC,CAArB,CAAxH;AAAgJ9R,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAKu0B,OAAL,IAAc,KAAKC,IAAvC;AAA6C,SAAOl0E,CAAP;AAAS,CADxV;;AACyVygD,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B4tF,kBAA7B,GAAgD70B,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B2tF,oBAA7E;;AAAkG50B,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B6tF,0BAA7B,GAAwD,YAAU;AAAC,SAAO,KAAKF,oBAAL,GAA4B/sF,QAA5B,EAAP;AAA8C,CAAjH;;AAC3bm4D,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B8tF,wBAA7B,GAAsD,YAAU;AAAC,SAAO,KAAKF,kBAAL,GAA0BhtF,QAA1B,EAAP;AAA4C,CAA7G;;AAA8Gm4D,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B+tF,kBAA7B,GAAgD,YAAU;AAAC,MAAI3jG,CAAC,GAAC,KAAKujG,oBAAL,EAAN;AAAkC,SAAOvjG,CAAC,KAAG,CAAJ,GAAM,EAAEA,CAAC,GAAC,CAAJ,CAAb;AAAoB,CAAjH;;AAAkH2uE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BguF,oBAA7B,GAAkD,YAAU;AAAC,SAAO,KAAKV,iBAAL,CAAuBv0B,IAAI,CAAC0wB,KAAL,CAAWW,UAAlC,CAAP;AAAqD,CAAlH;;AAAmHrxB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BiuF,0BAA7B,GAAwD,YAAU;AAAC,SAAO,KAAKX,iBAAL,CAAuBv0B,IAAI,CAAC0wB,KAAL,CAAWuB,yBAAlC,CAAP;AAAoE,CAAvI;;AACnVjyB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BkuF,kBAA7B,GAAgD,YAAU;AAAC,SAAO,KAAKZ,iBAAL,CAAuBv0B,IAAI,CAAC0wB,KAAL,CAAWY,SAAlC,CAAP;AAAoD,CAA/G;;AAAgHtxB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BmuF,wBAA7B,GAAsD,YAAU;AAAC,SAAO,KAAKb,iBAAL,CAAuBv0B,IAAI,CAAC0wB,KAAL,CAAWwB,uBAAlC,CAAP;AAAkE,CAAnI;;AAAoIlyB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BouF,kBAA7B,GAAgD,YAAU;AAAC,SAAO,KAAKd,iBAAL,CAAuBv0B,IAAI,CAAC0wB,KAAL,CAAWc,YAAlC,CAAP;AAAuD,CAAlH;;AAAmHxxB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BquF,sBAA7B,GAAoD,YAAU;AAAC,SAAO,KAAKd,uBAAL,CAA6Bx0B,IAAI,CAAC0wB,KAAL,CAAWmB,UAAxC,CAAP;AAA2D,CAA1H;;AACvW7xB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BsuF,wBAA7B,GAAsD,YAAU;AAAC,SAAO,KAAKf,uBAAL,CAA6Bx0B,IAAI,CAAC0wB,KAAL,CAAWwB,uBAAxC,CAAP;AAAwE,CAAzI;;AAA0IlyB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BuuF,SAA7B,GAAuC,YAAU;AAAC,MAAInkG,CAAC,GAAC,KAAKkiG,MAAL,CAAY,KAAKC,OAAL,GAAa,CAAzB,CAAN;AAAkC,OAAKA,OAAL,IAAc,CAAd;AAAgBrmC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAKu0B,OAAL,IAAc,KAAKC,IAAvC;AAA6C,SAAOpiG,CAAP;AAAS,CAA1J;;AAA2J2uE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BwuF,UAA7B,GAAwC,YAAU;AAAC,MAAIpkG,CAAC,GAAC,KAAKkiG,MAAL,CAAY,KAAKC,OAAL,GAAa,CAAzB,CAAN;AAAA,MAAkCliG,CAAC,GAAC,KAAKiiG,MAAL,CAAY,KAAKC,OAAL,GAAa,CAAzB,CAApC;AAAgE,OAAKA,OAAL,IAAc,CAAd;AAAgBrmC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAKu0B,OAAL,IAAc,KAAKC,IAAvC;AAA6C,SAAOpiG,CAAC,IAAE,CAAH,GAAKC,CAAC,IAAE,CAAf;AAAiB,CAAjM;;AACrS0uE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6ByuF,UAA7B,GAAwC,YAAU;AAAC,MAAIrkG,CAAC,GAAC,KAAKkiG,MAAL,CAAY,KAAKC,OAAL,GAAa,CAAzB,CAAN;AAAA,MAAkCliG,CAAC,GAAC,KAAKiiG,MAAL,CAAY,KAAKC,OAAL,GAAa,CAAzB,CAApC;AAAA,MAAgEj0E,CAAC,GAAC,KAAKg0E,MAAL,CAAY,KAAKC,OAAL,GAAa,CAAzB,CAAlE;AAAA,MAA8FryD,CAAC,GAAC,KAAKoyD,MAAL,CAAY,KAAKC,OAAL,GAAa,CAAzB,CAAhG;AAA4H,OAAKA,OAAL,IAAc,CAAd;AAAgBrmC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAKu0B,OAAL,IAAc,KAAKC,IAAvC;AAA6C,SAAM,CAACpiG,CAAC,IAAE,CAAH,GAAKC,CAAC,IAAE,CAAR,GAAUiuB,CAAC,IAAE,EAAb,GAAgB4hB,CAAC,IAAE,EAApB,MAA0B,CAAhC;AAAkC,CAA9Q;;AAA+Q6+B,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B0uF,UAA7B,GAAwC,YAAU;AAAC,MAAItkG,CAAC,GAAC,KAAKqkG,UAAL,EAAN;AAAA,MAAwBpkG,CAAC,GAAC,KAAKokG,UAAL,EAA1B;AAA4C,SAAO11B,IAAI,CAAC0wB,KAAL,CAAWW,UAAX,CAAsBhgG,CAAtB,EAAwBC,CAAxB,CAAP;AAAkC,CAAjI;;AAC/Q0uE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B2uF,gBAA7B,GAA8C,YAAU;AAAC,MAAIvkG,CAAC,GAAC,KAAKqkG,UAAL,EAAN;AAAA,MAAwBpkG,CAAC,GAAC,KAAKokG,UAAL,EAA1B;AAA4C,SAAO11B,IAAI,CAAC0wB,KAAL,CAAWuB,yBAAX,CAAqC5gG,CAArC,EAAuCC,CAAvC,CAAP;AAAiD,CAAtJ;;AAAuJ0uE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B4uF,QAA7B,GAAsC,YAAU;AAAC,MAAIxkG,CAAC,GAAC,KAAKkiG,MAAL,CAAY,KAAKC,OAAL,GAAa,CAAzB,CAAN;AAAkC,OAAKA,OAAL,IAAc,CAAd;AAAgBrmC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAKu0B,OAAL,IAAc,KAAKC,IAAvC;AAA6C,SAAOpiG,CAAC,IAAE,EAAH,IAAO,EAAd;AAAiB,CAAjK;;AACvJ2uE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B6uF,SAA7B,GAAuC,YAAU;AAAC,MAAIzkG,CAAC,GAAC,KAAKkiG,MAAL,CAAY,KAAKC,OAAL,GAAa,CAAzB,CAAN;AAAA,MAAkCliG,CAAC,GAAC,KAAKiiG,MAAL,CAAY,KAAKC,OAAL,GAAa,CAAzB,CAApC;AAAgE,OAAKA,OAAL,IAAc,CAAd;AAAgBrmC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAKu0B,OAAL,IAAc,KAAKC,IAAvC;AAA6C,SAAM,CAACpiG,CAAC,IAAE,CAAH,GAAKC,CAAC,IAAE,CAAT,KAAa,EAAb,IAAiB,EAAvB;AAA0B,CAAzM;;AAA0M0uE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B8uF,SAA7B,GAAuC,YAAU;AAAC,MAAI1kG,CAAC,GAAC,KAAKkiG,MAAL,CAAY,KAAKC,OAAL,GAAa,CAAzB,CAAN;AAAA,MAAkCliG,CAAC,GAAC,KAAKiiG,MAAL,CAAY,KAAKC,OAAL,GAAa,CAAzB,CAApC;AAAA,MAAgEj0E,CAAC,GAAC,KAAKg0E,MAAL,CAAY,KAAKC,OAAL,GAAa,CAAzB,CAAlE;AAAA,MAA8FryD,CAAC,GAAC,KAAKoyD,MAAL,CAAY,KAAKC,OAAL,GAAa,CAAzB,CAAhG;AAA4H,OAAKA,OAAL,IAAc,CAAd;AAAgBrmC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAKu0B,OAAL,IAAc,KAAKC,IAAvC;AAA6C,SAAOpiG,CAAC,IAAE,CAAH,GAAKC,CAAC,IAAE,CAAR,GAAUiuB,CAAC,IAAE,EAAb,GAAgB4hB,CAAC,IAAE,EAA1B;AAA6B,CAAxQ;;AAC1M6+B,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6B+uF,SAA7B,GAAuC,YAAU;AAAC,MAAI3kG,CAAC,GAAC,KAAKqkG,UAAL,EAAN;AAAA,MAAwBpkG,CAAC,GAAC,KAAKokG,UAAL,EAA1B;AAA4C,SAAO11B,IAAI,CAAC0wB,KAAL,CAAWY,SAAX,CAAqBjgG,CAArB,EAAuBC,CAAvB,CAAP;AAAiC,CAA/H;;AAAgI0uE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BgvF,eAA7B,GAA6C,YAAU;AAAC,MAAI5kG,CAAC,GAAC,KAAKqkG,UAAL,EAAN;AAAA,MAAwBpkG,CAAC,GAAC,KAAKokG,UAAL,EAA1B;AAA4C,SAAO11B,IAAI,CAAC0wB,KAAL,CAAWwB,uBAAX,CAAmC7gG,CAAnC,EAAqCC,CAArC,CAAP;AAA+C,CAAnJ;;AAAoJ0uE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BivF,SAA7B,GAAuC,YAAU;AAAC,MAAI7kG,CAAC,GAAC,KAAKqkG,UAAL,EAAN;AAAwB,SAAO11B,IAAI,CAAC0wB,KAAL,CAAWgB,WAAX,CAAuBrgG,CAAvB,EAAyB,CAAzB,CAAP;AAAmC,CAA7G;;AACpR2uE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BkvF,UAA7B,GAAwC,YAAU;AAAC,MAAI9kG,CAAC,GAAC,KAAKqkG,UAAL,EAAN;AAAA,MAAwBpkG,CAAC,GAAC,KAAKokG,UAAL,EAA1B;AAA4C,SAAO11B,IAAI,CAAC0wB,KAAL,CAAWkB,WAAX,CAAuBvgG,CAAvB,EAAyBC,CAAzB,CAAP;AAAmC,CAAlI;;AAAmI0uE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BmvF,QAA7B,GAAsC,YAAU;AAAC,SAAM,CAAC,CAAC,KAAK7C,MAAL,CAAY,KAAKC,OAAL,EAAZ,CAAR;AAAoC,CAArF;;AAAsFxzB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BovF,QAA7B,GAAsC,YAAU;AAAC,SAAO,KAAKxB,kBAAL,EAAP;AAAiC,CAAlF;;AACzN70B,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BqvF,UAA7B,GAAwC,UAASjlG,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,KAAKiiG,MAAX;AAAA,MAAkBh0E,CAAC,GAAC,KAAKi0E,OAAzB;AAAiCniG,GAAC,GAACkuB,CAAC,GAACluB,CAAJ;;AAAM,OAAI,IAAI8vC,CAAC,GAAC,EAAN,EAAS5sB,CAAC,GAAC,EAAf,EAAkBgL,CAAC,GAACluB,CAApB,GAAuB;AAAC,QAAIymC,CAAC,GAACxmC,CAAC,CAACiuB,CAAC,EAAF,CAAP;AAAa,QAAG,MAAIuY,CAAP,EAASqJ,CAAC,CAACrxC,IAAF,CAAOgoC,CAAP,EAAT,KAAwB,IAAG,MAAIA,CAAP,EAAS,SAAT,KAAuB,IAAG,MAAIA,CAAP,EAAS;AAAC,UAAIvL,CAAC,GAACj7B,CAAC,CAACiuB,CAAC,EAAF,CAAP;AAAa4hB,OAAC,CAACrxC,IAAF,CAAO,CAACgoC,CAAC,GAAC,EAAH,KAAQ,CAAR,GAAUvL,CAAC,GAAC,EAAnB;AAAuB,KAA9C,MAAmD,IAAG,MAAIuL,CAAP,EAAS;AAACvL,OAAC,GAACj7B,CAAC,CAACiuB,CAAC,EAAF,CAAH;AAAS,UAAIyiB,CAAC,GAAC1wC,CAAC,CAACiuB,CAAC,EAAF,CAAP;AAAa4hB,OAAC,CAACrxC,IAAF,CAAO,CAACgoC,CAAC,GAAC,EAAH,KAAQ,EAAR,GAAW,CAACvL,CAAC,GAAC,EAAH,KAAQ,CAAnB,GAAqByV,CAAC,GAAC,EAA9B;AAAkC,KAAlE,MAAuE,IAAG,MAAIlK,CAAP,EAAS;AAACvL,OAAC,GAACj7B,CAAC,CAACiuB,CAAC,EAAF,CAAH;AAASyiB,OAAC,GAAC1wC,CAAC,CAACiuB,CAAC,EAAF,CAAH;AAAS,UAAIH,CAAC,GAAC9tB,CAAC,CAACiuB,CAAC,EAAF,CAAP;AAAauY,OAAC,GAAC,CAACA,CAAC,GAAC,CAAH,KAAO,EAAP,GAAU,CAACvL,CAAC,GAAC,EAAH,KAAQ,EAAlB,GAAqB,CAACyV,CAAC,GAAC,EAAH,KAAQ,CAA7B,GAA+B5iB,CAAC,GAAC,EAAnC;AAAsC0Y,OAAC,IAAE,KAAH;AAASqJ,OAAC,CAACrxC,IAAF,CAAO,CAACgoC,CAAC,IAAE,EAAH,GAAM,IAAP,IAAa,KAApB,EAA0B,CAACA,CAAC,GAAC,IAAH,IAAS,KAAnC;AAA0C;AAAA,YAAMqJ,CAAC,CAAClwC,MAAR,KAAiBsjB,CAAC,IAAEka,MAAM,CAACC,YAAP,CAAoBZ,KAApB,CAA0B,IAA1B,EAA+BqT,CAA/B,CAAH,EAAqCA,CAAC,CAAClwC,MAAF,GAAS,CAA/D;AAAkE;;AAAAsjB,GAAC,IAAE44C,IAAI,CAACv+B,KAAL,CAAW22C,iBAAX,CAA6BpkC,CAA7B,CAAH;AAC7e,OAAKqyD,OAAL,GAAaj0E,CAAb;AAAe,SAAOhL,CAAP;AAAS,CADxB;;AACyByrD,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BsvF,oBAA7B,GAAkD,YAAU;AAAC,MAAIllG,CAAC,GAAC,KAAKujG,oBAAL,EAAN;AAAkC,SAAO,KAAK0B,UAAL,CAAgBjlG,CAAhB,CAAP;AAA0B,CAAzH;;AAA0H2uE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BuvF,SAA7B,GAAuC,UAASnlG,CAAT,EAAW;AAAC,MAAG,IAAEA,CAAF,IAAK,KAAKmiG,OAAL,GAAaniG,CAAb,GAAe,KAAKkiG,MAAL,CAAYtiG,MAAnC,EAA0C,OAAO,KAAK0iG,MAAL,GAAY,CAAC,CAAb,EAAexmC,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,sBAAlB,CAAf,EAAyD,IAAI/xD,UAAJ,CAAe,CAAf,CAAhE;AAAkF,MAAI9b,CAAC,GAAC,KAAKiiG,MAAL,CAAY9C,QAAZ,CAAqB,KAAK+C,OAA1B,EAAkC,KAAKA,OAAL,GAAaniG,CAA/C,CAAN;AAAwD,OAAKmiG,OAAL,IAAcniG,CAAd;AAAgB87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAKu0B,OAAL,IAAc,KAAKC,IAAvC;AAA6C,SAAOniG,CAAP;AAAS,CAA7S;;AAA8S0uE,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6BwvF,gBAA7B,GAA8C,YAAU;AAAC,SAAO,KAAKlC,iBAAL,CAAuBv0B,IAAI,CAAC0wB,KAAL,CAAWmB,UAAlC,CAAP;AAAqD,CAA9G;;AACjc7xB,IAAI,CAACszB,aAAL,CAAmBrsF,SAAnB,CAA6ByvF,eAA7B,GAA6C,YAAU;AAAC,MAAIrlG,CAAC,GAAC,KAAKkiG,MAAX;AAAA,MAAkBjiG,CAAC,GAAC,KAAKkiG,OAAzB;AAAA,MAAiCj0E,CAAC,GAACluB,CAAC,CAACC,CAAC,GAAC,CAAH,CAApC;AAAA,MAA0C6vC,CAAC,GAAC9vC,CAAC,CAACC,CAAC,GAAC,CAAH,CAA7C;AAAA,MAAmDijB,CAAC,GAACljB,CAAC,CAACC,CAAC,GAAC,CAAH,CAAtD;AAAA,MAA4DwmC,CAAC,GAACzmC,CAAC,CAACC,CAAC,GAAC,CAAH,CAA/D;AAAA,MAAqEi7B,CAAC,GAACl7B,CAAC,CAACC,CAAC,GAAC,CAAH,CAAxE;AAAA,MAA8E0wC,CAAC,GAAC3wC,CAAC,CAACC,CAAC,GAAC,CAAH,CAAjF;AAAA,MAAuF8tB,CAAC,GAAC/tB,CAAC,CAACC,CAAC,GAAC,CAAH,CAA1F;AAAgGD,GAAC,GAACA,CAAC,CAACC,CAAC,GAAC,CAAH,CAAH;AAAS,OAAKkiG,OAAL,IAAc,CAAd;AAAgB,SAAO/kE,MAAM,CAACC,YAAP,CAAoBnP,CAApB,EAAsB4hB,CAAtB,EAAwB5sB,CAAxB,EAA0BujB,CAA1B,EAA4BvL,CAA5B,EAA8ByV,CAA9B,EAAgC5iB,CAAhC,EAAkC/tB,CAAlC,CAAP;AAA4C,CAA7N;;AAA8N2uE,IAAI,CAAC22B,YAAL,GAAkB,UAAStlG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAKq3E,QAAL,GAAc52B,IAAI,CAACszB,aAAL,CAAmBriF,KAAnB,CAAyB5f,CAAzB,EAA2BC,CAA3B,EAA6BiuB,CAA7B,CAAd;AAA8C,OAAKs3E,YAAL,GAAkB,KAAKD,QAAL,CAAc1C,SAAd,EAAlB;AAA4C,OAAK4C,UAAL,GAAgB92B,IAAI,CAACC,eAAL,CAAqB+B,oBAArC;AAA0D,OAAK+0B,aAAL,GAAmB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BrB,OAAjD;AAAyD,OAAKszB,MAAL,GAAY,CAAC,CAAb;AAAe,OAAKqD,cAAL,GAAoB,IAApB;AAAyB,CAAvR;;AAAwRh3B,IAAI,CAAC22B,YAAL,CAAkB9C,cAAlB,GAAiC,EAAjC;;AACtf7zB,IAAI,CAAC22B,YAAL,CAAkB1lF,KAAlB,GAAwB,UAAS5f,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAGygD,IAAI,CAAC22B,YAAL,CAAkB9C,cAAlB,CAAiC5iG,MAApC,EAA2C;AAAC,QAAIkwC,CAAC,GAAC6+B,IAAI,CAAC22B,YAAL,CAAkB9C,cAAlB,CAAiChiG,GAAjC,EAAN;AAA6CR,KAAC,IAAE8vC,CAAC,CAACy1D,QAAF,CAAWhD,QAAX,CAAoBviG,CAApB,EAAsBC,CAAtB,EAAwBiuB,CAAxB,CAAH;AAA8B,WAAO4hB,CAAP;AAAS;;AAAA,SAAO,IAAI6+B,IAAI,CAAC22B,YAAT,CAAsBtlG,CAAtB,EAAwBC,CAAxB,EAA0BiuB,CAA1B,CAAP;AAAoC,CAA5M;;AAA6MygD,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BgK,KAA5B,GAAkC+uD,IAAI,CAAC22B,YAAL,CAAkB1lF,KAApD;;AAC7M+uD,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B6sF,IAA5B,GAAiC,YAAU;AAAC,OAAK8C,QAAL,CAAcp6B,KAAd;AAAsB,OAAKs6B,UAAL,GAAgB92B,IAAI,CAACC,eAAL,CAAqB+B,oBAArC;AAA0D,OAAK+0B,aAAL,GAAmB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BrB,OAAjD;AAAyD,OAAKszB,MAAL,GAAY,CAAC,CAAb;AAAe,OAAKqD,cAAL,GAAoB,IAApB;AAAyB,QAAIh3B,IAAI,CAAC22B,YAAL,CAAkB9C,cAAlB,CAAiC5iG,MAArC,IAA6C+uE,IAAI,CAAC22B,YAAL,CAAkB9C,cAAlB,CAAiC/jG,IAAjC,CAAsC,IAAtC,CAA7C;AAAyF,CAAtT;;AAAuTkwE,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BgwF,cAA5B,GAA2C,YAAU;AAAC,SAAO,KAAKJ,YAAZ;AAAyB,CAA/E;;AAAgF72B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BitF,SAA5B,GAAsC,YAAU;AAAC,SAAO,KAAK0C,QAAL,CAAc1C,SAAd,EAAP;AAAiC,CAAlF;;AACvYl0B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B8sF,SAA5B,GAAsC,YAAU;AAAC,SAAO,KAAK6C,QAAL,CAAc7C,SAAd,EAAP;AAAiC,CAAlF;;AAAmF/zB,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BiwF,cAA5B,GAA2C,YAAU;AAAC,SAAO,KAAKJ,UAAZ;AAAuB,CAA7E;;AAA8E92B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BkwF,WAA5B,GAAwC,YAAU;AAAC,SAAO,KAAKJ,aAAZ;AAA0B,CAA7E;;AAA8E/2B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BmwF,WAA5B,GAAwC,YAAU;AAAC,SAAO,KAAKL,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAzD;AAAmE,CAAtH;;AAAuH5B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BowF,UAA5B,GAAuC,YAAU;AAAC,SAAO,KAAKN,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BI,SAAzD;AAAmE,CAArH;;AACtW9B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BiN,QAA5B,GAAqC,YAAU;AAAC,SAAO,KAAKy/E,MAAL,IAAa,KAAKiD,QAAL,CAAc1iF,QAAd,EAApB;AAA6C,CAA7F;;AAA8F8rD,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B2sF,QAA5B,GAAqC,UAASviG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAKq3E,QAAL,CAAchD,QAAd,CAAuBviG,CAAvB,EAAyBC,CAAzB,EAA2BiuB,CAA3B;AAA8B,OAAKu3E,UAAL,GAAgB92B,IAAI,CAACC,eAAL,CAAqB+B,oBAArC;AAA0D,OAAK+0B,aAAL,GAAmB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BrB,OAAjD;AAAyD,CAAtM;;AAAuML,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BkpB,KAA5B,GAAkC,YAAU;AAAC,OAAKymE,QAAL,CAAczmE,KAAd;AAAsB,OAAK2mE,UAAL,GAAgB92B,IAAI,CAACC,eAAL,CAAqB+B,oBAArC;AAA0D,OAAK+0B,aAAL,GAAmB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BrB,OAAjD;AAAyD,CAAtL;;AACrSL,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BmtF,OAA5B,GAAoC,UAAS/iG,CAAT,EAAW;AAAC,OAAKulG,QAAL,CAAcxC,OAAd,CAAsB/iG,CAAtB;AAAyB,CAAzE;;AACA2uE,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BqwF,SAA5B,GAAsC,YAAU;AAAC,MAAG,KAAKV,QAAL,CAAcvC,KAAd,EAAH,EAAyB,OAAM,CAAC,CAAP;AAAS,MAAG,KAAKngF,QAAL,EAAH,EAAmB,OAAOi5C,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,sBAAlB,GAA0C,CAAC,CAAlD;AAAoD,OAAK03B,YAAL,GAAkB,KAAKD,QAAL,CAAc1C,SAAd,EAAlB;AAA4C,MAAI7iG,CAAC,GAAC,KAAKulG,QAAL,CAAchC,oBAAd,EAAN;AAAA,MAA2CtjG,CAAC,GAACD,CAAC,KAAG,CAAjD;AAAmDA,GAAC,IAAE,CAAH;AAAK,MAAGA,CAAC,IAAE2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAjC,IAAyCtwE,CAAC,IAAE2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bd,OAA1E,IAAmFvvE,CAAC,IAAE2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAApH,IAA6HtvE,CAAC,IAAE2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAA9J,IAAyKvwE,CAAC,IAAE2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BG,WAA1M,IAAuNxwE,CAAC,IAAE2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BI,SAA3P,EAAqQ,OAAO3U,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,wCAAlB,EAC1gB9tE,CAD0gB,EACxgB,KAAKwlG,YADmgB,GACrf,KAAKlD,MAAL,GAAY,CAAC,CADwe,EACte,CAAC,CAD8d;AAC5d,OAAKmD,UAAL,GAAgBxlG,CAAhB;AAAkB,OAAKylG,aAAL,GAAmB1lG,CAAnB;AAAqB,SAAM,CAAC,CAAP;AAAS,CADvF;;AACwF2uE,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BswF,YAA5B,GAAyC,YAAU;AAAC,OAAKX,QAAL,CAAcjC,YAAd,CAA2B,KAAKmC,UAAL,IAAiB,CAAjB,GAAmB,KAAKC,aAAnD;AAAkE,CAAtH;;AAAuH/2B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BuwF,kBAA5B,GAA+C,YAAU;AAAC,MAAInmG,CAAC,GAAC,KAAKylG,UAAX;;AAAsB,OAAI,KAAKS,YAAL,EAAJ,EAAwB,KAAKD,SAAL,MAAkB,KAAKJ,cAAL,MAAuB7lG,CAAjE,GAAoE,KAAKomG,SAAL;;AAAiB,OAAKb,QAAL,CAAcvC,KAAd,MAAuB,KAAKkD,YAAL,EAAvB;AAA2C,CAAhN;;AAC/Mv3B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BywF,eAA5B,GAA4C,YAAU;AAAC,OAAKX,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAlD,IAA0DxU,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,uCAAlB,GAA2D,KAAKs4B,SAAL,EAArH,IAAuI,KAAKb,QAAL,CAAclC,UAAd,EAAvI;AAAkK,CAAzN;;AAA0N10B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B0wF,kBAA5B,GAA+C,YAAU;AAAC,MAAG,KAAKZ,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAArD,EAA+DzU,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,0CAAlB,GAA8D,KAAKs4B,SAAL,EAA9D,CAA/D,KAAkJ;AAAC,QAAIpmG,CAAC,GAAC,KAAKulG,QAAL,CAAchC,oBAAd,EAAN;AAA2C,SAAKgC,QAAL,CAAcxC,OAAd,CAAsB/iG,CAAtB;AAAyB;AAAC,CAAlR;;AAC1N2uE,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B2wF,gBAA5B,GAA6C,YAAU;AAAC,OAAKb,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bd,OAAlD,IAA2DzT,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,wCAAlB,GAA4D,KAAKs4B,SAAL,EAAvH,IAAyI,KAAKb,QAAL,CAAcxC,OAAd,CAAsB,CAAtB,CAAzI;AAAkK,CAA1N;;AAA2Np0B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B4wF,gBAA5B,GAA6C,YAAU;AAAC,OAAKd,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAAlD,IAA2DxT,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,wCAAlB,GAA4D,KAAKs4B,SAAL,EAAvH,IAAyI,KAAKb,QAAL,CAAcxC,OAAd,CAAsB,CAAtB,CAAzI;AAAkK,CAA1N;;AAC3Np0B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B6wF,SAA5B,GAAsC,YAAU;AAAC,MAAIzmG,CAAC,GAAC,KAAKylG,UAAX;;AAAsB,KAAE;AAAC,QAAG,CAAC,KAAKQ,SAAL,EAAJ,EAAqB;AAACnqC,UAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,uCAAlB;AAA2D,WAAKw0B,MAAL,GAAY,CAAC,CAAb;AAAe;AAAM;;AAAA,QAAG,KAAKoD,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BI,SAArD,EAA+D;AAAC,WAAKg1B,UAAL,IAAiBzlG,CAAjB,KAAqB87D,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,yBAAlB,GAA6C,KAAKw0B,MAAL,GAAY,CAAC,CAA/E;AAAkF;AAAM;;AAAA,SAAK8D,SAAL;AAAiB,GAAlR,QAAwR,CAAxR;AAA2R,CAAlW;;AACAz3B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BwwF,SAA5B,GAAsC,YAAU;AAAC,UAAO,KAAKV,aAAZ;AAA2B,SAAK/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAnC;AAA0C,WAAK+1B,eAAL;AAAuB;;AAAM,SAAK13B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAAnC;AAA2C,WAAKk3B,gBAAL;AAAwB;;AAAM,SAAK73B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAnC;AAA6C,WAAK+1B,kBAAL;AAA0B;;AAAM,SAAK33B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bd,OAAnC;AAA2C,WAAKg3B,gBAAL;AAAwB;;AAAM,SAAK53B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BG,WAAnC;AAA+C,WAAKi2B,SAAL;AAAiB;;AAAM;AAAQ3qC,UAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,kCAAlB;AAA/Y;AAAsc,CAAvf;;AACAa,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B8wF,oBAA5B,GAAiD,UAAS1mG,CAAT,EAAWC,CAAX,EAAa;AAAC,WAAO,KAAK0lG,cAAZ,KAA6B,KAAKA,cAAL,GAAoB,EAAjD;AAAqD7pC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,CAAC,KAAK+3B,cAAL,CAAoB3lG,CAApB,CAArB;AAA6C,OAAK2lG,cAAL,CAAoB3lG,CAApB,IAAuBC,CAAvB;AAAyB,CAA1L;;AAA2L0uE,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B+wF,eAA5B,GAA4C,UAAS3mG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,SAAO,KAAK+3B,cAAhC;AAAgD3lG,GAAC,GAAC,KAAK2lG,cAAL,CAAoB3lG,CAApB,CAAF;AAAyB87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAApB;AAAuB,SAAOA,CAAC,CAAC,IAAD,CAAR;AAAe,CAAvK;;AAC3L2uE,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BgxF,OAA5B,GAAoC,UAAS5mG,CAAT,EAAW;AAAC,OAAK0lG,aAAL,GAAmB/2B,IAAI,CAACC,eAAL,CAAqB8B,mBAArB,CAAyC1wE,CAAzC,CAAnB;AAA+D,MAAIC,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqBG,SAA3B;;AAAqC,UAAO/uE,CAAP;AAAU,SAAKC,CAAC,CAACgvE,MAAP;AAAc,aAAO,KAAK61B,UAAL,EAAP;;AAAyB,SAAK7kG,CAAC,CAACivE,KAAP;AAAa,aAAO,KAAK21B,SAAL,EAAP;;AAAwB,SAAK5kG,CAAC,CAACkvE,KAAP;AAAa,aAAO,KAAKw1B,SAAL,EAAP;;AAAwB,SAAK1kG,CAAC,CAACmvE,MAAP;AAAc,aAAO,KAAKk1B,UAAL,EAAP;;AAAyB,SAAKrkG,CAAC,CAACovE,KAAP;AAAa,aAAO,KAAKq1B,SAAL,EAAP;;AAAwB,SAAKzkG,CAAC,CAACqvE,OAAP;AAAe,aAAO,KAAKu3B,WAAL,EAAP;;AAA0B,SAAK5mG,CAAC,CAACsvE,OAAP;AAAe,aAAO,KAAKu3B,WAAL,EAAP;;AAA0B,SAAK7mG,CAAC,CAACuvE,IAAP;AAAY,aAAO,KAAKu1B,QAAL,EAAP;;AAAuB,SAAK9kG,CAAC,CAACwvE,MAAP;AAAc,aAAO,KAAKw1B,UAAL,EAAP;;AAC9d,SAAKhlG,CAAC,CAACyvE,KAAP;AAAa5T,UAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,6CAAlB;;AAAiE,SAAK7tE,CAAC,CAAC0vE,OAAP;AAAe7T,UAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,+CAAlB;;AAAmE,SAAK7tE,CAAC,CAAC2vE,KAAP;AAAa,aAAO,KAAKu1B,SAAL,EAAP;;AAAwB,SAAKllG,CAAC,CAAC4vE,MAAP;AAAc,aAAO,KAAKw0B,UAAL,EAAP;;AAAyB,SAAKpkG,CAAC,CAAC6vE,IAAP;AAAY,aAAO,KAAKk1B,QAAL,EAAP;;AAAuB,SAAK/kG,CAAC,CAAC8vE,QAAP;AAAgB,aAAO,KAAKg3B,YAAL,EAAP;;AAA2B,SAAK9mG,CAAC,CAAC+vE,QAAP;AAAgB,aAAO,KAAKg3B,YAAL,EAAP;;AAA2B,SAAK/mG,CAAC,CAACgwE,MAAP;AAAc,aAAO,KAAKg3B,UAAL,EAAP;;AAAyB,SAAKhnG,CAAC,CAACiwE,MAAP;AAAc,aAAO,KAAKg3B,UAAL,EAAP;;AAAyB,SAAKjnG,CAAC,CAACkwE,OAAP;AAAe,aAAO,KAAKk1B,eAAL,EAAP;;AAA8B,SAAKplG,CAAC,CAACmwE,OAAP;AAAe,aAAO,KAAKg1B,gBAAL,EAAP;;AAC/e;AAAQtpC,UAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,iCAAlB;AAF4I;;AAEvF,SAAO,CAAP;AAAS,CAFtE;;AAEuEa,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BuxF,WAA5B,GAAwC,UAASnnG,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAtE;AAAiF,MAAIriD,CAAC,GAAC,KAAKq3E,QAAL,CAAc5C,MAAd,EAAN;AAAA,MAA6B7yD,CAAC,GAAC,KAAKy1D,QAAL,CAAchC,oBAAd,EAA/B;AAAoEzzD,GAAC,GAAC,KAAKy1D,QAAL,CAAc1C,SAAd,KAA0B/yD,CAA5B;AAA8B,OAAKy1D,QAAL,CAAc3C,MAAd,CAAqB9yD,CAArB;AAAwB7vC,GAAC,CAACD,CAAD,EAAG,IAAH,CAAD;AAAU,OAAKulG,QAAL,CAAczC,SAAd,CAAwBhzD,CAAxB;AAA2B,OAAKy1D,QAAL,CAAc3C,MAAd,CAAqB10E,CAArB;AAAwB,CAA9T;;AACvEygD,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BwxF,SAA5B,GAAsC,UAASpnG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BG,WAAtE;AAAmF1U,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK63B,UAAL,IAAiBzlG,CAArC;AAAwCkuB,GAAC,CAACjuB,CAAD,EAAG,IAAH,CAAD;AAAU,OAAKqiG,MAAL,IAAa,KAAKoD,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BI,SAA/D,KAA2E3U,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,oDAAlB,GAAwE,KAAKw0B,MAAL,GAAY,CAAC,CAAhK;AAAmK,CAA9V;;AACA3zB,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4ByxF,eAA5B,GAA4C,YAAU;AAACvrC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAtE;AAAiF,MAAIvwE,CAAC,GAAC,KAAKulG,QAAL,CAAchC,oBAAd,EAAN;AAAA,MAA2CtjG,CAAC,GAAC,KAAKslG,QAAL,CAAc1C,SAAd,EAA7C;AAAA,MAAuE30E,CAAC,GAACjuB,CAAC,GAACD,CAA3E;AAA6EA,GAAC,GAAC2uE,IAAI,CAACszB,aAAL,CAAmBriF,KAAnB,CAAyB,KAAK2lF,QAAL,CAAc7C,SAAd,EAAzB,EAAmDziG,CAAnD,EAAqDD,CAArD,CAAF;AAA0D,OAAKulG,QAAL,CAAczC,SAAd,CAAwB50E,CAAxB;AAA2B,SAAOluB,CAAP;AAAS,CAAnT;;AAAoT2uE,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B8uF,SAA5B,GAAsC,YAAU;AAAC5oC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAO,KAAKi1B,QAAL,CAAc/B,kBAAd,EAAP;AAA0C,CAAzK;;AACpT70B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B0xF,eAA5B,GAA4C,YAAU;AAACxrC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAO,KAAKi1B,QAAL,CAAc7B,wBAAd,EAAP;AAAgD,CAArL;;AAAsL/0B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B+uF,SAA5B,GAAsC,YAAU;AAAC7oC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAO,KAAKi1B,QAAL,CAAczB,kBAAd,EAAP;AAA0C,CAAzK;;AAA0Kn1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BgvF,eAA5B,GAA4C,YAAU;AAAC9oC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAO,KAAKi1B,QAAL,CAAcxB,wBAAd,EAAP;AAAgD,CAArL;;AAChWp1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4ByuF,UAA5B,GAAuC,YAAU;AAACvoC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAO,KAAKi1B,QAAL,CAAchC,oBAAd,EAAP;AAA4C,CAA5K;;AAA6K50B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B2xF,gBAA5B,GAA6C,YAAU;AAACzrC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAO,KAAKi1B,QAAL,CAAc9B,0BAAd,EAAP;AAAkD,CAAxL;;AAAyL90B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B0uF,UAA5B,GAAuC,YAAU;AAACxoC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAO,KAAKi1B,QAAL,CAAc3B,oBAAd,EAAP;AAA4C,CAA5K;;AACtWj1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B2uF,gBAA5B,GAA6C,YAAU;AAACzoC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAO,KAAKi1B,QAAL,CAAc1B,0BAAd,EAAP;AAAkD,CAAxL;;AAAyLl1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BqxF,UAA5B,GAAuC,YAAU;AAACnrC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAO,KAAKi1B,QAAL,CAAc5B,kBAAd,EAAP;AAA0C,CAA1K;;AAA2Kh1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BsxF,UAA5B,GAAuC,YAAU;AAACprC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAO,KAAKi1B,QAAL,CAAcvB,kBAAd,EAAP;AAA0C,CAA1K;;AACpWr1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B4xF,gBAA5B,GAA6C,YAAU;AAAC1rC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAO,KAAKi1B,QAAL,CAAcrB,wBAAd,EAAP;AAAgD,CAAtL;;AAAuLv1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BkxF,WAA5B,GAAwC,YAAU;AAAChrC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bd,OAAtE;AAA+E,SAAO,KAAKg2B,QAAL,CAAclB,UAAd,EAAP;AAAkC,CAApK;;AAAqK11B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BixF,WAA5B,GAAwC,YAAU;AAAC/qC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAAtE;AAA+E,SAAO,KAAKi2B,QAAL,CAAcjB,UAAd,EAAP;AAAkC,CAApK;;AAC5V31B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B6xF,iBAA5B,GAA8C,YAAU;AAAC3rC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAAtE;AAA+E,SAAO,KAAKi2B,QAAL,CAAchB,gBAAd,EAAP;AAAwC,CAAhL;;AAAiL51B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BmxF,YAA5B,GAAyC,YAAU;AAACjrC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bd,OAAtE;AAA+E,SAAO,KAAKg2B,QAAL,CAAcb,SAAd,EAAP;AAAiC,CAApK;;AAAqK/1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B8xF,kBAA5B,GAA+C,YAAU;AAAC5rC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bd,OAAtE;AAA+E,SAAO,KAAKg2B,QAAL,CAAcb,SAAd,GAA0BluF,QAA1B,EAAP;AAA4C,CAArL;;AACtVm4D,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BoxF,YAA5B,GAAyC,YAAU;AAAClrC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAAtE;AAA+E,SAAO,KAAKi2B,QAAL,CAAcZ,SAAd,EAAP;AAAiC,CAApK;;AAAqKh2B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B+xF,kBAA5B,GAA+C,YAAU;AAAC7rC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAAtE;AAA+E,SAAO,KAAKi2B,QAAL,CAAcX,eAAd,EAAP;AAAuC,CAAhL;;AAAiLj2B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BivF,SAA5B,GAAsC,YAAU;AAAC/oC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bd,OAAtE;AAA+E,SAAO,KAAKg2B,QAAL,CAAcV,SAAd,EAAP;AAAiC,CAAjK;;AACtVl2B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BkvF,UAA5B,GAAuC,YAAU;AAAChpC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAAtE;AAA+E,SAAO,KAAKi2B,QAAL,CAAcT,UAAd,EAAP;AAAkC,CAAnK;;AAAoKn2B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BmvF,QAA5B,GAAqC,YAAU;AAACjpC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAM,CAAC,CAAC,KAAKi1B,QAAL,CAAchC,oBAAd,EAAR;AAA6C,CAA3K;;AAA4K50B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BovF,QAA5B,GAAqC,YAAU;AAAClpC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAO,KAAKi1B,QAAL,CAAczB,kBAAd,EAAP;AAA0C,CAAxK;;AAChVn1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BqvF,UAA5B,GAAuC,YAAU;AAACnpC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAtE;AAAiF,MAAIvwE,CAAC,GAAC,KAAKulG,QAAL,CAAchC,oBAAd,EAAN;AAA2C,SAAO,KAAKgC,QAAL,CAAcN,UAAd,CAAyBjlG,CAAzB,CAAP;AAAmC,CAAjN;;AAAkN2uE,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BuvF,SAA5B,GAAsC,YAAU;AAACrpC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAtE;AAAiF,MAAIvwE,CAAC,GAAC,KAAKulG,QAAL,CAAchC,oBAAd,EAAN;AAA2C,SAAO,KAAKgC,QAAL,CAAcJ,SAAd,CAAwBnlG,CAAxB,CAAP;AAAkC,CAA/M;;AAClN2uE,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BwvF,gBAA5B,GAA6C,YAAU;AAACtpC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAO,KAAKi1B,QAAL,CAAcH,gBAAd,EAAP;AAAwC,CAA9K;;AAA+Kz2B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BgyF,cAA5B,GAA2C,YAAU;AAAC9rC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAO,KAAKi1B,QAAL,CAActB,sBAAd,EAAP;AAA8C,CAAlL;;AAAmLt1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BstF,iBAA5B,GAA8C,UAASljG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAO,KAAKi1B,QAAL,CAAcrC,iBAAd,CAAgCljG,CAAhC,CAAP;AAA0C,CAAlL;;AAClW2uE,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4ButF,uBAA5B,GAAoD,UAASnjG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAtE;AAA8E,SAAO,KAAKi1B,QAAL,CAAcrC,iBAAd,CAAgC,UAASjjG,CAAT,EAAWiuB,CAAX,EAAa;AAAC,WAAOygD,IAAI,CAAC0wB,KAAL,CAAWe,YAAX,CAAwBngG,CAAxB,EAA0BiuB,CAA1B,EAA4BluB,CAA5B,CAAP;AAAsC,GAApF,CAAP;AAA6F,CAA3O;;AAA4O2uE,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4ByvF,eAA5B,GAA4C,YAAU;AAACvpC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAAtE;AAA+E,SAAO,KAAKi2B,QAAL,CAAcF,eAAd,EAAP;AAAuC,CAA7K;;AAC5O12B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BwtF,gBAA5B,GAA6C,UAASpjG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAAtE;AAA+E,SAAO,KAAKi2B,QAAL,CAAcnC,gBAAd,CAA+BpjG,CAA/B,CAAP;AAAyC,CAAjL;;AAAkL2uE,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BiyF,gBAA5B,GAA6C,UAAS7nG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK83B,aAAL,IAAoB/2B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAtE;AAAiF,MAAItwE,CAAC,GAAC,KAAKslG,QAAL,CAAchC,oBAAd,EAAN;AAA2CtjG,GAAC,GAAC,KAAKslG,QAAL,CAAc1C,SAAd,KAA0B5iG,CAA5B;;AAA8B,OAAI,IAAIiuB,CAAC,GAAC,EAAV,EAAa,KAAKq3E,QAAL,CAAc1C,SAAd,KAA0B5iG,CAAvC,GAA0CiuB,CAAC,CAACzvB,IAAF,CAAOuB,CAAC,CAACyW,IAAF,CAAO,KAAK8uF,QAAZ,CAAP;;AAA8B,SAAOr3E,CAAP;AAAS,CAApS;;AAClLygD,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BkyF,eAA5B,GAA4C,YAAU;AAAC,SAAO,KAAKD,gBAAL,CAAsB,KAAKtC,QAAL,CAAc/B,kBAApC,CAAP;AAA+D,CAAtH;;AAAuH70B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BmyF,qBAA5B,GAAkD,YAAU;AAAC,SAAO,KAAKF,gBAAL,CAAsB,KAAKtC,QAAL,CAAc7B,wBAApC,CAAP;AAAqE,CAAlI;;AAAmI/0B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BoyF,eAA5B,GAA4C,YAAU;AAAC,SAAO,KAAKH,gBAAL,CAAsB,KAAKtC,QAAL,CAAczB,kBAApC,CAAP;AAA+D,CAAtH;;AAAuHn1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BqyF,qBAA5B,GAAkD,YAAU;AAAC,SAAO,KAAKJ,gBAAL,CAAsB,KAAKtC,QAAL,CAAcxB,wBAApC,CAAP;AAAqE,CAAlI;;AACjXp1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BsyF,gBAA5B,GAA6C,YAAU;AAAC,SAAO,KAAKL,gBAAL,CAAsB,KAAKtC,QAAL,CAAchC,oBAApC,CAAP;AAAiE,CAAzH;;AAA0H50B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BuyF,sBAA5B,GAAmD,YAAU;AAAC,SAAO,KAAKN,gBAAL,CAAsB,KAAKtC,QAAL,CAAc9B,0BAApC,CAAP;AAAuE,CAArI;;AAAsI90B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BwyF,gBAA5B,GAA6C,YAAU;AAAC,SAAO,KAAKP,gBAAL,CAAsB,KAAKtC,QAAL,CAAc3B,oBAApC,CAAP;AAAiE,CAAzH;;AAA0Hj1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4ByyF,sBAA5B,GAAmD,YAAU;AAAC,SAAO,KAAKR,gBAAL,CAAsB,KAAKtC,QAAL,CAAc1B,0BAApC,CAAP;AAAuE,CAArI;;AAC1Xl1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B0yF,gBAA5B,GAA6C,YAAU;AAAC,SAAO,KAAKT,gBAAL,CAAsB,KAAKtC,QAAL,CAAc5B,kBAApC,CAAP;AAA+D,CAAvH;;AAAwHh1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B2yF,gBAA5B,GAA6C,YAAU;AAAC,SAAO,KAAKV,gBAAL,CAAsB,KAAKtC,QAAL,CAAcvB,kBAApC,CAAP;AAA+D,CAAvH;;AAAwHr1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B4yF,sBAA5B,GAAmD,YAAU;AAAC,SAAO,KAAKX,gBAAL,CAAsB,KAAKtC,QAAL,CAAcrB,wBAApC,CAAP;AAAqE,CAAnI;;AAAoIv1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B6yF,iBAA5B,GAA8C,YAAU;AAAC,SAAO,KAAKZ,gBAAL,CAAsB,KAAKtC,QAAL,CAAclB,UAApC,CAAP;AAAuD,CAAhH;;AACpX11B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B8yF,iBAA5B,GAA8C,YAAU;AAAC,SAAO,KAAKb,gBAAL,CAAsB,KAAKtC,QAAL,CAAcjB,UAApC,CAAP;AAAuD,CAAhH;;AAAiH31B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4B+yF,uBAA5B,GAAoD,YAAU;AAAC,SAAO,KAAKd,gBAAL,CAAsB,KAAKtC,QAAL,CAAchB,gBAApC,CAAP;AAA6D,CAA5H;;AAA6H51B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BgzF,kBAA5B,GAA+C,YAAU;AAAC,SAAO,KAAKf,gBAAL,CAAsB,KAAKtC,QAAL,CAAcb,SAApC,CAAP;AAAsD,CAAhH;;AAAiH/1B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BizF,kBAA5B,GAA+C,YAAU;AAAC,SAAO,KAAKhB,gBAAL,CAAsB,KAAKtC,QAAL,CAAcZ,SAApC,CAAP;AAAsD,CAAhH;;AAC/Vh2B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BkzF,wBAA5B,GAAqD,YAAU;AAAC,SAAO,KAAKjB,gBAAL,CAAsB,KAAKtC,QAAL,CAAcX,eAApC,CAAP;AAA4D,CAA5H;;AAA6Hj2B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BmzF,eAA5B,GAA4C,YAAU;AAAC,SAAO,KAAKlB,gBAAL,CAAsB,KAAKtC,QAAL,CAAcV,SAApC,CAAP;AAAsD,CAA7G;;AAA8Gl2B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BozF,gBAA5B,GAA6C,YAAU;AAAC,SAAO,KAAKnB,gBAAL,CAAsB,KAAKtC,QAAL,CAAcT,UAApC,CAAP;AAAuD,CAA/G;;AAAgHn2B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BqzF,cAA5B,GAA2C,YAAU;AAAC,SAAO,KAAKpB,gBAAL,CAAsB,KAAKtC,QAAL,CAAcR,QAApC,CAAP;AAAqD,CAA3G;;AAA4Gp2B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BszF,cAA5B,GAA2C,YAAU;AAAC,SAAO,KAAKrB,gBAAL,CAAsB,KAAKtC,QAAL,CAAcP,QAApC,CAAP;AAAqD,CAA3G;;AACvcr2B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BuzF,sBAA5B,GAAmD,YAAU;AAAC,SAAO,KAAKtB,gBAAL,CAAsB,KAAKtC,QAAL,CAAcH,gBAApC,CAAP;AAA6D,CAA3H;;AAA4Hz2B,IAAI,CAAC22B,YAAL,CAAkB1vF,SAAlB,CAA4BwzF,qBAA5B,GAAkD,YAAU;AAAC,SAAO,KAAKvB,gBAAL,CAAsB,KAAKtC,QAAL,CAAcF,eAApC,CAAP;AAA4D,CAAzH;;AAA0H12B,IAAI,CAAC06B,aAAL,GAAmB,YAAU;AAAC,OAAKC,OAAL,GAAa,EAAb;AAAgB,CAA9C;;AAA+C36B,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6BhW,MAA7B,GAAoC,YAAU;AAAC,SAAO,KAAK0pG,OAAL,CAAa1pG,MAApB;AAA2B,CAA1E;;AAA2E+uE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6Bnc,GAA7B,GAAiC,YAAU;AAAC,MAAIuG,CAAC,GAAC,KAAKspG,OAAX;AAAmB,OAAKA,OAAL,GAAa,EAAb;AAAgB,SAAOtpG,CAAP;AAAS,CAAxF;;AAChX2uE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6B2zF,kBAA7B,GAAgD,UAASvpG,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB3tE,CAAC,IAAEoI,IAAI,CAACC,KAAL,CAAWrI,CAAX,CAAvB;AAAsC67D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG5tE,CAAH,IAAMA,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqByC,SAAjD;;AAA4D,OAAIvV,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG3tE,CAAH,IAAMA,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqByC,SAAjD,CAAJ,EAAgE,IAAEpxE,CAAF,IAAK,MAAID,CAAzE,GAA4E,KAAKspG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,GAAC,GAAF,GAAM,GAAxB,GAA6BA,CAAC,GAAC,CAACA,CAAC,KAAG,CAAJ,GAAMC,CAAC,IAAE,EAAV,MAAgB,CAA/C,EAAiDA,CAAC,MAAI,CAAtD;;AAAwD,OAAKqpG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAlB;AAAqB,CAA/V;;AACA2uE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6B4zF,iBAA7B,GAA+C,UAASxpG,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB3tE,CAAC,IAAEoI,IAAI,CAACC,KAAL,CAAWrI,CAAX,CAAvB;AAAsC67D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG5tE,CAAH,IAAMA,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqByC,SAAjD;AAA4DvV,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG3tE,CAAH,IAAMA,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqByC,SAAjD;AAA4D,OAAKo4B,WAAL,CAAiBzpG,CAAjB;AAAoB,OAAKypG,WAAL,CAAiBxpG,CAAjB;AAAoB,CAAzS;;AACA0uE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6B8zF,qBAA7B,GAAmD,UAAS1pG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;;AAAsC,OAAI87D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG5tE,CAAH,IAAMA,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqByC,SAAjD,CAAJ,EAAgE,MAAIrxE,CAApE,GAAuE,KAAKspG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,GAAC,GAAF,GAAM,GAAxB,GAA6BA,CAAC,MAAI,CAAlC;;AAAoC,OAAKspG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAlB;AAAqB,CAArO;;AACA2uE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6B+zF,mBAA7B,GAAiD,UAAS3pG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAE,CAAC2uE,IAAI,CAACC,eAAL,CAAqBwC,SAAzB,IAAoCpxE,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqBwC,SAA/E;AAA0F,MAAG,KAAGpxE,CAAN,EAAQ,KAAK0pG,qBAAL,CAA2B1pG,CAA3B,EAAR,KAA0C;AAAC,SAAI,IAAIC,CAAC,GAAC,CAAV,EAAY,IAAEA,CAAd,EAAgBA,CAAC,EAAjB,EAAoB,KAAKqpG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,GAAC,GAAF,GAAM,GAAxB,GAA6BA,CAAC,KAAG,CAAjC;;AAAmC,SAAKspG,OAAL,CAAa7qG,IAAb,CAAkB,CAAlB;AAAqB;AAAC,CAArT;;AACAkwE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6Bg0F,qBAA7B,GAAmD,UAAS5pG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG5tE,CAAH,IAAMA,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqB4C,SAAjD;AAA4D7C,MAAI,CAAC0wB,KAAL,CAAWI,UAAX,CAAsBz/F,CAAtB;AAAyB,OAAKupG,kBAAL,CAAwB56B,IAAI,CAAC0wB,KAAL,CAAWC,UAAnC,EAA8C3wB,IAAI,CAAC0wB,KAAL,CAAWE,WAAzD;AAAsE,CAAhQ;;AACA5wB,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6Bi0F,mBAA7B,GAAiD,UAAS7pG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAE,CAAC2uE,IAAI,CAACC,eAAL,CAAqB2C,SAAzB,IAAoCvxE,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqB2C,SAA/E;AAA0F5C,MAAI,CAAC0wB,KAAL,CAAWI,UAAX,CAAsBz/F,CAAtB;AAAyB,OAAKupG,kBAAL,CAAwB56B,IAAI,CAAC0wB,KAAL,CAAWC,UAAnC,EAA8C3wB,IAAI,CAAC0wB,KAAL,CAAWE,WAAzD;AAAsE,CAA5R;;AACA5wB,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6Bk0F,mBAA7B,GAAiD,UAAS9pG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAE,CAAC2uE,IAAI,CAACC,eAAL,CAAqBwC,SAAzB,IAAoCpxE,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqBwC,SAA/E;AAA0F,OAAKs4B,qBAAL,CAA2B,CAAC1pG,CAAC,IAAE,CAAH,GAAKA,CAAC,IAAE,EAAT,MAAe,CAA1C;AAA6C,CAA1O;;AAA2O2uE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6Bm0F,mBAA7B,GAAiD,UAAS/pG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAE,CAAC2uE,IAAI,CAACC,eAAL,CAAqB2C,SAAzB,IAAoCvxE,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqB2C,SAA/E;AAA0F5C,MAAI,CAAC0wB,KAAL,CAAWK,aAAX,CAAyB1/F,CAAzB;AAA4B,OAAKupG,kBAAL,CAAwB56B,IAAI,CAAC0wB,KAAL,CAAWC,UAAnC,EAA8C3wB,IAAI,CAAC0wB,KAAL,CAAWE,WAAzD;AAAsE,CAA/R;;AAC3O5wB,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6Bo0F,yBAA7B,GAAuD,UAAShqG,CAAT,EAAW;AAAC,OAAKiqG,uBAAL,CAA6Bt7B,IAAI,CAAC0wB,KAAL,CAAW2B,qBAAX,CAAiChhG,CAAjC,CAA7B;AAAkE,CAArI;;AAAsI2uE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6Bq0F,uBAA7B,GAAqD,UAASjqG,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,IAAN;AAAW0uE,MAAI,CAAC0wB,KAAL,CAAWU,WAAX,CAAuB//F,CAAvB;AAA0B2uE,MAAI,CAAC0wB,KAAL,CAAWa,UAAX,CAAsBvxB,IAAI,CAAC0wB,KAAL,CAAWC,UAAjC,EAA4C3wB,IAAI,CAAC0wB,KAAL,CAAWE,WAAvD,EAAmE,UAASv/F,CAAT,EAAW8vC,CAAX,EAAa;AAAC7vC,KAAC,CAACspG,kBAAF,CAAqBvpG,CAAC,KAAG,CAAzB,EAA2B8vC,CAAC,KAAG,CAA/B;AAAkC,GAAnH;AAAqH,CAA3N;;AACtI6+B,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6Bs0F,UAA7B,GAAwC,UAASlqG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG5tE,CAAH,IAAM,MAAIA,CAA9B;AAAiC,OAAKspG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,KAAG,CAAJ,GAAM,GAAxB;AAA6B,CAAxJ;;AAAyJ2uE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6Bu0F,WAA7B,GAAyC,UAASnqG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG5tE,CAAH,IAAM,QAAMA,CAAhC;AAAmC,OAAKspG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,KAAG,CAAJ,GAAM,GAAxB;AAA6B,OAAKspG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,KAAG,CAAJ,GAAM,GAAxB;AAA6B,CAAxL;;AACzJ2uE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6B6zF,WAA7B,GAAyC,UAASzpG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG5tE,CAAH,IAAMA,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqByC,SAAjD;AAA4D,OAAKi4B,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,KAAG,CAAJ,GAAM,GAAxB;AAA6B,OAAKspG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,KAAG,CAAJ,GAAM,GAAxB;AAA6B,OAAKspG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,KAAG,EAAJ,GAAO,GAAzB;AAA8B,OAAKspG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,KAAG,EAAJ,GAAO,GAAzB;AAA8B,CAA7Q;;AAA8Q2uE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6Bw0F,WAA7B,GAAyC,UAASpqG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG5tE,CAAH,IAAMA,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqB4C,SAAjD;AAA4D7C,MAAI,CAAC0wB,KAAL,CAAWG,WAAX,CAAuBx/F,CAAvB;AAA0B,OAAKypG,WAAL,CAAiB96B,IAAI,CAAC0wB,KAAL,CAAWC,UAA5B;AAAwC,OAAKmK,WAAL,CAAiB96B,IAAI,CAAC0wB,KAAL,CAAWE,WAA5B;AAAyC,CAAlQ;;AAC9Q5wB,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6By0F,SAA7B,GAAuC,UAASrqG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,CAAC,GAAD,IAAM5tE,CAAN,IAAS,MAAIA,CAAjC;AAAoC,OAAKspG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,KAAG,CAAJ,GAAM,GAAxB;AAA6B,CAA1J;;AAA2J2uE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6B00F,UAA7B,GAAwC,UAAStqG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,CAAC,KAAD,IAAQ5tE,CAAR,IAAW,QAAMA,CAArC;AAAwC,OAAKspG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,KAAG,CAAJ,GAAM,GAAxB;AAA6B,OAAKspG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,KAAG,CAAJ,GAAM,GAAxB;AAA6B,CAA5L;;AAC3J2uE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6B20F,UAA7B,GAAwC,UAASvqG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAE,CAAC2uE,IAAI,CAACC,eAAL,CAAqBwC,SAAzB,IAAoCpxE,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqBwC,SAA/E;AAA0F,OAAKk4B,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,KAAG,CAAJ,GAAM,GAAxB;AAA6B,OAAKspG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,KAAG,CAAJ,GAAM,GAAxB;AAA6B,OAAKspG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,KAAG,EAAJ,GAAO,GAAzB;AAA8B,OAAKspG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,KAAG,EAAJ,GAAO,GAAzB;AAA8B,CAA1S;;AACA2uE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6B40F,UAA7B,GAAwC,UAASxqG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAE,CAAC2uE,IAAI,CAACC,eAAL,CAAqB2C,SAAzB,IAAoCvxE,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqB2C,SAA/E;AAA0F5C,MAAI,CAAC0wB,KAAL,CAAWI,UAAX,CAAsBz/F,CAAtB;AAAyB,OAAKwpG,iBAAL,CAAuB76B,IAAI,CAAC0wB,KAAL,CAAWC,UAAlC,EAA6C3wB,IAAI,CAAC0wB,KAAL,CAAWE,WAAxD;AAAqE,CAAlR;;AACA5wB,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6B60F,gBAA7B,GAA8C,UAASzqG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,CAAC5tE,CAAD,IAAI,CAAC2uE,IAAI,CAACC,eAAL,CAAqB2C,SAA1B,IAAqC,CAACvxE,CAAD,GAAG2uE,IAAI,CAACC,eAAL,CAAqB2C,SAAjF;AAA4F5C,MAAI,CAAC0wB,KAAL,CAAWU,WAAX,CAAuBpxB,IAAI,CAAC0wB,KAAL,CAAW2B,qBAAX,CAAiChhG,CAAjC,CAAvB;AAA4D,OAAKwpG,iBAAL,CAAuB76B,IAAI,CAAC0wB,KAAL,CAAWC,UAAlC,EAA6C3wB,IAAI,CAAC0wB,KAAL,CAAWE,WAAxD;AAAqE,CAA7T;;AACA5wB,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6B80F,UAA7B,GAAwC,UAAS1qG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB0yB,QAAQ,KAAGtgG,CAAX,IAAc,CAACsgG,QAAD,KAAYtgG,CAA1B,IAA6BqH,KAAK,CAACrH,CAAD,CAAlC,IAAuCA,CAAC,IAAE,CAAC2uE,IAAI,CAACC,eAAL,CAAqBkC,WAAzB,IAAsC9wE,CAAC,IAAE2uE,IAAI,CAACC,eAAL,CAAqBkC,WAAzH;AAAsInC,MAAI,CAAC0wB,KAAL,CAAWM,YAAX,CAAwB3/F,CAAxB;AAA2B,OAAKypG,WAAL,CAAiB96B,IAAI,CAAC0wB,KAAL,CAAWC,UAA5B;AAAwC,CAA7P;;AACA3wB,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6B+0F,WAA7B,GAAyC,UAAS3qG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB0yB,QAAQ,KAAGtgG,CAAX,IAAc,CAACsgG,QAAD,KAAYtgG,CAA1B,IAA6BqH,KAAK,CAACrH,CAAD,CAAlC,IAAuCA,CAAC,IAAE,CAAC2uE,IAAI,CAACC,eAAL,CAAqBqC,WAAzB,IAAsCjxE,CAAC,IAAE2uE,IAAI,CAACC,eAAL,CAAqBqC,WAAzH;AAAsItC,MAAI,CAAC0wB,KAAL,CAAWS,YAAX,CAAwB9/F,CAAxB;AAA2B,OAAKypG,WAAL,CAAiB96B,IAAI,CAAC0wB,KAAL,CAAWC,UAA5B;AAAwC,OAAKmK,WAAL,CAAiB96B,IAAI,CAAC0wB,KAAL,CAAWE,WAA5B;AAAyC,CAAvS;;AAAwS5wB,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6Bg1F,SAA7B,GAAuC,UAAS5qG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,cAAY,OAAO5tE,CAAnB,IAAsB,aAAW,OAAOA,CAA5D;AAA+D,OAAKspG,OAAL,CAAa7qG,IAAb,CAAkBuB,CAAC,GAAC,CAAD,GAAG,CAAtB;AAAyB,CAA3I;;AACxS2uE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6Bi1F,SAA7B,GAAuC,UAAS7qG,CAAT,EAAW;AAAC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAAvB;AAAsC87D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,IAAE,CAAC2uE,IAAI,CAACC,eAAL,CAAqBwC,SAAzB,IAAoCpxE,CAAC,GAAC2uE,IAAI,CAACC,eAAL,CAAqBwC,SAA/E;AAA0F,OAAKu4B,mBAAL,CAAyB3pG,CAAzB;AAA4B,CAA/M;;AAAgN2uE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6Bk1F,UAA7B,GAAwC,UAAS9qG,CAAT,EAAW;AAAC,OAAKspG,OAAL,CAAa7qG,IAAb,CAAkBg+B,KAAlB,CAAwB,KAAK6sE,OAA7B,EAAqCtpG,CAArC;AAAwC,CAA5F;;AAA6F2uE,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6Bm1F,iBAA7B,GAA+C,UAAS/qG,CAAT,EAAW;AAAC2uE,MAAI,CAAC0wB,KAAL,CAAWU,WAAX,CAAuB//F,CAAvB;AAA0B,OAAKupG,kBAAL,CAAwB56B,IAAI,CAAC0wB,KAAL,CAAWC,UAAnC,EAA8C3wB,IAAI,CAAC0wB,KAAL,CAAWE,WAAzD;AAAsE,CAA3J;;AAC7S5wB,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6Bo1F,gBAA7B,GAA8C,UAAShrG,CAAT,EAAW;AAAC2uE,MAAI,CAAC0wB,KAAL,CAAWU,WAAX,CAAuB//F,CAAvB;AAA0B,OAAKypG,WAAL,CAAiB96B,IAAI,CAAC0wB,KAAL,CAAWC,UAA5B;AAAwC,OAAKmK,WAAL,CAAiB96B,IAAI,CAAC0wB,KAAL,CAAWE,WAA5B;AAAyC,CAArK;;AACA5wB,IAAI,CAAC06B,aAAL,CAAmBzzF,SAAnB,CAA6Bq1F,WAA7B,GAAyC,UAASjrG,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC,KAAKqpG,OAAL,CAAa1pG,MAAnB,EAA0BsuB,CAAC,GAAC,CAAhC,EAAkCA,CAAC,GAACluB,CAAC,CAACJ,MAAtC,EAA6CsuB,CAAC,EAA9C,EAAiD;AAAC,QAAI4hB,CAAC,GAAC9vC,CAAC,CAACiY,UAAF,CAAaiW,CAAb,CAAN;AAAsB,QAAG,MAAI4hB,CAAP,EAAS,KAAKw5D,OAAL,CAAa7qG,IAAb,CAAkBqxC,CAAlB,EAAT,KAAmC,IAAG,OAAKA,CAAR,EAAU,KAAKw5D,OAAL,CAAa7qG,IAAb,CAAkBqxC,CAAC,IAAE,CAAH,GAAK,GAAvB,GAA4B,KAAKw5D,OAAL,CAAa7qG,IAAb,CAAkBqxC,CAAC,GAAC,EAAF,GAAK,GAAvB,CAA5B,CAAV,KAAuE,IAAG,QAAMA,CAAT,EAAW,IAAG,SAAOA,CAAP,IAAU,SAAOA,CAAjB,IAAoB5hB,CAAC,GAAC,CAAF,GAAIluB,CAAC,CAACJ,MAA7B,EAAoC;AAAC,UAAIsjB,CAAC,GAACljB,CAAC,CAACiY,UAAF,CAAaiW,CAAC,GAAC,CAAf,CAAN;AAAwB,eAAOhL,CAAP,IAAU,SAAOA,CAAjB,KAAqB4sB,CAAC,GAAC,QAAMA,CAAC,GAAC,KAAR,IAAe5sB,CAAf,GAAiB,KAAjB,GAAuB,KAAzB,EAA+B,KAAKomF,OAAL,CAAa7qG,IAAb,CAAkBqxC,CAAC,IAAE,EAAH,GAAM,GAAxB,CAA/B,EAA4D,KAAKw5D,OAAL,CAAa7qG,IAAb,CAAkBqxC,CAAC,IAAE,EAAH,GAAM,EAAN,GAAS,GAA3B,CAA5D,EAA4F,KAAKw5D,OAAL,CAAa7qG,IAAb,CAAkBqxC,CAAC,IAAE,CAAH,GAAK,EAAL,GAAQ,GAA1B,CAA5F,EAA2H,KAAKw5D,OAAL,CAAa7qG,IAAb,CAAkBqxC,CAAC,GAAC,EAAF,GAAK,GAAvB,CAA3H,EAAuJ5hB,CAAC,EAA7K;AAAiL,KAA9O,MAAmP,KAAKo7E,OAAL,CAAa7qG,IAAb,CAAkBqxC,CAAC,IACxf,EADuf,GACpf,GADke,GAC7d,KAAKw5D,OAAL,CAAa7qG,IAAb,CAAkBqxC,CAAC,IAAE,CAAH,GAAK,EAAL,GAAQ,GAA1B,CAD6d,EAC9b,KAAKw5D,OAAL,CAAa7qG,IAAb,CAAkBqxC,CAAC,GAAC,EAAF,GAAK,GAAvB,CAD8b;AACla;;AAAA,SAAO,KAAKw5D,OAAL,CAAa1pG,MAAb,GAAoBK,CAA3B;AAA6B,CADhG;;AACiG0uE,IAAI,CAACu8B,KAAL,GAAW,EAAX;;AAAcv8B,IAAI,CAACu8B,KAAL,CAAWC,MAAX,GAAkB,UAASnrG,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAKmrG,EAAL,GAAQprG,CAAR;AAAU,OAAKqrG,EAAL,GAAQprG,CAAR;AAAU,CAApD;;AAAqD0uE,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBv1F,SAAlB,CAA4B01F,GAA5B,GAAgC,UAAStrG,CAAT,EAAW;AAAC,SAAO,KAAKqrG,EAAL,GAAQrrG,CAAC,CAACqrG,EAAV,IAAc,KAAKA,EAAL,IAASrrG,CAAC,CAACqrG,EAAX,IAAe,KAAKD,EAAL,GAAQprG,CAAC,CAACorG,EAAvC,GAA0C,CAAC,CAA3C,GAA6C,KAAKC,EAAL,IAASrrG,CAAC,CAACqrG,EAAX,IAAe,KAAKD,EAAL,IAASprG,CAAC,CAACorG,EAA1B,GAA6B,CAA7B,GAA+B,CAAnF;AAAqF,CAAjI;;AAAkIz8B,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBv1F,SAAlB,CAA4B21F,UAA5B,GAAuC,YAAU;AAAC,SAAO,IAAI58B,IAAI,CAACu8B,KAAL,CAAWC,MAAf,CAAsB,CAAC,KAAKC,EAAL,KAAU,CAAV,GAAY,CAAC,KAAKC,EAAL,GAAQ,CAAT,KAAa,EAA1B,MAAgC,CAAtD,EAAwD,KAAKA,EAAL,KAAU,CAAV,KAAc,CAAtE,CAAP;AAAgF,CAAlI;;AAAmI18B,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBv1F,SAAlB,CAA4B41F,SAA5B,GAAsC,YAAU;AAAC,SAAO,IAAI78B,IAAI,CAACu8B,KAAL,CAAWC,MAAf,CAAsB,KAAKC,EAAL,IAAS,CAAT,KAAa,CAAnC,EAAqC,CAAC,KAAKC,EAAL,IAAS,CAAT,GAAW,KAAKD,EAAL,KAAU,EAAtB,MAA4B,CAAjE,CAAP;AAA2E,CAA5H;;AACzaz8B,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBv1F,SAAlB,CAA4B61F,GAA5B,GAAgC,YAAU;AAAC,SAAM,CAAC,EAAE,KAAKJ,EAAL,GAAQ,UAAV,CAAP;AAA6B,CAAxE;;AAAyE18B,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBv1F,SAAlB,CAA4B81F,GAA5B,GAAgC,YAAU;AAAC,SAAM,CAAC,EAAE,KAAKN,EAAL,GAAQ,CAAV,CAAP;AAAoB,CAA/D;;AAAgEz8B,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBv1F,SAAlB,CAA4BuD,IAA5B,GAAiC,YAAU;AAAC,SAAO,KAAG,KAAKiyF,EAAR,IAAY,KAAG,KAAKC,EAA3B;AAA8B,CAA1E;;AAA2E18B,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBv1F,SAAlB,CAA4Bja,GAA5B,GAAgC,UAASqE,CAAT,EAAW;AAAC,SAAO,IAAI2uE,IAAI,CAACu8B,KAAL,CAAWC,MAAf,CAAsB,CAAC,KAAKC,EAAL,GAAQprG,CAAC,CAACorG,EAAV,GAAa,UAAd,MAA4B,CAA5B,KAAgC,CAAtD,EAAwD,CAAC,CAAC,KAAKC,EAAL,GAAQrrG,CAAC,CAACqrG,EAAV,GAAa,UAAd,MAA4B,CAA7B,KAAiC,cAAY,KAAKD,EAAL,GAAQprG,CAAC,CAACorG,EAAtB,GAAyB,CAAzB,GAA2B,CAA5D,MAAiE,CAAzH,CAAP;AAAmI,CAA/K;;AACpNz8B,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBv1F,SAAlB,CAA4B+1F,GAA5B,GAAgC,UAAS3rG,CAAT,EAAW;AAAC,SAAO,IAAI2uE,IAAI,CAACu8B,KAAL,CAAWC,MAAf,CAAsB,CAAC,KAAKC,EAAL,GAAQprG,CAAC,CAACorG,EAAV,GAAa,UAAd,MAA4B,CAA5B,KAAgC,CAAtD,EAAwD,CAAC,CAAC,KAAKC,EAAL,GAAQrrG,CAAC,CAACqrG,EAAV,GAAa,UAAd,MAA4B,CAA7B,KAAiC,IAAE,KAAKD,EAAL,GAAQprG,CAAC,CAACorG,EAAZ,GAAe,CAAf,GAAiB,CAAlD,MAAuD,CAA/G,CAAP;AAAyH,CAArK;;AAAsKz8B,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBS,QAAlB,GAA2B,UAAS5rG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAACluB,CAAC,GAAC,KAAR;AAAcA,GAAC,MAAI,EAAL;AAAQ,MAAI8vC,CAAC,GAAC7vC,CAAC,GAAC,KAAR;AAAA,MAAcijB,CAAC,GAACjjB,CAAC,KAAG,EAApB;AAAuBA,GAAC,GAACiuB,CAAC,GAAC4hB,CAAF,GAAI,SAAO5hB,CAAC,GAAChL,CAAF,GAAI,KAAX,CAAJ,GAAsB,SAAOljB,CAAC,GAAC8vC,CAAF,GAAI,KAAX,CAAxB;;AAA0C,OAAI5hB,CAAC,GAACluB,CAAC,GAACkjB,CAAF,IAAKgL,CAAC,GAAChL,CAAF,KAAM,EAAX,KAAgBljB,CAAC,GAAC8vC,CAAF,KAAM,EAAtB,CAAN,EAAgC,cAAY7vC,CAA5C,GAA+CA,CAAC,IAAE,UAAH,EAAciuB,CAAC,IAAE,CAAjB;;AAAmB,SAAO,IAAIygD,IAAI,CAACu8B,KAAL,CAAWC,MAAf,CAAsBlrG,CAAC,KAAG,CAA1B,EAA4BiuB,CAAC,KAAG,CAAhC,CAAP;AAA0C,CAA5O;;AACtKygD,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBv1F,SAAlB,CAA4Bi2F,GAA5B,GAAgC,UAAS7rG,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC0uE,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBS,QAAlB,CAA2B,KAAKR,EAAhC,EAAmCprG,CAAnC,CAAN;AAA4CA,GAAC,GAAC2uE,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBS,QAAlB,CAA2B,KAAKP,EAAhC,EAAmCrrG,CAAnC,CAAF;AAAwCA,GAAC,CAACqrG,EAAF,GAAKrrG,CAAC,CAACorG,EAAP;AAAUprG,GAAC,CAACorG,EAAF,GAAK,CAAL;AAAO,SAAOnrG,CAAC,CAACtE,GAAF,CAAMqE,CAAN,CAAP;AAAgB,CAAjK;;AACA2uE,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBv1F,SAAlB,CAA4Bk2F,GAA5B,GAAgC,UAAS9rG,CAAT,EAAW;AAAC,MAAG,KAAGA,CAAN,EAAQ,OAAM,EAAN;AAAS,MAAIC,CAAC,GAAC,IAAI0uE,IAAI,CAACu8B,KAAL,CAAWC,MAAf,CAAsB,CAAtB,EAAwB,CAAxB,CAAN;AAAA,MAAiCj9E,CAAC,GAAC,IAAIygD,IAAI,CAACu8B,KAAL,CAAWC,MAAf,CAAsB,KAAKC,EAA3B,EAA8B,KAAKC,EAAnC,CAAnC;AAA0ErrG,GAAC,GAAC,IAAI2uE,IAAI,CAACu8B,KAAL,CAAWC,MAAf,CAAsBnrG,CAAtB,EAAwB,CAAxB,CAAF;;AAA6B,OAAI,IAAI8vC,CAAC,GAAC,IAAI6+B,IAAI,CAACu8B,KAAL,CAAWC,MAAf,CAAsB,CAAtB,EAAwB,CAAxB,CAAV,EAAqC,CAACnrG,CAAC,CAACyrG,GAAF,EAAtC,GAA+CzrG,CAAC,GAACA,CAAC,CAACwrG,SAAF,EAAF,EAAgB17D,CAAC,GAACA,CAAC,CAAC07D,SAAF,EAAlB;;AAAgC,SAAK,CAAC17D,CAAC,CAAC32B,IAAF,EAAN,GAAgB,KAAGnZ,CAAC,CAACsrG,GAAF,CAAMp9E,CAAN,CAAH,KAAcjuB,CAAC,GAACA,CAAC,CAACtE,GAAF,CAAMm0C,CAAN,CAAF,EAAW5hB,CAAC,GAACA,CAAC,CAACy9E,GAAF,CAAM3rG,CAAN,CAA3B,GAAqCA,CAAC,GAACA,CAAC,CAACurG,UAAF,EAAvC,EAAsDz7D,CAAC,GAACA,CAAC,CAACy7D,UAAF,EAAxD;;AAAuE,SAAM,CAACtrG,CAAD,EAAGiuB,CAAH,CAAN;AAAY,CAAtV;;AAAuVygD,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBv1F,SAAlB,CAA4BY,QAA5B,GAAqC,YAAU;AAAC,OAAI,IAAIxW,CAAC,GAAC,EAAN,EAASC,CAAC,GAAC,IAAf,EAAoB,CAACA,CAAC,CAACkZ,IAAF,EAArB,GAA+B;AAAClZ,KAAC,GAACA,CAAC,CAAC6rG,GAAF,CAAM,EAAN,CAAF;AAAY,QAAI59E,CAAC,GAACjuB,CAAC,CAAC,CAAD,CAAP;AAAWD,KAAC,GAACC,CAAC,CAAC,CAAD,CAAD,CAAKmrG,EAAL,GAAQprG,CAAV;AAAYC,KAAC,GAACiuB,CAAF;AAAI;;AAAA,QAAIluB,CAAJ,KAAQA,CAAC,GAAC,GAAV;AAAe,SAAOA,CAAP;AAAS,CAA/I;;AACvV2uE,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBY,UAAlB,GAA6B,UAAS/rG,CAAT,EAAW;AAAC,OAAI,IAAIC,CAAC,GAAC,IAAI0uE,IAAI,CAACu8B,KAAL,CAAWC,MAAf,CAAsB,CAAtB,EAAwB,CAAxB,CAAN,EAAiCj9E,CAAC,GAAC,IAAIygD,IAAI,CAACu8B,KAAL,CAAWC,MAAf,CAAsB,CAAtB,EAAwB,CAAxB,CAAnC,EAA8Dr7D,CAAC,GAAC,CAApE,EAAsEA,CAAC,GAAC9vC,CAAC,CAACJ,MAA1E,EAAiFkwC,CAAC,EAAlF,EAAqF;AAAC,QAAG,MAAI9vC,CAAC,CAAC8vC,CAAD,CAAL,IAAU,MAAI9vC,CAAC,CAAC8vC,CAAD,CAAlB,EAAsB,OAAO,IAAP;AAAY,QAAI5sB,CAAC,GAAClJ,QAAQ,CAACha,CAAC,CAAC8vC,CAAD,CAAF,EAAM,EAAN,CAAd;AAAwB5hB,KAAC,CAACk9E,EAAF,GAAKloF,CAAL;AAAOjjB,KAAC,GAACA,CAAC,CAAC4rG,GAAF,CAAM,EAAN,EAAUlwG,GAAV,CAAcuyB,CAAd,CAAF;AAAmB;;AAAA,SAAOjuB,CAAP;AAAS,CAA5N;;AAA6N0uE,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBv1F,SAAlB,CAA4BgpB,KAA5B,GAAkC,YAAU;AAAC,SAAO,IAAI+vC,IAAI,CAACu8B,KAAL,CAAWC,MAAf,CAAsB,KAAKC,EAA3B,EAA8B,KAAKC,EAAnC,CAAP;AAA8C,CAA3F;;AAA4F18B,IAAI,CAACu8B,KAAL,CAAWc,KAAX,GAAiB,UAAShsG,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAKmrG,EAAL,GAAQprG,CAAR;AAAU,OAAKqrG,EAAL,GAAQprG,CAAR;AAAU,CAAnD;;AACzT0uE,IAAI,CAACu8B,KAAL,CAAWc,KAAX,CAAiBp2F,SAAjB,CAA2Bja,GAA3B,GAA+B,UAASqE,CAAT,EAAW;AAAC,SAAO,IAAI2uE,IAAI,CAACu8B,KAAL,CAAWc,KAAf,CAAqB,CAAC,KAAKZ,EAAL,GAAQprG,CAAC,CAACorG,EAAV,GAAa,UAAd,MAA4B,CAA5B,KAAgC,CAArD,EAAuD,CAAC,CAAC,KAAKC,EAAL,GAAQrrG,CAAC,CAACqrG,EAAV,GAAa,UAAd,MAA4B,CAA7B,KAAiC,cAAY,KAAKD,EAAL,GAAQprG,CAAC,CAACorG,EAAtB,GAAyB,CAAzB,GAA2B,CAA5D,MAAiE,CAAxH,CAAP;AAAkI,CAA7K;;AAA8Kz8B,IAAI,CAACu8B,KAAL,CAAWc,KAAX,CAAiBp2F,SAAjB,CAA2B+1F,GAA3B,GAA+B,UAAS3rG,CAAT,EAAW;AAAC,SAAO,IAAI2uE,IAAI,CAACu8B,KAAL,CAAWc,KAAf,CAAqB,CAAC,KAAKZ,EAAL,GAAQprG,CAAC,CAACorG,EAAV,GAAa,UAAd,MAA4B,CAA5B,KAAgC,CAArD,EAAuD,CAAC,CAAC,KAAKC,EAAL,GAAQrrG,CAAC,CAACqrG,EAAV,GAAa,UAAd,MAA4B,CAA7B,KAAiC,IAAE,KAAKD,EAAL,GAAQprG,CAAC,CAACorG,EAAZ,GAAe,CAAf,GAAiB,CAAlD,MAAuD,CAA9G,CAAP;AAAwH,CAAnK;;AAAoKz8B,IAAI,CAACu8B,KAAL,CAAWc,KAAX,CAAiBp2F,SAAjB,CAA2BgpB,KAA3B,GAAiC,YAAU;AAAC,SAAO,IAAI+vC,IAAI,CAACu8B,KAAL,CAAWc,KAAf,CAAqB,KAAKZ,EAA1B,EAA6B,KAAKC,EAAlC,CAAP;AAA6C,CAAzF;;AAClV18B,IAAI,CAACu8B,KAAL,CAAWc,KAAX,CAAiBp2F,SAAjB,CAA2BY,QAA3B,GAAoC,YAAU;AAAC,MAAIxW,CAAC,GAAC,MAAI,KAAKqrG,EAAL,GAAQ,UAAZ,CAAN;AAAA,MAA8BprG,CAAC,GAAC,IAAI0uE,IAAI,CAACu8B,KAAL,CAAWC,MAAf,CAAsB,KAAKC,EAA3B,EAA8B,KAAKC,EAAnC,CAAhC;AAAuErrG,GAAC,KAAGC,CAAC,GAAE,IAAI0uE,IAAI,CAACu8B,KAAL,CAAWC,MAAf,CAAsB,CAAtB,EAAwB,CAAxB,CAAD,CAA6BQ,GAA7B,CAAiC1rG,CAAjC,CAAL,CAAD;AAA2C,SAAM,CAACD,CAAC,GAAC,GAAD,GAAK,EAAP,IAAWC,CAAC,CAACuW,QAAF,EAAjB;AAA8B,CAA/L;;AAAgMm4D,IAAI,CAACu8B,KAAL,CAAWc,KAAX,CAAiBD,UAAjB,GAA4B,UAAS/rG,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,IAAED,CAAC,CAACJ,MAAJ,IAAY,OAAKI,CAAC,CAAC,CAAD,CAAxB;AAA4BC,GAAC,KAAGD,CAAC,GAACA,CAAC,CAAC88C,SAAF,CAAY,CAAZ,CAAL,CAAD;AAAsB98C,GAAC,GAAC2uE,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBY,UAAlB,CAA6B/rG,CAA7B,CAAF;AAAkC,MAAG,SAAOA,CAAV,EAAY,OAAO,IAAP;AAAYC,GAAC,KAAGD,CAAC,GAAE,IAAI2uE,IAAI,CAACu8B,KAAL,CAAWC,MAAf,CAAsB,CAAtB,EAAwB,CAAxB,CAAD,CAA6BQ,GAA7B,CAAiC3rG,CAAjC,CAAL,CAAD;AAA2C,SAAO,IAAI2uE,IAAI,CAACu8B,KAAL,CAAWc,KAAf,CAAqBhsG,CAAC,CAACorG,EAAvB,EAA0BprG,CAAC,CAACqrG,EAA5B,CAAP;AAAuC,CAAtO;;AAAuO18B,IAAI,CAACs9B,YAAL,GAAkB,YAAU;AAAC,OAAKC,OAAL,GAAa,EAAb;AAAgB,OAAKC,YAAL,GAAkB,CAAlB;AAAoB,OAAKC,QAAL,GAAc,IAAIz9B,IAAI,CAAC06B,aAAT,EAAd;AAAqC,OAAKgD,UAAL,GAAgB,EAAhB;AAAmB,CAAzH;;AAA0H19B,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B02F,iBAA5B,GAA8C,UAAStsG,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC,KAAKmsG,QAAL,CAAc3yG,GAAd,EAAN;AAA0B,OAAKyyG,OAAL,CAAaztG,IAAb,CAAkBwB,CAAlB;AAAqB,OAAKisG,OAAL,CAAaztG,IAAb,CAAkBuB,CAAlB;AAAqB,OAAKmsG,YAAL,IAAmBlsG,CAAC,CAACL,MAAF,GAASI,CAAC,CAACJ,MAA9B;AAAqC,CAAnK;;AACjiB+uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B22F,eAA5B,GAA4C,UAASvsG,CAAT,EAAW;AAAC,OAAKwsG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAvD;AAAkEvwE,GAAC,GAAC,KAAKosG,QAAL,CAAc3yG,GAAd,EAAF;AAAsB,OAAKyyG,OAAL,CAAaztG,IAAb,CAAkBuB,CAAlB;AAAqB,OAAKmsG,YAAL,IAAmBnsG,CAAC,CAACJ,MAArB;AAA4BI,GAAC,CAACvB,IAAF,CAAO,KAAK0tG,YAAZ;AAA0B,SAAOnsG,CAAP;AAAS,CAApO;;AAAqO2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B62F,aAA5B,GAA0C,UAASzsG,CAAT,EAAW;AAAC,MAAIC,CAAC,GAACD,CAAC,CAACQ,GAAF,EAAN;AAAcP,GAAC,GAAC,KAAKksG,YAAL,GAAkB,KAAKC,QAAL,CAAcxsG,MAAd,EAAlB,GAAyCK,CAA3C;;AAA6C,OAAI67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG3tE,CAAvB,CAAJ,EAA8B,MAAIA,CAAlC,GAAqCD,CAAC,CAACvB,IAAF,CAAOwB,CAAC,GAAC,GAAF,GAAM,GAAb,GAAkBA,CAAC,MAAI,CAAvB,EAAyB,KAAKksG,YAAL,EAAzB;;AAA6CnsG,GAAC,CAACvB,IAAF,CAAOwB,CAAP;AAAU,OAAKksG,YAAL;AAAoB,CAAjO;;AACrOx9B,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B82F,sBAA5B,GAAmD,UAAS1sG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAKo+E,iBAAL,CAAuBtsG,CAAC,CAACo/F,QAAF,CAAWn/F,CAAX,EAAaiuB,CAAb,CAAvB;AAAwC,CAA3G;;AAA4GygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B+2F,2BAA5B,GAAwD,UAAS3sG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,UAAMluB,CAAN,IAAS,QAAMC,CAAf,IAAkB,QAAMiuB,CAAxB,IAA2B,KAAKw+E,sBAAL,CAA4B1sG,CAA5B,EAA8BC,CAA9B,EAAgCiuB,CAAhC,CAA3B;AAA8D,CAAtI;;AAAuIygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4BkpB,KAA5B,GAAkC,YAAU;AAAC,OAAKotE,OAAL,GAAa,EAAb;AAAgB,OAAKE,QAAL,CAAc3yG,GAAd;AAAoB,OAAK0yG,YAAL,GAAkB,CAAlB;AAAoB,OAAKE,UAAL,GAAgB,EAAhB;AAAmB,CAAxH;;AACnP19B,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bg3F,eAA5B,GAA4C,YAAU;AAAC9wC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG,KAAKy+B,UAAL,CAAgBzsG,MAAvC;;AAA+C,OAAI,IAAII,CAAC,GAAC,IAAI+b,UAAJ,CAAe,KAAKowF,YAAL,GAAkB,KAAKC,QAAL,CAAcxsG,MAAd,EAAjC,CAAN,EAA+DK,CAAC,GAAC,KAAKisG,OAAtE,EAA8Eh+E,CAAC,GAACjuB,CAAC,CAACL,MAAlF,EAAyFkwC,CAAC,GAAC,CAA3F,EAA6F5sB,CAAC,GAAC,CAAnG,EAAqGA,CAAC,GAACgL,CAAvG,EAAyGhL,CAAC,EAA1G,EAA6G;AAAC,QAAIujB,CAAC,GAACxmC,CAAC,CAACijB,CAAD,CAAP;AAAWljB,KAAC,CAACZ,GAAF,CAAMqnC,CAAN,EAAQqJ,CAAR;AAAWA,KAAC,IAAErJ,CAAC,CAAC7mC,MAAL;AAAY;;AAAAK,GAAC,GAAC,KAAKmsG,QAAL,CAAc3yG,GAAd,EAAF;AAAsBuG,GAAC,CAACZ,GAAF,CAAMa,CAAN,EAAQ6vC,CAAR;AAAWA,GAAC,IAAE7vC,CAAC,CAACL,MAAL;AAAYk8D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB99B,CAAC,IAAE9vC,CAAC,CAACJ,MAAzB;AAAiC,OAAKssG,OAAL,GAAa,CAAClsG,CAAD,CAAb;AAAiB,SAAOA,CAAP;AAAS,CAA9V;;AAA+V2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bi3F,qBAA5B,GAAkD,UAAS7sG,CAAT,EAAW;AAAC,SAAO87D,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB0gE,eAAlB,CAAkC,KAAK+N,eAAL,EAAlC,EAAyD5sG,CAAzD,CAAP;AAAmE,CAAjI;;AAC/V2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bk3F,eAA5B,GAA4C,UAAS9sG,CAAT,EAAW;AAAC,OAAKqsG,UAAL,CAAgB5tG,IAAhB,CAAqB,KAAK8tG,eAAL,CAAqBvsG,CAArB,CAArB;AAA8C,CAAtG;;AAAuG2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bm3F,aAA5B,GAA0C,YAAU;AAACjxC,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG,KAAKy+B,UAAL,CAAgBzsG,MAAvC;AAA+C,OAAK6sG,aAAL,CAAmB,KAAKJ,UAAL,CAAgB7rG,GAAhB,EAAnB;AAA0C,CAA9I;;AAA+ImuE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B42F,iBAA5B,GAA8C,UAASxsG,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG5tE,CAAH,IAAMA,CAAC,IAAEqI,IAAI,CAACC,KAAL,CAAWtI,CAAX,CAA7B;AAA4C,OAAKosG,QAAL,CAAc1C,qBAAd,CAAoC,IAAE1pG,CAAF,GAAIC,CAAxC;AAA2C,CAAnJ;;AACtP0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bo3F,QAA5B,GAAqC,UAAShtG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAI4hB,CAAC,GAAC6+B,IAAI,CAACC,eAAL,CAAqBG,SAA3B;;AAAqC,UAAO/uE,CAAP;AAAU,SAAK8vC,CAAC,CAACm/B,MAAP;AAAc,WAAK07B,WAAL,CAAiB1qG,CAAjB,EAAmBiuB,CAAnB;AAAsB;;AAAM,SAAK4hB,CAAC,CAACo/B,KAAP;AAAa,WAAKw7B,UAAL,CAAgBzqG,CAAhB,EAAkBiuB,CAAlB;AAAqB;;AAAM,SAAK4hB,CAAC,CAACq/B,KAAP;AAAa,WAAKq7B,UAAL,CAAgBvqG,CAAhB,EAAkBiuB,CAAlB;AAAqB;;AAAM,SAAK4hB,CAAC,CAACs/B,MAAP;AAAc,WAAKg7B,WAAL,CAAiBnqG,CAAjB,EAAmBiuB,CAAnB;AAAsB;;AAAM,SAAK4hB,CAAC,CAACu/B,KAAP;AAAa,WAAKk7B,UAAL,CAAgBtqG,CAAhB,EAAkBiuB,CAAlB;AAAqB;;AAAM,SAAK4hB,CAAC,CAACw/B,OAAP;AAAe,WAAK29B,YAAL,CAAkBhtG,CAAlB,EAAoBiuB,CAApB;AAAuB;;AAAM,SAAK4hB,CAAC,CAACy/B,OAAP;AAAe,WAAK29B,YAAL,CAAkBjtG,CAAlB,EAAoBiuB,CAApB;AAAuB;;AAAM,SAAK4hB,CAAC,CAAC0/B,IAAP;AAAY,WAAKo7B,SAAL,CAAe3qG,CAAf,EAAiBiuB,CAAjB;AAAoB;;AAAM,SAAK4hB,CAAC,CAAC2/B,MAAP;AAAc,WAAKw7B,WAAL,CAAiBhrG,CAAjB,EAAmBiuB,CAAnB;AAAsB;;AAAM,SAAK4hB,CAAC,CAAC4/B,KAAP;AAAa5T,UAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,8CAAlB;AACre;;AAAM,SAAKh+B,CAAC,CAAC6/B,OAAP;AAAe7T,UAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,gDAAlB;AAAoE;;AAAM,SAAKh+B,CAAC,CAAC8/B,KAAP;AAAa,WAAKk7B,UAAL,CAAgB7qG,CAAhB,EAAkBiuB,CAAlB;AAAqB;;AAAM,SAAK4hB,CAAC,CAAC+/B,MAAP;AAAc,WAAK45B,WAAL,CAAiBxpG,CAAjB,EAAmBiuB,CAAnB;AAAsB;;AAAM,SAAK4hB,CAAC,CAACggC,IAAP;AAAY,WAAK+6B,SAAL,CAAe5qG,CAAf,EAAiBiuB,CAAjB;AAAoB;;AAAM,SAAK4hB,CAAC,CAACigC,QAAP;AAAgB,WAAKo9B,aAAL,CAAmBltG,CAAnB,EAAqBiuB,CAArB;AAAwB;;AAAM,SAAK4hB,CAAC,CAACkgC,QAAP;AAAgB,WAAKo9B,aAAL,CAAmBntG,CAAnB,EAAqBiuB,CAArB;AAAwB;;AAAM,SAAK4hB,CAAC,CAACmgC,MAAP;AAAc,WAAKo9B,WAAL,CAAiBptG,CAAjB,EAAmBiuB,CAAnB;AAAsB;;AAAM,SAAK4hB,CAAC,CAACogC,MAAP;AAAc,WAAKo9B,WAAL,CAAiBrtG,CAAjB,EAAmBiuB,CAAnB;AAAsB;;AAAM,SAAK4hB,CAAC,CAACqgC,OAAP;AAAe,WAAK66B,gBAAL,CAAsB/qG,CAAtB,EAAwBiuB,CAAxB;AAA2B;;AAAM,SAAK4hB,CAAC,CAACsgC,OAAP;AAAe,WAAK26B,iBAAL,CAAuB9qG,CAAvB,EAAyBiuB,CAAzB;AAA4B;;AAAM;AAAQ4tC,UAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,kCAAlB;AADtZ;AAC6c,CADviB;;AAEAa,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B23F,sBAA5B,GAAmD,UAASvtG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAvD,GAA+D,KAAK87B,QAAL,CAAc1C,qBAAd,CAAoCzpG,CAApC,CAAzE;AAAiH,CAAlL;;AAAmL0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B43F,oBAA5B,GAAiD,UAASxtG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAvD,GAA+D,KAAK87B,QAAL,CAAczC,mBAAd,CAAkC1pG,CAAlC,CAAzE;AAA+G,CAA9K;;AAA+K0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B63F,sBAA5B,GAAmD,UAASztG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAvD,GAA+D,KAAK87B,QAAL,CAAcxC,qBAAd,CAAoC3pG,CAApC,CAAzE;AAAiH,CAAlL;;AAClW0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B83F,oBAA5B,GAAiD,UAAS1tG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAvD,GAA+D,KAAK87B,QAAL,CAAcvC,mBAAd,CAAkC5pG,CAAlC,CAAzE;AAA+G,CAA9K;;AAA+K0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B+3F,oBAA5B,GAAiD,UAAS3tG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAvD,GAA+D,KAAK87B,QAAL,CAActC,mBAAd,CAAkC7pG,CAAlC,CAAzE;AAA+G,CAA9K;;AAA+K0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bg4F,oBAA5B,GAAiD,UAAS5tG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAvD,GAA+D,KAAK87B,QAAL,CAAcrC,mBAAd,CAAkC9pG,CAAlC,CAAzE;AAA+G,CAA9K;;AAC9V0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bi4F,0BAA5B,GAAuD,UAAS7tG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAvD,GAA+D,KAAK87B,QAAL,CAAcpC,yBAAd,CAAwC/pG,CAAxC,CAAzE;AAAqH,CAA1L;;AAA2L0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bk4F,wBAA5B,GAAqD,UAAS9tG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAvD,GAA+D,KAAK87B,QAAL,CAAcnC,uBAAd,CAAsChqG,CAAtC,CAAzE;AAAmH,CAAtL;;AAC3L0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B20F,UAA5B,GAAuC,UAASvqG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB3tE,CAAC,IAAE,CAAC0uE,IAAI,CAACC,eAAL,CAAqBwC,SAAzB,IAAoCnxE,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqBwC,SAA/E,GAA0F,KAAKo8B,oBAAL,CAA0BxtG,CAA1B,EAA4BC,CAA5B,CAApG;AAAoI,CAAzL;;AAA0L0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bm4F,gBAA5B,GAA6C,UAAS/tG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAUA,CAAC,GAAC+Z,QAAQ,CAAC/Z,CAAD,EAAG,EAAH,CAAV,EAAiB67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB3tE,CAAC,IAAE,CAAC0uE,IAAI,CAACC,eAAL,CAAqBwC,SAAzB,IAAoCnxE,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqBwC,SAA/E,CAAjB,EAA2G,KAAKo8B,oBAAL,CAA0BxtG,CAA1B,EAA4BC,CAA5B,CAArH;AAAqJ,CAAhN;;AAC1L0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B40F,UAA5B,GAAuC,UAASxqG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB3tE,CAAC,IAAE,CAAC0uE,IAAI,CAACC,eAAL,CAAqB2C,SAAzB,IAAoCtxE,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqB2C,SAA/E,GAA0F,KAAKm8B,oBAAL,CAA0B1tG,CAA1B,EAA4BC,CAA5B,CAApG;AAAoI,CAAzL;;AAA0L0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B60F,gBAA5B,GAA6C,UAASzqG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAUA,CAAC,GAAC0uE,IAAI,CAACu8B,KAAL,CAAWc,KAAX,CAAiBD,UAAjB,CAA4B9rG,CAA5B,CAAF,EAAiC,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAvD,CAAjC,EAAgG,KAAK87B,QAAL,CAAc7C,kBAAd,CAAiCtpG,CAAC,CAACmrG,EAAnC,EAAsCnrG,CAAC,CAACorG,EAAxC,CAA1G;AAAuJ,CAAlN;;AAC1L18B,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B6zF,WAA5B,GAAwC,UAASzpG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG3tE,CAAH,IAAMA,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqByC,SAAjD,GAA4D,KAAKk8B,sBAAL,CAA4BvtG,CAA5B,EAA8BC,CAA9B,CAAtE;AAAwG,CAA9J;;AAA+J0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bo4F,iBAA5B,GAA8C,UAAShuG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAUA,CAAC,GAAC+Z,QAAQ,CAAC/Z,CAAD,EAAG,EAAH,CAAV,EAAiB67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG3tE,CAAH,IAAMA,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqByC,SAAjD,CAAjB,EAA6E,KAAKk8B,sBAAL,CAA4BvtG,CAA5B,EAA8BC,CAA9B,CAAvF;AAAyH,CAArL;;AAAsL0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bw0F,WAA5B,GAAwC,UAASpqG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG3tE,CAAH,IAAMA,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqB4C,SAAjD,GAA4D,KAAKi8B,sBAAL,CAA4BztG,CAA5B,EAA8BC,CAA9B,CAAtE;AAAwG,CAA9J;;AACrV0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bq4F,iBAA5B,GAA8C,UAASjuG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAUA,CAAC,GAAC0uE,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBY,UAAlB,CAA6B9rG,CAA7B,CAAF,EAAkC,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAvD,CAAlC,EAAiG,KAAK87B,QAAL,CAAc7C,kBAAd,CAAiCtpG,CAAC,CAACmrG,EAAnC,EAAsCnrG,CAAC,CAACorG,EAAxC,CAA3G;AAAwJ,CAApN;;AAAqN18B,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4By3F,WAA5B,GAAwC,UAASrtG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB3tE,CAAC,IAAE,CAAC0uE,IAAI,CAACC,eAAL,CAAqBwC,SAAzB,IAAoCnxE,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqBwC,SAA/E,GAA0F,KAAKu8B,oBAAL,CAA0B3tG,CAA1B,EAA4BC,CAA5B,CAApG;AAAoI,CAA1L;;AACrN0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B03F,WAA5B,GAAwC,UAASttG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB3tE,CAAC,IAAE,CAAC0uE,IAAI,CAACC,eAAL,CAAqB2C,SAAzB,IAAoCtxE,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqB2C,SAA/E,GAA0F,KAAKq8B,oBAAL,CAA0B5tG,CAA1B,EAA4BC,CAA5B,CAApG;AAAoI,CAA1L;;AAA2L0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bs4F,eAA5B,GAA4C,UAASluG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,IAAS,KAAK6tG,wBAAL,CAA8B9tG,CAA9B,EAAgCC,CAAhC,CAAT;AAA4C,CAAtG;;AAAuG0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bu4F,iBAA5B,GAA8C,UAASnuG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,IAAS,KAAK4tG,0BAAL,CAAgC7tG,CAAhC,EAAkCC,CAAlC,CAAT;AAA8C,CAA1G;;AAClS0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bs3F,YAA5B,GAAyC,UAASltG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG3tE,CAAH,IAAMA,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqByC,SAAjD,GAA4D,KAAKm7B,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bd,OAAvD,CAA5D,EAA4H,KAAK68B,QAAL,CAAc3C,WAAd,CAA0BxpG,CAA1B,CAAtI;AAAoK,CAA3N;;AAA4N0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bq3F,YAA5B,GAAyC,UAASjtG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG3tE,CAAH,IAAMA,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqB4C,SAAjD,GAA4D,KAAKg7B,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAAvD,CAA5D,EAA4H,KAAK88B,QAAL,CAAchC,WAAd,CAA0BnqG,CAA1B,CAAtI;AAAoK,CAA3N;;AAC5N0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bw4F,kBAA5B,GAA+C,UAASpuG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAUA,CAAC,GAAC0uE,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBY,UAAlB,CAA6B9rG,CAA7B,CAAF,EAAkC,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAAvD,CAAlC,EAAkG,KAAK88B,QAAL,CAAc5C,iBAAd,CAAgCvpG,CAAC,CAACmrG,EAAlC,EAAqCnrG,CAAC,CAACorG,EAAvC,CAA5G;AAAwJ,CAArN;;AAAsN18B,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bu3F,aAA5B,GAA0C,UAASntG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB3tE,CAAC,IAAE,CAAC0uE,IAAI,CAACC,eAAL,CAAqBwC,SAAzB,IAAoCnxE,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqBwC,SAA/E,GAA0F,KAAKo7B,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bd,OAAvD,CAA1F,EAA0J,KAAK68B,QAAL,CAAc7B,UAAd,CAAyBtqG,CAAzB,CAApK;AAAiM,CAAzP;;AACtN0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bw3F,aAA5B,GAA0C,UAASptG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB3tE,CAAC,IAAE,CAAC0uE,IAAI,CAACC,eAAL,CAAqB2C,SAAzB,IAAoCtxE,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqB2C,SAA/E,GAA0F,KAAKi7B,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAAvD,CAA1F,EAA0J,KAAK88B,QAAL,CAAc5B,UAAd,CAAyBvqG,CAAzB,CAApK;AAAiM,CAAzP;;AAA0P0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4By4F,mBAA5B,GAAgD,UAASruG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAUA,CAAC,GAAC0uE,IAAI,CAACu8B,KAAL,CAAWc,KAAX,CAAiBD,UAAjB,CAA4B9rG,CAA5B,CAAF,EAAiC,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAAvD,CAAjC,EAAiG,KAAK88B,QAAL,CAAc5C,iBAAd,CAAgCvpG,CAAC,CAACmrG,EAAlC,EAAqCnrG,CAAC,CAACorG,EAAvC,CAA3G;AAAuJ,CAArN;;AAC1P18B,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B80F,UAA5B,GAAuC,UAAS1qG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bd,OAAvD,GAAgE,KAAK68B,QAAL,CAAc1B,UAAd,CAAyBzqG,CAAzB,CAA1E;AAAuG,CAA5J;;AAA6J0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B+0F,WAA5B,GAAwC,UAAS3qG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAAvD,GAAgE,KAAK88B,QAAL,CAAczB,WAAd,CAA0B1qG,CAA1B,CAA1E;AAAwG,CAA9J;;AAC7J0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bg1F,SAA5B,GAAsC,UAAS5qG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,cAAY,OAAO3tE,CAAnB,IAAsB,aAAW,OAAOA,CAA5D,GAA+D,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAvD,CAA/D,EAA8H,KAAK87B,QAAL,CAAcxB,SAAd,CAAwB3qG,CAAxB,CAAxI;AAAoK,CAAxN;;AAAyN0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bi1F,SAA5B,GAAsC,UAAS7qG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB3tE,CAAC,IAAE,CAAC0uE,IAAI,CAACC,eAAL,CAAqBwC,SAAzB,IAAoCnxE,CAAC,GAAC0uE,IAAI,CAACC,eAAL,CAAqBwC,SAA/E,GAA0F,KAAKo7B,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAvD,CAA1F,EAAyJ,KAAK87B,QAAL,CAAczC,mBAAd,CAAkC1pG,CAAlC,CAAnK;AAAyM,CAA7P;;AACzN0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bq1F,WAA5B,GAAwC,UAASjrG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAUD,CAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF,EAA0B,KAAKosG,QAAL,CAAcnB,WAAd,CAA0BhrG,CAA1B,CAA1B,EAAuD,KAAKwsG,aAAL,CAAmBzsG,CAAnB,CAAjE;AAAwF,CAA9I;;AAA+I2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bk1F,UAA5B,GAAuC,UAAS9qG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAUA,CAAC,GAAC0uE,IAAI,CAAC0wB,KAAL,CAAW0C,sBAAX,CAAkC9hG,CAAlC,CAAF,EAAuC,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAvD,CAAvC,EAAyG,KAAK67B,QAAL,CAAc1C,qBAAd,CAAoCzpG,CAAC,CAACL,MAAtC,CAAzG,EAAuJ,KAAK0sG,iBAAL,CAAuBrsG,CAAvB,CAAjK;AAA4L,CAAjP;;AAAkP0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B04F,YAA5B,GAAyC,UAAStuG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,UAAMjuB,CAAN,KAAUD,CAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF,EAA0BkuB,CAAC,CAACjuB,CAAD,EAAG,IAAH,CAA3B,EAAoC,KAAKwsG,aAAL,CAAmBzsG,CAAnB,CAA9C;AAAqE,CAA9H;;AACjY2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B24F,eAA5B,GAA4C,UAASvuG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,UAAMjuB,CAAN,KAAU,KAAKusG,iBAAL,CAAuB,CAAvB,EAAyB79B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BG,WAAvD,GAAoE,KAAKg8B,iBAAL,CAAuB,CAAvB,EAAyB79B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAvD,CAApE,EAAmI,KAAK87B,QAAL,CAAczC,mBAAd,CAAkC3pG,CAAlC,CAAnI,EAAwKA,CAAC,GAAC,KAAKusG,eAAL,CAAqB,CAArB,CAA1K,EAAkMr+E,CAAC,CAACjuB,CAAD,EAAG,IAAH,CAAnM,EAA4M,KAAKwsG,aAAL,CAAmBzsG,CAAnB,CAA5M,EAAkO,KAAKwsG,iBAAL,CAAuB,CAAvB,EAAyB79B,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BI,SAAvD,CAA5O;AAA+S,CAA3W;;AACA9B,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B44F,UAA5B,GAAuC,UAASxuG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,UAAMjuB,CAAN,KAAU,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BG,WAAvD,GAAoEtiD,CAAC,CAACjuB,CAAD,EAAG,IAAH,CAArE,EAA8E,KAAKusG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BI,SAAvD,CAAxF;AAA2J,CAAlN;;AAAmN9B,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bo1F,gBAA5B,GAA6C,UAAShrG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG3tE,CAAC,CAACL,MAAzB,GAAiC,KAAK4sG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAAvD,CAAjC,EAAiG,KAAK88B,QAAL,CAAcpB,gBAAd,CAA+B/qG,CAA/B,CAA3G;AAA8I,CAAzM;;AACnN0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bm1F,iBAA5B,GAA8C,UAAS/qG,CAAT,EAAWC,CAAX,EAAa;AAAC,UAAMA,CAAN,KAAU67D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAG3tE,CAAC,CAACL,MAAzB,GAAiC,KAAK4sG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAvD,CAAjC,EAAgG,KAAK87B,QAAL,CAAcrB,iBAAd,CAAgC9qG,CAAhC,CAA1G;AAA8I,CAA1M;;AAA2M0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B4zF,iBAA5B,GAA8C,UAASxpG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAKs+E,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8Bf,OAAvD;AAAgE,OAAK88B,QAAL,CAAc5C,iBAAd,CAAgCvpG,CAAhC,EAAkCiuB,CAAlC;AAAqC,CAAnK;;AAC3MygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B2zF,kBAA5B,GAA+C,UAASvpG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAKs+E,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAvD;AAA+D,OAAK87B,QAAL,CAAc7C,kBAAd,CAAiCtpG,CAAjC,EAAmCiuB,CAAnC;AAAsC,CAApK;;AAAqKygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B64F,wBAA5B,GAAqD,UAASzuG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAKs+E,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BC,MAAvD;AAA+D,MAAIxgC,CAAC,GAAC,KAAKs8D,QAAX;AAAoBz9B,MAAI,CAAC0wB,KAAL,CAAWa,UAAX,CAAsBjgG,CAAtB,EAAwBiuB,CAAxB,EAA0B,UAASluB,CAAT,EAAWC,CAAX,EAAa;AAAC6vC,KAAC,CAACy5D,kBAAF,CAAqBvpG,CAAC,KAAG,CAAzB,EAA2BC,CAAC,KAAG,CAA/B;AAAkC,GAA1E;AAA4E,CAApO;;AACrK0uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B84F,kBAA5B,GAA+C,UAAS1uG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKs/E,oBAAL,CAA0BxtG,CAA1B,EAA4BC,CAAC,CAACiuB,CAAD,CAA7B;AAAkC,CAArI;;AAAsIygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B+4F,wBAA5B,GAAqD,UAAS3uG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAK6/E,gBAAL,CAAsB/tG,CAAtB,EAAwBC,CAAC,CAACiuB,CAAD,CAAzB;AAA8B,CAAvI;;AAAwIygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bg5F,kBAA5B,GAA+C,UAAS5uG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKw/E,oBAAL,CAA0B1tG,CAA1B,EAA4BC,CAAC,CAACiuB,CAAD,CAA7B;AAAkC,CAArI;;AAC9QygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bi5F,yBAA5B,GAAsD,UAAS7uG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,MAAG,QAAM7vC,CAAT,EAAW,KAAI,IAAIijB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjjB,CAAC,CAACL,MAAhB,EAAuBsjB,CAAC,EAAxB,EAA2B,KAAKsmF,iBAAL,CAAuBxpG,CAAvB,EAAyBkuB,CAAC,CAACjuB,CAAC,CAACijB,CAAD,CAAF,CAA1B,EAAiC4sB,CAAC,CAAC7vC,CAAC,CAACijB,CAAD,CAAF,CAAlC;AAA0C,CAAxJ;;AAAyJyrD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bk5F,0BAA5B,GAAuD,UAAS9uG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,MAAG,QAAM7vC,CAAT,EAAW,KAAI,IAAIijB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjjB,CAAC,CAACL,MAAhB,EAAuBsjB,CAAC,EAAxB,EAA2B,KAAKqmF,kBAAL,CAAwBvpG,CAAxB,EAA0BkuB,CAAC,CAACjuB,CAAC,CAACijB,CAAD,CAAF,CAA3B,EAAkC4sB,CAAC,CAAC7vC,CAAC,CAACijB,CAAD,CAAF,CAAnC;AAA2C,CAA1J;;AAA2JyrD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bm5F,gCAA5B,GAA6D,UAAS/uG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,MAAG,QAAM7vC,CAAT,EAAW,KAAI,IAAIijB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjjB,CAAC,CAACL,MAAhB,EAAuBsjB,CAAC,EAAxB,EAA2B,KAAKurF,wBAAL,CAA8BzuG,CAA9B,EAAgCkuB,CAAC,CAACjuB,CAAC,CAACijB,CAAD,CAAF,CAAjC,EAAwC4sB,CAAC,CAAC7vC,CAAC,CAACijB,CAAD,CAAF,CAAzC;AAAiD,CAAtK;;AACpTyrD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bo5F,wBAA5B,GAAqD,UAAShvG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKu8E,gBAAL,CAAsBzqG,CAAtB,EAAwBC,CAAC,CAACiuB,CAAD,CAAzB;AAA8B,CAAvI;;AAAwIygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bq5F,mBAA5B,GAAgD,UAASjvG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKq/E,sBAAL,CAA4BvtG,CAA5B,EAA8BC,CAAC,CAACiuB,CAAD,CAA/B;AAAoC,CAAxI;;AAAyIygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bs5F,yBAA5B,GAAsD,UAASlvG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAK8/E,iBAAL,CAAuBhuG,CAAvB,EAAyBC,CAAC,CAACiuB,CAAD,CAA1B;AAA+B,CAAzI;;AACjRygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bu5F,mBAA5B,GAAgD,UAASnvG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKu/E,sBAAL,CAA4BztG,CAA5B,EAA8BC,CAAC,CAACiuB,CAAD,CAA/B;AAAoC,CAAxI;;AAAyIygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bw5F,yBAA5B,GAAsD,UAASpvG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAK+/E,iBAAL,CAAuBjuG,CAAvB,EAAyBC,CAAC,CAACiuB,CAAD,CAA1B;AAA+B,CAAzI;;AAA0IygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4By5F,mBAA5B,GAAgD,UAASrvG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKy/E,oBAAL,CAA0B3tG,CAA1B,EAA4BC,CAAC,CAACiuB,CAAD,CAA7B;AAAkC,CAAtI;;AACnRygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B05F,mBAA5B,GAAgD,UAAStvG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAK0/E,oBAAL,CAA0B5tG,CAA1B,EAA4BC,CAAC,CAACiuB,CAAD,CAA7B;AAAkC,CAAtI;;AAAuIygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B25F,yBAA5B,GAAsD,UAASvvG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAK2/E,0BAAL,CAAgC7tG,CAAhC,EAAkCC,CAAC,CAACiuB,CAAD,CAAnC;AAAwC,CAAlJ;;AAAmJygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B45F,uBAA5B,GAAoD,UAASxvG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAK4/E,wBAAL,CAA8B9tG,CAA9B,EAAgCC,CAAC,CAACiuB,CAAD,CAAjC;AAAsC,CAA9I;;AAC1RygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B65F,oBAA5B,GAAiD,UAASzvG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKg/E,YAAL,CAAkBltG,CAAlB,EAAoBC,CAAC,CAACiuB,CAAD,CAArB;AAA0B,CAA/H;;AAAgIygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B85F,oBAA5B,GAAiD,UAAS1vG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAK++E,YAAL,CAAkBjtG,CAAlB,EAAoBC,CAAC,CAACiuB,CAAD,CAArB;AAA0B,CAA/H;;AAAgIygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B+5F,0BAA5B,GAAuD,UAAS3vG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKkgF,kBAAL,CAAwBpuG,CAAxB,EAA0BC,CAAC,CAACiuB,CAAD,CAA3B;AAAgC,CAA3I;;AAChQygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bg6F,qBAA5B,GAAkD,UAAS5vG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKi/E,aAAL,CAAmBntG,CAAnB,EAAqBC,CAAC,CAACiuB,CAAD,CAAtB;AAA2B,CAAjI;;AAAkIygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bi6F,qBAA5B,GAAkD,UAAS7vG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKk/E,aAAL,CAAmBptG,CAAnB,EAAqBC,CAAC,CAACiuB,CAAD,CAAtB;AAA2B,CAAjI;;AAAkIygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bk6F,2BAA5B,GAAwD,UAAS9vG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKmgF,mBAAL,CAAyBruG,CAAzB,EAA2BC,CAAC,CAACiuB,CAAD,CAA5B;AAAiC,CAA7I;;AACpQygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bm6F,kBAA5B,GAA+C,UAAS/vG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKw8E,UAAL,CAAgB1qG,CAAhB,EAAkBC,CAAC,CAACiuB,CAAD,CAAnB;AAAwB,CAA3H;;AAA4HygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bo6F,mBAA5B,GAAgD,UAAShwG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKy8E,WAAL,CAAiB3qG,CAAjB,EAAmBC,CAAC,CAACiuB,CAAD,CAApB;AAAyB,CAA7H;;AAA8HygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bq6F,iBAA5B,GAA8C,UAASjwG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAK08E,SAAL,CAAe5qG,CAAf,EAAiBC,CAAC,CAACiuB,CAAD,CAAlB;AAAuB,CAAzH;;AAA0HygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bs6F,iBAA5B,GAA8C,UAASlwG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAK28E,SAAL,CAAe7qG,CAAf,EAAiBC,CAAC,CAACiuB,CAAD,CAAlB;AAAuB,CAAzH;;AACpXygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bu6F,mBAA5B,GAAgD,UAASnwG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAK+8E,WAAL,CAAiBjrG,CAAjB,EAAmBC,CAAC,CAACiuB,CAAD,CAApB;AAAyB,CAA7H;;AAA8HygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bw6F,kBAA5B,GAA+C,UAASpwG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAK48E,UAAL,CAAgB9qG,CAAhB,EAAkBC,CAAC,CAACiuB,CAAD,CAAnB;AAAwB,CAA3H;;AAA4HygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4By6F,oBAA5B,GAAiD,UAASrwG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAG,QAAMjuB,CAAT,EAAW,KAAI,IAAI6vC,CAAC,GAAC,CAAV,EAAYA,CAAC,GAAC7vC,CAAC,CAACL,MAAhB,EAAuBkwC,CAAC,EAAxB,EAA2B;AAAC,QAAI5sB,CAAC,GAAC,KAAKqpF,eAAL,CAAqBvsG,CAArB,CAAN;AAA8BkuB,KAAC,CAACjuB,CAAC,CAAC6vC,CAAD,CAAF,EAAM,IAAN,CAAD;AAAa,SAAK28D,aAAL,CAAmBvpF,CAAnB;AAAsB;AAAC,CAA1K;;AAC1PyrD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B06F,kBAA5B,GAA+C,UAAStwG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,MAAG,QAAMjuB,CAAT,EAAW,KAAI,IAAI6vC,CAAC,GAAC,CAAV,EAAYA,CAAC,GAAC7vC,CAAC,CAACL,MAAhB,EAAuBkwC,CAAC,EAAxB,EAA2B,KAAK08D,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BG,WAAvD,GAAoEtiD,CAAC,CAACjuB,CAAC,CAAC6vC,CAAD,CAAF,EAAM,IAAN,CAArE,EAAiF,KAAK08D,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BI,SAAvD,CAAjF;AAAmJ,CAAxP;;AAAyP9B,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B26F,wBAA5B,GAAqD,UAASvwG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAK88E,gBAAL,CAAsBhrG,CAAtB,EAAwBC,CAAC,CAACiuB,CAAD,CAAzB;AAA8B,CAAvI;;AACzPygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B46F,yBAA5B,GAAsD,UAASxwG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAT,EAAW,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAK68E,iBAAL,CAAuB/qG,CAAvB,EAAyBC,CAAC,CAACiuB,CAAD,CAA1B;AAA+B,CAAzI;;AAA0IygD,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B66F,gBAA5B,GAA6C,UAASzwG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB;AAACI,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKk+E,QAAL,CAAczC,mBAAd,CAAkC1pG,CAAC,CAACiuB,CAAD,CAAnC;;AAAwC,SAAKu+E,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAArM;;AAC1I2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B86F,sBAA5B,GAAmD,UAAS1wG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB;AAACI,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKk+E,QAAL,CAAczC,mBAAd,CAAkC3vF,QAAQ,CAAC/Z,CAAC,CAACiuB,CAAD,CAAF,EAAM,EAAN,CAA1C;;AAAqD,SAAKu+E,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAAxN;;AAAyN2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B+6F,gBAA5B,GAA6C,UAAS3wG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB;AAACI,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKk+E,QAAL,CAAcvC,mBAAd,CAAkC5pG,CAAC,CAACiuB,CAAD,CAAnC;;AAAwC,SAAKu+E,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAArM;;AACzN2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bg7F,uBAA5B,GAAoD,UAAS5wG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,MAAG,QAAM7vC,CAAT,EAAW;AAACD,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkjB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjjB,CAAC,CAACL,MAAhB,EAAuBsjB,CAAC,EAAxB,EAA2B,KAAKkpF,QAAL,CAAc5C,iBAAd,CAAgCt7E,CAAC,CAACjuB,CAAC,CAACijB,CAAD,CAAF,CAAjC,EAAwC4sB,CAAC,CAAC7vC,CAAC,CAACijB,CAAD,CAAF,CAAzC;;AAAiD,SAAKupF,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAA/M;;AAAgN2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bi7F,wBAA5B,GAAqD,UAAS7wG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,MAAG,QAAM7vC,CAAT,EAAW;AAACD,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkjB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjjB,CAAC,CAACL,MAAhB,EAAuBsjB,CAAC,EAAxB,EAA2B,KAAKkpF,QAAL,CAAc7C,kBAAd,CAAiCr7E,CAAC,CAACjuB,CAAC,CAACijB,CAAD,CAAF,CAAlC,EAAyC4sB,CAAC,CAAC7vC,CAAC,CAACijB,CAAD,CAAF,CAA1C;;AAAkD,SAAKupF,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAAjN;;AAChN2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bk7F,8BAA5B,GAA2D,UAAS9wG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,MAAG,QAAM7vC,CAAT,EAAW;AAACD,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkjB,CAAC,GAAC,KAAKkpF,QAAX,EAAoB3lE,CAAC,GAAC,CAA1B,EAA4BA,CAAC,GAACxmC,CAAC,CAACL,MAAhC,EAAuC6mC,CAAC,EAAxC,EAA2CkoC,IAAI,CAAC0wB,KAAL,CAAWa,UAAX,CAAsBhyE,CAAC,CAACjuB,CAAC,CAACwmC,CAAD,CAAF,CAAvB,EAA8BqJ,CAAC,CAAC7vC,CAAC,CAACwmC,CAAD,CAAF,CAA/B,EAAsC,UAASzmC,CAAT,EAAWC,CAAX,EAAa;AAACijB,OAAC,CAACqmF,kBAAF,CAAqBvpG,CAAC,KAAG,CAAzB,EAA2BC,CAAC,KAAG,CAA/B;AAAkC,KAAtF;;AAAwF,SAAKwsG,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAA7Q;;AAA8Q2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bm7F,sBAA5B,GAAmD,UAAS/wG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB;AAACI,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B;AAAC,UAAI4hB,CAAC,GAAC6+B,IAAI,CAACu8B,KAAL,CAAWc,KAAX,CAAiBD,UAAjB,CAA4B9rG,CAAC,CAACiuB,CAAD,CAA7B,CAAN;AAAwC,WAAKk+E,QAAL,CAAc7C,kBAAd,CAAiCz5D,CAAC,CAACs7D,EAAnC,EAAsCt7D,CAAC,CAACu7D,EAAxC;AAA4C;;AAAA,SAAKoB,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAAxP;;AAC9Q2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bo7F,iBAA5B,GAA8C,UAAShxG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB;AAACI,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKk+E,QAAL,CAAc1C,qBAAd,CAAoCzpG,CAAC,CAACiuB,CAAD,CAArC;;AAA0C,SAAKu+E,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAAxM;;AAAyM2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bq7F,uBAA5B,GAAoD,UAASjxG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB;AAACI,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKk+E,QAAL,CAAc1C,qBAAd,CAAoC1vF,QAAQ,CAAC/Z,CAAC,CAACiuB,CAAD,CAAF,EAAM,EAAN,CAA5C;;AAAuD,SAAKu+E,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAA3N;;AACzM2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bs7F,iBAA5B,GAA8C,UAASlxG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB;AAACI,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKk+E,QAAL,CAAcxC,qBAAd,CAAoC3pG,CAAC,CAACiuB,CAAD,CAArC;;AAA0C,SAAKu+E,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAAxM;;AAAyM2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bu7F,uBAA5B,GAAoD,UAASnxG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB;AAACI,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B;AAAC,UAAI4hB,CAAC,GAAC6+B,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBY,UAAlB,CAA6B9rG,CAAC,CAACiuB,CAAD,CAA9B,CAAN;AAAyC,WAAKk+E,QAAL,CAAc7C,kBAAd,CAAiCz5D,CAAC,CAACs7D,EAAnC,EAAsCt7D,CAAC,CAACu7D,EAAxC;AAA4C;;AAAA,SAAKoB,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAA1P;;AACzM2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bw7F,iBAA5B,GAA8C,UAASpxG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB;AAACI,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKk+E,QAAL,CAActC,mBAAd,CAAkC7pG,CAAC,CAACiuB,CAAD,CAAnC;;AAAwC,SAAKu+E,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAAtM;;AAAuM2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4By7F,iBAA5B,GAA8C,UAASrxG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB;AAACI,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKk+E,QAAL,CAAcrC,mBAAd,CAAkC9pG,CAAC,CAACiuB,CAAD,CAAnC;;AAAwC,SAAKu+E,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAAtM;;AACvM2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B07F,uBAA5B,GAAoD,UAAStxG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB;AAACI,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKk+E,QAAL,CAAcnC,uBAAd,CAAsCt7B,IAAI,CAAC0wB,KAAL,CAAW2B,qBAAX,CAAiC/gG,CAAC,CAACiuB,CAAD,CAAlC,CAAtC;;AAA8E,SAAKu+E,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAAlP;;AAAmP2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B27F,qBAA5B,GAAkD,UAASvxG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB;AAACI,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKk+E,QAAL,CAAcnC,uBAAd,CAAsChqG,CAAC,CAACiuB,CAAD,CAAvC;;AAA4C,SAAKu+E,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAA9M;;AACnP2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B47F,kBAA5B,GAA+C,UAASxxG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB,KAAI,KAAK4sG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAvD,GAAkE,KAAK67B,QAAL,CAAc1C,qBAAd,CAAoC,IAAEzpG,CAAC,CAACL,MAAxC,CAAlE,EAAkHI,CAAC,GAAC,CAAxH,EAA0HA,CAAC,GAACC,CAAC,CAACL,MAA9H,EAAqII,CAAC,EAAtI,EAAyI,KAAKosG,QAAL,CAAc3C,WAAd,CAA0BxpG,CAAC,CAACD,CAAD,CAA3B;AAAgC,CAA3P;;AAA4P2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B67F,kBAA5B,GAA+C,UAASzxG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB,KAAI,KAAK4sG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAvD,GAAkE,KAAK67B,QAAL,CAAc1C,qBAAd,CAAoC,IAAEzpG,CAAC,CAACL,MAAxC,CAAlE,EAAkHI,CAAC,GAAC,CAAxH,EAA0HA,CAAC,GAACC,CAAC,CAACL,MAA9H,EAAqII,CAAC,EAAtI,EAAyI,KAAKosG,QAAL,CAAchC,WAAd,CAA0BnqG,CAAC,CAACD,CAAD,CAA3B;AAAgC,CAA3P;;AAC5P2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B87F,wBAA5B,GAAqD,UAAS1xG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB,KAAI,KAAK4sG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAvD,GAAkE,KAAK67B,QAAL,CAAc1C,qBAAd,CAAoC,IAAEzpG,CAAC,CAACL,MAAxC,CAAlE,EAAkHI,CAAC,GAAC,CAAxH,EAA0HA,CAAC,GAACC,CAAC,CAACL,MAA9H,EAAqII,CAAC,EAAtI,EAAyI;AAAC,QAAIkuB,CAAC,GAACygD,IAAI,CAACu8B,KAAL,CAAWC,MAAX,CAAkBY,UAAlB,CAA6B9rG,CAAC,CAACD,CAAD,CAA9B,CAAN;AAAyC,SAAKosG,QAAL,CAAc5C,iBAAd,CAAgCt7E,CAAC,CAACk9E,EAAlC,EAAqCl9E,CAAC,CAACm9E,EAAvC;AAA2C;AAAC,CAAvT;;AACA18B,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4B+7F,mBAA5B,GAAgD,UAAS3xG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB,KAAI,KAAK4sG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAvD,GAAkE,KAAK67B,QAAL,CAAc1C,qBAAd,CAAoC,IAAEzpG,CAAC,CAACL,MAAxC,CAAlE,EAAkHI,CAAC,GAAC,CAAxH,EAA0HA,CAAC,GAACC,CAAC,CAACL,MAA9H,EAAqII,CAAC,EAAtI,EAAyI,KAAKosG,QAAL,CAAc7B,UAAd,CAAyBtqG,CAAC,CAACD,CAAD,CAA1B;AAA+B,CAA3P;;AAA4P2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bg8F,mBAA5B,GAAgD,UAAS5xG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB,KAAI,KAAK4sG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAvD,GAAkE,KAAK67B,QAAL,CAAc1C,qBAAd,CAAoC,IAAEzpG,CAAC,CAACL,MAAxC,CAAlE,EAAkHI,CAAC,GAAC,CAAxH,EAA0HA,CAAC,GAACC,CAAC,CAACL,MAA9H,EAAqII,CAAC,EAAtI,EAAyI,KAAKosG,QAAL,CAAc5B,UAAd,CAAyBvqG,CAAC,CAACD,CAAD,CAA1B;AAA+B,CAA3P;;AAC5P2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bi8F,yBAA5B,GAAsD,UAAS7xG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB,KAAI,KAAK4sG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAvD,GAAkE,KAAK67B,QAAL,CAAc1C,qBAAd,CAAoC,IAAEzpG,CAAC,CAACL,MAAxC,CAAlE,EAAkHI,CAAC,GAAC,CAAxH,EAA0HA,CAAC,GAACC,CAAC,CAACL,MAA9H,EAAqII,CAAC,EAAtI,EAAyI,KAAKosG,QAAL,CAAc3B,gBAAd,CAA+BxqG,CAAC,CAACD,CAAD,CAAhC;AAAqC,CAAvQ;;AAAwQ2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bk8F,gBAA5B,GAA6C,UAAS9xG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB,KAAI,KAAK4sG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAvD,GAAkE,KAAK67B,QAAL,CAAc1C,qBAAd,CAAoC,IAAEzpG,CAAC,CAACL,MAAxC,CAAlE,EAAkHI,CAAC,GAAC,CAAxH,EAA0HA,CAAC,GAACC,CAAC,CAACL,MAA9H,EAAqII,CAAC,EAAtI,EAAyI,KAAKosG,QAAL,CAAc1B,UAAd,CAAyBzqG,CAAC,CAACD,CAAD,CAA1B;AAA+B,CAAxP;;AACxQ2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bm8F,iBAA5B,GAA8C,UAAS/xG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB,KAAI,KAAK4sG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAvD,GAAkE,KAAK67B,QAAL,CAAc1C,qBAAd,CAAoC,IAAEzpG,CAAC,CAACL,MAAxC,CAAlE,EAAkHI,CAAC,GAAC,CAAxH,EAA0HA,CAAC,GAACC,CAAC,CAACL,MAA9H,EAAqII,CAAC,EAAtI,EAAyI,KAAKosG,QAAL,CAAczB,WAAd,CAA0B1qG,CAAC,CAACD,CAAD,CAA3B;AAAgC,CAA1P;;AAA2P2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bo8F,eAA5B,GAA4C,UAAShyG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB,KAAI,KAAK4sG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAvD,GAAkE,KAAK67B,QAAL,CAAc1C,qBAAd,CAAoCzpG,CAAC,CAACL,MAAtC,CAAlE,EAAgHI,CAAC,GAAC,CAAtH,EAAwHA,CAAC,GAACC,CAAC,CAACL,MAA5H,EAAmII,CAAC,EAApI,EAAuI,KAAKosG,QAAL,CAAcxB,SAAd,CAAwB3qG,CAAC,CAACD,CAAD,CAAzB;AAA8B,CAApP;;AAC3P2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bq8F,eAA5B,GAA4C,UAASjyG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB;AAACI,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKk+E,QAAL,CAAcvB,SAAd,CAAwB5qG,CAAC,CAACiuB,CAAD,CAAzB;;AAA8B,SAAKu+E,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAA1L;;AAA2L2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bs8F,sBAA5B,GAAmD,UAASlyG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB,KAAI,KAAK4sG,iBAAL,CAAuBxsG,CAAvB,EAAyB2uE,IAAI,CAACC,eAAL,CAAqByB,QAArB,CAA8BE,SAAvD,GAAkE,KAAK67B,QAAL,CAAc1C,qBAAd,CAAoC,IAAEzpG,CAAC,CAACL,MAAxC,CAAlE,EAAkHI,CAAC,GAAC,CAAxH,EAA0HA,CAAC,GAACC,CAAC,CAACL,MAA9H,EAAqII,CAAC,EAAtI,EAAyI,KAAKosG,QAAL,CAAcpB,gBAAd,CAA+B/qG,CAAC,CAACD,CAAD,CAAhC;AAAqC,CAApQ;;AAC3L2uE,IAAI,CAACs9B,YAAL,CAAkBr2F,SAAlB,CAA4Bu8F,uBAA5B,GAAoD,UAASnyG,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,CAACL,MAAd,EAAqB;AAACI,KAAC,GAAC,KAAKusG,eAAL,CAAqBvsG,CAArB,CAAF;;AAA0B,SAAI,IAAIkuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,KAAKk+E,QAAL,CAAcrB,iBAAd,CAAgC9qG,CAAC,CAACiuB,CAAD,CAAjC;;AAAsC,SAAKu+E,aAAL,CAAmBzsG,CAAnB;AAAsB;AAAC,CAA1M;;AAA2M2uE,IAAI,CAAClhE,GAAL,GAAS,UAASzN,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAKmyG,IAAL,GAAUpyG,CAAV;AAAY,OAAKqyG,UAAL,GAAgBpyG,CAAhB;AAAkB,OAAKqyG,IAAL,GAAU,EAAV;AAAa,OAAKC,QAAL,GAAc,CAAC,CAAf;AAAiB,MAAE,KAAKH,IAAL,CAAUxyG,MAAZ,IAAoB,KAAK4yG,cAAL,EAApB;AAA0C,CAA7H;;AAA8H7jC,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmB48F,cAAnB,GAAkC,YAAU;AAAC,OAAI,IAAIxyG,CAAC,GAAC,CAAV,EAAYA,CAAC,GAAC,KAAKoyG,IAAL,CAAUxyG,MAAxB,EAA+BI,CAAC,EAAhC,EAAmC;AAAC,QAAIC,CAAC,GAAC,KAAKmyG,IAAL,CAAUpyG,CAAV,CAAN;AAAA,QAAmBkuB,CAAC,GAACjuB,CAAC,CAAC,CAAD,CAAtB;AAA0B,SAAKqyG,IAAL,CAAUpkF,CAAC,CAAC1X,QAAF,EAAV,IAAwB,IAAIm4D,IAAI,CAAClhE,GAAL,CAASglG,MAAb,CAAoBvkF,CAApB,EAAsBjuB,CAAC,CAAC,CAAD,CAAvB,CAAxB;AAAoD;;AAAA,OAAKsyG,QAAL,GAAc,CAAC,CAAf;AAAiB,CAAhL;;AACzU5jC,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmBpY,OAAnB,GAA2B,YAAU;AAAC,MAAG,KAAK+0G,QAAR,EAAiB;AAAC,QAAG,KAAKF,UAAR,EAAmB;AAAC,UAAIryG,CAAC,GAAC,KAAKsyG,IAAX;AAAA,UAAgBryG,CAAhB;;AAAkB,WAAIA,CAAJ,IAASD,CAAT,EAAW,IAAGxD,MAAM,CAACoZ,SAAP,CAAiB0C,cAAjB,CAAgC7B,IAAhC,CAAqCzW,CAArC,EAAuCC,CAAvC,CAAH,EAA6C;AAAC,YAAIiuB,CAAC,GAACluB,CAAC,CAACC,CAAD,CAAD,CAAKyyG,YAAX;AAAwBxkF,SAAC,IAAEA,CAAC,CAAC1wB,OAAF,EAAH;AAAe;AAAC;AAAC,GAA1J,MAA8J;AAAC,SAAK40G,IAAL,CAAUxyG,MAAV,GAAiB,CAAjB;AAAmBI,KAAC,GAAC,KAAK2yG,WAAL,EAAF;AAAqB3yG,KAAC,CAACI,IAAF;;AAAS,SAAIH,CAAC,GAAC,CAAN,EAAQA,CAAC,GAACD,CAAC,CAACJ,MAAZ,EAAmBK,CAAC,EAApB,EAAuB;AAAC,UAAI6vC,CAAC,GAAC,KAAKwiE,IAAL,CAAUtyG,CAAC,CAACC,CAAD,CAAX,CAAN;AAAsB,OAACiuB,CAAC,GAAC4hB,CAAC,CAAC4iE,YAAL,KAAoBxkF,CAAC,CAAC1wB,OAAF,EAApB;AAAgC,WAAK40G,IAAL,CAAU3zG,IAAV,CAAe,CAACqxC,CAAC,CAACphC,GAAH,EAAOohC,CAAC,CAAC32C,KAAT,CAAf;AAAgC;;AAAA,SAAKo5G,QAAL,GAAc,CAAC,CAAf;AAAiB;;AAAA,SAAO,KAAKH,IAAZ;AAAiB,CAAtY;;AACAzjC,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmB29D,QAAnB,GAA4B,UAASvzE,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAI,IAAIiuB,CAAC,GAAC,KAAK1wB,OAAL,EAAN,EAAqBsyC,CAAC,GAAC,EAAvB,EAA0B5sB,CAAC,GAAC,CAAhC,EAAkCA,CAAC,GAACgL,CAAC,CAACtuB,MAAtC,EAA6CsjB,CAAC,EAA9C,EAAiD;AAAC,QAAIujB,CAAC,GAAC,KAAK6rE,IAAL,CAAUpkF,CAAC,CAAChL,CAAD,CAAD,CAAK,CAAL,EAAQ1M,QAAR,EAAV,CAAN;AAAoC,SAAKo8F,UAAL,CAAgBnsE,CAAhB;AAAmB,QAAIvL,CAAC,GAACuL,CAAC,CAACisE,YAAR;AAAqBx3E,KAAC,IAAE4gC,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB3tE,CAApB,GAAuB6vC,CAAC,CAACrxC,IAAF,CAAO,CAACgoC,CAAC,CAAC/3B,GAAH,EAAOzO,CAAC,CAACD,CAAD,EAAGk7B,CAAH,CAAR,CAAP,CAAzB,IAAiD4U,CAAC,CAACrxC,IAAF,CAAO,CAACgoC,CAAC,CAAC/3B,GAAH,EAAO+3B,CAAC,CAACttC,KAAT,CAAP,CAAlD;AAA0E;;AAAA,SAAO22C,CAAP;AAAS,CAA3P;;AAA4P6+B,IAAI,CAAClhE,GAAL,CAASolG,UAAT,GAAoB,UAAS7yG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACjuB,GAAC,GAAC,IAAI0uE,IAAI,CAAClhE,GAAT,CAAa,EAAb,EAAgBxN,CAAhB,CAAF;;AAAqB,OAAI,IAAI6vC,CAAC,GAAC,CAAV,EAAYA,CAAC,GAAC9vC,CAAC,CAACJ,MAAhB,EAAuBkwC,CAAC,EAAxB,EAA2B;AAAC,QAAI5sB,CAAC,GAACljB,CAAC,CAAC8vC,CAAD,CAAD,CAAK,CAAL,CAAN;AAAA,QAAcrJ,CAAC,GAACvY,CAAC,CAACluB,CAAC,CAAC8vC,CAAD,CAAD,CAAK,CAAL,CAAD,CAAjB;AAA2B7vC,KAAC,CAACb,GAAF,CAAM8jB,CAAN,EAAQujB,CAAR;AAAW;;AAAA,SAAOxmC,CAAP;AAAS,CAApI;;AAAqI0uE,IAAI,CAAClhE,GAAL,CAASqlG,sBAAT,GAAgC,UAAS9yG,CAAT,EAAW;AAAC,OAAK+yG,IAAL,GAAU,CAAV;AAAY,OAAKX,IAAL,GAAUpyG,CAAV;AAAY,CAApE;;AACjY2uE,IAAI,CAAClhE,GAAL,CAASqlG,sBAAT,CAAgCl9F,SAAhC,CAA0C1c,IAA1C,GAA+C,YAAU;AAAC,SAAO,KAAK65G,IAAL,GAAU,KAAKX,IAAL,CAAUxyG,MAApB,GAA2B;AAACF,QAAI,EAAC,CAAC,CAAP;AAASvG,SAAK,EAAC,KAAKi5G,IAAL,CAAU,KAAKW,IAAL,EAAV;AAAf,GAA3B,GAAkE;AAACrzG,QAAI,EAAC,CAAC,CAAP;AAASvG,SAAK,EAAC,KAAK;AAApB,GAAzE;AAAgG,CAA1J;;AAA2J,eAAa,OAAOmE,MAApB,KAA6BqxE,IAAI,CAAClhE,GAAL,CAASqlG,sBAAT,CAAgCl9F,SAAhC,CAA0CtY,MAAM,CAACvC,QAAjD,IAA2D,YAAU;AAAC,SAAO,IAAP;AAAY,CAA/G;;AAAiH4zE,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmBo9F,SAAnB,GAA6B,YAAU;AAAC,SAAO,KAAKL,WAAL,GAAmB/yG,MAA1B;AAAiC,CAAzE;;AAA0E+uE,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmBu1D,KAAnB,GAAyB,YAAU;AAAC,OAAKmnC,IAAL,GAAU,EAAV;AAAa,OAAKC,QAAL,GAAc,CAAC,CAAf;AAAiB,CAAlE;;AACtV5jC,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmBwxB,GAAnB,GAAuB,UAASpnC,CAAT,EAAW;AAACA,GAAC,GAACA,CAAC,CAACwW,QAAF,EAAF;AAAe,MAAIvW,CAAC,GAAC,KAAKqyG,IAAL,CAAUh6F,cAAV,CAAyBtY,CAAzB,CAAN;AAAkC,SAAO,KAAKsyG,IAAL,CAAUtyG,CAAV,CAAP;AAAoB,OAAKuyG,QAAL,GAAc,CAAC,CAAf;AAAiB,SAAOtyG,CAAP;AAAS,CAAlI;;AAAmI0uE,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmBq9F,YAAnB,GAAgC,YAAU;AAAC,MAAIjzG,CAAC,GAAC,EAAN;AAAA,MAASC,CAAC,GAAC,KAAK0yG,WAAL,EAAX;AAA8B1yG,GAAC,CAACG,IAAF;;AAAS,OAAI,IAAI8tB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B;AAAC,QAAI4hB,CAAC,GAAC,KAAKwiE,IAAL,CAAUryG,CAAC,CAACiuB,CAAD,CAAX,CAAN;AAAsBluB,KAAC,CAACvB,IAAF,CAAO,CAACqxC,CAAC,CAACphC,GAAH,EAAOohC,CAAC,CAAC32C,KAAT,CAAP;AAAwB;;AAAA,SAAO6G,CAAP;AAAS,CAArK;;AAAsK2uE,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmBwL,OAAnB,GAA2B,YAAU;AAAC,MAAIphB,CAAC,GAAC,EAAN;AAAA,MAASC,CAAC,GAAC,KAAK0yG,WAAL,EAAX;AAA8B1yG,GAAC,CAACG,IAAF;;AAAS,OAAI,IAAI8tB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B;AAAC,QAAI4hB,CAAC,GAAC,KAAKwiE,IAAL,CAAUryG,CAAC,CAACiuB,CAAD,CAAX,CAAN;AAAsBluB,KAAC,CAACvB,IAAF,CAAO,CAACqxC,CAAC,CAACphC,GAAH,EAAO,KAAKkkG,UAAL,CAAgB9iE,CAAhB,CAAP,CAAP;AAAmC;;AAAA,SAAO,IAAI6+B,IAAI,CAAClhE,GAAL,CAASqlG,sBAAb,CAAoC9yG,CAApC,CAAP;AAA8C,CAAhN;;AACzS2uE,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmBnH,IAAnB,GAAwB,YAAU;AAAC,MAAIzO,CAAC,GAAC,EAAN;AAAA,MAASC,CAAC,GAAC,KAAK0yG,WAAL,EAAX;AAA8B1yG,GAAC,CAACG,IAAF;;AAAS,OAAI,IAAI8tB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2BluB,CAAC,CAACvB,IAAF,CAAO,KAAK6zG,IAAL,CAAUryG,CAAC,CAACiuB,CAAD,CAAX,EAAgBxf,GAAvB;;AAA4B,SAAO,IAAIigE,IAAI,CAAClhE,GAAL,CAASqlG,sBAAb,CAAoC9yG,CAApC,CAAP;AAA8C,CAA/K;;AAAgL2uE,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmBlI,MAAnB,GAA0B,YAAU;AAAC,MAAI1N,CAAC,GAAC,EAAN;AAAA,MAASC,CAAC,GAAC,KAAK0yG,WAAL,EAAX;AAA8B1yG,GAAC,CAACG,IAAF;;AAAS,OAAI,IAAI8tB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2BluB,CAAC,CAACvB,IAAF,CAAO,KAAKm0G,UAAL,CAAgB,KAAKN,IAAL,CAAUryG,CAAC,CAACiuB,CAAD,CAAX,CAAhB,CAAP;;AAAyC,SAAO,IAAIygD,IAAI,CAAClhE,GAAL,CAASqlG,sBAAb,CAAoC9yG,CAApC,CAAP;AAA8C,CAA9L;;AAChL2uE,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmB9J,OAAnB,GAA2B,UAAS9L,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAAC,KAAKykF,WAAL,EAAN;AAAyBzkF,GAAC,CAAC9tB,IAAF;;AAAS,OAAI,IAAI0vC,CAAC,GAAC,CAAV,EAAYA,CAAC,GAAC5hB,CAAC,CAACtuB,MAAhB,EAAuBkwC,CAAC,EAAxB,EAA2B;AAAC,QAAI5sB,CAAC,GAAC,KAAKovF,IAAL,CAAUpkF,CAAC,CAAC4hB,CAAD,CAAX,CAAN;AAAsB9vC,KAAC,CAACyW,IAAF,CAAOxW,CAAP,EAAS,KAAK2yG,UAAL,CAAgB1vF,CAAhB,CAAT,EAA4BA,CAAC,CAACxU,GAA9B,EAAkC,IAAlC;AAAwC;AAAC,CAAtK;;AAAuKigE,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmBxW,GAAnB,GAAuB,UAASY,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAAC,IAAIygD,IAAI,CAAClhE,GAAL,CAASglG,MAAb,CAAoBzyG,CAApB,CAAN;AAA6B,OAAKqyG,UAAL,IAAiBnkF,CAAC,CAACwkF,YAAF,GAAezyG,CAAf,EAAiBiuB,CAAC,CAAC/0B,KAAF,GAAQ8G,CAAC,CAACzC,OAAF,EAA1C,IAAuD0wB,CAAC,CAAC/0B,KAAF,GAAQ8G,CAA/D;AAAiE,OAAKqyG,IAAL,CAAUtyG,CAAC,CAACwW,QAAF,EAAV,IAAwB0X,CAAxB;AAA0B,OAAKqkF,QAAL,GAAc,CAAC,CAAf;AAAiB,SAAO,IAAP;AAAY,CAA1L;;AAA2L5jC,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmBg9F,UAAnB,GAA8B,UAAS5yG,CAAT,EAAW;AAAC,SAAO,KAAKqyG,UAAL,IAAiBryG,CAAC,CAAC0yG,YAAF,KAAiB1yG,CAAC,CAAC0yG,YAAF,GAAe,IAAI,KAAKL,UAAT,CAAoBryG,CAAC,CAAC7G,KAAtB,CAAhC,GAA8D6G,CAAC,CAAC0yG,YAAjF,IAA+F1yG,CAAC,CAAC7G,KAAxG;AAA8G,CAAxJ;;AAClWw1E,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmB/Z,GAAnB,GAAuB,UAASmE,CAAT,EAAW;AAAC,MAAGA,CAAC,GAAC,KAAKsyG,IAAL,CAAUtyG,CAAC,CAACwW,QAAF,EAAV,CAAL,EAA6B,OAAO,KAAKo8F,UAAL,CAAgB5yG,CAAhB,CAAP;AAA0B,CAA1F;;AAA2F2uE,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmBhE,GAAnB,GAAuB,UAAS5R,CAAT,EAAW;AAAC,SAAOA,CAAC,CAACwW,QAAF,MAAe,KAAK87F,IAA3B;AAAgC,CAAnE;;AAAoE3jC,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmBs9F,eAAnB,GAAmC,UAASlzG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmB;AAAC,MAAIujB,CAAC,GAAC,KAAKksE,WAAL,EAAN;AAAyBlsE,GAAC,CAACrmC,IAAF;;AAAS,OAAI,IAAI86B,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACuL,CAAC,CAAC7mC,MAAhB,EAAuBs7B,CAAC,EAAxB,EAA2B;AAAC,QAAIyV,CAAC,GAAC,KAAK2hE,IAAL,CAAU7rE,CAAC,CAACvL,CAAD,CAAX,CAAN;AAAsBj7B,KAAC,CAAC6sG,eAAF,CAAkB9sG,CAAlB;AAAqBkuB,KAAC,CAACzX,IAAF,CAAOxW,CAAP,EAAS,CAAT,EAAW0wC,CAAC,CAACjiC,GAAb;AAAkB,SAAK2jG,UAAL,GAAgBviE,CAAC,CAACr5B,IAAF,CAAOxW,CAAP,EAAS,CAAT,EAAW,KAAK2yG,UAAL,CAAgBjiE,CAAhB,CAAX,EAA8BztB,CAA9B,CAAhB,GAAiD4sB,CAAC,CAACr5B,IAAF,CAAOxW,CAAP,EAAS,CAAT,EAAW0wC,CAAC,CAACx3C,KAAb,CAAjD;AAAqE8G,KAAC,CAAC8sG,aAAF;AAAkB;AAAC,CAA1Q;;AAC/Jp+B,IAAI,CAAClhE,GAAL,CAAS0lG,iBAAT,GAA2B,UAASnzG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmBujB,CAAnB,EAAqBvL,CAArB,EAAuB;AAAC,SAAKj7B,CAAC,CAACgmG,SAAF,MAAe,CAAChmG,CAAC,CAAC+lG,UAAF,EAArB,GAAqC;AAAC,QAAIr1D,CAAC,GAAC1wC,CAAC,CAAC4lG,cAAF,EAAN;AAAyB,SAAGl1D,CAAH,GAAKlK,CAAC,GAACvY,CAAC,CAACzX,IAAF,CAAOxW,CAAP,CAAP,GAAiB,KAAG0wC,CAAH,KAAO3wC,CAAC,CAACqyG,UAAF,IAAcv2C,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB1qD,CAApB,GAAuBgY,CAAC,KAAGA,CAAC,GAAC,IAAIl7B,CAAC,CAACqyG,UAAN,EAAL,CAAxB,EAA+CviE,CAAC,CAACr5B,IAAF,CAAOxW,CAAP,EAASi7B,CAAT,EAAWhY,CAAX,CAA7D,IAA4EgY,CAAC,GAAC4U,CAAC,CAACr5B,IAAF,CAAOxW,CAAP,CAArF,CAAjB;AAAiH;;AAAA67D,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK,CAAL,IAAQnnC,CAA5B;AAA+Bq1B,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK,CAAL,IAAQ1yC,CAA5B;AAA+Bl7B,GAAC,CAACZ,GAAF,CAAMqnC,CAAN,EAAQvL,CAAR;AAAW,CAA5S;;AAA6SyzC,IAAI,CAAClhE,GAAL,CAASmI,SAAT,CAAmB+8F,WAAnB,GAA+B,YAAU;AAAC,MAAI3yG,CAAC,GAAC,KAAKsyG,IAAX;AAAA,MAAgBryG,CAAC,GAAC,EAAlB;AAAA,MAAqBiuB,CAArB;;AAAuB,OAAIA,CAAJ,IAASluB,CAAT,EAAWxD,MAAM,CAACoZ,SAAP,CAAiB0C,cAAjB,CAAgC7B,IAAhC,CAAqCzW,CAArC,EAAuCkuB,CAAvC,KAA2CjuB,CAAC,CAACxB,IAAF,CAAOyvB,CAAP,CAA3C;;AAAqD,SAAOjuB,CAAP;AAAS,CAA1I;;AAC7S0uE,IAAI,CAAClhE,GAAL,CAASglG,MAAT,GAAgB,UAASzyG,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAKyO,GAAL,GAAS1O,CAAT;AAAW,OAAK7G,KAAL,GAAW8G,CAAX;AAAa,OAAKyyG,YAAL,GAAkB,KAAK,CAAvB;AAAyB,CAA/E;;AAAgF/jC,IAAI,CAACykC,kBAAL,GAAwB,UAASpzG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmB;AAAC,OAAKmwF,UAAL,GAAgBrzG,CAAhB;AAAkB,OAAKszG,SAAL,GAAerzG,CAAf;AAAiB,OAAKszG,IAAL,GAAUrlF,CAAV;AAAY,OAAKslF,UAAL,GAAgB1jE,CAAhB;AAAkB,OAAK2jE,UAAL,GAAgBvwF,CAAhB;AAAkB,CAA/H;;AAAgIyrD,IAAI,CAAC+kC,wBAAL,GAA8B,UAAS1zG,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmBujB,CAAnB,EAAqB;AAAC,OAAKktE,SAAL,GAAe3zG,CAAf;AAAiB,OAAK4zG,cAAL,GAAoB3zG,CAApB;AAAsB,OAAK4zG,cAAL,GAAoB3lF,CAApB;AAAsB,OAAK4lF,wBAAL,GAA8BhkE,CAA9B;AAAgC,OAAKikE,0BAAL,GAAgC7wF,CAAhC;AAAkC,OAAK8wF,QAAL,GAAcvtE,CAAd;AAAgB,CAAnM;;AAAoMkoC,IAAI,CAACykC,kBAAL,CAAwBx9F,SAAxB,CAAkCq+F,aAAlC,GAAgD,YAAU;AAAC,SAAM,CAAC,CAAC,KAAKV,IAAb;AAAkB,CAA7E;;AAA8E5kC,IAAI,CAACulC,OAAL,GAAa,YAAU,CAAE,CAAzB;;AAA0BvlC,IAAI,CAACulC,OAAL,CAAaC,kBAAb,GAAgC,CAAC,CAAjC;AAAmCxlC,IAAI,CAACulC,OAAL,CAAaE,oBAAb,GAAkC,CAACt4C,IAAI,CAACe,uBAAxC;AAC/hB8R,IAAI,CAACulC,OAAL,CAAaG,kBAAb,GAAgC,CAAC,CAAjC;AAAmC1lC,IAAI,CAACulC,OAAL,CAAaI,mBAAb,GAAiC,CAAC,CAAlC;AAAoC3lC,IAAI,CAACulC,OAAL,CAAaK,+BAAb,GAA6C,CAAC,CAA9C;AAAgD5lC,IAAI,CAACulC,OAAL,CAAaM,oBAAb,GAAkC,cAAY,OAAOz4F,UAArD;;AAAgE4yD,IAAI,CAACulC,OAAL,CAAat+F,SAAb,CAAuB6+F,gBAAvB,GAAwC,YAAU;AAAC,SAAO,KAAKC,UAAZ;AAAuB,CAA1E;;AAA2E/lC,IAAI,CAACulC,OAAL,CAAaS,SAAb,GAAuB,UAAS30G,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOA,CAAC,GAACD,CAAC,CAAC40G,iBAAX;AAA6B,CAAlE;;AAAmEjmC,IAAI,CAACulC,OAAL,CAAaW,kBAAb,GAAgC,YAAU,CAAE,CAA5C;;AAA6ClmC,IAAI,CAACulC,OAAL,CAAaY,eAAb,GAA6B,UAAS90G,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOA,CAAC,GAACD,CAAC,CAAC40G,iBAAX;AAA6B,CAAxE;;AAClXjmC,IAAI,CAACulC,OAAL,CAAaa,UAAb,GAAwB,UAAS/0G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmBujB,CAAnB,EAAqB;AAACzmC,GAAC,CAACg1G,SAAF,GAAY,IAAZ;AAAiB/0G,GAAC,KAAGA,CAAC,GAACiuB,CAAC,GAAC,CAACA,CAAD,CAAD,GAAK,EAAX,CAAD;AAAgBluB,GAAC,CAAC00G,UAAF,GAAaxmF,CAAC,GAACkP,MAAM,CAAClP,CAAD,CAAP,GAAW,KAAK,CAA9B;AAAgCluB,GAAC,CAAC40G,iBAAF,GAAoB,MAAI1mF,CAAJ,GAAM,CAAC,CAAP,GAAS,CAA7B;AAA+BluB,GAAC,CAAC+H,KAAF,GAAQ9H,CAAR;AAAU0uE,MAAI,CAACulC,OAAL,CAAae,4BAAb,CAA0Cj1G,CAA1C,EAA4C8vC,CAA5C;AAA+C9vC,GAAC,CAACk1G,yBAAF,GAA4B,EAA5B;AAA+BvmC,MAAI,CAACulC,OAAL,CAAaK,+BAAb,KAA+Cv0G,CAAC,CAACm1G,cAAF,GAAiBjyF,CAAhE;AAAmE,MAAGA,CAAH,EAAK,KAAIjjB,CAAC,GAAC,CAAN,EAAQA,CAAC,GAACijB,CAAC,CAACtjB,MAAZ,EAAmBK,CAAC,EAApB,EAAuBiuB,CAAC,GAAChL,CAAC,CAACjjB,CAAD,CAAH,EAAOiuB,CAAC,GAACluB,CAAC,CAACo1G,MAAJ,IAAYlnF,CAAC,GAACygD,IAAI,CAACulC,OAAL,CAAaS,SAAb,CAAuB30G,CAAvB,EAAyBkuB,CAAzB,CAAF,EAA8BluB,CAAC,CAAC+H,KAAF,CAAQmmB,CAAR,IAAWluB,CAAC,CAAC+H,KAAF,CAAQmmB,CAAR,KAAYygD,IAAI,CAACulC,OAAL,CAAamB,oBAA9E,KAAqG1mC,IAAI,CAACulC,OAAL,CAAaoB,8BAAb,CAA4Ct1G,CAA5C,GAA+CA,CAAC,CAACu1G,gBAAF,CAAmBrnF,CAAnB,IACheluB,CAAC,CAACu1G,gBAAF,CAAmBrnF,CAAnB,KAAuBygD,IAAI,CAACulC,OAAL,CAAamB,oBADwS,CAAP;AAC3Q,MAAG5uE,CAAC,IAAEA,CAAC,CAAC7mC,MAAR,EAAe,KAAIK,CAAC,GAAC,CAAN,EAAQA,CAAC,GAACwmC,CAAC,CAAC7mC,MAAZ,EAAmBK,CAAC,EAApB,EAAuB0uE,IAAI,CAACulC,OAAL,CAAasB,gBAAb,CAA8Bx1G,CAA9B,EAAgCymC,CAAC,CAACxmC,CAAD,CAAjC;AAAsC,CADtI;;AACuI0uE,IAAI,CAACulC,OAAL,CAAamB,oBAAb,GAAkCv5C,IAAI,CAACW,KAAL,IAAYjgE,MAAM,CAACsvE,MAAnB,GAA0BtvE,MAAM,CAACsvE,MAAP,CAAc,EAAd,CAA1B,GAA4C,EAA9E;;AAAiF6C,IAAI,CAACulC,OAAL,CAAauB,QAAb,GAAsB,UAASz1G,CAAT,EAAW;AAAC,SAAO2uE,IAAI,CAACulC,OAAL,CAAaI,mBAAb,GAAiCt0G,CAAC,YAAYtC,KAA9C,GAAoDA,KAAK,CAACwD,OAAN,CAAclB,CAAd,CAA3D;AAA4E,CAA9G;;AAA+G2uE,IAAI,CAACulC,OAAL,CAAawB,kBAAb,GAAgC,UAAS11G,CAAT,EAAW;AAAC,SAAO,SAAOA,CAAP,IAAU,YAAU,OAAOA,CAA3B,IAA8B,CAAC2uE,IAAI,CAACulC,OAAL,CAAauB,QAAb,CAAsBz1G,CAAtB,CAA/B,IAAyD,EAAE2uE,IAAI,CAACulC,OAAL,CAAaM,oBAAb,IAAmCx0G,CAAC,YAAY+b,UAAlD,CAAhE;AAA8H,CAA1K;;AACvU4yD,IAAI,CAACulC,OAAL,CAAae,4BAAb,GAA0C,UAASj1G,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAACluB,CAAC,CAAC+H,KAAF,CAAQnI,MAAd;AAAA,MAAqBkwC,CAAC,GAAC,CAAC,CAAxB;;AAA0B,MAAG5hB,CAAC,KAAG4hB,CAAC,GAAC5hB,CAAC,GAAC,CAAJ,EAAMA,CAAC,GAACluB,CAAC,CAAC+H,KAAF,CAAQ+nC,CAAR,CAAR,EAAmB6+B,IAAI,CAACulC,OAAL,CAAawB,kBAAb,CAAgCxnF,CAAhC,CAAtB,CAAJ,EAA8D;AAACluB,KAAC,CAACo1G,MAAF,GAASzmC,IAAI,CAACulC,OAAL,CAAaY,eAAb,CAA6B90G,CAA7B,EAA+B8vC,CAA/B,CAAT;AAA2C9vC,KAAC,CAACu1G,gBAAF,GAAmBrnF,CAAnB;AAAqB;AAAO;;AAAA,GAAC,CAAD,GAAGjuB,CAAH,IAAMD,CAAC,CAACo1G,MAAF,GAAS/sG,IAAI,CAACge,GAAL,CAASpmB,CAAT,EAAW0uE,IAAI,CAACulC,OAAL,CAAaY,eAAb,CAA6B90G,CAA7B,EAA+B8vC,CAAC,GAAC,CAAjC,CAAX,CAAT,EAAyD9vC,CAAC,CAACu1G,gBAAF,GAAmB,IAAlF,IAAwFv1G,CAAC,CAACo1G,MAAF,GAASj4G,MAAM,CAACw4G,SAAxG;AAAkH,CAA1U;;AAA2UhnC,IAAI,CAACulC,OAAL,CAAaoB,8BAAb,GAA4C,UAASt1G,CAAT,EAAW;AAAC,MAAIC,CAAC,GAAC0uE,IAAI,CAACulC,OAAL,CAAaS,SAAb,CAAuB30G,CAAvB,EAAyBA,CAAC,CAACo1G,MAA3B,CAAN;AAAyCp1G,GAAC,CAAC+H,KAAF,CAAQ9H,CAAR,MAAaD,CAAC,CAACu1G,gBAAF,GAAmBv1G,CAAC,CAAC+H,KAAF,CAAQ9H,CAAR,IAAW,EAA3C;AAA+C,CAAhJ;;AAC3U0uE,IAAI,CAACulC,OAAL,CAAa0B,YAAb,GAA0B,UAAS51G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,OAAI,IAAI4hB,CAAC,GAAC,EAAN,EAAS5sB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAACljB,CAAC,CAACJ,MAArB,EAA4BsjB,CAAC,EAA7B,EAAgC4sB,CAAC,CAAC5sB,CAAD,CAAD,GAAKjjB,CAAC,CAACwW,IAAF,CAAOzW,CAAC,CAACkjB,CAAD,CAAR,EAAYgL,CAAZ,EAAcluB,CAAC,CAACkjB,CAAD,CAAf,CAAL;;AAAyB,SAAO4sB,CAAP;AAAS,CAA5G;;AAA6G6+B,IAAI,CAACulC,OAAL,CAAa2B,iBAAb,GAA+B,UAAS71G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmB;AAAC,OAAI,IAAIujB,CAAR,IAAavY,CAAb,EAAe;AAAC,QAAIgN,CAAC,GAAChN,CAAC,CAACuY,CAAD,CAAP;AAAA,QAAWkK,CAAC,GAACb,CAAC,CAACr5B,IAAF,CAAOzW,CAAP,EAASk7B,CAAT,CAAb;;AAAyB,QAAG,QAAMyV,CAAT,EAAW;AAAC,WAAI,IAAI5iB,CAAR,IAAamN,CAAC,CAACo4E,SAAf,EAAyB,IAAGp4E,CAAC,CAACo4E,SAAF,CAAYh7F,cAAZ,CAA2ByV,CAA3B,CAAH,EAAiC;;AAAM9tB,OAAC,CAAC8tB,CAAD,CAAD,GAAKmN,CAAC,CAACs4E,UAAF,GAAat4E,CAAC,CAACu4E,UAAF,GAAa9kC,IAAI,CAACulC,OAAL,CAAa0B,YAAb,CAA0BjlE,CAA1B,EAA4BzV,CAAC,CAACs4E,UAA9B,EAAyCtwF,CAAzC,CAAb,GAAyDgY,CAAC,CAACs4E,UAAF,CAAatwF,CAAb,EAAeytB,CAAf,CAAtE,GAAwFA,CAA7F;AAA+F;AAAC;AAAC,CAAzQ;;AAC7Gg+B,IAAI,CAACulC,OAAL,CAAa4B,yBAAb,GAAuC,UAAS91G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,OAAI,IAAI5sB,CAAR,IAAagL,CAAb,EAAe;AAAC,QAAIuY,CAAC,GAACvY,CAAC,CAAChL,CAAD,CAAP;AAAA,QAAWgY,CAAC,GAACuL,CAAC,CAACktE,SAAf;AAAyB,QAAG,CAACltE,CAAC,CAACotE,cAAN,EAAqB,MAAMz1G,KAAK,CAAC,mFAAD,CAAX;AAAiG,QAAIuyC,CAAC,GAACb,CAAC,CAACr5B,IAAF,CAAOzW,CAAP,EAASk7B,CAAT,CAAN;AAAkB,QAAG,QAAMyV,CAAT,EAAW,IAAGzV,CAAC,CAAC+4E,aAAF,EAAH;AAAqB,UAAGxtE,CAAC,CAACqtE,wBAAL,EAA8BrtE,CAAC,CAACotE,cAAF,CAAiBp9F,IAAjB,CAAsBxW,CAAtB,EAAwBi7B,CAAC,CAACm4E,UAA1B,EAAqC1iE,CAArC,EAAuClK,CAAC,CAACqtE,wBAAzC,EAA9B,KAAsG,MAAM11G,KAAK,CAAC,+HAAD,CAAX;AAA3H,WAChPqoC,CAAC,CAACotE,cAAF,CAAiBp9F,IAAjB,CAAsBxW,CAAtB,EAAwBi7B,CAAC,CAACm4E,UAA1B,EAAqC1iE,CAArC;AAAwC;AAAC,CAD9C;;AAC+Cg+B,IAAI,CAACulC,OAAL,CAAa6B,mBAAb,GAAiC,UAAS/1G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmB;AAAC,MAAIujB,CAAC,GAACvY,CAAC,CAACjuB,CAAC,CAAC4lG,cAAF,EAAD,CAAP;;AAA4B,MAAGp/D,CAAH,EAAK;AAACvY,KAAC,GAACuY,CAAC,CAACktE,SAAJ;AAAc,QAAG,CAACltE,CAAC,CAACmtE,cAAN,EAAqB,MAAMx1G,KAAK,CAAC,6EAAD,CAAX;;AAA2F,QAAG8vB,CAAC,CAAC+lF,aAAF,EAAH,EAAqB;AAAC,UAAI/4E,CAAC,GAAC,IAAIhN,CAAC,CAACqlF,IAAN,EAAN;AAAiB9sE,OAAC,CAACmtE,cAAF,CAAiBn9F,IAAjB,CAAsBxW,CAAtB,EAAwBi7B,CAAxB,EAA0BuL,CAAC,CAACstE,0BAA5B;AAAwD,KAA/F,MAAoG74E,CAAC,GAACuL,CAAC,CAACmtE,cAAF,CAAiBn9F,IAAjB,CAAsBxW,CAAtB,CAAF;;AAA2BiuB,KAAC,CAACulF,UAAF,IAAc,CAAChtE,CAAC,CAACutE,QAAjB,GAA0B,CAAC/zG,CAAC,GAAC6vC,CAAC,CAACr5B,IAAF,CAAOzW,CAAP,EAASkuB,CAAT,CAAH,IAAgBjuB,CAAC,CAACxB,IAAF,CAAOy8B,CAAP,CAAhB,GAA0BhY,CAAC,CAACzM,IAAF,CAAOzW,CAAP,EAASkuB,CAAT,EAAW,CAACgN,CAAD,CAAX,CAApD,GAAoEhY,CAAC,CAACzM,IAAF,CAAOzW,CAAP,EAASkuB,CAAT,EAAWgN,CAAX,CAApE;AAAkF,GAArV,MAA0Vj7B,CAAC,CAACmmG,SAAF;AAAc,CAAzb;;AAC/Cz3B,IAAI,CAACulC,OAAL,CAAa8B,QAAb,GAAsB,UAASh2G,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAGA,CAAC,GAACD,CAAC,CAACo1G,MAAP,EAAc;AAACn1G,KAAC,GAAC0uE,IAAI,CAACulC,OAAL,CAAaS,SAAb,CAAuB30G,CAAvB,EAAyBC,CAAzB,CAAF;AAA8B,QAAIiuB,CAAC,GAACluB,CAAC,CAAC+H,KAAF,CAAQ9H,CAAR,CAAN;AAAiB,WAAOiuB,CAAC,KAAGygD,IAAI,CAACulC,OAAL,CAAamB,oBAAjB,GAAsCr1G,CAAC,CAAC+H,KAAF,CAAQ9H,CAAR,IAAW,EAAjD,GAAoDiuB,CAA3D;AAA6D;;AAAA,MAAGluB,CAAC,CAACu1G,gBAAL,EAAsB,OAAOrnF,CAAC,GAACluB,CAAC,CAACu1G,gBAAF,CAAmBt1G,CAAnB,CAAF,EAAwBiuB,CAAC,KAAGygD,IAAI,CAACulC,OAAL,CAAamB,oBAAjB,GAAsCr1G,CAAC,CAACu1G,gBAAF,CAAmBt1G,CAAnB,IAAsB,EAA5D,GAA+DiuB,CAA9F;AAAgG,CAArR;;AAAsRygD,IAAI,CAACulC,OAAL,CAAa+B,gBAAb,GAA8B,UAASj2G,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAO0uE,IAAI,CAACulC,OAAL,CAAa8B,QAAb,CAAsBh2G,CAAtB,EAAwBC,CAAxB,CAAP;AAAkC,CAA9E;;AAA+E0uE,IAAI,CAACulC,OAAL,CAAagC,6BAAb,GAA2C,UAASl2G,CAAT,EAAWC,CAAX,EAAa;AAACD,GAAC,GAAC2uE,IAAI,CAACulC,OAAL,CAAa8B,QAAb,CAAsBh2G,CAAtB,EAAwBC,CAAxB,CAAF;AAA6B,SAAO,QAAMD,CAAN,GAAQA,CAAR,GAAU,CAACA,CAAlB;AAAoB,CAA1G;;AACrW2uE,IAAI,CAACulC,OAAL,CAAaiC,eAAb,GAA6B,UAASn2G,CAAT,EAAWC,CAAX,EAAa;AAACD,GAAC,GAAC2uE,IAAI,CAACulC,OAAL,CAAa8B,QAAb,CAAsBh2G,CAAtB,EAAwBC,CAAxB,CAAF;AAA6B,SAAO,QAAMD,CAAN,GAAQA,CAAR,GAAU,CAAC,CAACA,CAAnB;AAAqB,CAA7F;;AAA8F2uE,IAAI,CAACulC,OAAL,CAAakC,6BAAb,GAA2C,UAASp2G,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAACygD,IAAI,CAACulC,OAAL,CAAa+B,gBAAb,CAA8Bj2G,CAA9B,EAAgCC,CAAhC,CAAN;AAAyCD,GAAC,CAACk1G,yBAAF,KAA8Bl1G,CAAC,CAACk1G,yBAAF,GAA4B,EAA1D;;AAA8D,MAAG,CAACl1G,CAAC,CAACk1G,yBAAF,CAA4Bj1G,CAA5B,CAAJ,EAAmC;AAAC,SAAI,IAAI6vC,CAAC,GAAC,CAAV,EAAYA,CAAC,GAAC5hB,CAAC,CAACtuB,MAAhB,EAAuBkwC,CAAC,EAAxB,EAA2B5hB,CAAC,CAAC4hB,CAAD,CAAD,GAAK,CAAC5hB,CAAC,CAAC4hB,CAAD,CAAP;;AAAW9vC,KAAC,CAACk1G,yBAAF,CAA4Bj1G,CAA5B,IAA+B,CAAC,CAAhC;AAAkC;;AAAA,SAAOiuB,CAAP;AAAS,CAArR;;AAC9FygD,IAAI,CAACulC,OAAL,CAAamC,uBAAb,GAAqC,UAASr2G,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAIiuB,CAAC,GAACygD,IAAI,CAACulC,OAAL,CAAa+B,gBAAb,CAA8Bj2G,CAA9B,EAAgCC,CAAhC,CAAN;AAAyCD,GAAC,CAACk1G,yBAAF,KAA8Bl1G,CAAC,CAACk1G,yBAAF,GAA4B,EAA1D;;AAA8D,MAAG,CAACl1G,CAAC,CAACk1G,yBAAF,CAA4Bj1G,CAA5B,CAAJ,EAAmC;AAAC,SAAI,IAAI6vC,CAAC,GAAC,CAAV,EAAYA,CAAC,GAAC5hB,CAAC,CAACtuB,MAAhB,EAAuBkwC,CAAC,EAAxB,EAA2B5hB,CAAC,CAAC4hB,CAAD,CAAD,GAAK,CAAC,CAAC5hB,CAAC,CAAC4hB,CAAD,CAAR;;AAAY9vC,KAAC,CAACk1G,yBAAF,CAA4Bj1G,CAA5B,IAA+B,CAAC,CAAhC;AAAkC;;AAAA,SAAOiuB,CAAP;AAAS,CAAhR;;AACAygD,IAAI,CAACulC,OAAL,CAAaoC,UAAb,GAAwB,UAASt2G,CAAT,EAAW;AAAC,MAAG,QAAMA,CAAN,IAAS,aAAW,OAAOA,CAA9B,EAAgC,OAAOA,CAAP;AAAS,MAAG2uE,IAAI,CAACulC,OAAL,CAAaM,oBAAb,IAAmCx0G,CAAC,YAAY+b,UAAnD,EAA8D,OAAO+/C,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkB0gE,eAAlB,CAAkC7+F,CAAlC,CAAP;AAA4C87D,MAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,kCAAgChS,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAAlD;AAAkE,SAAO,IAAP;AAAY,CAArQ;;AAAsQ2uE,IAAI,CAACulC,OAAL,CAAaqC,SAAb,GAAuB,UAASv2G,CAAT,EAAW;AAAC,MAAG,QAAMA,CAAN,IAASA,CAAC,YAAY+b,UAAzB,EAAoC,OAAO/b,CAAP;AAAS,MAAG,aAAW,OAAOA,CAArB,EAAuB,OAAO87D,IAAI,CAACv+B,KAAL,CAAWY,MAAX,CAAkBghE,wBAAlB,CAA2Cn/F,CAA3C,CAAP;AAAqD87D,MAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,kCAAgChS,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAAlD;AAAkE,SAAO,IAAP;AAAY,CAA1O;;AACtQ2uE,IAAI,CAACulC,OAAL,CAAasC,cAAb,GAA4B,UAASx2G,CAAT,EAAW;AAAC2uE,MAAI,CAACulC,OAAL,CAAauC,sBAAb,CAAoCz2G,CAApC;AAAuC,SAAOA,CAAC,CAACJ,MAAF,IAAU,aAAW,OAAOI,CAAC,CAAC,CAAD,CAA7B,GAAiC87D,IAAI,CAAC/zD,KAAL,CAAWpL,GAAX,CAAeqD,CAAf,EAAiB2uE,IAAI,CAACulC,OAAL,CAAaoC,UAA9B,CAAjC,GAA2Et2G,CAAlF;AAAoF,CAAnK;;AAAoK2uE,IAAI,CAACulC,OAAL,CAAawC,aAAb,GAA2B,UAAS12G,CAAT,EAAW;AAAC2uE,MAAI,CAACulC,OAAL,CAAauC,sBAAb,CAAoCz2G,CAApC;AAAuC,SAAM,CAACA,CAAC,CAACJ,MAAH,IAAWI,CAAC,CAAC,CAAD,CAAD,YAAe+b,UAA1B,GAAqC/b,CAArC,GAAuC87D,IAAI,CAAC/zD,KAAL,CAAWpL,GAAX,CAAeqD,CAAf,EAAiB2uE,IAAI,CAACulC,OAAL,CAAaqC,SAA9B,CAA7C;AAAsF,CAApK;;AACpK5nC,IAAI,CAACulC,OAAL,CAAauC,sBAAb,GAAoC,UAASz2G,CAAT,EAAW;AAAC,MAAG87D,IAAI,CAACW,KAAL,IAAYz8D,CAAZ,IAAe,IAAEA,CAAC,CAACJ,MAAtB,EAA6B;AAAC,QAAIK,CAAC,GAAC67D,IAAI,CAACwF,MAAL,CAAYthE,CAAC,CAAC,CAAD,CAAb,CAAN;AAAwB87D,QAAI,CAAC/zD,KAAL,CAAW+D,OAAX,CAAmB9L,CAAnB,EAAqB,UAASA,CAAT,EAAW;AAAC87D,UAAI,CAACwF,MAAL,CAAYthE,CAAZ,KAAgBC,CAAhB,IAAmB67D,IAAI,CAACqR,OAAL,CAAaW,IAAb,CAAkB,yDAAuDhS,IAAI,CAACwF,MAAL,CAAYthE,CAAZ,CAAvD,GAAsE,YAAtE,GAAmFC,CAArG,CAAnB;AAA2H,KAA5J;AAA8J;AAAC,CAArQ;;AAAsQ0uE,IAAI,CAACulC,OAAL,CAAayC,mBAAb,GAAiC,UAAS32G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACluB,GAAC,GAAC2uE,IAAI,CAACulC,OAAL,CAAa8B,QAAb,CAAsBh2G,CAAtB,EAAwBC,CAAxB,CAAF;AAA6B,SAAO,QAAMD,CAAN,GAAQkuB,CAAR,GAAUluB,CAAjB;AAAmB,CAAjG;;AAAkG2uE,IAAI,CAACulC,OAAL,CAAa0C,0BAAb,GAAwC,UAAS52G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACluB,GAAC,GAAC2uE,IAAI,CAACulC,OAAL,CAAaiC,eAAb,CAA6Bn2G,CAA7B,EAA+BC,CAA/B,CAAF;AAAoC,SAAO,QAAMD,CAAN,GAAQkuB,CAAR,GAAUluB,CAAjB;AAAmB,CAA/G;;AACxW2uE,IAAI,CAACulC,OAAL,CAAa2C,gCAAb,GAA8C,UAAS72G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACluB,GAAC,GAAC2uE,IAAI,CAACulC,OAAL,CAAagC,6BAAb,CAA2Cl2G,CAA3C,EAA6CC,CAA7C,CAAF;AAAkD,SAAO,QAAMD,CAAN,GAAQkuB,CAAR,GAAUluB,CAAjB;AAAmB,CAAnI;;AAAoI2uE,IAAI,CAACulC,OAAL,CAAa4C,cAAb,GAA4BnoC,IAAI,CAACulC,OAAL,CAAayC,mBAAzC;;AAA6DhoC,IAAI,CAACulC,OAAL,CAAa6C,WAAb,GAAyB,UAAS/2G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC9vC,GAAC,CAACg1G,SAAF,KAAch1G,CAAC,CAACg1G,SAAF,GAAY,EAA1B;AAA8B,MAAG/0G,CAAC,IAAID,CAAC,CAACg1G,SAAV,EAAoB,OAAOh1G,CAAC,CAACg1G,SAAF,CAAY/0G,CAAZ,CAAP;AAAsB,MAAIijB,CAAC,GAACyrD,IAAI,CAACulC,OAAL,CAAa8B,QAAb,CAAsBh2G,CAAtB,EAAwBC,CAAxB,CAAN;;AAAiC,MAAG,CAACijB,CAAJ,EAAM;AAAC,QAAGgL,CAAH,EAAK;AAAOhL,KAAC,GAAC,EAAF;AAAKyrD,QAAI,CAACulC,OAAL,CAAa8C,QAAb,CAAsBh3G,CAAtB,EAAwBC,CAAxB,EAA0BijB,CAA1B;AAA6B;;AAAA,SAAOljB,CAAC,CAACg1G,SAAF,CAAY/0G,CAAZ,IAAe,IAAI0uE,IAAI,CAAClhE,GAAT,CAAayV,CAAb,EAAe4sB,CAAf,CAAtB;AAAwC,CAAjP;;AACjM6+B,IAAI,CAACulC,OAAL,CAAa8C,QAAb,GAAsB,UAASh3G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAamB,gBAAb,CAA8BtuE,CAA9B,EAAgC2uE,IAAI,CAACulC,OAArC;AAA8Cj0G,GAAC,GAACD,CAAC,CAACo1G,MAAJ,GAAWp1G,CAAC,CAAC+H,KAAF,CAAQ4mE,IAAI,CAACulC,OAAL,CAAaS,SAAb,CAAuB30G,CAAvB,EAAyBC,CAAzB,CAAR,IAAqCiuB,CAAhD,IAAmDygD,IAAI,CAACulC,OAAL,CAAaoB,8BAAb,CAA4Ct1G,CAA5C,GAA+CA,CAAC,CAACu1G,gBAAF,CAAmBt1G,CAAnB,IAAsBiuB,CAAxH;AAA2H,SAAOluB,CAAP;AAAS,CAAxN;;AAAyN2uE,IAAI,CAACulC,OAAL,CAAa+C,iBAAb,GAA+B,UAASj3G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,SAAOygD,IAAI,CAACulC,OAAL,CAAagD,wBAAb,CAAsCl3G,CAAtC,EAAwCC,CAAxC,EAA0CiuB,CAA1C,EAA4C,CAA5C,CAAP;AAAsD,CAArG;;AAAsGygD,IAAI,CAACulC,OAAL,CAAaiD,mBAAb,GAAiC,UAASn3G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,SAAOygD,IAAI,CAACulC,OAAL,CAAagD,wBAAb,CAAsCl3G,CAAtC,EAAwCC,CAAxC,EAA0CiuB,CAA1C,EAA4C,CAA5C,CAAP;AAAsD,CAAvG;;AAC/TygD,IAAI,CAACulC,OAAL,CAAakD,qBAAb,GAAmC,UAASp3G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,SAAOygD,IAAI,CAACulC,OAAL,CAAagD,wBAAb,CAAsCl3G,CAAtC,EAAwCC,CAAxC,EAA0CiuB,CAA1C,EAA4C,CAAC,CAA7C,CAAP;AAAuD,CAA1G;;AAA2GygD,IAAI,CAACulC,OAAL,CAAamD,oBAAb,GAAkC,UAASr3G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,SAAOygD,IAAI,CAACulC,OAAL,CAAagD,wBAAb,CAAsCl3G,CAAtC,EAAwCC,CAAxC,EAA0CiuB,CAA1C,EAA4C,EAA5C,CAAP;AAAuD,CAAzG;;AAA0GygD,IAAI,CAACulC,OAAL,CAAaoD,mBAAb,GAAiC,UAASt3G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,SAAOygD,IAAI,CAACulC,OAAL,CAAagD,wBAAb,CAAsCl3G,CAAtC,EAAwCC,CAAxC,EAA0CiuB,CAA1C,EAA4C,EAA5C,CAAP;AAAuD,CAAxG;;AAAyGygD,IAAI,CAACulC,OAAL,CAAaqD,kBAAb,GAAgC,UAASv3G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,SAAOygD,IAAI,CAACulC,OAAL,CAAagD,wBAAb,CAAsCl3G,CAAtC,EAAwCC,CAAxC,EAA0CiuB,CAA1C,EAA4C,CAA5C,CAAP;AAAsD,CAAtG;;AAC9TygD,IAAI,CAACulC,OAAL,CAAasD,uBAAb,GAAqC,UAASx3G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC,SAAOygD,IAAI,CAACulC,OAAL,CAAagD,wBAAb,CAAsCl3G,CAAtC,EAAwCC,CAAxC,EAA0CiuB,CAA1C,EAA4C,GAA5C,CAAP;AAAwD,CAA7G;;AAA8GygD,IAAI,CAACulC,OAAL,CAAagD,wBAAb,GAAsC,UAASl3G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAACgsB,MAAI,CAACqR,OAAL,CAAamB,gBAAb,CAA8BtuE,CAA9B,EAAgC2uE,IAAI,CAACulC,OAArC;AAA8ChmF,GAAC,KAAG4hB,CAAJ,GAAM6+B,IAAI,CAACulC,OAAL,CAAa8C,QAAb,CAAsBh3G,CAAtB,EAAwBC,CAAxB,EAA0BiuB,CAA1B,CAAN,GAAmCjuB,CAAC,GAACD,CAAC,CAACo1G,MAAJ,GAAWp1G,CAAC,CAAC+H,KAAF,CAAQ4mE,IAAI,CAACulC,OAAL,CAAaS,SAAb,CAAuB30G,CAAvB,EAAyBC,CAAzB,CAAR,IAAqC,IAAhD,IAAsD0uE,IAAI,CAACulC,OAAL,CAAaoB,8BAAb,CAA4Ct1G,CAA5C,GAA+C,OAAOA,CAAC,CAACu1G,gBAAF,CAAmBt1G,CAAnB,CAA5G,CAAnC;AAAsK,SAAOD,CAAP;AAAS,CAArR;;AAC9G2uE,IAAI,CAACulC,OAAL,CAAauD,kBAAb,GAAgC,UAASz3G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAACgsB,MAAI,CAACqR,OAAL,CAAamB,gBAAb,CAA8BtuE,CAA9B,EAAgC2uE,IAAI,CAACulC,OAArC;AAA8Cj0G,GAAC,GAAC0uE,IAAI,CAACulC,OAAL,CAAa+B,gBAAb,CAA8Bj2G,CAA9B,EAAgCC,CAAhC,CAAF;AAAqC,OAAK,CAAL,IAAQ6vC,CAAR,GAAU7vC,CAAC,CAAC8B,MAAF,CAAS+tC,CAAT,EAAW,CAAX,EAAa5hB,CAAb,CAAV,GAA0BjuB,CAAC,CAACxB,IAAF,CAAOyvB,CAAP,CAA1B;AAAoC,SAAOluB,CAAP;AAAS,CAAlL;;AAAmL2uE,IAAI,CAACulC,OAAL,CAAawD,aAAb,GAA2B,UAAS13G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAACgsB,MAAI,CAACqR,OAAL,CAAamB,gBAAb,CAA8BtuE,CAA9B,EAAgC2uE,IAAI,CAACulC,OAArC;AAA8C,GAAChmF,CAAC,GAACygD,IAAI,CAACulC,OAAL,CAAasB,gBAAb,CAA8Bx1G,CAA9B,EAAgCkuB,CAAhC,CAAH,KAAwCA,CAAC,KAAGjuB,CAA5C,IAA+C,KAAK,CAAL,KAAS6vC,CAAxD,KAA4D9vC,CAAC,CAACg1G,SAAF,IAAa9mF,CAAC,IAAIluB,CAAC,CAACg1G,SAApB,KAAgCh1G,CAAC,CAACg1G,SAAF,CAAY9mF,CAAZ,IAAe,KAAK,CAApD,GAAuDygD,IAAI,CAACulC,OAAL,CAAa8C,QAAb,CAAsBh3G,CAAtB,EAAwBkuB,CAAxB,EAA0B,KAAK,CAA/B,CAAnH;AAAsJ,SAAOygD,IAAI,CAACulC,OAAL,CAAa8C,QAAb,CAAsBh3G,CAAtB,EAAwBC,CAAxB,EAA0B6vC,CAA1B,CAAP;AAAoC,CAArR;;AACnL6+B,IAAI,CAACulC,OAAL,CAAasB,gBAAb,GAA8B,UAASx1G,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAI,IAAIiuB,CAAJ,EAAM4hB,CAAN,EAAQ5sB,CAAC,GAAC,CAAd,EAAgBA,CAAC,GAACjjB,CAAC,CAACL,MAApB,EAA2BsjB,CAAC,EAA5B,EAA+B;AAAC,QAAIujB,CAAC,GAACxmC,CAAC,CAACijB,CAAD,CAAP;AAAA,QAAWgY,CAAC,GAACyzC,IAAI,CAACulC,OAAL,CAAa8B,QAAb,CAAsBh2G,CAAtB,EAAwBymC,CAAxB,CAAb;AAAwC,YAAMvL,CAAN,KAAUhN,CAAC,GAACuY,CAAF,EAAIqJ,CAAC,GAAC5U,CAAN,EAAQyzC,IAAI,CAACulC,OAAL,CAAa8C,QAAb,CAAsBh3G,CAAtB,EAAwBymC,CAAxB,EAA0B,KAAK,CAA/B,CAAlB;AAAqD;;AAAA,SAAOvY,CAAC,IAAEygD,IAAI,CAACulC,OAAL,CAAa8C,QAAb,CAAsBh3G,CAAtB,EAAwBkuB,CAAxB,EAA0B4hB,CAA1B,GAA6B5hB,CAA/B,IAAkC,CAA1C;AAA4C,CAArN;;AAAsNygD,IAAI,CAACulC,OAAL,CAAayD,eAAb,GAA6B,UAAS33G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC9vC,GAAC,CAACg1G,SAAF,KAAch1G,CAAC,CAACg1G,SAAF,GAAY,EAA1B;;AAA8B,MAAG,CAACh1G,CAAC,CAACg1G,SAAF,CAAY9mF,CAAZ,CAAJ,EAAmB;AAAC,QAAIhL,CAAC,GAACyrD,IAAI,CAACulC,OAAL,CAAa8B,QAAb,CAAsBh2G,CAAtB,EAAwBkuB,CAAxB,CAAN;AAAiC,QAAG4hB,CAAC,IAAE5sB,CAAN,EAAQljB,CAAC,CAACg1G,SAAF,CAAY9mF,CAAZ,IAAe,IAAIjuB,CAAJ,CAAMijB,CAAN,CAAf;AAAwB;;AAAA,SAAOljB,CAAC,CAACg1G,SAAF,CAAY9mF,CAAZ,CAAP;AAAsB,CAAxL;;AACtNygD,IAAI,CAACulC,OAAL,CAAa0D,uBAAb,GAAqC,UAAS53G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACygD,MAAI,CAACulC,OAAL,CAAa2D,kBAAb,CAAgC73G,CAAhC,EAAkCC,CAAlC,EAAoCiuB,CAApC;AAAuCjuB,GAAC,GAACD,CAAC,CAACg1G,SAAF,CAAY9mF,CAAZ,CAAF;AAAiBjuB,GAAC,IAAE0uE,IAAI,CAACulC,OAAL,CAAamB,oBAAhB,KAAuCp1G,CAAC,GAACD,CAAC,CAACg1G,SAAF,CAAY9mF,CAAZ,IAAe,EAAxD;AAA4D,SAAOjuB,CAAP;AAAS,CAAlL;;AAAmL0uE,IAAI,CAACulC,OAAL,CAAa2D,kBAAb,GAAgC,UAAS73G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAACluB,GAAC,CAACg1G,SAAF,KAAch1G,CAAC,CAACg1G,SAAF,GAAY,EAA1B;;AAA8B,MAAG,CAACh1G,CAAC,CAACg1G,SAAF,CAAY9mF,CAAZ,CAAJ,EAAmB;AAAC,SAAI,IAAI4hB,CAAC,GAAC6+B,IAAI,CAACulC,OAAL,CAAa+B,gBAAb,CAA8Bj2G,CAA9B,EAAgCkuB,CAAhC,CAAN,EAAyChL,CAAC,GAAC,EAA3C,EAA8CujB,CAAC,GAAC,CAApD,EAAsDA,CAAC,GAACqJ,CAAC,CAAClwC,MAA1D,EAAiE6mC,CAAC,EAAlE,EAAqEvjB,CAAC,CAACujB,CAAD,CAAD,GAAK,IAAIxmC,CAAJ,CAAM6vC,CAAC,CAACrJ,CAAD,CAAP,CAAL;;AAAiBzmC,KAAC,CAACg1G,SAAF,CAAY9mF,CAAZ,IAAehL,CAAf;AAAiB;AAAC,CAA1M;;AACnLyrD,IAAI,CAACulC,OAAL,CAAa4D,eAAb,GAA6B,UAAS93G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAamB,gBAAb,CAA8BtuE,CAA9B,EAAgC2uE,IAAI,CAACulC,OAArC;AAA8Cl0G,GAAC,CAACg1G,SAAF,KAAch1G,CAAC,CAACg1G,SAAF,GAAY,EAA1B;AAA8B,MAAIllE,CAAC,GAAC5hB,CAAC,GAACA,CAAC,CAAC1wB,OAAF,EAAD,GAAa0wB,CAApB;AAAsBluB,GAAC,CAACg1G,SAAF,CAAY/0G,CAAZ,IAAeiuB,CAAf;AAAiB,SAAOygD,IAAI,CAACulC,OAAL,CAAa8C,QAAb,CAAsBh3G,CAAtB,EAAwBC,CAAxB,EAA0B6vC,CAA1B,CAAP;AAAoC,CAApM;;AAAqM6+B,IAAI,CAACulC,OAAL,CAAa6D,oBAAb,GAAkC,UAAS/3G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAACgsB,MAAI,CAACqR,OAAL,CAAamB,gBAAb,CAA8BtuE,CAA9B,EAAgC2uE,IAAI,CAACulC,OAArC;AAA8Cl0G,GAAC,CAACg1G,SAAF,KAAch1G,CAAC,CAACg1G,SAAF,GAAY,EAA1B;AAA8B,MAAI9xF,CAAC,GAAC4sB,CAAC,GAACA,CAAC,CAACtyC,OAAF,EAAD,GAAasyC,CAApB;AAAsB9vC,GAAC,CAACg1G,SAAF,CAAY/0G,CAAZ,IAAe6vC,CAAf;AAAiB,SAAO6+B,IAAI,CAACulC,OAAL,CAAawD,aAAb,CAA2B13G,CAA3B,EAA6BC,CAA7B,EAA+BiuB,CAA/B,EAAiChL,CAAjC,CAAP;AAA2C,CAAlN;;AACrMyrD,IAAI,CAACulC,OAAL,CAAa8D,uBAAb,GAAqC,UAASh4G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe;AAAC4tC,MAAI,CAACqR,OAAL,CAAamB,gBAAb,CAA8BtuE,CAA9B,EAAgC2uE,IAAI,CAACulC,OAArC;AAA8Cl0G,GAAC,CAACg1G,SAAF,KAAch1G,CAAC,CAACg1G,SAAF,GAAY,EAA1B;AAA8B9mF,GAAC,GAACA,CAAC,IAAE,EAAL;;AAAQ,OAAI,IAAI4hB,CAAC,GAAC,EAAN,EAAS5sB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAACgL,CAAC,CAACtuB,MAArB,EAA4BsjB,CAAC,EAA7B,EAAgC4sB,CAAC,CAAC5sB,CAAD,CAAD,GAAKgL,CAAC,CAAChL,CAAD,CAAD,CAAK1lB,OAAL,EAAL;;AAAoBwC,GAAC,CAACg1G,SAAF,CAAY/0G,CAAZ,IAAeiuB,CAAf;AAAiB,SAAOygD,IAAI,CAACulC,OAAL,CAAa8C,QAAb,CAAsBh3G,CAAtB,EAAwBC,CAAxB,EAA0B6vC,CAA1B,CAAP;AAAoC,CAAlP;;AACA6+B,IAAI,CAACulC,OAAL,CAAa+D,yBAAb,GAAuC,UAASj4G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB5sB,CAAjB,EAAmB;AAACyrD,MAAI,CAACulC,OAAL,CAAa2D,kBAAb,CAAgC73G,CAAhC,EAAkC8vC,CAAlC,EAAoC7vC,CAApC;AAAuC,MAAIwmC,CAAC,GAACzmC,CAAC,CAACg1G,SAAF,CAAY/0G,CAAZ,CAAN;AAAqBwmC,GAAC,KAAGA,CAAC,GAACzmC,CAAC,CAACg1G,SAAF,CAAY/0G,CAAZ,IAAe,EAApB,CAAD;AAAyBiuB,GAAC,GAACA,CAAC,GAACA,CAAD,GAAG,IAAI4hB,CAAJ,EAAN;AAAY9vC,GAAC,GAAC2uE,IAAI,CAACulC,OAAL,CAAa+B,gBAAb,CAA8Bj2G,CAA9B,EAAgCC,CAAhC,CAAF;AAAqC,OAAK,CAAL,IAAQijB,CAAR,IAAWujB,CAAC,CAAC1kC,MAAF,CAASmhB,CAAT,EAAW,CAAX,EAAagL,CAAb,GAAgBluB,CAAC,CAAC+B,MAAF,CAASmhB,CAAT,EAAW,CAAX,EAAagL,CAAC,CAAC1wB,OAAF,EAAb,CAA3B,KAAuDipC,CAAC,CAAChoC,IAAF,CAAOyvB,CAAP,GAAUluB,CAAC,CAACvB,IAAF,CAAOyvB,CAAC,CAAC1wB,OAAF,EAAP,CAAjE;AAAsF,SAAO0wB,CAAP;AAAS,CAAhS;;AAAiSygD,IAAI,CAACulC,OAAL,CAAagE,KAAb,GAAmB,UAASl4G,CAAT,EAAWC,CAAX,EAAaiuB,CAAb,EAAe4hB,CAAf,EAAiB;AAAC,OAAI,IAAI5sB,CAAC,GAAC,EAAN,EAASujB,CAAC,GAAC,CAAf,EAAiBA,CAAC,GAACzmC,CAAC,CAACJ,MAArB,EAA4B6mC,CAAC,EAA7B,EAAgCvjB,CAAC,CAACjjB,CAAC,CAACwW,IAAF,CAAOzW,CAAC,CAACymC,CAAD,CAAR,CAAD,CAAD,GAAgBvY,CAAC,GAACA,CAAC,CAACzX,IAAF,CAAOzW,CAAC,CAACymC,CAAD,CAAR,EAAYqJ,CAAZ,EAAc9vC,CAAC,CAACymC,CAAD,CAAf,CAAD,GAAqBzmC,CAAC,CAACymC,CAAD,CAAvC;;AAA2C,SAAOvjB,CAAP;AAAS,CAAzH;;AACjSyrD,IAAI,CAACulC,OAAL,CAAat+F,SAAb,CAAuBuiG,cAAvB,GAAsC,YAAU;AAAC,MAAG,KAAKnD,SAAR,EAAkB,KAAI,IAAIh1G,CAAR,IAAa,KAAKg1G,SAAlB,EAA4B;AAAC,QAAI/0G,CAAC,GAAC,KAAK+0G,SAAL,CAAeh1G,CAAf,CAAN;AAAwB,QAAGtC,KAAK,CAACwD,OAAN,CAAcjB,CAAd,CAAH,EAAoB,KAAI,IAAIiuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACjuB,CAAC,CAACL,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2BjuB,CAAC,CAACiuB,CAAD,CAAD,IAAMjuB,CAAC,CAACiuB,CAAD,CAAD,CAAK1wB,OAAL,EAAN,CAA/C,KAAyEyC,CAAC,IAAEA,CAAC,CAACzC,OAAF,EAAH;AAAe;AAAC,CAAjN;;AAAkNmxE,IAAI,CAACulC,OAAL,CAAat+F,SAAb,CAAuBpY,OAAvB,GAA+B,YAAU;AAAC,OAAK26G,cAAL;AAAsB,SAAO,KAAKpwG,KAAZ;AAAkB,CAAlF;;AAAmF4mE,IAAI,CAACulC,OAAL,CAAaG,kBAAb,KAAkC1lC,IAAI,CAACulC,OAAL,CAAat+F,SAAb,CAAuBY,QAAvB,GAAgC,YAAU;AAAC,OAAK2hG,cAAL;AAAsB,SAAO,KAAKpwG,KAAL,CAAWyO,QAAX,EAAP;AAA6B,CAAhI;;AACrSm4D,IAAI,CAACulC,OAAL,CAAat+F,SAAb,CAAuBwiG,YAAvB,GAAoC,UAASp4G,CAAT,EAAW;AAAC,MAAG,KAAKu1G,gBAAR,EAAyB;AAAC,SAAKP,SAAL,KAAiB,KAAKA,SAAL,GAAe,EAAhC;AAAoC,QAAI/0G,CAAC,GAACD,CAAC,CAACqzG,UAAR;;AAAmB,QAAGrzG,CAAC,CAACyzG,UAAL,EAAgB;AAAC,UAAGzzG,CAAC,CAACi0G,aAAF,EAAH,EAAqB,OAAO,KAAKe,SAAL,CAAe/0G,CAAf,MAAoB,KAAK+0G,SAAL,CAAe/0G,CAAf,IAAkB67D,IAAI,CAAC/zD,KAAL,CAAWpL,GAAX,CAAe,KAAK44G,gBAAL,CAAsBt1G,CAAtB,KAA0B,EAAzC,EAA4C,UAASA,CAAT,EAAW;AAAC,eAAO,IAAID,CAAC,CAACuzG,IAAN,CAAWtzG,CAAX,CAAP;AAAqB,OAA7E,CAAtC,GAAsH,KAAK+0G,SAAL,CAAe/0G,CAAf,CAA7H;AAA+I,KAArL,MAA0L,IAAGD,CAAC,CAACi0G,aAAF,EAAH,EAAqB,OAAM,CAAC,KAAKe,SAAL,CAAe/0G,CAAf,CAAD,IAAoB,KAAKs1G,gBAAL,CAAsBt1G,CAAtB,CAApB,KAA+C,KAAK+0G,SAAL,CAAe/0G,CAAf,IAAkB,IAAID,CAAC,CAACuzG,IAAN,CAAW,KAAKgC,gBAAL,CAAsBt1G,CAAtB,CAAX,CAAjE,GAAuG,KAAK+0G,SAAL,CAAe/0G,CAAf,CAA7G;;AAA+H,WAAO,KAAKs1G,gBAAL,CAAsBt1G,CAAtB,CAAP;AAAgC;AAAC,CAAhf;;AACA0uE,IAAI,CAACulC,OAAL,CAAat+F,SAAb,CAAuByiG,YAAvB,GAAoC,UAASr4G,CAAT,EAAWC,CAAX,EAAa;AAAC,OAAK+0G,SAAL,KAAiB,KAAKA,SAAL,GAAe,EAAhC;AAAoCrmC,MAAI,CAACulC,OAAL,CAAaoB,8BAAb,CAA4C,IAA5C;AAAkD,MAAIpnF,CAAC,GAACluB,CAAC,CAACqzG,UAAR;AAAmBrzG,GAAC,CAACyzG,UAAF,IAAcxzG,CAAC,GAACA,CAAC,IAAE,EAAL,EAAQD,CAAC,CAACi0G,aAAF,MAAmB,KAAKe,SAAL,CAAe9mF,CAAf,IAAkBjuB,CAAlB,EAAoB,KAAKs1G,gBAAL,CAAsBrnF,CAAtB,IAAyB4tC,IAAI,CAAC/zD,KAAL,CAAWpL,GAAX,CAAesD,CAAf,EAAiB,UAASD,CAAT,EAAW;AAAC,WAAOA,CAAC,CAACxC,OAAF,EAAP;AAAmB,GAAhD,CAAhE,IAAmH,KAAK+3G,gBAAL,CAAsBrnF,CAAtB,IAAyBjuB,CAAlK,IAAqKD,CAAC,CAACi0G,aAAF,MAAmB,KAAKe,SAAL,CAAe9mF,CAAf,IAAkBjuB,CAAlB,EAAoB,KAAKs1G,gBAAL,CAAsBrnF,CAAtB,IAAyBjuB,CAAC,GAACA,CAAC,CAACzC,OAAF,EAAD,GAAayC,CAA9E,IAAiF,KAAKs1G,gBAAL,CAAsBrnF,CAAtB,IAAyBjuB,CAA/Q;AAAiR,SAAO,IAAP;AAAY,CAAxb;;AACA0uE,IAAI,CAACulC,OAAL,CAAarjG,UAAb,GAAwB,UAAS7Q,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAG,EAAED,CAAC,YAAYC,CAAC,CAACxH,WAAjB,CAAH,EAAiC,MAAM2F,KAAK,CAAC,gCAAD,CAAX;AAA8C,MAAI8vB,CAAC,GAACluB,CAAC,CAACxC,OAAF,EAAN;AAAkByC,GAAC,GAACA,CAAC,CAACzC,OAAF,EAAF;AAAc,MAAIsyC,CAAC,GAAC,EAAN;AAAA,MAAS5sB,CAAC,GAAC,CAAX;AAAA,MAAaujB,CAAC,GAACvY,CAAC,CAACtuB,MAAF,GAASK,CAAC,CAACL,MAAX,GAAkBsuB,CAAC,CAACtuB,MAApB,GAA2BK,CAAC,CAACL,MAA5C;AAAmDI,GAAC,CAACy0G,gBAAF,OAAuB3kE,CAAC,CAAC,CAAD,CAAD,GAAK9vC,CAAC,CAACy0G,gBAAF,EAAL,EAA0BvxF,CAAC,GAAC,CAAnD;;AAAsD,SAAKA,CAAC,GAACujB,CAAP,EAASvjB,CAAC,EAAV,EAAayrD,IAAI,CAACulC,OAAL,CAAaoE,aAAb,CAA2BpqF,CAAC,CAAChL,CAAD,CAA5B,EAAgCjjB,CAAC,CAACijB,CAAD,CAAjC,MAAwC4sB,CAAC,CAAC5sB,CAAD,CAAD,GAAKjjB,CAAC,CAACijB,CAAD,CAA9C;;AAAmD,SAAO,IAAIljB,CAAC,CAACvH,WAAN,CAAkBq3C,CAAlB,CAAP;AAA4B,CAA1V;;AAA2V6+B,IAAI,CAACulC,OAAL,CAAa5oC,MAAb,GAAoB,UAAStrE,CAAT,EAAWC,CAAX,EAAa;AAAC,SAAOD,CAAC,IAAEC,CAAH,IAAM,EAAE,CAACD,CAAD,IAAI,CAACC,CAAP,KAAWD,CAAC,YAAYC,CAAC,CAACxH,WAA1B,IAAuCk2E,IAAI,CAACulC,OAAL,CAAaoE,aAAb,CAA2Bt4G,CAAC,CAACxC,OAAF,EAA3B,EAAuCyC,CAAC,CAACzC,OAAF,EAAvC,CAApD;AAAwG,CAA1I;;AAC3VmxE,IAAI,CAACulC,OAAL,CAAaqE,iBAAb,GAA+B,UAASv4G,CAAT,EAAWC,CAAX,EAAa;AAACD,GAAC,GAACA,CAAC,IAAE,EAAL;AAAQC,GAAC,GAACA,CAAC,IAAE,EAAL;AAAQ,MAAIiuB,CAAC,GAAC,EAAN;AAAA,MAAS4hB,CAAT;;AAAW,OAAIA,CAAJ,IAAS9vC,CAAT,EAAWkuB,CAAC,CAAC4hB,CAAD,CAAD,GAAK,CAAL;;AAAO,OAAIA,CAAJ,IAAS7vC,CAAT,EAAWiuB,CAAC,CAAC4hB,CAAD,CAAD,GAAK,CAAL;;AAAO,OAAIA,CAAJ,IAAS5hB,CAAT,EAAW,IAAG,CAACygD,IAAI,CAACulC,OAAL,CAAaoE,aAAb,CAA2Bt4G,CAAC,CAAC8vC,CAAD,CAA5B,EAAgC7vC,CAAC,CAAC6vC,CAAD,CAAjC,CAAJ,EAA0C,OAAM,CAAC,CAAP;;AAAS,SAAM,CAAC,CAAP;AAAS,CAAnL;;AACA6+B,IAAI,CAACulC,OAAL,CAAaoE,aAAb,GAA2B,UAASt4G,CAAT,EAAWC,CAAX,EAAa;AAAC,MAAGD,CAAC,IAAEC,CAAN,EAAQ,OAAM,CAAC,CAAP;AAAS,MAAG,CAAC67D,IAAI,CAAC3jD,QAAL,CAAcnY,CAAd,CAAD,IAAmB,CAAC87D,IAAI,CAAC3jD,QAAL,CAAclY,CAAd,CAAvB,EAAwC,OAAM,aAAW,OAAOD,CAAlB,IAAqBqH,KAAK,CAACrH,CAAD,CAA1B,IAA+B,aAAW,OAAOC,CAAlB,IAAqBoH,KAAK,CAACpH,CAAD,CAAzD,GAA6Dm9B,MAAM,CAACp9B,CAAD,CAAN,IAAWo9B,MAAM,CAACn9B,CAAD,CAA9E,GAAkF,CAAC,CAAzF;AAA2F,MAAGD,CAAC,CAACvH,WAAF,IAAewH,CAAC,CAACxH,WAApB,EAAgC,OAAM,CAAC,CAAP;;AAAS,MAAGk2E,IAAI,CAACulC,OAAL,CAAaM,oBAAb,IAAmCx0G,CAAC,CAACvH,WAAF,KAAgBsjB,UAAtD,EAAiE;AAAC,QAAG/b,CAAC,CAACJ,MAAF,IAAUK,CAAC,CAACL,MAAf,EAAsB,OAAM,CAAC,CAAP;;AAAS,SAAI,IAAIsuB,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACluB,CAAC,CAACJ,MAAhB,EAAuBsuB,CAAC,EAAxB,EAA2B,IAAGluB,CAAC,CAACkuB,CAAD,CAAD,IAAMjuB,CAAC,CAACiuB,CAAD,CAAV,EAAc,OAAM,CAAC,CAAP;;AAAS,WAAM,CAAC,CAAP;AAAS;;AAAA,MAAGluB,CAAC,CAACvH,WAAF,KAAgBiF,KAAnB,EAAyB;AAAC,QAAIoyC,CAAC,GAAC,KAAK,CAAX;AAAA,QAAa5sB,CAAC,GAAC,KAAK,CAApB;AAAA,QAAsBujB,CAAC,GAACp+B,IAAI,CAACge,GAAL,CAASrmB,CAAC,CAACJ,MAAX,EAAkBK,CAAC,CAACL,MAApB,CAAxB;;AAAoD,SAAIsuB,CAAC,GAAC,CAAN,EAAQA,CAAC,GAACuY,CAAV,EAAYvY,CAAC,EAAb,EAAgB;AAAC,UAAIgN,CAAC,GAACl7B,CAAC,CAACkuB,CAAD,CAAP;AAAA,UAAWyiB,CAAC,GAAC1wC,CAAC,CAACiuB,CAAD,CAAd;AAAkBgN,OAAC,IACpfA,CAAC,CAACziC,WAAF,IAAe+D,MADoe,KAC3ds/D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK,CAAL,KAAS99B,CAA7B,GAAgCgsB,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB1/C,CAAC,KAAGluB,CAAC,CAACJ,MAAF,GAAS,CAAjC,CAAhC,EAAoEkwC,CAAC,GAAC5U,CAAtE,EAAwEA,CAAC,GAAC,KAAK,CAD4Y;AACzYyV,OAAC,IAAEA,CAAC,CAACl4C,WAAF,IAAe+D,MAAlB,KAA2Bs/D,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB,KAAK,CAAL,KAAS1qD,CAA7B,GAAgC44C,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB1/C,CAAC,KAAGjuB,CAAC,CAACL,MAAF,GAAS,CAAjC,CAAhC,EAAoEsjB,CAAC,GAACytB,CAAtE,EAAwEA,CAAC,GAAC,KAAK,CAA1G;AAA6G,UAAG,CAACg+B,IAAI,CAACulC,OAAL,CAAaoE,aAAb,CAA2Bp9E,CAA3B,EAA6ByV,CAA7B,CAAJ,EAAoC,OAAM,CAAC,CAAP;AAAS;;AAAA,WAAOb,CAAC,IAAE5sB,CAAH,IAAM4sB,CAAC,GAACA,CAAC,IAAE,EAAL,EAAQ5sB,CAAC,GAACA,CAAC,IAAE,EAAb,EAAgByrD,IAAI,CAACulC,OAAL,CAAaqE,iBAAb,CAA+BzoE,CAA/B,EAAiC5sB,CAAjC,CAAtB,IAA2D,CAAC,CAAnE;AAAqE;;AAAA,MAAGljB,CAAC,CAACvH,WAAF,KAAgB+D,MAAnB,EAA0B,OAAOmyE,IAAI,CAACulC,OAAL,CAAaqE,iBAAb,CAA+Bv4G,CAA/B,EAAiCC,CAAjC,CAAP;AAA2C,QAAM7B,KAAK,CAAC,4BAAD,CAAX;AAA2C,CADzb;;AAC0buwE,IAAI,CAACulC,OAAL,CAAat+F,SAAb,CAAuB4iG,YAAvB,GAAoC,YAAU;AAAC,SAAO7pC,IAAI,CAACulC,OAAL,CAAasE,YAAb,CAA0B,IAA1B,CAAP;AAAuC,CAAtF;;AAC1b7pC,IAAI,CAACulC,OAAL,CAAat+F,SAAb,CAAuBgpB,KAAvB,GAA6B,YAAU;AAAC,SAAO+vC,IAAI,CAACulC,OAAL,CAAasE,YAAb,CAA0B,IAA1B,CAAP;AAAuC,CAA/E;;AAAgF7pC,IAAI,CAACulC,OAAL,CAAat1E,KAAb,GAAmB,UAAS5+B,CAAT,EAAW;AAAC,SAAO2uE,IAAI,CAACulC,OAAL,CAAasE,YAAb,CAA0Bx4G,CAA1B,CAAP;AAAoC,CAAnE;;AAAoE2uE,IAAI,CAACulC,OAAL,CAAasE,YAAb,GAA0B,UAASx4G,CAAT,EAAW;AAAC,SAAO,IAAIA,CAAC,CAACvH,WAAN,CAAkBk2E,IAAI,CAACulC,OAAL,CAAauE,MAAb,CAAoBz4G,CAAC,CAACxC,OAAF,EAApB,CAAlB,CAAP;AAA2D,CAAjG;;AACpJmxE,IAAI,CAACulC,OAAL,CAAawE,QAAb,GAAsB,UAAS14G,CAAT,EAAWC,CAAX,EAAa;AAAC67D,MAAI,CAACqR,OAAL,CAAamB,gBAAb,CAA8BtuE,CAA9B,EAAgC2uE,IAAI,CAACulC,OAArC;AAA8Cp4C,MAAI,CAACqR,OAAL,CAAamB,gBAAb,CAA8BruE,CAA9B,EAAgC0uE,IAAI,CAACulC,OAArC;AAA8Cp4C,MAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB5tE,CAAC,CAACvH,WAAF,IAAewH,CAAC,CAACxH,WAArC,EAAiD,2DAAjD;AAA8GuH,GAAC,GAAC2uE,IAAI,CAACulC,OAAL,CAAat1E,KAAb,CAAmB5+B,CAAnB,CAAF;;AAAwB,OAAI,IAAIkuB,CAAC,GAACjuB,CAAC,CAACzC,OAAF,EAAN,EAAkBsyC,CAAC,GAAC9vC,CAAC,CAACxC,OAAF,EAApB,EAAgC0lB,CAAC,GAACgL,CAAC,CAACtuB,MAAF,GAAS,CAA/C,EAAiDsjB,CAAC,GAAC4sB,CAAC,CAAClwC,MAArD,EAA4DsjB,CAAC,EAA7D,EAAgEgL,CAAC,CAAChL,CAAD,CAAD,GAAK4sB,CAAC,CAAC5sB,CAAD,CAAN;;AAAUjjB,GAAC,CAAC+0G,SAAF,GAAYh1G,CAAC,CAACg1G,SAAd;AAAwB/0G,GAAC,CAACs1G,gBAAF,GAAmBv1G,CAAC,CAACu1G,gBAArB;AAAsC,CAA9Y;;AACA5mC,IAAI,CAACulC,OAAL,CAAauE,MAAb,GAAoB,UAASz4G,CAAT,EAAW;AAAC,MAAGtC,KAAK,CAACwD,OAAN,CAAclB,CAAd,CAAH,EAAoB;AAAC,SAAI,IAAIC,CAAC,GAACvC,KAAK,CAACsC,CAAC,CAACJ,MAAH,CAAX,EAAsBsuB,CAAC,GAAC,CAA5B,EAA8BA,CAAC,GAACluB,CAAC,CAACJ,MAAlC,EAAyCsuB,CAAC,EAA1C,EAA6C;AAAC,UAAI4hB,CAAC,GAAC9vC,CAAC,CAACkuB,CAAD,CAAP;AAAW,cAAM4hB,CAAN,KAAU7vC,CAAC,CAACiuB,CAAD,CAAD,GAAK,YAAU,OAAO4hB,CAAjB,GAAmB6+B,IAAI,CAACulC,OAAL,CAAauE,MAAb,CAAoB38C,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB99B,CAApB,CAApB,CAAnB,GAA+DA,CAA9E;AAAiF;;AAAA,WAAO7vC,CAAP;AAAS;;AAAA,MAAG0uE,IAAI,CAACulC,OAAL,CAAaM,oBAAb,IAAmCx0G,CAAC,YAAY+b,UAAnD,EAA8D,OAAO,IAAIA,UAAJ,CAAe/b,CAAf,CAAP;AAAyBC,GAAC,GAAC,EAAF;;AAAK,OAAIiuB,CAAJ,IAASluB,CAAT,EAAW8vC,CAAC,GAAC9vC,CAAC,CAACkuB,CAAD,CAAH,EAAO,QAAM4hB,CAAN,KAAU7vC,CAAC,CAACiuB,CAAD,CAAD,GAAK,YAAU,OAAO4hB,CAAjB,GAAmB6+B,IAAI,CAACulC,OAAL,CAAauE,MAAb,CAAoB38C,IAAI,CAACqR,OAAL,CAAaS,MAAb,CAAoB99B,CAApB,CAApB,CAAnB,GAA+DA,CAA9E,CAAP;;AAAwF,SAAO7vC,CAAP;AAAS,CAAhZ;;AAAiZ0uE,IAAI,CAACulC,OAAL,CAAayE,mBAAb,GAAiC,UAAS34G,CAAT,EAAWC,CAAX,EAAa;AAACA,GAAC,CAAC24G,SAAF,GAAY54G,CAAZ;AAAc,CAA7D;;AAA8D2uE,IAAI,CAACulC,OAAL,CAAa2E,oBAAb,GAAkC,EAAlC;AAC/clqC,IAAI,CAACulC,OAAL,CAAa4E,0BAAb,GAAwC,EAAxC;AAA2CnqC,IAAI,CAACoqC,MAAL,GAAY,EAAZ;AAAe,UAA4Bl+F,OAAO,CAACpN,GAAR,GAAYkhE,IAAI,CAAClhE,GAAjB,EAAqBoN,OAAO,CAACq5F,OAAR,GAAgBvlC,IAAI,CAACulC,OAA1C,EAAkDr5F,OAAO,CAACyqF,YAAR,GAAqB32B,IAAI,CAAC22B,YAA5E,EAAyFzqF,OAAO,CAACoxF,YAAR,GAAqBt9B,IAAI,CAACs9B,YAAnH,EAAgIpxF,OAAO,CAACu4F,kBAAR,GAA2BzkC,IAAI,CAACykC,kBAAhK,EAAmLv4F,OAAO,CAAC64F,wBAAR,GAAiC/kC,IAAI,CAAC+kC,wBAAzN,EAAkP74F,OAAO,CAAC4oD,YAAR,GAAqB3H,IAAI,CAAC2H,YAA5Q,EAAyR5oD,OAAO,CAAC8oD,QAAR,GAAiB7H,IAAI,CAAC6H,QAA/S,EAAwT9oD,OAAO,CAACnW,MAAR,GAAe;AAACgnE,QAAM,EAAC5P,IAAI,CAACp3D,MAAL,CAAYgnE;AAApB,CAAvU,EAAmW7wD,OAAO,CAACymD,MAAR,GAAexF,IAAI,CAACwF,MAAnZ,E;;;;;;;;;;;;AC1gB7C;;AAEb,IAAI03C,OAAO,GAAG59E,MAAM,CAAC29B,MAArB;;AAEAn+C,MAAM,CAACC,OAAP,GAAiB,SAASo+F,gBAAT,GAA4B;AAC5C,SAAO,OAAOD,OAAP,KAAmB,UAAnB,IACH,OAAOjgD,MAAP,KAAkB,UADf,IAEH,OAAOigD,OAAO,CAAC,EAAD,CAAd,KAAuB,QAFpB,CAE6B;AAF7B,KAGH,OAAOjgD,MAAM,CAAC,EAAD,CAAb,KAAsB,QAH1B,CAD4C,CAIR;AACpC,CALD,C;;;;;;;;;;;;ACJa;;AAEb,IAAImgD,UAAU,GAAG,OAAO57G,MAAP,KAAkB,WAAlB,IAAiCA,MAAlD;;AACA,IAAI67G,aAAa,GAAGn+F,mBAAO,CAAC,oDAAD,CAA3B;;AAEAJ,MAAM,CAACC,OAAP,GAAiB,SAASu+F,gBAAT,GAA4B;AAC5C,MAAI,OAAOF,UAAP,KAAsB,UAA1B,EAAsC;AAAE,WAAO,KAAP;AAAe;;AACvD,MAAI,OAAO57G,MAAP,KAAkB,UAAtB,EAAkC;AAAE,WAAO,KAAP;AAAe;;AACnD,MAAI,OAAO47G,UAAU,CAAC,KAAD,CAAjB,KAA6B,QAAjC,EAA2C;AAAE,WAAO,KAAP;AAAe;;AAC5D,MAAI,OAAO57G,MAAM,CAAC,KAAD,CAAb,KAAyB,QAA7B,EAAuC;AAAE,WAAO,KAAP;AAAe;;AAExD,SAAO67G,aAAa,EAApB;AACA,CAPD,C;;;;;;;;;;;;ACLa;AAEb;;AACAv+F,MAAM,CAACC,OAAP,GAAiB,SAASk6C,UAAT,GAAsB;AACtC,MAAI,OAAOz3D,MAAP,KAAkB,UAAlB,IAAgC,OAAOd,MAAM,CAACk5D,qBAAd,KAAwC,UAA5E,EAAwF;AAAE,WAAO,KAAP;AAAe;;AACzG,MAAI,OAAOp4D,MAAM,CAACvC,QAAd,KAA2B,QAA/B,EAAyC;AAAE,WAAO,IAAP;AAAc;;AAEzD,MAAI4T,GAAG,GAAG,EAAV;AACA,MAAI0qG,GAAG,GAAG/7G,MAAM,CAAC,MAAD,CAAhB;AACA,MAAIg8G,MAAM,GAAG98G,MAAM,CAAC68G,GAAD,CAAnB;;AACA,MAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;AAAE,WAAO,KAAP;AAAe;;AAE9C,MAAI78G,MAAM,CAACoZ,SAAP,CAAiBY,QAAjB,CAA0BC,IAA1B,CAA+B4iG,GAA/B,MAAwC,iBAA5C,EAA+D;AAAE,WAAO,KAAP;AAAe;;AAChF,MAAI78G,MAAM,CAACoZ,SAAP,CAAiBY,QAAjB,CAA0BC,IAA1B,CAA+B6iG,MAA/B,MAA2C,iBAA/C,EAAkE;AAAE,WAAO,KAAP;AAAe,GAV7C,CAYtC;AACA;AACA;AACA;AAEA;AACA;;;AAEA,MAAIC,MAAM,GAAG,EAAb;AACA5qG,KAAG,CAAC0qG,GAAD,CAAH,GAAWE,MAAX;;AACA,OAAKF,GAAL,IAAY1qG,GAAZ,EAAiB;AAAE,WAAO,KAAP;AAAe,GAtBI,CAsBH;;;AACnC,MAAI,OAAOnS,MAAM,CAACiS,IAAd,KAAuB,UAAvB,IAAqCjS,MAAM,CAACiS,IAAP,CAAYE,GAAZ,EAAiB/O,MAAjB,KAA4B,CAArE,EAAwE;AAAE,WAAO,KAAP;AAAe;;AAEzF,MAAI,OAAOpD,MAAM,CAACyvE,mBAAd,KAAsC,UAAtC,IAAoDzvE,MAAM,CAACyvE,mBAAP,CAA2Bt9D,GAA3B,EAAgC/O,MAAhC,KAA2C,CAAnG,EAAsG;AAAE,WAAO,KAAP;AAAe;;AAEvH,MAAI45G,IAAI,GAAGh9G,MAAM,CAACk5D,qBAAP,CAA6B/mD,GAA7B,CAAX;;AACA,MAAI6qG,IAAI,CAAC55G,MAAL,KAAgB,CAAhB,IAAqB45G,IAAI,CAAC,CAAD,CAAJ,KAAYH,GAArC,EAA0C;AAAE,WAAO,KAAP;AAAe;;AAE3D,MAAI,CAAC78G,MAAM,CAACoZ,SAAP,CAAiB2rD,oBAAjB,CAAsC9qD,IAAtC,CAA2C9H,GAA3C,EAAgD0qG,GAAhD,CAAL,EAA2D;AAAE,WAAO,KAAP;AAAe;;AAE5E,MAAI,OAAO78G,MAAM,CAACy7D,wBAAd,KAA2C,UAA/C,EAA2D;AAC1D,QAAIwhD,UAAU,GAAGj9G,MAAM,CAACy7D,wBAAP,CAAgCtpD,GAAhC,EAAqC0qG,GAArC,CAAjB;;AACA,QAAII,UAAU,CAACtgH,KAAX,KAAqBogH,MAArB,IAA+BE,UAAU,CAACpkD,UAAX,KAA0B,IAA7D,EAAmE;AAAE,aAAO,KAAP;AAAe;AACpF;;AAED,SAAO,IAAP;AACA,CAtCD,C;;;;;;;;;;;;ACHa;;AAEb,IAAIN,UAAU,GAAG/5C,mBAAO,CAAC,8DAAD,CAAxB;;AAEAJ,MAAM,CAACC,OAAP,GAAiB,SAAS6+F,mBAAT,GAA+B;AAC/C,SAAO3kD,UAAU,MAAM,CAAC,CAACz3D,MAAM,CAACq8G,WAAhC;AACA,CAFD,C;;;;;;;;;;;;ACJa;;AAEb,IAAI99E,IAAI,GAAG7gB,mBAAO,CAAC,4DAAD,CAAlB;;AAEAJ,MAAM,CAACC,OAAP,GAAiBghB,IAAI,CAACplB,IAAL,CAAU+gD,QAAQ,CAAC/gD,IAAnB,EAAyBja,MAAM,CAACoZ,SAAP,CAAiB0C,cAA1C,CAAjB,C;;;;;;;;;;;;ACJa;;AAEb,IAAIshG,cAAc,GAAG5+F,mBAAO,CAAC,sEAAD,CAAP,EAArB;;AACA,IAAI81C,SAAS,GAAG91C,mBAAO,CAAC,kEAAD,CAAvB;;AAEA,IAAI6+F,SAAS,GAAG/oD,SAAS,CAAC,2BAAD,CAAzB;;AAEA,IAAIgpD,mBAAmB,GAAG,SAASppD,WAAT,CAAqBv3D,KAArB,EAA4B;AACrD,MAAIygH,cAAc,IAAIzgH,KAAlB,IAA2B,OAAOA,KAAP,KAAiB,QAA5C,IAAwDmE,MAAM,CAACq8G,WAAP,IAAsBxgH,KAAlF,EAAyF;AACxF,WAAO,KAAP;AACA;;AACD,SAAO0gH,SAAS,CAAC1gH,KAAD,CAAT,KAAqB,oBAA5B;AACA,CALD;;AAOA,IAAI4gH,iBAAiB,GAAG,SAASrpD,WAAT,CAAqBv3D,KAArB,EAA4B;AACnD,MAAI2gH,mBAAmB,CAAC3gH,KAAD,CAAvB,EAAgC;AAC/B,WAAO,IAAP;AACA;;AACD,SAAOA,KAAK,KAAK,IAAV,IACN,OAAOA,KAAP,KAAiB,QADX,IAEN,OAAOA,KAAK,CAACyG,MAAb,KAAwB,QAFlB,IAGNzG,KAAK,CAACyG,MAAN,IAAgB,CAHV,IAINi6G,SAAS,CAAC1gH,KAAD,CAAT,KAAqB,gBAJf,IAKN0gH,SAAS,CAAC1gH,KAAK,CAACi/D,MAAP,CAAT,KAA4B,mBAL7B;AAMA,CAVD;;AAYA,IAAI4hD,yBAAyB,GAAI,YAAY;AAC5C,SAAOF,mBAAmB,CAAChxG,SAAD,CAA1B;AACA,CAFgC,EAAjC;;AAIAgxG,mBAAmB,CAACC,iBAApB,GAAwCA,iBAAxC,C,CAA2D;;AAE3Dn/F,MAAM,CAACC,OAAP,GAAiBm/F,yBAAyB,GAAGF,mBAAH,GAAyBC,iBAAnE,C;;;;;;;;;;;;AChCa;;AAEb,IAAIE,UAAU,GAAGj/F,mBAAO,CAAC,wDAAD,CAAP,EAAjB;;AAEA,IAAIi/F,UAAJ,EAAgB;AACf,MAAIC,aAAa,GAAGnhD,MAAM,CAACnjD,SAAP,CAAiB9T,OAArC;;AACA,MAAIq4G,SAAS,GAAG,SAASC,eAAT,CAAyBjhH,KAAzB,EAAgC;AAC/C,QAAI;AACH+gH,mBAAa,CAACzjG,IAAd,CAAmBtd,KAAnB;AACA,aAAO,IAAP;AACA,KAHD,CAGE,OAAO+pB,CAAP,EAAU,CACX;;AACD,WAAO,KAAP;AACA,GAPD;;AASAtI,QAAM,CAACC,OAAP,GAAiB,SAASw/F,QAAT,CAAkBlhH,KAAlB,EAAyB;AACzC,QACCA,KAAK,KAAK,IAAV,IACG,OAAOA,KAAP,KAAiB,WADpB,IAEG,OAAOA,KAAP,KAAiB,SAFpB,IAGG,OAAOA,KAAP,KAAiB,QAHpB,IAIG,OAAOA,KAAP,KAAiB,QAJpB,IAKG,OAAOA,KAAP,KAAiB,QALpB,IAMG,OAAOA,KAAP,KAAiB,UAPrB,EAQE;AACD,aAAO,KAAP;AACA;;AACD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAC9B,aAAO,IAAP;AACA;;AAED,WAAOghH,SAAS,CAAChhH,KAAD,CAAhB;AACA,GAjBD;AAkBA,CA7BD,MA6BO;AACNyhB,QAAM,CAACC,OAAP,GAAiB,SAASw/F,QAAT,CAAkBlhH,KAAlB,EAAyB;AACzC,WAAO,MAAK,IAAIA,KAAhB;AACA,GAFD;AAGA,C;;;;;;;;;;;;ACrCY;;AAEb,IAAI23D,SAAS,GAAG91C,mBAAO,CAAC,kEAAD,CAAvB;;AACA,IAAIs/F,UAAU,GAAGxpD,SAAS,CAAC,4BAAD,CAA1B;AACA,IAAI+oD,SAAS,GAAG/oD,SAAS,CAAC,2BAAD,CAAzB;;AAEA,IAAIypD,gBAAgB,GAAG,SAASC,iBAAT,CAA2BrhH,KAA3B,EAAkC;AACxD,MAAI;AACHmhH,cAAU,CAACnhH,KAAD,CAAV;AACA,WAAO,IAAP;AACA,GAHD,CAGE,OAAO+pB,CAAP,EAAU;AACX,WAAO,KAAP;AACA;AACD,CAPD;;AAQA,IAAIu3F,SAAS,GAAG,kBAAhB;;AACA,IAAIb,cAAc,GAAG5+F,mBAAO,CAAC,sEAAD,CAAP,EAArB;;AAEAJ,MAAM,CAACC,OAAP,GAAiB,SAASmhD,SAAT,CAAmB7iE,KAAnB,EAA0B;AAC1C,MAAI,OAAOA,KAAP,KAAiB,SAArB,EAAgC;AAC/B,WAAO,IAAP;AACA;;AACD,MAAIA,KAAK,KAAK,IAAV,IAAkB,OAAOA,KAAP,KAAiB,QAAvC,EAAiD;AAChD,WAAO,KAAP;AACA;;AACD,SAAOygH,cAAc,IAAIt8G,MAAM,CAACq8G,WAAP,IAAsBxgH,KAAxC,GAAgDohH,gBAAgB,CAACphH,KAAD,CAAhE,GAA0E0gH,SAAS,CAAC1gH,KAAD,CAAT,KAAqBshH,SAAtG;AACA,CARD,C;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA7/F,MAAM,CAACC,OAAP,GAAiB,UAAUlM,GAAV,EAAe;AAC9B,SAAOA,GAAG,IAAI,IAAP,KAAgBsN,QAAQ,CAACtN,GAAD,CAAR,IAAiB+rG,YAAY,CAAC/rG,GAAD,CAA7B,IAAsC,CAAC,CAACA,GAAG,CAACgsG,SAA5D,CAAP;AACD,CAFD;;AAIA,SAAS1+F,QAAT,CAAmBtN,GAAnB,EAAwB;AACtB,SAAO,CAAC,CAACA,GAAG,CAAClW,WAAN,IAAqB,OAAOkW,GAAG,CAAClW,WAAJ,CAAgBwjB,QAAvB,KAAoC,UAAzD,IAAuEtN,GAAG,CAAClW,WAAJ,CAAgBwjB,QAAhB,CAAyBtN,GAAzB,CAA9E;AACD,C,CAED;;;AACA,SAAS+rG,YAAT,CAAuB/rG,GAAvB,EAA4B;AAC1B,SAAO,OAAOA,GAAG,CAACisG,WAAX,KAA2B,UAA3B,IAAyC,OAAOjsG,GAAG,CAAC/M,KAAX,KAAqB,UAA9D,IAA4Eqa,QAAQ,CAACtN,GAAG,CAAC/M,KAAJ,CAAU,CAAV,EAAa,CAAb,CAAD,CAA3F;AACD,C;;;;;;;;;;;;ACpBY;;AAEb,IAAIs6C,MAAM,GAAGn4C,IAAI,CAAC6R,SAAL,CAAesmC,MAA5B;;AACA,IAAI2+D,aAAa,GAAG,SAASC,iBAAT,CAA2B3hH,KAA3B,EAAkC;AACrD,MAAI;AACH+iD,UAAM,CAACzlC,IAAP,CAAYtd,KAAZ;AACA,WAAO,IAAP;AACA,GAHD,CAGE,OAAO+pB,CAAP,EAAU;AACX,WAAO,KAAP;AACA;AACD,CAPD;;AASA,IAAI8xC,KAAK,GAAGx4D,MAAM,CAACoZ,SAAP,CAAiBY,QAA7B;AACA,IAAIukG,SAAS,GAAG,eAAhB;;AACA,IAAInB,cAAc,GAAG5+F,mBAAO,CAAC,sEAAD,CAAP,EAArB;;AAEAJ,MAAM,CAACC,OAAP,GAAiB,SAASmgG,YAAT,CAAsB7hH,KAAtB,EAA6B;AAC7C,MAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,KAAK,IAA3C,EAAiD;AAChD,WAAO,KAAP;AACA;;AACD,SAAOygH,cAAc,GAAGiB,aAAa,CAAC1hH,KAAD,CAAhB,GAA0B67D,KAAK,CAACv+C,IAAN,CAAWtd,KAAX,MAAsB4hH,SAArE;AACA,CALD,C;;;;;;;;;;;;AChBa;;AAEb,IAAInlD,IAAI,GAAG,OAAOnoD,GAAP,KAAe,UAAf,IAA6BA,GAAG,CAACmI,SAAjC,GAA6CnI,GAA7C,GAAmD,IAA9D;AACA,IAAI8jD,IAAI,GAAG,OAAOt9C,GAAP,KAAe,UAAf,IAA6BA,GAAG,CAAC2B,SAAjC,GAA6C3B,GAA7C,GAAmD,IAA9D;AAEA,IAAIgnG,QAAJ;;AAEA,IAAI,CAACrlD,IAAL,EAAW;AACV;AACAqlD,UAAQ,GAAG,SAAS3kD,KAAT,CAAehvD,CAAf,EAAkB;AAC5B;AACA,WAAO,KAAP;AACA,GAHD;AAIA;;AAED,IAAIkqD,OAAO,GAAGoE,IAAI,GAAGnoD,GAAG,CAACmI,SAAJ,CAAchE,GAAjB,GAAuB,IAAzC;AACA,IAAIigD,OAAO,GAAGN,IAAI,GAAGt9C,GAAG,CAAC2B,SAAJ,CAAchE,GAAjB,GAAuB,IAAzC;;AACA,IAAI,CAACqpG,QAAD,IAAa,CAACzpD,OAAlB,EAA2B;AAC1B;AACAypD,UAAQ,GAAG,SAAS3kD,KAAT,CAAehvD,CAAf,EAAkB;AAC5B;AACA,WAAO,KAAP;AACA,GAHD;AAIA;;AAEDsT,MAAM,CAACC,OAAP,GAAiBogG,QAAQ,IAAI,SAAS3kD,KAAT,CAAehvD,CAAf,EAAkB;AAC9C,MAAI,CAACA,CAAD,IAAM,OAAOA,CAAP,KAAa,QAAvB,EAAiC;AAChC,WAAO,KAAP;AACA;;AACD,MAAI;AACHkqD,WAAO,CAAC/6C,IAAR,CAAanP,CAAb;;AACA,QAAIuqD,OAAJ,EAAa;AACZ,UAAI;AACHA,eAAO,CAACp7C,IAAR,CAAanP,CAAb;AACA,OAFD,CAEE,OAAO4b,CAAP,EAAU;AACX,eAAO,IAAP;AACA;AACD;;AACD,WAAO5b,CAAC,YAAYsuD,IAApB,CATG,CASuB;AAC1B,GAVD,CAUE,OAAO1yC,CAAP,EAAU,CAAE;;AACd,SAAO,KAAP;AACA,CAhBD,C;;;;;;;;;;;;ACzBa;;AAEb,IAAIg4F,QAAQ,GAAG/9G,MAAM,CAACyY,SAAP,CAAiBY,QAAhC;;AACA,IAAI2kG,eAAe,GAAG,SAASA,eAAT,CAAyBhiH,KAAzB,EAAgC;AACrD,MAAI;AACH+hH,YAAQ,CAACzkG,IAAT,CAActd,KAAd;AACA,WAAO,IAAP;AACA,GAHD,CAGE,OAAO+pB,CAAP,EAAU;AACX,WAAO,KAAP;AACA;AACD,CAPD;;AAQA,IAAI8xC,KAAK,GAAGx4D,MAAM,CAACoZ,SAAP,CAAiBY,QAA7B;AACA,IAAI4kG,QAAQ,GAAG,iBAAf;;AACA,IAAIxB,cAAc,GAAG5+F,mBAAO,CAAC,sEAAD,CAAP,EAArB;;AAEAJ,MAAM,CAACC,OAAP,GAAiB,SAASwgG,cAAT,CAAwBliH,KAAxB,EAA+B;AAC/C,MAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAC9B,WAAO,IAAP;AACA;;AACD,MAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAC9B,WAAO,KAAP;AACA;;AACD,SAAOygH,cAAc,GAAGuB,eAAe,CAAChiH,KAAD,CAAlB,GAA4B67D,KAAK,CAACv+C,IAAN,CAAWtd,KAAX,MAAsBiiH,QAAvE;AACA,CARD,C;;;;;;;;;;;;ACfa;;AAEb,IAAItqD,SAAS,GAAG91C,mBAAO,CAAC,kEAAD,CAAvB;;AACA,IAAI4+F,cAAc,GAAG5+F,mBAAO,CAAC,sEAAD,CAAP,EAArB;;AACA,IAAIpJ,GAAJ;AACA,IAAI0pG,KAAJ;AACA,IAAIC,aAAJ;AACA,IAAIC,cAAJ;;AAEA,IAAI5B,cAAJ,EAAoB;AACnBhoG,KAAG,GAAGk/C,SAAS,CAAC,iCAAD,CAAf;AACAwqD,OAAK,GAAGxqD,SAAS,CAAC,uBAAD,CAAjB;AACAyqD,eAAa,GAAG,EAAhB;;AAEA,MAAIE,gBAAgB,GAAG,YAAY;AAClC,UAAMF,aAAN;AACA,GAFD;;AAGAC,gBAAc,GAAG;AAChBhlG,YAAQ,EAAEilG,gBADM;AAEhB35G,WAAO,EAAE25G;AAFO,GAAjB;;AAKA,MAAI,OAAOn+G,MAAM,CAACo+G,WAAd,KAA8B,QAAlC,EAA4C;AAC3CF,kBAAc,CAACl+G,MAAM,CAACo+G,WAAR,CAAd,GAAqCD,gBAArC;AACA;AACD;;AAED,IAAI5B,SAAS,GAAG/oD,SAAS,CAAC,2BAAD,CAAzB;AACA,IAAI6qD,IAAI,GAAGn/G,MAAM,CAACy7D,wBAAlB;AACA,IAAI2jD,UAAU,GAAG,iBAAjB;AAEAhhG,MAAM,CAACC,OAAP,GAAiB++F,cAAc,CAC9B;AAD8B,EAE5B,SAAShpD,OAAT,CAAiBz3D,KAAjB,EAAwB;AACzB,MAAI,CAACA,KAAD,IAAU,OAAOA,KAAP,KAAiB,QAA/B,EAAyC;AACxC,WAAO,KAAP;AACA;;AAED,MAAIsgH,UAAU,GAAGkC,IAAI,CAACxiH,KAAD,EAAQ,WAAR,CAArB;AACA,MAAI0iH,wBAAwB,GAAGpC,UAAU,IAAI7nG,GAAG,CAAC6nG,UAAD,EAAa,OAAb,CAAhD;;AACA,MAAI,CAACoC,wBAAL,EAA+B;AAC9B,WAAO,KAAP;AACA;;AAED,MAAI;AACHP,SAAK,CAACniH,KAAD,EAAQqiH,cAAR,CAAL;AACA,GAFD,CAEE,OAAOt4F,CAAP,EAAU;AACX,WAAOA,CAAC,KAAKq4F,aAAb;AACA;AACD,CAlB6B,GAmB5B,SAAS3qD,OAAT,CAAiBz3D,KAAjB,EAAwB;AACzB;AACA,MAAI,CAACA,KAAD,IAAW,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,OAAOA,KAAP,KAAiB,UAA7D,EAA0E;AACzE,WAAO,KAAP;AACA;;AAED,SAAO0gH,SAAS,CAAC1gH,KAAD,CAAT,KAAqByiH,UAA5B;AACA,CA1BF,C;;;;;;;;;;;;AC/Ba;;AAEb,IAAIhmD,IAAI,GAAG,OAAOnoD,GAAP,KAAe,UAAf,IAA6BA,GAAG,CAACmI,SAAjC,GAA6CnI,GAA7C,GAAmD,IAA9D;AACA,IAAI8jD,IAAI,GAAG,OAAOt9C,GAAP,KAAe,UAAf,IAA6BA,GAAG,CAAC2B,SAAjC,GAA6C3B,GAA7C,GAAmD,IAA9D;AAEA,IAAIgnG,QAAJ;;AAEA,IAAI,CAAC1pD,IAAL,EAAW;AACV;AACA0pD,UAAQ,GAAG,SAAS1kD,KAAT,CAAejvD,CAAf,EAAkB;AAC5B;AACA,WAAO,KAAP;AACA,GAHD;AAIA;;AAED,IAAIkqD,OAAO,GAAGoE,IAAI,GAAGnoD,GAAG,CAACmI,SAAJ,CAAchE,GAAjB,GAAuB,IAAzC;AACA,IAAIigD,OAAO,GAAGN,IAAI,GAAGt9C,GAAG,CAAC2B,SAAJ,CAAchE,GAAjB,GAAuB,IAAzC;;AACA,IAAI,CAACqpG,QAAD,IAAa,CAACppD,OAAlB,EAA2B;AAC1B;AACAopD,UAAQ,GAAG,SAAS1kD,KAAT,CAAejvD,CAAf,EAAkB;AAC5B;AACA,WAAO,KAAP;AACA,GAHD;AAIA;;AAEDsT,MAAM,CAACC,OAAP,GAAiBogG,QAAQ,IAAI,SAAS1kD,KAAT,CAAejvD,CAAf,EAAkB;AAC9C,MAAI,CAACA,CAAD,IAAM,OAAOA,CAAP,KAAa,QAAvB,EAAiC;AAChC,WAAO,KAAP;AACA;;AACD,MAAI;AACHuqD,WAAO,CAACp7C,IAAR,CAAanP,CAAb;;AACA,QAAIkqD,OAAJ,EAAa;AACZ,UAAI;AACHA,eAAO,CAAC/6C,IAAR,CAAanP,CAAb;AACA,OAFD,CAEE,OAAO4b,CAAP,EAAU;AACX,eAAO,IAAP;AACA;AACD;;AACD,WAAO5b,CAAC,YAAYiqD,IAApB,CATG,CASuB;AAC1B,GAVD,CAUE,OAAOruC,CAAP,EAAU,CAAE;;AACd,SAAO,KAAP;AACA,CAhBD,C;;;;;;;;;;;;ACzBa;;AAEb,IAAI44F,QAAQ,GAAG1+E,MAAM,CAACxnB,SAAP,CAAiB9T,OAAhC;;AACA,IAAIi6G,eAAe,GAAG,SAASA,eAAT,CAAyB5iH,KAAzB,EAAgC;AACrD,MAAI;AACH2iH,YAAQ,CAACrlG,IAAT,CAActd,KAAd;AACA,WAAO,IAAP;AACA,GAHD,CAGE,OAAO+pB,CAAP,EAAU;AACX,WAAO,KAAP;AACA;AACD,CAPD;;AAQA,IAAI8xC,KAAK,GAAGx4D,MAAM,CAACoZ,SAAP,CAAiBY,QAA7B;AACA,IAAIwlG,QAAQ,GAAG,iBAAf;;AACA,IAAIpC,cAAc,GAAG5+F,mBAAO,CAAC,sEAAD,CAAP,EAArB;;AAEAJ,MAAM,CAACC,OAAP,GAAiB,SAAS7C,QAAT,CAAkB7e,KAAlB,EAAyB;AACzC,MAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAC9B,WAAO,IAAP;AACA;;AACD,MAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAC9B,WAAO,KAAP;AACA;;AACD,SAAOygH,cAAc,GAAGmC,eAAe,CAAC5iH,KAAD,CAAlB,GAA4B67D,KAAK,CAACv+C,IAAN,CAAWtd,KAAX,MAAsB6iH,QAAvE;AACA,CARD,C;;;;;;;;;;;;ACfa;;AAEb,IAAIhnD,KAAK,GAAGx4D,MAAM,CAACoZ,SAAP,CAAiBY,QAA7B;;AACA,IAAIu+C,UAAU,GAAG/5C,mBAAO,CAAC,wDAAD,CAAP,EAAjB;;AAEA,IAAI+5C,UAAJ,EAAgB;AACf,MAAIknD,QAAQ,GAAG3+G,MAAM,CAACsY,SAAP,CAAiBY,QAAhC;AACA,MAAI0lG,cAAc,GAAG,gBAArB;;AACA,MAAIC,cAAc,GAAG,SAASC,kBAAT,CAA4BjjH,KAA5B,EAAmC;AACvD,QAAI,OAAOA,KAAK,CAAC2I,OAAN,EAAP,KAA2B,QAA/B,EAAyC;AACxC,aAAO,KAAP;AACA;;AACD,WAAOo6G,cAAc,CAAC98F,IAAf,CAAoB68F,QAAQ,CAACxlG,IAAT,CAActd,KAAd,CAApB,CAAP;AACA,GALD;;AAOAyhB,QAAM,CAACC,OAAP,GAAiB,SAASyvB,QAAT,CAAkBnxC,KAAlB,EAAyB;AACzC,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAC9B,aAAO,IAAP;AACA;;AACD,QAAI67D,KAAK,CAACv+C,IAAN,CAAWtd,KAAX,MAAsB,iBAA1B,EAA6C;AAC5C,aAAO,KAAP;AACA;;AACD,QAAI;AACH,aAAOgjH,cAAc,CAAChjH,KAAD,CAArB;AACA,KAFD,CAEE,OAAO+pB,CAAP,EAAU;AACX,aAAO,KAAP;AACA;AACD,GAZD;AAaA,CAvBD,MAuBO;AAENtI,QAAM,CAACC,OAAP,GAAiB,SAASyvB,QAAT,CAAkBnxC,KAAlB,EAAyB;AACzC;AACA,WAAO,MAAK,IAAIA,KAAhB;AACA,GAHD;AAIA,C;;;;;;;;;;;;AClCY;;AAEb,IAAI2S,OAAO,GAAGkP,mBAAO,CAAC,gDAAD,CAArB;;AACA,IAAIqgB,oBAAoB,GAAGrgB,mBAAO,CAAC,8EAAD,CAAlC;;AACA,IAAI81C,SAAS,GAAG91C,mBAAO,CAAC,kEAAD,CAAvB;;AAEA,IAAI6+F,SAAS,GAAG/oD,SAAS,CAAC,2BAAD,CAAzB;;AACA,IAAI8oD,cAAc,GAAG5+F,mBAAO,CAAC,sEAAD,CAAP,EAArB;;AAEA,IAAIkgB,CAAC,GAAG,OAAOC,UAAP,KAAsB,WAAtB,GAAoCC,MAApC,GAA6CD,UAArD;AACA,IAAIkhF,WAAW,GAAGhhF,oBAAoB,EAAtC;;AAEA,IAAII,QAAQ,GAAGq1B,SAAS,CAAC,yBAAD,EAA4B,IAA5B,CAAT,IAA8C,SAASlpD,OAAT,CAAiBG,KAAjB,EAAwB5O,KAAxB,EAA+B;AAC3F,OAAK,IAAIsf,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG1Q,KAAK,CAACnI,MAA1B,EAAkC6Y,CAAC,IAAI,CAAvC,EAA0C;AACzC,QAAI1Q,KAAK,CAAC0Q,CAAD,CAAL,KAAatf,KAAjB,EAAwB;AACvB,aAAOsf,CAAP;AACA;AACD;;AACD,SAAO,CAAC,CAAR;AACA,CAPD;;AAQA,IAAI6jG,MAAM,GAAGxrD,SAAS,CAAC,wBAAD,CAAtB;AACA,IAAIyrD,SAAS,GAAG,EAAhB;;AACA,IAAIZ,IAAI,GAAG3gG,mBAAO,CAAC,oHAAD,CAAlB;;AACA,IAAIq2C,cAAc,GAAG70D,MAAM,CAAC60D,cAA5B,C,CAA4C;;AAC5C,IAAIuoD,cAAc,IAAI+B,IAAlB,IAA0BtqD,cAA9B,EAA8C;AAC7CvlD,SAAO,CAACuwG,WAAD,EAAc,UAAUG,UAAV,EAAsB;AAC1C,QAAI1nD,GAAG,GAAG,IAAI55B,CAAC,CAACshF,UAAD,CAAL,EAAV;;AACA,QAAIl/G,MAAM,CAACq8G,WAAP,IAAsB7kD,GAA1B,EAA+B;AAC9B,UAAI2nD,KAAK,GAAGprD,cAAc,CAACyD,GAAD,CAA1B;AACA,UAAI2kD,UAAU,GAAGkC,IAAI,CAACc,KAAD,EAAQn/G,MAAM,CAACq8G,WAAf,CAArB;;AACA,UAAI,CAACF,UAAL,EAAiB;AAChB,YAAIiD,UAAU,GAAGrrD,cAAc,CAACorD,KAAD,CAA/B;AACAhD,kBAAU,GAAGkC,IAAI,CAACe,UAAD,EAAap/G,MAAM,CAACq8G,WAApB,CAAjB;AACA;;AACD4C,eAAS,CAACC,UAAD,CAAT,GAAwB/C,UAAU,CAAC59G,GAAnC;AACA;AACD,GAXM,CAAP;AAYA;;AAED,IAAI8gH,cAAc,GAAG,SAASC,iBAAT,CAA2BzjH,KAA3B,EAAkC;AACtD,MAAI0jH,OAAO,GAAG,KAAd;AACA/wG,SAAO,CAACywG,SAAD,EAAY,UAAUO,MAAV,EAAkBN,UAAlB,EAA8B;AAChD,QAAI,CAACK,OAAL,EAAc;AACb,UAAI;AACHA,eAAO,GAAGC,MAAM,CAACrmG,IAAP,CAAYtd,KAAZ,MAAuBqjH,UAAjC;AACA,OAFD,CAEE,OAAOt5F,CAAP,EAAU;AAAE;AAAM;AACpB;AACD,GANM,CAAP;AAOA,SAAO25F,OAAP;AACA,CAVD;;AAYAjiG,MAAM,CAACC,OAAP,GAAiB,SAASkiG,YAAT,CAAsB5jH,KAAtB,EAA6B;AAC7C,MAAI,CAACA,KAAD,IAAU,OAAOA,KAAP,KAAiB,QAA/B,EAAyC;AAAE,WAAO,KAAP;AAAe;;AAC1D,MAAI,CAACygH,cAAD,IAAmB,EAAEt8G,MAAM,CAACq8G,WAAP,IAAsBxgH,KAAxB,CAAvB,EAAuD;AACtD,QAAI6jH,GAAG,GAAGV,MAAM,CAACzC,SAAS,CAAC1gH,KAAD,CAAV,EAAmB,CAAnB,EAAsB,CAAC,CAAvB,CAAhB;AACA,WAAOsiC,QAAQ,CAAC4gF,WAAD,EAAcW,GAAd,CAAR,GAA6B,CAAC,CAArC;AACA;;AACD,MAAI,CAACrB,IAAL,EAAW;AAAE,WAAO,KAAP;AAAe;;AAC5B,SAAOgB,cAAc,CAACxjH,KAAD,CAArB;AACA,CARD,C;;;;;;;;;;;;ACnDa;;AAEb,IAAI8jH,QAAQ,GAAG,OAAOvrG,OAAP,KAAmB,UAAnB,IAAiCA,OAAO,CAACkE,SAAzC,GAAqDlE,OAArD,GAA+D,IAA9E;AACA,IAAIwrG,QAAQ,GAAG,OAAO9iD,OAAP,KAAmB,UAAnB,IAAiCA,OAAO,CAACxkD,SAAzC,GAAqDwkD,OAArD,GAA+D,IAA9E;AAEA,IAAI6gD,QAAJ;;AAEA,IAAI,CAACgC,QAAL,EAAe;AACd;AACAhC,UAAQ,GAAG,SAASkC,SAAT,CAAmB71G,CAAnB,EAAsB;AAChC;AACA,WAAO,KAAP;AACA,GAHD;AAIA;;AAED,IAAIkqD,OAAO,GAAGyrD,QAAQ,GAAGA,QAAQ,CAACrnG,SAAT,CAAmBhE,GAAtB,GAA4B,IAAlD;AACA,IAAIigD,OAAO,GAAGqrD,QAAQ,GAAGA,QAAQ,CAACtnG,SAAT,CAAmBhE,GAAtB,GAA4B,IAAlD;;AACA,IAAI,CAACqpG,QAAD,IAAa,CAACzpD,OAAlB,EAA2B;AAC1B;AACAypD,UAAQ,GAAG,SAASkC,SAAT,CAAmB71G,CAAnB,EAAsB;AAChC;AACA,WAAO,KAAP;AACA,GAHD;AAIA;;AAEDsT,MAAM,CAACC,OAAP,GAAiBogG,QAAQ,IAAI,SAASkC,SAAT,CAAmB71G,CAAnB,EAAsB;AAClD,MAAI,CAACA,CAAD,IAAM,OAAOA,CAAP,KAAa,QAAvB,EAAiC;AAChC,WAAO,KAAP;AACA;;AACD,MAAI;AACHkqD,WAAO,CAAC/6C,IAAR,CAAanP,CAAb,EAAgBkqD,OAAhB;;AACA,QAAIK,OAAJ,EAAa;AACZ,UAAI;AACHA,eAAO,CAACp7C,IAAR,CAAanP,CAAb,EAAgBuqD,OAAhB;AACA,OAFD,CAEE,OAAO3uC,CAAP,EAAU;AACX,eAAO,IAAP;AACA;AACD;;AACD,WAAO5b,CAAC,YAAY21G,QAApB,CATG,CAS2B;AAC9B,GAVD,CAUE,OAAO/5F,CAAP,EAAU,CAAE;;AACd,SAAO,KAAP;AACA,CAhBD,C;;;;;;;;;;;;ACzBa;;AAEb,IAAIqY,YAAY,GAAGvgB,mBAAO,CAAC,4DAAD,CAA1B;;AACA,IAAI81C,SAAS,GAAG91C,mBAAO,CAAC,kEAAD,CAAvB;;AAEA,IAAIkiG,QAAQ,GAAG3hF,YAAY,CAAC,WAAD,EAAc,IAAd,CAA3B;AAEA,IAAIs2B,OAAO,GAAGf,SAAS,CAAC,uBAAD,EAA0B,IAA1B,CAAvB;;AAEA,IAAIe,OAAJ,EAAa;AACZ,MAAIL,OAAO,GAAGV,SAAS,CAAC,uBAAD,EAA0B,IAA1B,CAAvB;;AAEAl2C,QAAM,CAACC,OAAP,GAAiB,SAASuiG,SAAT,CAAmB91G,CAAnB,EAAsB;AACtC,QAAI,CAACA,CAAD,IAAM,OAAOA,CAAP,KAAa,QAAvB,EAAiC;AAChC,aAAO,KAAP;AACA;;AACD,QAAI;AACHuqD,aAAO,CAACvqD,CAAD,EAAIuqD,OAAJ,CAAP;;AACA,UAAIL,OAAJ,EAAa;AACZ,YAAI;AACHA,iBAAO,CAAClqD,CAAD,EAAIkqD,OAAJ,CAAP;AACA,SAFD,CAEE,OAAOtuC,CAAP,EAAU;AACX,iBAAO,IAAP;AACA;AACD;;AACD,aAAO5b,CAAC,YAAY41G,QAApB,CATG,CAS2B;AAC9B,KAVD,CAUE,OAAOh6F,CAAP,EAAU,CAAE;;AACd,WAAO,KAAP;AACA,GAhBD;AAiBA,CApBD,MAoBO;AACN;AACAtI,QAAM,CAACC,OAAP,GAAiB,SAASuiG,SAAT,CAAmB91G,CAAnB,EAAsB;AACtC;AACA,WAAO,KAAP;AACA,GAHD;AAIA,C;;;;;;;;;;;ACnCD,IAAI3K,GAAG,GAAGqe,mBAAO,CAAC,oDAAD,CAAjB;;AAEA,IAAIqiG,cAAc,GAAG,UAASC,YAAT,EAAuB;AACxC,MAAIC,UAAU,GAAGD,YAAY,CAACrjG,KAAb,CAAmB,GAAnB,CAAjB;;AACA,MAAIsjG,UAAU,CAAC39G,MAAX,IAAqB,CAAzB,EAA4B;AACxB,WAAO29G,UAAU,CAAC/8G,GAAX,EAAP;AACH;;AACD+8G,YAAU,GAAGD,YAAY,CAACrjG,KAAb,CAAmB,GAAnB,CAAb;;AACA,MAAIsjG,UAAU,CAAC39G,MAAX,IAAqB,CAAzB,EAA4B;AACxB,WAAO29G,UAAU,CAAC/8G,GAAX,EAAP;AACH;;AACD,SAAO88G,YAAP;AACH,CAVD;;AAYAziG,OAAO,CAAC+wB,WAAR,GAAsB,UAASD,MAAT,EAAiB;AACnC,MAAI6xE,WAAW,GAAGH,cAAc,CAAC1xE,MAAD,CAAd,CAAuB9hB,WAAvB,EAAlB;;AACA,MAAI2zF,WAAW,IAAI7gH,GAAnB,EAAwB;AACpB,WAAOA,GAAG,CAAC6gH,WAAD,CAAV;AACH;;AACD,SAAO,IAAP;AACH,CAND;;AAQA3iG,OAAO,CAAC4iG,UAAR,GAAqB,UAASrxE,YAAT,EAAuB;AACxCA,cAAY,GAAGA,YAAY,CAACviB,WAAb,EAAf;AACA,MAAI6zF,OAAO,GAAG,EAAd;;AACA,OAAKF,WAAL,IAAoB7gH,GAApB,EAAyB;AACrB,QAAIA,GAAG,CAAC6gH,WAAD,CAAH,KAAqBpxE,YAAzB,EAAuC;AACnCsxE,aAAO,CAACj/G,IAAR,CAAa++G,WAAb;AACH;AACJ;;AACD,SAAOE,OAAP;AACH,CATD,C;;;;;;;;;;;ACtBA;AACA,IAAI/gH,GAAG,GAAG;AACVghH,IAAE,EAAE,KADM;AAEVC,IAAE,EAAE,KAFM;AAGVC,IAAE,EAAE,KAHM;AAIVC,IAAE,EAAE,KAJM;AAKVC,IAAE,EAAE,KALM;AAMVC,IAAE,EAAE,KANM;AAOVC,IAAE,EAAE,KAPM;AAQVC,IAAE,EAAE,KARM;AASVC,IAAE,EAAE,KATM;AAUVC,IAAE,EAAE,KAVM;AAWVC,IAAE,EAAE,KAXM;AAYVC,IAAE,EAAE,KAZM;AAaVC,IAAE,EAAE,KAbM;AAcVC,IAAE,EAAE,KAdM;AAeVC,IAAE,EAAE,KAfM;AAgBVC,IAAE,EAAE,KAhBM;AAiBVC,IAAE,EAAE,KAjBM;AAkBVC,IAAE,EAAE,KAlBM;AAmBVC,IAAE,EAAE,KAnBM;AAoBVC,IAAE,EAAE,KApBM;AAqBVC,IAAE,EAAE,KArBM;AAsBVC,IAAE,EAAE,KAtBM;AAuBVC,IAAE,EAAE,KAvBM;AAwBVC,IAAE,EAAE,KAxBM;AAyBVC,IAAE,EAAE,KAzBM;AA0BVC,IAAE,EAAE,KA1BM;AA2BVC,IAAE,EAAE,KA3BM;AA4BVC,IAAE,EAAE,KA5BM;AA6BVC,IAAE,EAAE,KA7BM;AA8BVC,IAAE,EAAE,KA9BM;AA+BV/mC,IAAE,EAAE,KA/BM;AAgCVgnC,IAAE,EAAE,KAhCM;AAiCVC,IAAE,EAAE,KAjCM;AAkCVC,IAAE,EAAE,KAlCM;AAmCVC,IAAE,EAAE,KAnCM;AAoCVC,IAAE,EAAE,KApCM;AAqCVC,IAAE,EAAE,KArCM;AAsCVC,IAAE,EAAE,KAtCM;AAuCVC,IAAE,EAAE,KAvCM;AAwCVC,IAAE,EAAE,KAxCM;AAyCVC,IAAE,EAAE,KAzCM;AA0CVC,IAAE,EAAE,KA1CM;AA2CVC,IAAE,EAAE,KA3CM;AA4CVC,IAAE,EAAE,KA5CM;AA6CVC,IAAE,EAAE,KA7CM;AA8CVC,IAAE,EAAE,KA9CM;AA+CVC,IAAE,EAAE,KA/CM;AAgDVC,IAAE,EAAE,KAhDM;AAiDVC,IAAE,EAAE,KAjDM;AAkDVC,IAAE,EAAE,KAlDM;AAmDVC,IAAE,EAAE,KAnDM;AAoDVC,IAAE,EAAE,KApDM;AAqDVC,IAAE,EAAE,KArDM;AAsDVC,IAAE,EAAE,KAtDM;AAuDVC,IAAE,EAAE,KAvDM;AAwDVC,IAAE,EAAE,KAxDM;AAyDVC,IAAE,EAAE,KAzDM;AA0DVC,IAAE,EAAE,KA1DM;AA2DVC,IAAE,EAAE,KA3DM;AA4DVC,IAAE,EAAE,KA5DM;AA6DVC,IAAE,EAAE,KA7DM;AA8DVC,IAAE,EAAE,KA9DM;AA+DVC,IAAE,EAAE,KA/DM;AAgEVC,IAAE,EAAE,KAhEM;AAiEVC,IAAE,EAAE,KAjEM;AAkEVC,IAAE,EAAE,KAlEM;AAmEVC,IAAE,EAAE,KAnEM;AAoEVC,IAAE,EAAE,KApEM;AAqEVC,IAAE,EAAE,KArEM;AAsEVC,IAAE,EAAE,KAtEM;AAuEVC,IAAE,EAAE,KAvEM;AAwEVC,IAAE,EAAE,KAxEM;AAyEVC,IAAE,EAAE,KAzEM;AA0EVC,IAAE,EAAE,KA1EM;AA2EVC,IAAE,EAAE,KA3EM;AA4EVC,IAAE,EAAE,KA5EM;AA6EVC,IAAE,EAAE,KA7EM;AA8EVC,IAAE,EAAE,KA9EM;AA+EVC,IAAE,EAAE,KA/EM;AAgFVC,IAAE,EAAE,KAhFM;AAiFVC,IAAE,EAAE,KAjFM;AAkFVC,IAAE,EAAE,KAlFM;AAmFVC,IAAE,EAAE,KAnFM;AAoFVC,IAAE,EAAE,KApFM;AAqFVC,IAAE,EAAE,KArFM;AAsFVC,IAAE,EAAE,KAtFM;AAuFVC,IAAE,EAAE,KAvFM;AAwFVC,IAAE,EAAE,KAxFM;AAyFVC,IAAE,EAAE,KAzFM;AA0FVC,IAAE,EAAE,KA1FM;AA2FVC,IAAE,EAAE,KA3FM;AA4FVC,IAAE,EAAE,KA5FM;AA6FVC,IAAE,EAAE,KA7FM;AA8FVC,IAAE,EAAE,KA9FM;AA+FVC,IAAE,EAAE,KA/FM;AAgGVC,IAAE,EAAE,KAhGM;AAiGVC,IAAE,EAAE,KAjGM;AAkGVzoC,IAAE,EAAE,KAlGM;AAmGV0oC,IAAE,EAAE,KAnGM;AAoGVC,IAAE,EAAE,KApGM;AAqGVC,IAAE,EAAE,KArGM;AAsGVvpB,IAAE,EAAE,KAtGM;AAuGVwpB,IAAE,EAAE,KAvGM;AAwGVC,IAAE,EAAE,KAxGM;AAyGVC,IAAE,EAAE,KAzGM;AA0GVC,IAAE,EAAE,KA1GM;AA2GVC,IAAE,EAAE,KA3GM;AA4GVC,IAAE,EAAE,KA5GM;AA6GVC,IAAE,EAAE,KA7GM;AA8GVC,IAAE,EAAE,KA9GM;AA+GVC,IAAE,EAAE,KA/GM;AAgHVC,IAAE,EAAE,KAhHM;AAiHVC,IAAE,EAAE,KAjHM;AAkHVC,IAAE,EAAE,KAlHM;AAmHVC,IAAE,EAAE,KAnHM;AAoHVC,IAAE,EAAE,KApHM;AAqHVC,IAAE,EAAE,KArHM;AAsHVC,IAAE,EAAE,KAtHM;AAuHVC,IAAE,EAAE,KAvHM;AAwHVC,IAAE,EAAE,KAxHM;AAyHVC,IAAE,EAAE,KAzHM;AA0HVC,IAAE,EAAE,KA1HM;AA2HVC,IAAE,EAAE,KA3HM;AA4HVC,IAAE,EAAE,KA5HM;AA6HVC,IAAE,EAAE,KA7HM;AA8HVC,IAAE,EAAE,KA9HM;AA+HVC,IAAE,EAAE,KA/HM;AAgIVC,IAAE,EAAE,KAhIM;AAiIV3pC,IAAE,EAAE,KAjIM;AAkIV4pC,IAAE,EAAE,KAlIM;AAmIVC,IAAE,EAAE,KAnIM;AAoIVC,IAAE,EAAE,KApIM;AAqIVC,IAAE,EAAE,KArIM;AAsIVC,IAAE,EAAE,KAtIM;AAuIVC,IAAE,EAAE,KAvIM;AAwIVC,IAAE,EAAE,KAxIM;AAyIVC,IAAE,EAAE,KAzIM;AA0IVC,IAAE,EAAE,KA1IM;AA2IVC,IAAE,EAAE,KA3IM;AA4IVC,IAAE,EAAE,KA5IM;AA6IVC,IAAE,EAAE,KA7IM;AA8IVC,IAAE,EAAE,KA9IM;AA+IVC,IAAE,EAAE,KA/IM;AAgJVC,IAAE,EAAE,KAhJM;AAiJVC,IAAE,EAAE,KAjJM;AAkJVC,IAAE,EAAE,KAlJM;AAmJVC,IAAE,EAAE,KAnJM;AAoJVC,IAAE,EAAE,KApJM;AAqJVC,IAAE,EAAE,KArJM;AAsJVC,IAAE,EAAE,KAtJM;AAuJVC,IAAE,EAAE,KAvJM;AAwJVC,IAAE,EAAE,KAxJM;AAyJVC,IAAE,EAAE,KAzJM;AA0JVC,IAAE,EAAE,KA1JM;AA2JVC,IAAE,EAAE,KA3JM;AA4JVC,IAAE,EAAE,KA5JM;AA6JVC,IAAE,EAAE,KA7JM;AA8JVC,IAAE,EAAE,KA9JM;AA+JVC,IAAE,EAAE,KA/JM;AAgKVC,IAAE,EAAE,KAhKM;AAiKVC,IAAE,EAAE,KAjKM;AAkKVC,IAAE,EAAE,KAlKM;AAmKVC,IAAE,EAAE,KAnKM;AAoKVC,IAAE,EAAE,KApKM;AAqKVC,IAAE,EAAE,KArKM;AAsKVC,IAAE,EAAE,KAtKM;AAuKVC,IAAE,EAAE,KAvKM;AAwKVC,IAAE,EAAE,KAxKM;AAyKVC,IAAE,EAAE,KAzKM;AA0KVC,IAAE,EAAE,KA1KM;AA2KVC,IAAE,EAAE,KA3KM;AA4KVC,IAAE,EAAE,KA5KM;AA6KVC,IAAE,EAAE,KA7KM;AA8KVC,IAAE,EAAE,KA9KM;AA+KVC,IAAE,EAAE,KA/KM;AAgLVC,IAAE,EAAE,KAhLM;AAiLVC,IAAE,EAAE,KAjLM;AAkLVC,IAAE,EAAE,KAlLM;AAmLVC,IAAE,EAAE,KAnLM;AAoLVC,IAAE,EAAE,KApLM;AAqLVC,IAAE,EAAE,KArLM;AAsLVC,IAAE,EAAE,KAtLM;AAuLVC,IAAE,EAAE,KAvLM;AAwLVC,IAAE,EAAE,KAxLM;AAyLVC,IAAE,EAAE,KAzLM;AA0LVC,IAAE,EAAE,KA1LM;AA2LVC,IAAE,EAAE,KA3LM;AA4LVC,IAAE,EAAE,KA5LM;AA6LVC,IAAE,EAAE,KA7LM;AA8LVC,IAAE,EAAE,KA9LM;AA+LVC,IAAE,EAAE,KA/LM;AAgMVC,IAAE,EAAE,KAhMM;AAiMVC,IAAE,EAAE,KAjMM;AAkMVC,IAAE,EAAE,KAlMM;AAmMVC,IAAE,EAAE,KAnMM;AAoMVC,IAAE,EAAE,KApMM;AAqMVC,IAAE,EAAE,KArMM;AAsMVC,IAAE,EAAE,KAtMM;AAuMVC,IAAE,EAAE,KAvMM;AAwMVC,IAAE,EAAE,KAxMM;AAyMVC,IAAE,EAAE,KAzMM;AA0MVC,IAAE,EAAE,KA1MM;AA2MVC,IAAE,EAAE,KA3MM;AA4MVC,IAAE,EAAE,KA5MM;AA6MVC,IAAE,EAAE,KA7MM;AA8MVC,IAAE,EAAE,KA9MM;AA+MVC,IAAE,EAAE,KA/MM;AAgNVC,IAAE,EAAE,KAhNM;AAiNVC,IAAE,EAAE,KAjNM;AAkNVC,IAAE,EAAE,KAlNM;AAmNVC,IAAE,EAAE,KAnNM;AAoNVC,IAAE,EAAE,KApNM;AAqNVC,IAAE,EAAE,KArNM;AAsNVrsC,IAAE,EAAE,KAtNM;AAuNVssC,IAAE,EAAE,KAvNM;AAwNVC,IAAE,EAAE,KAxNM;AAyNVnsC,IAAE,EAAE,KAzNM;AA0NVosC,IAAE,EAAE,KA1NM;AA2NVC,IAAE,EAAE,KA3NM;AA4NVC,IAAE,EAAE,KA5NM;AA6NVC,IAAE,EAAE,KA7NM;AA8NVC,IAAE,EAAE,KA9NM;AA+NVC,IAAE,EAAE,KA/NM;AAgOVrsC,IAAE,EAAE,KAhOM;AAiOVE,IAAE,EAAE,KAjOM;AAkOVosC,IAAE,EAAE,KAlOM;AAmOVC,IAAE,EAAE,KAnOM;AAoOVC,IAAE,EAAE,KApOM;AAqOVC,IAAE,EAAE,KArOM;AAsOVC,IAAE,EAAE,KAtOM;AAuOVC,IAAE,EAAE,KAvOM;AAwOVC,IAAE,EAAE,KAxOM;AAyOVC,IAAE,EAAE,KAzOM;AA0OVC,IAAE,EAAE,KA1OM;AA2OVC,IAAE,EAAE,KA3OM;AA4OVC,IAAE,EAAE,KA5OM;AA6OVC,IAAE,EAAE,KA7OM;AA8OVC,IAAE,EAAE,KA9OM;AA+OVC,IAAE,EAAE,KA/OM;AAgPVC,IAAE,EAAE,KAhPM;AAiPVC,IAAE,EAAE,KAjPM;AAkPVC,IAAE,EAAE,KAlPM;AAmPVC,IAAE,EAAE,KAnPM;AAoPVC,IAAE,EAAE,KApPM;AAqPVC,IAAE,EAAE,KArPM;AAsPVC,IAAE,EAAE,KAtPM;AAuPVC,IAAE,EAAE,KAvPM;AAwPVC,IAAE,EAAE;AAxPM,CAAV;AA2PA9xG,MAAM,CAACC,OAAP,GAAiBle,GAAjB,C;;;;;;;;;;;;CC1PA;;AACA,MAAMgwH,OAAO,GAAG3xG,mBAAO,CAAC,yEAAD,CAAvB;;AAEA,MAAM4xG,GAAG,GAAGtvH,MAAM,CAAC,KAAD,CAAlB;AACA,MAAMuvH,MAAM,GAAGvvH,MAAM,CAAC,QAAD,CAArB;AACA,MAAMwvH,iBAAiB,GAAGxvH,MAAM,CAAC,kBAAD,CAAhC;AACA,MAAMyvH,WAAW,GAAGzvH,MAAM,CAAC,YAAD,CAA1B;AACA,MAAM0vH,OAAO,GAAG1vH,MAAM,CAAC,QAAD,CAAtB;AACA,MAAM2vH,OAAO,GAAG3vH,MAAM,CAAC,SAAD,CAAtB;AACA,MAAM4vH,iBAAiB,GAAG5vH,MAAM,CAAC,gBAAD,CAAhC;AACA,MAAM6vH,QAAQ,GAAG7vH,MAAM,CAAC,SAAD,CAAvB;AACA,MAAM8vH,KAAK,GAAG9vH,MAAM,CAAC,OAAD,CAApB;AACA,MAAM+vH,iBAAiB,GAAG/vH,MAAM,CAAC,gBAAD,CAAhC;;AAEA,MAAMgwH,WAAW,GAAG,MAAM,CAA1B,C,CAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMC,QAAN,CAAe;AACb90H,aAAW,CAAEiC,OAAF,EAAW;AACpB,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EACEA,OAAO,GAAG;AAAE2rB,SAAG,EAAE3rB;AAAP,KAAV;AAEF,QAAI,CAACA,OAAL,EACEA,OAAO,GAAG,EAAV;AAEF,QAAIA,OAAO,CAAC2rB,GAAR,KAAgB,OAAO3rB,OAAO,CAAC2rB,GAAf,KAAuB,QAAvB,IAAmC3rB,OAAO,CAAC2rB,GAAR,GAAc,CAAjE,CAAJ,EACE,MAAM,IAAItd,SAAJ,CAAc,mCAAd,CAAN,CARkB,CASpB;;AACA,UAAMsd,GAAG,GAAG,KAAKumG,GAAL,IAAYlyH,OAAO,CAAC2rB,GAAR,IAAei6E,QAAvC;AAEA,UAAMktB,EAAE,GAAG9yH,OAAO,CAACkF,MAAR,IAAkB0tH,WAA7B;AACA,SAAKR,iBAAL,IAA2B,OAAOU,EAAP,KAAc,UAAf,GAA6BF,WAA7B,GAA2CE,EAArE;AACA,SAAKT,WAAL,IAAoBryH,OAAO,CAAC+yH,KAAR,IAAiB,KAArC;AACA,QAAI/yH,OAAO,CAACgzH,MAAR,IAAkB,OAAOhzH,OAAO,CAACgzH,MAAf,KAA0B,QAAhD,EACE,MAAM,IAAI3kH,SAAJ,CAAc,yBAAd,CAAN;AACF,SAAKikH,OAAL,IAAgBtyH,OAAO,CAACgzH,MAAR,IAAkB,CAAlC;AACA,SAAKT,OAAL,IAAgBvyH,OAAO,CAACizH,OAAxB;AACA,SAAKT,iBAAL,IAA0BxyH,OAAO,CAACkzH,cAAR,IAA0B,KAApD;AACA,SAAKP,iBAAL,IAA0B3yH,OAAO,CAACmzH,cAAR,IAA0B,KAApD;AACA,SAAK/uF,KAAL;AACD,GAvBY,CAyBb;;;AACO,MAAHzY,GAAG,CAAEynG,EAAF,EAAM;AACX,QAAI,OAAOA,EAAP,KAAc,QAAd,IAA0BA,EAAE,GAAG,CAAnC,EACE,MAAM,IAAI/kH,SAAJ,CAAc,mCAAd,CAAN;AAEF,SAAK6jH,GAAL,IAAYkB,EAAE,IAAIxtB,QAAlB;AACA7+D,QAAI,CAAC,IAAD,CAAJ;AACD;;AACM,MAAHpb,GAAG,GAAI;AACT,WAAO,KAAKumG,GAAL,CAAP;AACD;;AAEa,MAAVmB,UAAU,CAAEA,UAAF,EAAc;AAC1B,SAAKhB,WAAL,IAAoB,CAAC,CAACgB,UAAtB;AACD;;AACa,MAAVA,UAAU,GAAI;AAChB,WAAO,KAAKhB,WAAL,CAAP;AACD;;AAES,MAANW,MAAM,CAAEM,EAAF,EAAM;AACd,QAAI,OAAOA,EAAP,KAAc,QAAlB,EACE,MAAM,IAAIjlH,SAAJ,CAAc,sCAAd,CAAN;AAEF,SAAKikH,OAAL,IAAgBgB,EAAhB;AACAvsF,QAAI,CAAC,IAAD,CAAJ;AACD;;AACS,MAANisF,MAAM,GAAI;AACZ,WAAO,KAAKV,OAAL,CAAP;AACD,GArDY,CAuDb;;;AACoB,MAAhBiB,gBAAgB,CAAEC,EAAF,EAAM;AACxB,QAAI,OAAOA,EAAP,KAAc,UAAlB,EACEA,EAAE,GAAGZ,WAAL;;AAEF,QAAIY,EAAE,KAAK,KAAKpB,iBAAL,CAAX,EAAoC;AAClC,WAAKA,iBAAL,IAA0BoB,EAA1B;AACA,WAAKrB,MAAL,IAAe,CAAf;AACA,WAAKM,QAAL,EAAerhH,OAAf,CAAuBqiH,GAAG,IAAI;AAC5BA,WAAG,CAACvuH,MAAJ,GAAa,KAAKktH,iBAAL,EAAwBqB,GAAG,CAACh1H,KAA5B,EAAmCg1H,GAAG,CAACz/G,GAAvC,CAAb;AACA,aAAKm+G,MAAL,KAAgBsB,GAAG,CAACvuH,MAApB;AACD,OAHD;AAID;;AACD6hC,QAAI,CAAC,IAAD,CAAJ;AACD;;AACmB,MAAhBwsF,gBAAgB,GAAI;AAAE,WAAO,KAAKnB,iBAAL,CAAP;AAAgC;;AAEhD,MAANltH,MAAM,GAAI;AAAE,WAAO,KAAKitH,MAAL,CAAP;AAAqB;;AACxB,MAATuB,SAAS,GAAI;AAAE,WAAO,KAAKjB,QAAL,EAAevtH,MAAtB;AAA8B;;AAEjDyuH,UAAQ,CAAEjsH,EAAF,EAAMksH,KAAN,EAAa;AACnBA,SAAK,GAAGA,KAAK,IAAI,IAAjB;;AACA,SAAK,IAAIC,MAAM,GAAG,KAAKpB,QAAL,EAAeqB,IAAjC,EAAuCD,MAAM,KAAK,IAAlD,GAAyD;AACvD,YAAMz0H,IAAI,GAAGy0H,MAAM,CAACz0H,IAApB;AACA20H,iBAAW,CAAC,IAAD,EAAOrsH,EAAP,EAAWmsH,MAAX,EAAmBD,KAAnB,CAAX;AACAC,YAAM,GAAGz0H,IAAT;AACD;AACF;;AAEDgS,SAAO,CAAE1J,EAAF,EAAMksH,KAAN,EAAa;AAClBA,SAAK,GAAGA,KAAK,IAAI,IAAjB;;AACA,SAAK,IAAIC,MAAM,GAAG,KAAKpB,QAAL,EAAerqD,IAAjC,EAAuCyrD,MAAM,KAAK,IAAlD,GAAyD;AACvD,YAAMr1H,IAAI,GAAGq1H,MAAM,CAACr1H,IAApB;AACAu1H,iBAAW,CAAC,IAAD,EAAOrsH,EAAP,EAAWmsH,MAAX,EAAmBD,KAAnB,CAAX;AACAC,YAAM,GAAGr1H,IAAT;AACD;AACF;;AAEDuV,MAAI,GAAI;AACN,WAAO,KAAK0+G,QAAL,EAAe3vH,OAAf,GAAyBb,GAAzB,CAA6BoxB,CAAC,IAAIA,CAAC,CAACrf,GAApC,CAAP;AACD;;AAEDhB,QAAM,GAAI;AACR,WAAO,KAAKy/G,QAAL,EAAe3vH,OAAf,GAAyBb,GAAzB,CAA6BoxB,CAAC,IAAIA,CAAC,CAAC50B,KAApC,CAAP;AACD;;AAED2lC,OAAK,GAAI;AACP,QAAI,KAAKmuF,OAAL,KACA,KAAKE,QAAL,CADA,IAEA,KAAKA,QAAL,EAAevtH,MAFnB,EAE2B;AACzB,WAAKutH,QAAL,EAAerhH,OAAf,CAAuBqiH,GAAG,IAAI,KAAKlB,OAAL,EAAckB,GAAG,CAACz/G,GAAlB,EAAuBy/G,GAAG,CAACh1H,KAA3B,CAA9B;AACD;;AAED,SAAKi0H,KAAL,IAAc,IAAI3/G,GAAJ,EAAd,CAPO,CAOiB;;AACxB,SAAK0/G,QAAL,IAAiB,IAAIR,OAAJ,EAAjB,CARO,CAQwB;;AAC/B,SAAKE,MAAL,IAAe,CAAf,CATO,CASU;AAClB;;AAED6B,MAAI,GAAI;AACN,WAAO,KAAKvB,QAAL,EAAexwH,GAAf,CAAmBwxH,GAAG,IAC3BQ,OAAO,CAAC,IAAD,EAAOR,GAAP,CAAP,GAAqB,KAArB,GAA6B;AAC3BpgG,OAAC,EAAEogG,GAAG,CAACz/G,GADoB;AAE3B60B,OAAC,EAAE4qF,GAAG,CAACh1H,KAFoB;AAG3B+pB,OAAC,EAAEirG,GAAG,CAAChmH,GAAJ,IAAWgmH,GAAG,CAACT,MAAJ,IAAc,CAAzB;AAHwB,KADxB,EAKFlwH,OALE,GAKQ6C,MALR,CAKeswC,CAAC,IAAIA,CALpB,CAAP;AAMD;;AAEDi+E,SAAO,GAAI;AACT,WAAO,KAAKzB,QAAL,CAAP;AACD;;AAED/tH,KAAG,CAAEsP,GAAF,EAAOvV,KAAP,EAAcu0H,MAAd,EAAsB;AACvBA,UAAM,GAAGA,MAAM,IAAI,KAAKV,OAAL,CAAnB;AAEA,QAAIU,MAAM,IAAI,OAAOA,MAAP,KAAkB,QAAhC,EACE,MAAM,IAAI3kH,SAAJ,CAAc,yBAAd,CAAN;AAEF,UAAMZ,GAAG,GAAGulH,MAAM,GAAG3pH,IAAI,CAACoE,GAAL,EAAH,GAAgB,CAAlC;AACA,UAAMmjB,GAAG,GAAG,KAAKwhG,iBAAL,EAAwB3zH,KAAxB,EAA+BuV,GAA/B,CAAZ;;AAEA,QAAI,KAAK0+G,KAAL,EAAYx7G,GAAZ,CAAgBlD,GAAhB,CAAJ,EAA0B;AACxB,UAAI4c,GAAG,GAAG,KAAKshG,GAAL,CAAV,EAAqB;AACnBxlF,WAAG,CAAC,IAAD,EAAO,KAAKgmF,KAAL,EAAYvxH,GAAZ,CAAgB6S,GAAhB,CAAP,CAAH;AACA,eAAO,KAAP;AACD;;AAED,YAAM8e,IAAI,GAAG,KAAK4/F,KAAL,EAAYvxH,GAAZ,CAAgB6S,GAAhB,CAAb;AACA,YAAMoO,IAAI,GAAG0Q,IAAI,CAACr0B,KAAlB,CAPwB,CASxB;AACA;;AACA,UAAI,KAAK8zH,OAAL,CAAJ,EAAmB;AACjB,YAAI,CAAC,KAAKC,iBAAL,CAAL,EACE,KAAKD,OAAL,EAAcv+G,GAAd,EAAmBoO,IAAI,CAAC3jB,KAAxB;AACH;;AAED2jB,UAAI,CAAC3U,GAAL,GAAWA,GAAX;AACA2U,UAAI,CAAC4wG,MAAL,GAAcA,MAAd;AACA5wG,UAAI,CAAC3jB,KAAL,GAAaA,KAAb;AACA,WAAK0zH,MAAL,KAAgBvhG,GAAG,GAAGxO,IAAI,CAACld,MAA3B;AACAkd,UAAI,CAACld,MAAL,GAAc0rB,GAAd;AACA,WAAKzvB,GAAL,CAAS6S,GAAT;AACA+yB,UAAI,CAAC,IAAD,CAAJ;AACA,aAAO,IAAP;AACD;;AAED,UAAM0sF,GAAG,GAAG,IAAIU,KAAJ,CAAUngH,GAAV,EAAevV,KAAf,EAAsBmyB,GAAtB,EAA2BnjB,GAA3B,EAAgCulH,MAAhC,CAAZ,CAnCuB,CAqCvB;;AACA,QAAIS,GAAG,CAACvuH,MAAJ,GAAa,KAAKgtH,GAAL,CAAjB,EAA4B;AAC1B,UAAI,KAAKK,OAAL,CAAJ,EACE,KAAKA,OAAL,EAAcv+G,GAAd,EAAmBvV,KAAnB;AAEF,aAAO,KAAP;AACD;;AAED,SAAK0zH,MAAL,KAAgBsB,GAAG,CAACvuH,MAApB;AACA,SAAKutH,QAAL,EAAepoH,OAAf,CAAuBopH,GAAvB;AACA,SAAKf,KAAL,EAAYhuH,GAAZ,CAAgBsP,GAAhB,EAAqB,KAAKy+G,QAAL,EAAerqD,IAApC;AACArhC,QAAI,CAAC,IAAD,CAAJ;AACA,WAAO,IAAP;AACD;;AAED7vB,KAAG,CAAElD,GAAF,EAAO;AACR,QAAI,CAAC,KAAK0+G,KAAL,EAAYx7G,GAAZ,CAAgBlD,GAAhB,CAAL,EAA2B,OAAO,KAAP;AAC3B,UAAMy/G,GAAG,GAAG,KAAKf,KAAL,EAAYvxH,GAAZ,CAAgB6S,GAAhB,EAAqBvV,KAAjC;AACA,WAAO,CAACw1H,OAAO,CAAC,IAAD,EAAOR,GAAP,CAAf;AACD;;AAEDtyH,KAAG,CAAE6S,GAAF,EAAO;AACR,WAAO7S,GAAG,CAAC,IAAD,EAAO6S,GAAP,EAAY,IAAZ,CAAV;AACD;;AAEDkjE,MAAI,CAAEljE,GAAF,EAAO;AACT,WAAO7S,GAAG,CAAC,IAAD,EAAO6S,GAAP,EAAY,KAAZ,CAAV;AACD;;AAEDlO,KAAG,GAAI;AACL,UAAMgtB,IAAI,GAAG,KAAK2/F,QAAL,EAAeqB,IAA5B;AACA,QAAI,CAAChhG,IAAL,EACE,OAAO,IAAP;AAEF4Z,OAAG,CAAC,IAAD,EAAO5Z,IAAP,CAAH;AACA,WAAOA,IAAI,CAACr0B,KAAZ;AACD;;AAEDiuC,KAAG,CAAE14B,GAAF,EAAO;AACR04B,OAAG,CAAC,IAAD,EAAO,KAAKgmF,KAAL,EAAYvxH,GAAZ,CAAgB6S,GAAhB,CAAP,CAAH;AACD;;AAEDk5D,MAAI,CAAE9S,GAAF,EAAO;AACT;AACA,SAAKh2B,KAAL;AAEA,UAAM32B,GAAG,GAAGpE,IAAI,CAACoE,GAAL,EAAZ,CAJS,CAKT;;AACA,SAAK,IAAIkvB,CAAC,GAAGy9B,GAAG,CAACl1D,MAAJ,GAAa,CAA1B,EAA6By3B,CAAC,IAAI,CAAlC,EAAqCA,CAAC,EAAtC,EAA0C;AACxC,YAAM82F,GAAG,GAAGr5D,GAAG,CAACz9B,CAAD,CAAf;AACA,YAAMy3F,SAAS,GAAGX,GAAG,CAACjrG,CAAJ,IAAS,CAA3B;AACA,UAAI4rG,SAAS,KAAK,CAAlB,EACE;AACA,aAAK1vH,GAAL,CAAS+uH,GAAG,CAACpgG,CAAb,EAAgBogG,GAAG,CAAC5qF,CAApB,EAFF,KAGK;AACH,cAAMmqF,MAAM,GAAGoB,SAAS,GAAG3mH,GAA3B,CADG,CAEH;;AACA,YAAIulH,MAAM,GAAG,CAAb,EAAgB;AACd,eAAKtuH,GAAL,CAAS+uH,GAAG,CAACpgG,CAAb,EAAgBogG,GAAG,CAAC5qF,CAApB,EAAuBmqF,MAAvB;AACD;AACF;AACF;AACF;;AAEDqB,OAAK,GAAI;AACP,SAAK3B,KAAL,EAAYthH,OAAZ,CAAoB,CAAC3S,KAAD,EAAQuV,GAAR,KAAgB7S,GAAG,CAAC,IAAD,EAAO6S,GAAP,EAAY,KAAZ,CAAvC;AACD;;AArOY;;AAwOf,MAAM7S,GAAG,GAAG,CAAC0jB,IAAD,EAAO7Q,GAAP,EAAYsgH,KAAZ,KAAsB;AAChC,QAAMxhG,IAAI,GAAGjO,IAAI,CAAC6tG,KAAD,CAAJ,CAAYvxH,GAAZ,CAAgB6S,GAAhB,CAAb;;AACA,MAAI8e,IAAJ,EAAU;AACR,UAAM2gG,GAAG,GAAG3gG,IAAI,CAACr0B,KAAjB;;AACA,QAAIw1H,OAAO,CAACpvG,IAAD,EAAO4uG,GAAP,CAAX,EAAwB;AACtB/mF,SAAG,CAAC7nB,IAAD,EAAOiO,IAAP,CAAH;AACA,UAAI,CAACjO,IAAI,CAACwtG,WAAD,CAAT,EACE,OAAOn0H,SAAP;AACH,KAJD,MAIO;AACL,UAAIo2H,KAAJ,EAAW;AACT,YAAIzvG,IAAI,CAAC8tG,iBAAD,CAAR,EACE7/F,IAAI,CAACr0B,KAAL,CAAWgP,GAAX,GAAiBpE,IAAI,CAACoE,GAAL,EAAjB;AACFoX,YAAI,CAAC4tG,QAAD,CAAJ,CAAe8B,WAAf,CAA2BzhG,IAA3B;AACD;AACF;;AACD,WAAO2gG,GAAG,CAACh1H,KAAX;AACD;AACF,CAjBD;;AAmBA,MAAMw1H,OAAO,GAAG,CAACpvG,IAAD,EAAO4uG,GAAP,KAAe;AAC7B,MAAI,CAACA,GAAD,IAAS,CAACA,GAAG,CAACT,MAAL,IAAe,CAACnuG,IAAI,CAACytG,OAAD,CAAjC,EACE,OAAO,KAAP;AAEF,QAAM5kH,IAAI,GAAGrE,IAAI,CAACoE,GAAL,KAAagmH,GAAG,CAAChmH,GAA9B;AACA,SAAOgmH,GAAG,CAACT,MAAJ,GAAatlH,IAAI,GAAG+lH,GAAG,CAACT,MAAxB,GACHnuG,IAAI,CAACytG,OAAD,CAAJ,IAAkB5kH,IAAI,GAAGmX,IAAI,CAACytG,OAAD,CADjC;AAED,CAPD;;AASA,MAAMvrF,IAAI,GAAGliB,IAAI,IAAI;AACnB,MAAIA,IAAI,CAACstG,MAAD,CAAJ,GAAettG,IAAI,CAACqtG,GAAD,CAAvB,EAA8B;AAC5B,SAAK,IAAI2B,MAAM,GAAGhvG,IAAI,CAAC4tG,QAAD,CAAJ,CAAeqB,IAAjC,EACEjvG,IAAI,CAACstG,MAAD,CAAJ,GAAettG,IAAI,CAACqtG,GAAD,CAAnB,IAA4B2B,MAAM,KAAK,IADzC,GACgD;AAC9C;AACA;AACA;AACA,YAAMz0H,IAAI,GAAGy0H,MAAM,CAACz0H,IAApB;AACAstC,SAAG,CAAC7nB,IAAD,EAAOgvG,MAAP,CAAH;AACAA,YAAM,GAAGz0H,IAAT;AACD;AACF;AACF,CAZD;;AAcA,MAAMstC,GAAG,GAAG,CAAC7nB,IAAD,EAAOiO,IAAP,KAAgB;AAC1B,MAAIA,IAAJ,EAAU;AACR,UAAM2gG,GAAG,GAAG3gG,IAAI,CAACr0B,KAAjB;AACA,QAAIomB,IAAI,CAAC0tG,OAAD,CAAR,EACE1tG,IAAI,CAAC0tG,OAAD,CAAJ,CAAckB,GAAG,CAACz/G,GAAlB,EAAuBy/G,GAAG,CAACh1H,KAA3B;AAEFomB,QAAI,CAACstG,MAAD,CAAJ,IAAgBsB,GAAG,CAACvuH,MAApB;AACA2f,QAAI,CAAC6tG,KAAD,CAAJ,CAAYtpG,MAAZ,CAAmBqqG,GAAG,CAACz/G,GAAvB;AACA6Q,QAAI,CAAC4tG,QAAD,CAAJ,CAAe+B,UAAf,CAA0B1hG,IAA1B;AACD;AACF,CAVD;;AAYA,MAAMqhG,KAAN,CAAY;AACVp2H,aAAW,CAAEiW,GAAF,EAAOvV,KAAP,EAAcyG,MAAd,EAAsBuI,GAAtB,EAA2BulH,MAA3B,EAAmC;AAC5C,SAAKh/G,GAAL,GAAWA,GAAX;AACA,SAAKvV,KAAL,GAAaA,KAAb;AACA,SAAKyG,MAAL,GAAcA,MAAd;AACA,SAAKuI,GAAL,GAAWA,GAAX;AACA,SAAKulH,MAAL,GAAcA,MAAM,IAAI,CAAxB;AACD;;AAPS;;AAUZ,MAAMe,WAAW,GAAG,CAAClvG,IAAD,EAAOnd,EAAP,EAAWorB,IAAX,EAAiB8gG,KAAjB,KAA2B;AAC7C,MAAIH,GAAG,GAAG3gG,IAAI,CAACr0B,KAAf;;AACA,MAAIw1H,OAAO,CAACpvG,IAAD,EAAO4uG,GAAP,CAAX,EAAwB;AACtB/mF,OAAG,CAAC7nB,IAAD,EAAOiO,IAAP,CAAH;AACA,QAAI,CAACjO,IAAI,CAACwtG,WAAD,CAAT,EACEoB,GAAG,GAAGv1H,SAAN;AACH;;AACD,MAAIu1H,GAAJ,EACE/rH,EAAE,CAACqU,IAAH,CAAQ63G,KAAR,EAAeH,GAAG,CAACh1H,KAAnB,EAA0Bg1H,GAAG,CAACz/G,GAA9B,EAAmC6Q,IAAnC;AACH,CATD;;AAWA3E,MAAM,CAACC,OAAP,GAAiB0yG,QAAjB,C;;;;;;;;;;;;AC7UA;;AACA3yG,MAAM,CAACC,OAAP,GAAiB,UAAU8xG,OAAV,EAAmB;AAClCA,SAAO,CAAC/2G,SAAR,CAAkBtY,MAAM,CAACvC,QAAzB,IAAqC,aAAa;AAChD,SAAK,IAAIwzH,MAAM,GAAG,KAAKzrD,IAAvB,EAA6ByrD,MAA7B,EAAqCA,MAAM,GAAGA,MAAM,CAACr1H,IAArD,EAA2D;AACzD,YAAMq1H,MAAM,CAACp1H,KAAb;AACD;AACF,GAJD;AAKD,CAND,C;;;;;;;;;;;;ACDA;;AACAyhB,MAAM,CAACC,OAAP,GAAiB8xG,OAAjB;AAEAA,OAAO,CAACwC,IAAR,GAAeA,IAAf;AACAxC,OAAO,CAAC7wG,MAAR,GAAiB6wG,OAAjB;;AAEA,SAASA,OAAT,CAAkBryG,IAAlB,EAAwB;AACtB,MAAIiF,IAAI,GAAG,IAAX;;AACA,MAAI,EAAEA,IAAI,YAAYotG,OAAlB,CAAJ,EAAgC;AAC9BptG,QAAI,GAAG,IAAIotG,OAAJ,EAAP;AACD;;AAEDptG,MAAI,CAACivG,IAAL,GAAY,IAAZ;AACAjvG,MAAI,CAACujD,IAAL,GAAY,IAAZ;AACAvjD,MAAI,CAAC3f,MAAL,GAAc,CAAd;;AAEA,MAAI0a,IAAI,IAAI,OAAOA,IAAI,CAACxO,OAAZ,KAAwB,UAApC,EAAgD;AAC9CwO,QAAI,CAACxO,OAAL,CAAa,UAAUgR,IAAV,EAAgB;AAC3ByC,UAAI,CAAC9gB,IAAL,CAAUqe,IAAV;AACD,KAFD;AAGD,GAJD,MAIO,IAAIhU,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AAC/B,SAAK,IAAI6Y,CAAC,GAAG,CAAR,EAAW4e,CAAC,GAAGvuB,SAAS,CAAClJ,MAA9B,EAAsC6Y,CAAC,GAAG4e,CAA1C,EAA6C5e,CAAC,EAA9C,EAAkD;AAChD8G,UAAI,CAAC9gB,IAAL,CAAUqK,SAAS,CAAC2P,CAAD,CAAnB;AACD;AACF;;AAED,SAAO8G,IAAP;AACD;;AAEDotG,OAAO,CAAC/2G,SAAR,CAAkBs5G,UAAlB,GAA+B,UAAU1hG,IAAV,EAAgB;AAC7C,MAAIA,IAAI,CAAClT,IAAL,KAAc,IAAlB,EAAwB;AACtB,UAAM,IAAIlc,KAAJ,CAAU,kDAAV,CAAN;AACD;;AAED,MAAIlF,IAAI,GAAGs0B,IAAI,CAACt0B,IAAhB;AACA,MAAIY,IAAI,GAAG0zB,IAAI,CAAC1zB,IAAhB;;AAEA,MAAIZ,IAAJ,EAAU;AACRA,QAAI,CAACY,IAAL,GAAYA,IAAZ;AACD;;AAED,MAAIA,IAAJ,EAAU;AACRA,QAAI,CAACZ,IAAL,GAAYA,IAAZ;AACD;;AAED,MAAIs0B,IAAI,KAAK,KAAKs1C,IAAlB,EAAwB;AACtB,SAAKA,IAAL,GAAY5pE,IAAZ;AACD;;AACD,MAAIs0B,IAAI,KAAK,KAAKghG,IAAlB,EAAwB;AACtB,SAAKA,IAAL,GAAY10H,IAAZ;AACD;;AAED0zB,MAAI,CAAClT,IAAL,CAAU1a,MAAV;AACA4tB,MAAI,CAACt0B,IAAL,GAAY,IAAZ;AACAs0B,MAAI,CAAC1zB,IAAL,GAAY,IAAZ;AACA0zB,MAAI,CAAClT,IAAL,GAAY,IAAZ;AAEA,SAAOphB,IAAP;AACD,CA7BD;;AA+BAyzH,OAAO,CAAC/2G,SAAR,CAAkBq5G,WAAlB,GAAgC,UAAUzhG,IAAV,EAAgB;AAC9C,MAAIA,IAAI,KAAK,KAAKs1C,IAAlB,EAAwB;AACtB;AACD;;AAED,MAAIt1C,IAAI,CAAClT,IAAT,EAAe;AACbkT,QAAI,CAAClT,IAAL,CAAU40G,UAAV,CAAqB1hG,IAArB;AACD;;AAED,MAAIs1C,IAAI,GAAG,KAAKA,IAAhB;AACAt1C,MAAI,CAAClT,IAAL,GAAY,IAAZ;AACAkT,MAAI,CAACt0B,IAAL,GAAY4pE,IAAZ;;AACA,MAAIA,IAAJ,EAAU;AACRA,QAAI,CAAChpE,IAAL,GAAY0zB,IAAZ;AACD;;AAED,OAAKs1C,IAAL,GAAYt1C,IAAZ;;AACA,MAAI,CAAC,KAAKghG,IAAV,EAAgB;AACd,SAAKA,IAAL,GAAYhhG,IAAZ;AACD;;AACD,OAAK5tB,MAAL;AACD,CArBD;;AAuBA+sH,OAAO,CAAC/2G,SAAR,CAAkBw5G,QAAlB,GAA6B,UAAU5hG,IAAV,EAAgB;AAC3C,MAAIA,IAAI,KAAK,KAAKghG,IAAlB,EAAwB;AACtB;AACD;;AAED,MAAIhhG,IAAI,CAAClT,IAAT,EAAe;AACbkT,QAAI,CAAClT,IAAL,CAAU40G,UAAV,CAAqB1hG,IAArB;AACD;;AAED,MAAIghG,IAAI,GAAG,KAAKA,IAAhB;AACAhhG,MAAI,CAAClT,IAAL,GAAY,IAAZ;AACAkT,MAAI,CAAC1zB,IAAL,GAAY00H,IAAZ;;AACA,MAAIA,IAAJ,EAAU;AACRA,QAAI,CAACt1H,IAAL,GAAYs0B,IAAZ;AACD;;AAED,OAAKghG,IAAL,GAAYhhG,IAAZ;;AACA,MAAI,CAAC,KAAKs1C,IAAV,EAAgB;AACd,SAAKA,IAAL,GAAYt1C,IAAZ;AACD;;AACD,OAAK5tB,MAAL;AACD,CArBD;;AAuBA+sH,OAAO,CAAC/2G,SAAR,CAAkBnX,IAAlB,GAAyB,YAAY;AACnC,OAAK,IAAIga,CAAC,GAAG,CAAR,EAAW4e,CAAC,GAAGvuB,SAAS,CAAClJ,MAA9B,EAAsC6Y,CAAC,GAAG4e,CAA1C,EAA6C5e,CAAC,EAA9C,EAAkD;AAChDha,QAAI,CAAC,IAAD,EAAOqK,SAAS,CAAC2P,CAAD,CAAhB,CAAJ;AACD;;AACD,SAAO,KAAK7Y,MAAZ;AACD,CALD;;AAOA+sH,OAAO,CAAC/2G,SAAR,CAAkB7Q,OAAlB,GAA4B,YAAY;AACtC,OAAK,IAAI0T,CAAC,GAAG,CAAR,EAAW4e,CAAC,GAAGvuB,SAAS,CAAClJ,MAA9B,EAAsC6Y,CAAC,GAAG4e,CAA1C,EAA6C5e,CAAC,EAA9C,EAAkD;AAChD1T,WAAO,CAAC,IAAD,EAAO+D,SAAS,CAAC2P,CAAD,CAAhB,CAAP;AACD;;AACD,SAAO,KAAK7Y,MAAZ;AACD,CALD;;AAOA+sH,OAAO,CAAC/2G,SAAR,CAAkBpV,GAAlB,GAAwB,YAAY;AAClC,MAAI,CAAC,KAAKguH,IAAV,EAAgB;AACd,WAAO51H,SAAP;AACD;;AAED,MAAIy2H,GAAG,GAAG,KAAKb,IAAL,CAAUr1H,KAApB;AACA,OAAKq1H,IAAL,GAAY,KAAKA,IAAL,CAAU10H,IAAtB;;AACA,MAAI,KAAK00H,IAAT,EAAe;AACb,SAAKA,IAAL,CAAUt1H,IAAV,GAAiB,IAAjB;AACD,GAFD,MAEO;AACL,SAAK4pE,IAAL,GAAY,IAAZ;AACD;;AACD,OAAKljE,MAAL;AACA,SAAOyvH,GAAP;AACD,CAdD;;AAgBA1C,OAAO,CAAC/2G,SAAR,CAAkBtV,KAAlB,GAA0B,YAAY;AACpC,MAAI,CAAC,KAAKwiE,IAAV,EAAgB;AACd,WAAOlqE,SAAP;AACD;;AAED,MAAIy2H,GAAG,GAAG,KAAKvsD,IAAL,CAAU3pE,KAApB;AACA,OAAK2pE,IAAL,GAAY,KAAKA,IAAL,CAAU5pE,IAAtB;;AACA,MAAI,KAAK4pE,IAAT,EAAe;AACb,SAAKA,IAAL,CAAUhpE,IAAV,GAAiB,IAAjB;AACD,GAFD,MAEO;AACL,SAAK00H,IAAL,GAAY,IAAZ;AACD;;AACD,OAAK5uH,MAAL;AACA,SAAOyvH,GAAP;AACD,CAdD;;AAgBA1C,OAAO,CAAC/2G,SAAR,CAAkB9J,OAAlB,GAA4B,UAAU1J,EAAV,EAAcksH,KAAd,EAAqB;AAC/CA,OAAK,GAAGA,KAAK,IAAI,IAAjB;;AACA,OAAK,IAAIC,MAAM,GAAG,KAAKzrD,IAAlB,EAAwBrqD,CAAC,GAAG,CAAjC,EAAoC81G,MAAM,KAAK,IAA/C,EAAqD91G,CAAC,EAAtD,EAA0D;AACxDrW,MAAE,CAACqU,IAAH,CAAQ63G,KAAR,EAAeC,MAAM,CAACp1H,KAAtB,EAA6Bsf,CAA7B,EAAgC,IAAhC;AACA81G,UAAM,GAAGA,MAAM,CAACr1H,IAAhB;AACD;AACF,CAND;;AAQAyzH,OAAO,CAAC/2G,SAAR,CAAkB05G,cAAlB,GAAmC,UAAUltH,EAAV,EAAcksH,KAAd,EAAqB;AACtDA,OAAK,GAAGA,KAAK,IAAI,IAAjB;;AACA,OAAK,IAAIC,MAAM,GAAG,KAAKC,IAAlB,EAAwB/1G,CAAC,GAAG,KAAK7Y,MAAL,GAAc,CAA/C,EAAkD2uH,MAAM,KAAK,IAA7D,EAAmE91G,CAAC,EAApE,EAAwE;AACtErW,MAAE,CAACqU,IAAH,CAAQ63G,KAAR,EAAeC,MAAM,CAACp1H,KAAtB,EAA6Bsf,CAA7B,EAAgC,IAAhC;AACA81G,UAAM,GAAGA,MAAM,CAACz0H,IAAhB;AACD;AACF,CAND;;AAQA6yH,OAAO,CAAC/2G,SAAR,CAAkB/Z,GAAlB,GAAwB,UAAUm9B,CAAV,EAAa;AACnC,OAAK,IAAIvgB,CAAC,GAAG,CAAR,EAAW81G,MAAM,GAAG,KAAKzrD,IAA9B,EAAoCyrD,MAAM,KAAK,IAAX,IAAmB91G,CAAC,GAAGugB,CAA3D,EAA8DvgB,CAAC,EAA/D,EAAmE;AACjE;AACA81G,UAAM,GAAGA,MAAM,CAACr1H,IAAhB;AACD;;AACD,MAAIuf,CAAC,KAAKugB,CAAN,IAAWu1F,MAAM,KAAK,IAA1B,EAAgC;AAC9B,WAAOA,MAAM,CAACp1H,KAAd;AACD;AACF,CARD;;AAUAwzH,OAAO,CAAC/2G,SAAR,CAAkB25G,UAAlB,GAA+B,UAAUv2F,CAAV,EAAa;AAC1C,OAAK,IAAIvgB,CAAC,GAAG,CAAR,EAAW81G,MAAM,GAAG,KAAKC,IAA9B,EAAoCD,MAAM,KAAK,IAAX,IAAmB91G,CAAC,GAAGugB,CAA3D,EAA8DvgB,CAAC,EAA/D,EAAmE;AACjE;AACA81G,UAAM,GAAGA,MAAM,CAACz0H,IAAhB;AACD;;AACD,MAAI2e,CAAC,KAAKugB,CAAN,IAAWu1F,MAAM,KAAK,IAA1B,EAAgC;AAC9B,WAAOA,MAAM,CAACp1H,KAAd;AACD;AACF,CARD;;AAUAwzH,OAAO,CAAC/2G,SAAR,CAAkBjZ,GAAlB,GAAwB,UAAUyF,EAAV,EAAcksH,KAAd,EAAqB;AAC3CA,OAAK,GAAGA,KAAK,IAAI,IAAjB;AACA,MAAIe,GAAG,GAAG,IAAI1C,OAAJ,EAAV;;AACA,OAAK,IAAI4B,MAAM,GAAG,KAAKzrD,IAAvB,EAA6ByrD,MAAM,KAAK,IAAxC,GAA+C;AAC7Cc,OAAG,CAAC5wH,IAAJ,CAAS2D,EAAE,CAACqU,IAAH,CAAQ63G,KAAR,EAAeC,MAAM,CAACp1H,KAAtB,EAA6B,IAA7B,CAAT;AACAo1H,UAAM,GAAGA,MAAM,CAACr1H,IAAhB;AACD;;AACD,SAAOm2H,GAAP;AACD,CARD;;AAUA1C,OAAO,CAAC/2G,SAAR,CAAkB45G,UAAlB,GAA+B,UAAUptH,EAAV,EAAcksH,KAAd,EAAqB;AAClDA,OAAK,GAAGA,KAAK,IAAI,IAAjB;AACA,MAAIe,GAAG,GAAG,IAAI1C,OAAJ,EAAV;;AACA,OAAK,IAAI4B,MAAM,GAAG,KAAKC,IAAvB,EAA6BD,MAAM,KAAK,IAAxC,GAA+C;AAC7Cc,OAAG,CAAC5wH,IAAJ,CAAS2D,EAAE,CAACqU,IAAH,CAAQ63G,KAAR,EAAeC,MAAM,CAACp1H,KAAtB,EAA6B,IAA7B,CAAT;AACAo1H,UAAM,GAAGA,MAAM,CAACz0H,IAAhB;AACD;;AACD,SAAOu1H,GAAP;AACD,CARD;;AAUA1C,OAAO,CAAC/2G,SAAR,CAAkB/b,MAAlB,GAA2B,UAAUuI,EAAV,EAAcqtH,OAAd,EAAuB;AAChD,MAAIC,GAAJ;AACA,MAAInB,MAAM,GAAG,KAAKzrD,IAAlB;;AACA,MAAIh6D,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB8vH,OAAG,GAAGD,OAAN;AACD,GAFD,MAEO,IAAI,KAAK3sD,IAAT,EAAe;AACpByrD,UAAM,GAAG,KAAKzrD,IAAL,CAAU5pE,IAAnB;AACAw2H,OAAG,GAAG,KAAK5sD,IAAL,CAAU3pE,KAAhB;AACD,GAHM,MAGA;AACL,UAAM,IAAI4P,SAAJ,CAAc,4CAAd,CAAN;AACD;;AAED,OAAK,IAAI0P,CAAC,GAAG,CAAb,EAAgB81G,MAAM,KAAK,IAA3B,EAAiC91G,CAAC,EAAlC,EAAsC;AACpCi3G,OAAG,GAAGttH,EAAE,CAACstH,GAAD,EAAMnB,MAAM,CAACp1H,KAAb,EAAoBsf,CAApB,CAAR;AACA81G,UAAM,GAAGA,MAAM,CAACr1H,IAAhB;AACD;;AAED,SAAOw2H,GAAP;AACD,CAlBD;;AAoBA/C,OAAO,CAAC/2G,SAAR,CAAkB+5G,aAAlB,GAAkC,UAAUvtH,EAAV,EAAcqtH,OAAd,EAAuB;AACvD,MAAIC,GAAJ;AACA,MAAInB,MAAM,GAAG,KAAKC,IAAlB;;AACA,MAAI1lH,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB8vH,OAAG,GAAGD,OAAN;AACD,GAFD,MAEO,IAAI,KAAKjB,IAAT,EAAe;AACpBD,UAAM,GAAG,KAAKC,IAAL,CAAU10H,IAAnB;AACA41H,OAAG,GAAG,KAAKlB,IAAL,CAAUr1H,KAAhB;AACD,GAHM,MAGA;AACL,UAAM,IAAI4P,SAAJ,CAAc,4CAAd,CAAN;AACD;;AAED,OAAK,IAAI0P,CAAC,GAAG,KAAK7Y,MAAL,GAAc,CAA3B,EAA8B2uH,MAAM,KAAK,IAAzC,EAA+C91G,CAAC,EAAhD,EAAoD;AAClDi3G,OAAG,GAAGttH,EAAE,CAACstH,GAAD,EAAMnB,MAAM,CAACp1H,KAAb,EAAoBsf,CAApB,CAAR;AACA81G,UAAM,GAAGA,MAAM,CAACz0H,IAAhB;AACD;;AAED,SAAO41H,GAAP;AACD,CAlBD;;AAoBA/C,OAAO,CAAC/2G,SAAR,CAAkBpY,OAAlB,GAA4B,YAAY;AACtC,MAAIs3D,GAAG,GAAG,IAAIp3D,KAAJ,CAAU,KAAKkC,MAAf,CAAV;;AACA,OAAK,IAAI6Y,CAAC,GAAG,CAAR,EAAW81G,MAAM,GAAG,KAAKzrD,IAA9B,EAAoCyrD,MAAM,KAAK,IAA/C,EAAqD91G,CAAC,EAAtD,EAA0D;AACxDq8C,OAAG,CAACr8C,CAAD,CAAH,GAAS81G,MAAM,CAACp1H,KAAhB;AACAo1H,UAAM,GAAGA,MAAM,CAACr1H,IAAhB;AACD;;AACD,SAAO47D,GAAP;AACD,CAPD;;AASA63D,OAAO,CAAC/2G,SAAR,CAAkBg6G,cAAlB,GAAmC,YAAY;AAC7C,MAAI96D,GAAG,GAAG,IAAIp3D,KAAJ,CAAU,KAAKkC,MAAf,CAAV;;AACA,OAAK,IAAI6Y,CAAC,GAAG,CAAR,EAAW81G,MAAM,GAAG,KAAKC,IAA9B,EAAoCD,MAAM,KAAK,IAA/C,EAAqD91G,CAAC,EAAtD,EAA0D;AACxDq8C,OAAG,CAACr8C,CAAD,CAAH,GAAS81G,MAAM,CAACp1H,KAAhB;AACAo1H,UAAM,GAAGA,MAAM,CAACz0H,IAAhB;AACD;;AACD,SAAOg7D,GAAP;AACD,CAPD;;AASA63D,OAAO,CAAC/2G,SAAR,CAAkBhU,KAAlB,GAA0B,UAAUjE,IAAV,EAAgB+jC,EAAhB,EAAoB;AAC5CA,IAAE,GAAGA,EAAE,IAAI,KAAK9hC,MAAhB;;AACA,MAAI8hC,EAAE,GAAG,CAAT,EAAY;AACVA,MAAE,IAAI,KAAK9hC,MAAX;AACD;;AACDjC,MAAI,GAAGA,IAAI,IAAI,CAAf;;AACA,MAAIA,IAAI,GAAG,CAAX,EAAc;AACZA,QAAI,IAAI,KAAKiC,MAAb;AACD;;AACD,MAAI4kB,GAAG,GAAG,IAAImoG,OAAJ,EAAV;;AACA,MAAIjrF,EAAE,GAAG/jC,IAAL,IAAa+jC,EAAE,GAAG,CAAtB,EAAyB;AACvB,WAAOld,GAAP;AACD;;AACD,MAAI7mB,IAAI,GAAG,CAAX,EAAc;AACZA,QAAI,GAAG,CAAP;AACD;;AACD,MAAI+jC,EAAE,GAAG,KAAK9hC,MAAd,EAAsB;AACpB8hC,MAAE,GAAG,KAAK9hC,MAAV;AACD;;AACD,OAAK,IAAI6Y,CAAC,GAAG,CAAR,EAAW81G,MAAM,GAAG,KAAKzrD,IAA9B,EAAoCyrD,MAAM,KAAK,IAAX,IAAmB91G,CAAC,GAAG9a,IAA3D,EAAiE8a,CAAC,EAAlE,EAAsE;AACpE81G,UAAM,GAAGA,MAAM,CAACr1H,IAAhB;AACD;;AACD,SAAOq1H,MAAM,KAAK,IAAX,IAAmB91G,CAAC,GAAGipB,EAA9B,EAAkCjpB,CAAC,IAAI81G,MAAM,GAAGA,MAAM,CAACr1H,IAAvD,EAA6D;AAC3DsrB,OAAG,CAAC/lB,IAAJ,CAAS8vH,MAAM,CAACp1H,KAAhB;AACD;;AACD,SAAOqrB,GAAP;AACD,CA1BD;;AA4BAmoG,OAAO,CAAC/2G,SAAR,CAAkBi6G,YAAlB,GAAiC,UAAUlyH,IAAV,EAAgB+jC,EAAhB,EAAoB;AACnDA,IAAE,GAAGA,EAAE,IAAI,KAAK9hC,MAAhB;;AACA,MAAI8hC,EAAE,GAAG,CAAT,EAAY;AACVA,MAAE,IAAI,KAAK9hC,MAAX;AACD;;AACDjC,MAAI,GAAGA,IAAI,IAAI,CAAf;;AACA,MAAIA,IAAI,GAAG,CAAX,EAAc;AACZA,QAAI,IAAI,KAAKiC,MAAb;AACD;;AACD,MAAI4kB,GAAG,GAAG,IAAImoG,OAAJ,EAAV;;AACA,MAAIjrF,EAAE,GAAG/jC,IAAL,IAAa+jC,EAAE,GAAG,CAAtB,EAAyB;AACvB,WAAOld,GAAP;AACD;;AACD,MAAI7mB,IAAI,GAAG,CAAX,EAAc;AACZA,QAAI,GAAG,CAAP;AACD;;AACD,MAAI+jC,EAAE,GAAG,KAAK9hC,MAAd,EAAsB;AACpB8hC,MAAE,GAAG,KAAK9hC,MAAV;AACD;;AACD,OAAK,IAAI6Y,CAAC,GAAG,KAAK7Y,MAAb,EAAqB2uH,MAAM,GAAG,KAAKC,IAAxC,EAA8CD,MAAM,KAAK,IAAX,IAAmB91G,CAAC,GAAGipB,EAArE,EAAyEjpB,CAAC,EAA1E,EAA8E;AAC5E81G,UAAM,GAAGA,MAAM,CAACz0H,IAAhB;AACD;;AACD,SAAOy0H,MAAM,KAAK,IAAX,IAAmB91G,CAAC,GAAG9a,IAA9B,EAAoC8a,CAAC,IAAI81G,MAAM,GAAGA,MAAM,CAACz0H,IAAzD,EAA+D;AAC7D0qB,OAAG,CAAC/lB,IAAJ,CAAS8vH,MAAM,CAACp1H,KAAhB;AACD;;AACD,SAAOqrB,GAAP;AACD,CA1BD;;AA4BAmoG,OAAO,CAAC/2G,SAAR,CAAkB7T,MAAlB,GAA2B,UAAU/I,KAAV,EAAiB82H;AAAY;AAA7B,EAA8C;AACvE,MAAI92H,KAAK,GAAG,KAAK4G,MAAjB,EAAyB;AACvB5G,SAAK,GAAG,KAAK4G,MAAL,GAAc,CAAtB;AACD;;AACD,MAAI5G,KAAK,GAAG,CAAZ,EAAe;AACbA,SAAK,GAAG,KAAK4G,MAAL,GAAc5G,KAAtB;AACD;;AAED,OAAK,IAAIyf,CAAC,GAAG,CAAR,EAAW81G,MAAM,GAAG,KAAKzrD,IAA9B,EAAoCyrD,MAAM,KAAK,IAAX,IAAmB91G,CAAC,GAAGzf,KAA3D,EAAkEyf,CAAC,EAAnE,EAAuE;AACrE81G,UAAM,GAAGA,MAAM,CAACr1H,IAAhB;AACD;;AAED,MAAIsrB,GAAG,GAAG,EAAV;;AACA,OAAK,IAAI/L,CAAC,GAAG,CAAb,EAAgB81G,MAAM,IAAI91G,CAAC,GAAGq3G,WAA9B,EAA2Cr3G,CAAC,EAA5C,EAAgD;AAC9C+L,OAAG,CAAC/lB,IAAJ,CAAS8vH,MAAM,CAACp1H,KAAhB;AACAo1H,UAAM,GAAG,KAAKW,UAAL,CAAgBX,MAAhB,CAAT;AACD;;AACD,MAAIA,MAAM,KAAK,IAAf,EAAqB;AACnBA,UAAM,GAAG,KAAKC,IAAd;AACD;;AAED,MAAID,MAAM,KAAK,KAAKzrD,IAAhB,IAAwByrD,MAAM,KAAK,KAAKC,IAA5C,EAAkD;AAChDD,UAAM,GAAGA,MAAM,CAACz0H,IAAhB;AACD;;AAED,OAAK,IAAI2e,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG3P,SAAS,CAAClJ,MAA9B,EAAsC6Y,CAAC,EAAvC,EAA2C;AACzC81G,UAAM,GAAGt8C,MAAM,CAAC,IAAD,EAAOs8C,MAAP,EAAezlH,SAAS,CAAC2P,CAAD,CAAxB,CAAf;AACD;;AACD,SAAO+L,GAAP;AACD,CA7BD;;AA+BAmoG,OAAO,CAAC/2G,SAAR,CAAkBlc,OAAlB,GAA4B,YAAY;AACtC,MAAIopE,IAAI,GAAG,KAAKA,IAAhB;AACA,MAAI0rD,IAAI,GAAG,KAAKA,IAAhB;;AACA,OAAK,IAAID,MAAM,GAAGzrD,IAAlB,EAAwByrD,MAAM,KAAK,IAAnC,EAAyCA,MAAM,GAAGA,MAAM,CAACz0H,IAAzD,EAA+D;AAC7D,QAAI+kB,CAAC,GAAG0vG,MAAM,CAACz0H,IAAf;AACAy0H,UAAM,CAACz0H,IAAP,GAAcy0H,MAAM,CAACr1H,IAArB;AACAq1H,UAAM,CAACr1H,IAAP,GAAc2lB,CAAd;AACD;;AACD,OAAKikD,IAAL,GAAY0rD,IAAZ;AACA,OAAKA,IAAL,GAAY1rD,IAAZ;AACA,SAAO,IAAP;AACD,CAXD;;AAaA,SAASmP,MAAT,CAAiB1yD,IAAjB,EAAuBiO,IAAvB,EAA6Br0B,KAA7B,EAAoC;AAClC,MAAI42H,QAAQ,GAAGviG,IAAI,KAAKjO,IAAI,CAACujD,IAAd,GACb,IAAIqsD,IAAJ,CAASh2H,KAAT,EAAgB,IAAhB,EAAsBq0B,IAAtB,EAA4BjO,IAA5B,CADa,GAEb,IAAI4vG,IAAJ,CAASh2H,KAAT,EAAgBq0B,IAAhB,EAAsBA,IAAI,CAACt0B,IAA3B,EAAiCqmB,IAAjC,CAFF;;AAIA,MAAIwwG,QAAQ,CAAC72H,IAAT,KAAkB,IAAtB,EAA4B;AAC1BqmB,QAAI,CAACivG,IAAL,GAAYuB,QAAZ;AACD;;AACD,MAAIA,QAAQ,CAACj2H,IAAT,KAAkB,IAAtB,EAA4B;AAC1BylB,QAAI,CAACujD,IAAL,GAAYitD,QAAZ;AACD;;AAEDxwG,MAAI,CAAC3f,MAAL;AAEA,SAAOmwH,QAAP;AACD;;AAED,SAAStxH,IAAT,CAAe8gB,IAAf,EAAqBzC,IAArB,EAA2B;AACzByC,MAAI,CAACivG,IAAL,GAAY,IAAIW,IAAJ,CAASryG,IAAT,EAAeyC,IAAI,CAACivG,IAApB,EAA0B,IAA1B,EAAgCjvG,IAAhC,CAAZ;;AACA,MAAI,CAACA,IAAI,CAACujD,IAAV,EAAgB;AACdvjD,QAAI,CAACujD,IAAL,GAAYvjD,IAAI,CAACivG,IAAjB;AACD;;AACDjvG,MAAI,CAAC3f,MAAL;AACD;;AAED,SAASmF,OAAT,CAAkBwa,IAAlB,EAAwBzC,IAAxB,EAA8B;AAC5ByC,MAAI,CAACujD,IAAL,GAAY,IAAIqsD,IAAJ,CAASryG,IAAT,EAAe,IAAf,EAAqByC,IAAI,CAACujD,IAA1B,EAAgCvjD,IAAhC,CAAZ;;AACA,MAAI,CAACA,IAAI,CAACivG,IAAV,EAAgB;AACdjvG,QAAI,CAACivG,IAAL,GAAYjvG,IAAI,CAACujD,IAAjB;AACD;;AACDvjD,MAAI,CAAC3f,MAAL;AACD;;AAED,SAASuvH,IAAT,CAAeh2H,KAAf,EAAsBW,IAAtB,EAA4BZ,IAA5B,EAAkCohB,IAAlC,EAAwC;AACtC,MAAI,EAAE,gBAAgB60G,IAAlB,CAAJ,EAA6B;AAC3B,WAAO,IAAIA,IAAJ,CAASh2H,KAAT,EAAgBW,IAAhB,EAAsBZ,IAAtB,EAA4BohB,IAA5B,CAAP;AACD;;AAED,OAAKA,IAAL,GAAYA,IAAZ;AACA,OAAKnhB,KAAL,GAAaA,KAAb;;AAEA,MAAIW,IAAJ,EAAU;AACRA,QAAI,CAACZ,IAAL,GAAY,IAAZ;AACA,SAAKY,IAAL,GAAYA,IAAZ;AACD,GAHD,MAGO;AACL,SAAKA,IAAL,GAAY,IAAZ;AACD;;AAED,MAAIZ,IAAJ,EAAU;AACRA,QAAI,CAACY,IAAL,GAAY,IAAZ;AACA,SAAKZ,IAAL,GAAYA,IAAZ;AACD,GAHD,MAGO;AACL,SAAKA,IAAL,GAAY,IAAZ;AACD;AACF;;AAED,IAAI;AACF;AACA8hB,qBAAO,CAAC,gFAAD,CAAP,CAAyB2xG,OAAzB;AACD,CAHD,CAGE,OAAOrpG,EAAP,EAAW,CAAE,C;;;;;;;;;;;ACzaf,CAAC,YAAU;AACT,MAAIia,KAAK,GAAGviB,mBAAO,CAAC,4CAAD,CAAnB;AAAA,MACI2hB,IAAI,GAAG3hB,mBAAO,CAAC,kDAAD,CAAP,CAAmB2hB,IAD9B;AAAA,MAEI1gB,QAAQ,GAAGjB,mBAAO,CAAC,oDAAD,CAFtB;AAAA,MAGI8hB,GAAG,GAAG9hB,mBAAO,CAAC,kDAAD,CAAP,CAAmB8hB,GAH7B;AAAA,MAKA;AACAkzF,KAAG,GAAG,UAAUnoF,OAAV,EAAmBntC,OAAnB,EAA4B;AAChC;AACA,QAAImtC,OAAO,CAACpvC,WAAR,IAAuB2kC,MAA3B;AACE,UAAI1iC,OAAO,IAAIA,OAAO,CAACmjB,QAAR,KAAqB,QAApC,EACEgqB,OAAO,GAAG/K,GAAG,CAACF,aAAJ,CAAkBiL,OAAlB,CAAV,CADF,KAGEA,OAAO,GAAGlL,IAAI,CAACC,aAAL,CAAmBiL,OAAnB,CAAV;AAJJ,WAKK,IAAI5rB,QAAQ,CAAC4rB,OAAD,CAAZ,EACHA,OAAO,GAAGnqC,KAAK,CAACkY,SAAN,CAAgBhU,KAAhB,CAAsB6U,IAAtB,CAA2BoxB,OAA3B,EAAoC,CAApC,CAAV,CADG,KAEA,IAAI,CAACnqC,KAAK,CAACwD,OAAN,CAAc2mC,OAAd,CAAD,IAA2BA,OAAO,CAACpvC,WAAR,KAAwBsjB,UAAvD,EACH8rB,OAAO,GAAGA,OAAO,CAACrxB,QAAR,EAAV,CAV8B,CAWhC;;AAEA,QAAIs6B,CAAC,GAAGvT,KAAK,CAACK,YAAN,CAAmBiK,OAAnB,CAAR;AAAA,QACIxQ,CAAC,GAAGwQ,OAAO,CAACjoC,MAAR,GAAiB,CADzB;AAAA,QAEII,CAAC,GAAI,UAFT;AAAA,QAGIC,CAAC,GAAG,CAAC,SAHT;AAAA,QAIIiuB,CAAC,GAAG,CAAC,UAJT;AAAA,QAKI4hB,CAAC,GAAI,SALT,CAbgC,CAoBhC;;AACA,SAAK,IAAIr3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGq4B,CAAC,CAAClxC,MAAtB,EAA8B6Y,CAAC,EAA/B,EAAmC;AACjCq4B,OAAC,CAACr4B,CAAD,CAAD,GAAO,CAAEq4B,CAAC,CAACr4B,CAAD,CAAD,IAAS,CAAV,GAAgBq4B,CAAC,CAACr4B,CAAD,CAAD,KAAS,EAA1B,IAAiC,UAAjC,GACA,CAAEq4B,CAAC,CAACr4B,CAAD,CAAD,IAAQ,EAAT,GAAgBq4B,CAAC,CAACr4B,CAAD,CAAD,KAAU,CAA3B,IAAiC,UADxC;AAED,KAxB+B,CA0BhC;;;AACAq4B,KAAC,CAACzZ,CAAC,KAAK,CAAP,CAAD,IAAc,QAASA,CAAC,GAAG,EAA3B;AACAyZ,KAAC,CAAC,CAAGzZ,CAAC,GAAG,EAAL,KAAa,CAAd,IAAoB,CAArB,IAA0B,EAA3B,CAAD,GAAkCA,CAAlC,CA5BgC,CA8BhC;;AACA,QAAI44F,EAAE,GAAGD,GAAG,CAACE,GAAb;AAAA,QACIxN,EAAE,GAAGsN,GAAG,CAACG,GADb;AAAA,QAEIC,EAAE,GAAGJ,GAAG,CAACK,GAFb;AAAA,QAGIC,EAAE,GAAGN,GAAG,CAACO,GAHb;;AAKA,SAAK,IAAI93G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGq4B,CAAC,CAAClxC,MAAtB,EAA8B6Y,CAAC,IAAI,EAAnC,EAAuC;AAErC,UAAI+3G,EAAE,GAAGxwH,CAAT;AAAA,UACIywH,EAAE,GAAGxwH,CADT;AAAA,UAEIywH,EAAE,GAAGxiG,CAFT;AAAA,UAGIyiG,EAAE,GAAG7gF,CAHT;AAKA9vC,OAAC,GAAGiwH,EAAE,CAACjwH,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,EAAagB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAuB,CAAvB,EAA0B,CAAC,SAA3B,CAAN;AACAq3B,OAAC,GAAGmgF,EAAE,CAACngF,CAAD,EAAI9vC,CAAJ,EAAOC,CAAP,EAAUiuB,CAAV,EAAa4iB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,SAA3B,CAAN;AACAyV,OAAC,GAAG+hG,EAAE,CAAC/hG,CAAD,EAAI4hB,CAAJ,EAAO9vC,CAAP,EAAUC,CAAV,EAAa6wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA2B,SAA3B,CAAN;AACAxY,OAAC,GAAGgwH,EAAE,CAAChwH,CAAD,EAAIiuB,CAAJ,EAAO4hB,CAAP,EAAU9vC,CAAV,EAAa8wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,UAA3B,CAAN;AACAzY,OAAC,GAAGiwH,EAAE,CAACjwH,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,EAAagB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAuB,CAAvB,EAA0B,CAAC,SAA3B,CAAN;AACAq3B,OAAC,GAAGmgF,EAAE,CAACngF,CAAD,EAAI9vC,CAAJ,EAAOC,CAAP,EAAUiuB,CAAV,EAAa4iB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA2B,UAA3B,CAAN;AACAyV,OAAC,GAAG+hG,EAAE,CAAC/hG,CAAD,EAAI4hB,CAAJ,EAAO9vC,CAAP,EAAUC,CAAV,EAAa6wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,UAA3B,CAAN;AACAxY,OAAC,GAAGgwH,EAAE,CAAChwH,CAAD,EAAIiuB,CAAJ,EAAO4hB,CAAP,EAAU9vC,CAAV,EAAa8wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,QAA3B,CAAN;AACAzY,OAAC,GAAGiwH,EAAE,CAACjwH,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,EAAagB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAuB,CAAvB,EAA2B,UAA3B,CAAN;AACAq3B,OAAC,GAAGmgF,EAAE,CAACngF,CAAD,EAAI9vC,CAAJ,EAAOC,CAAP,EAAUiuB,CAAV,EAAa4iB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,UAA3B,CAAN;AACAyV,OAAC,GAAG+hG,EAAE,CAAC/hG,CAAD,EAAI4hB,CAAJ,EAAO9vC,CAAP,EAAUC,CAAV,EAAa6wC,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA0B,CAAC,KAA3B,CAAN;AACAxY,OAAC,GAAGgwH,EAAE,CAAChwH,CAAD,EAAIiuB,CAAJ,EAAO4hB,CAAP,EAAU9vC,CAAV,EAAa8wC,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA0B,CAAC,UAA3B,CAAN;AACAzY,OAAC,GAAGiwH,EAAE,CAACjwH,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,EAAagB,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAuB,CAAvB,EAA2B,UAA3B,CAAN;AACAq3B,OAAC,GAAGmgF,EAAE,CAACngF,CAAD,EAAI9vC,CAAJ,EAAOC,CAAP,EAAUiuB,CAAV,EAAa4iB,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA0B,CAAC,QAA3B,CAAN;AACAyV,OAAC,GAAG+hG,EAAE,CAAC/hG,CAAD,EAAI4hB,CAAJ,EAAO9vC,CAAP,EAAUC,CAAV,EAAa6wC,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA0B,CAAC,UAA3B,CAAN;AACAxY,OAAC,GAAGgwH,EAAE,CAAChwH,CAAD,EAAIiuB,CAAJ,EAAO4hB,CAAP,EAAU9vC,CAAV,EAAa8wC,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA2B,UAA3B,CAAN;AAEAzY,OAAC,GAAG0iH,EAAE,CAAC1iH,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,EAAagB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAuB,CAAvB,EAA0B,CAAC,SAA3B,CAAN;AACAq3B,OAAC,GAAG4yE,EAAE,CAAC5yE,CAAD,EAAI9vC,CAAJ,EAAOC,CAAP,EAAUiuB,CAAV,EAAa4iB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAuB,CAAvB,EAA0B,CAAC,UAA3B,CAAN;AACAyV,OAAC,GAAGw0F,EAAE,CAACx0F,CAAD,EAAI4hB,CAAJ,EAAO9vC,CAAP,EAAUC,CAAV,EAAa6wC,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA2B,SAA3B,CAAN;AACAxY,OAAC,GAAGyiH,EAAE,CAACziH,CAAD,EAAIiuB,CAAJ,EAAO4hB,CAAP,EAAU9vC,CAAV,EAAa8wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,SAA3B,CAAN;AACAzY,OAAC,GAAG0iH,EAAE,CAAC1iH,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,EAAagB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAuB,CAAvB,EAA0B,CAAC,SAA3B,CAAN;AACAq3B,OAAC,GAAG4yE,EAAE,CAAC5yE,CAAD,EAAI9vC,CAAJ,EAAOC,CAAP,EAAUiuB,CAAV,EAAa4iB,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAuB,CAAvB,EAA2B,QAA3B,CAAN;AACAyV,OAAC,GAAGw0F,EAAE,CAACx0F,CAAD,EAAI4hB,CAAJ,EAAO9vC,CAAP,EAAUC,CAAV,EAAa6wC,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA0B,CAAC,SAA3B,CAAN;AACAxY,OAAC,GAAGyiH,EAAE,CAACziH,CAAD,EAAIiuB,CAAJ,EAAO4hB,CAAP,EAAU9vC,CAAV,EAAa8wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,SAA3B,CAAN;AACAzY,OAAC,GAAG0iH,EAAE,CAAC1iH,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,EAAagB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAuB,CAAvB,EAA2B,SAA3B,CAAN;AACAq3B,OAAC,GAAG4yE,EAAE,CAAC5yE,CAAD,EAAI9vC,CAAJ,EAAOC,CAAP,EAAUiuB,CAAV,EAAa4iB,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAuB,CAAvB,EAA0B,CAAC,UAA3B,CAAN;AACAyV,OAAC,GAAGw0F,EAAE,CAACx0F,CAAD,EAAI4hB,CAAJ,EAAO9vC,CAAP,EAAUC,CAAV,EAAa6wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,SAA3B,CAAN;AACAxY,OAAC,GAAGyiH,EAAE,CAACziH,CAAD,EAAIiuB,CAAJ,EAAO4hB,CAAP,EAAU9vC,CAAV,EAAa8wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA2B,UAA3B,CAAN;AACAzY,OAAC,GAAG0iH,EAAE,CAAC1iH,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,EAAagB,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAuB,CAAvB,EAA0B,CAAC,UAA3B,CAAN;AACAq3B,OAAC,GAAG4yE,EAAE,CAAC5yE,CAAD,EAAI9vC,CAAJ,EAAOC,CAAP,EAAUiuB,CAAV,EAAa4iB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAuB,CAAvB,EAA0B,CAAC,QAA3B,CAAN;AACAyV,OAAC,GAAGw0F,EAAE,CAACx0F,CAAD,EAAI4hB,CAAJ,EAAO9vC,CAAP,EAAUC,CAAV,EAAa6wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA2B,UAA3B,CAAN;AACAxY,OAAC,GAAGyiH,EAAE,CAACziH,CAAD,EAAIiuB,CAAJ,EAAO4hB,CAAP,EAAU9vC,CAAV,EAAa8wC,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA0B,CAAC,UAA3B,CAAN;AAEAzY,OAAC,GAAGowH,EAAE,CAACpwH,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,EAAagB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAuB,CAAvB,EAA0B,CAAC,MAA3B,CAAN;AACAq3B,OAAC,GAAGsgF,EAAE,CAACtgF,CAAD,EAAI9vC,CAAJ,EAAOC,CAAP,EAAUiuB,CAAV,EAAa4iB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,UAA3B,CAAN;AACAyV,OAAC,GAAGkiG,EAAE,CAACliG,CAAD,EAAI4hB,CAAJ,EAAO9vC,CAAP,EAAUC,CAAV,EAAa6wC,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA2B,UAA3B,CAAN;AACAxY,OAAC,GAAGmwH,EAAE,CAACnwH,CAAD,EAAIiuB,CAAJ,EAAO4hB,CAAP,EAAU9vC,CAAV,EAAa8wC,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA0B,CAAC,QAA3B,CAAN;AACAzY,OAAC,GAAGowH,EAAE,CAACpwH,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,EAAagB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAuB,CAAvB,EAA0B,CAAC,UAA3B,CAAN;AACAq3B,OAAC,GAAGsgF,EAAE,CAACtgF,CAAD,EAAI9vC,CAAJ,EAAOC,CAAP,EAAUiuB,CAAV,EAAa4iB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA2B,UAA3B,CAAN;AACAyV,OAAC,GAAGkiG,EAAE,CAACliG,CAAD,EAAI4hB,CAAJ,EAAO9vC,CAAP,EAAUC,CAAV,EAAa6wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,SAA3B,CAAN;AACAxY,OAAC,GAAGmwH,EAAE,CAACnwH,CAAD,EAAIiuB,CAAJ,EAAO4hB,CAAP,EAAU9vC,CAAV,EAAa8wC,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA0B,CAAC,UAA3B,CAAN;AACAzY,OAAC,GAAGowH,EAAE,CAACpwH,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,EAAagB,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAuB,CAAvB,EAA2B,SAA3B,CAAN;AACAq3B,OAAC,GAAGsgF,EAAE,CAACtgF,CAAD,EAAI9vC,CAAJ,EAAOC,CAAP,EAAUiuB,CAAV,EAAa4iB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,SAA3B,CAAN;AACAyV,OAAC,GAAGkiG,EAAE,CAACliG,CAAD,EAAI4hB,CAAJ,EAAO9vC,CAAP,EAAUC,CAAV,EAAa6wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,SAA3B,CAAN;AACAxY,OAAC,GAAGmwH,EAAE,CAACnwH,CAAD,EAAIiuB,CAAJ,EAAO4hB,CAAP,EAAU9vC,CAAV,EAAa8wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA2B,QAA3B,CAAN;AACAzY,OAAC,GAAGowH,EAAE,CAACpwH,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,EAAagB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAuB,CAAvB,EAA0B,CAAC,SAA3B,CAAN;AACAq3B,OAAC,GAAGsgF,EAAE,CAACtgF,CAAD,EAAI9vC,CAAJ,EAAOC,CAAP,EAAUiuB,CAAV,EAAa4iB,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA0B,CAAC,SAA3B,CAAN;AACAyV,OAAC,GAAGkiG,EAAE,CAACliG,CAAD,EAAI4hB,CAAJ,EAAO9vC,CAAP,EAAUC,CAAV,EAAa6wC,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA2B,SAA3B,CAAN;AACAxY,OAAC,GAAGmwH,EAAE,CAACnwH,CAAD,EAAIiuB,CAAJ,EAAO4hB,CAAP,EAAU9vC,CAAV,EAAa8wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,SAA3B,CAAN;AAEAzY,OAAC,GAAGswH,EAAE,CAACtwH,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,EAAagB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAuB,CAAvB,EAA0B,CAAC,SAA3B,CAAN;AACAq3B,OAAC,GAAGwgF,EAAE,CAACxgF,CAAD,EAAI9vC,CAAJ,EAAOC,CAAP,EAAUiuB,CAAV,EAAa4iB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA2B,UAA3B,CAAN;AACAyV,OAAC,GAAGoiG,EAAE,CAACpiG,CAAD,EAAI4hB,CAAJ,EAAO9vC,CAAP,EAAUC,CAAV,EAAa6wC,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA0B,CAAC,UAA3B,CAAN;AACAxY,OAAC,GAAGqwH,EAAE,CAACrwH,CAAD,EAAIiuB,CAAJ,EAAO4hB,CAAP,EAAU9vC,CAAV,EAAa8wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,QAA3B,CAAN;AACAzY,OAAC,GAAGswH,EAAE,CAACtwH,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,EAAagB,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAuB,CAAvB,EAA2B,UAA3B,CAAN;AACAq3B,OAAC,GAAGwgF,EAAE,CAACxgF,CAAD,EAAI9vC,CAAJ,EAAOC,CAAP,EAAUiuB,CAAV,EAAa4iB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,UAA3B,CAAN;AACAyV,OAAC,GAAGoiG,EAAE,CAACpiG,CAAD,EAAI4hB,CAAJ,EAAO9vC,CAAP,EAAUC,CAAV,EAAa6wC,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA0B,CAAC,OAA3B,CAAN;AACAxY,OAAC,GAAGqwH,EAAE,CAACrwH,CAAD,EAAIiuB,CAAJ,EAAO4hB,CAAP,EAAU9vC,CAAV,EAAa8wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,UAA3B,CAAN;AACAzY,OAAC,GAAGswH,EAAE,CAACtwH,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,EAAagB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAuB,CAAvB,EAA2B,UAA3B,CAAN;AACAq3B,OAAC,GAAGwgF,EAAE,CAACxgF,CAAD,EAAI9vC,CAAJ,EAAOC,CAAP,EAAUiuB,CAAV,EAAa4iB,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA0B,CAAC,QAA3B,CAAN;AACAyV,OAAC,GAAGoiG,EAAE,CAACpiG,CAAD,EAAI4hB,CAAJ,EAAO9vC,CAAP,EAAUC,CAAV,EAAa6wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,UAA3B,CAAN;AACAxY,OAAC,GAAGqwH,EAAE,CAACrwH,CAAD,EAAIiuB,CAAJ,EAAO4hB,CAAP,EAAU9vC,CAAV,EAAa8wC,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA2B,UAA3B,CAAN;AACAzY,OAAC,GAAGswH,EAAE,CAACtwH,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,EAAagB,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAuB,CAAvB,EAA0B,CAAC,SAA3B,CAAN;AACAq3B,OAAC,GAAGwgF,EAAE,CAACxgF,CAAD,EAAI9vC,CAAJ,EAAOC,CAAP,EAAUiuB,CAAV,EAAa4iB,CAAC,CAACr4B,CAAC,GAAC,EAAH,CAAd,EAAsB,EAAtB,EAA0B,CAAC,UAA3B,CAAN;AACAyV,OAAC,GAAGoiG,EAAE,CAACpiG,CAAD,EAAI4hB,CAAJ,EAAO9vC,CAAP,EAAUC,CAAV,EAAa6wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA2B,SAA3B,CAAN;AACAxY,OAAC,GAAGqwH,EAAE,CAACrwH,CAAD,EAAIiuB,CAAJ,EAAO4hB,CAAP,EAAU9vC,CAAV,EAAa8wC,CAAC,CAACr4B,CAAC,GAAE,CAAJ,CAAd,EAAsB,EAAtB,EAA0B,CAAC,SAA3B,CAAN;AAEAzY,OAAC,GAAIA,CAAC,GAAGwwH,EAAL,KAAa,CAAjB;AACAvwH,OAAC,GAAIA,CAAC,GAAGwwH,EAAL,KAAa,CAAjB;AACAviG,OAAC,GAAIA,CAAC,GAAGwiG,EAAL,KAAa,CAAjB;AACA5gF,OAAC,GAAIA,CAAC,GAAG6gF,EAAL,KAAa,CAAjB;AACD;;AAED,WAAOpzF,KAAK,CAACG,MAAN,CAAa,CAAC19B,CAAD,EAAIC,CAAJ,EAAOiuB,CAAP,EAAU4hB,CAAV,CAAb,CAAP;AACD,GA5HD,CADS,CA+HT;;;AACAkgF,KAAG,CAACE,GAAJ,GAAW,UAAUlwH,CAAV,EAAaC,CAAb,EAAgBiuB,CAAhB,EAAmB4hB,CAAnB,EAAsBxoC,CAAtB,EAAyBxH,CAAzB,EAA4BmtB,CAA5B,EAA+B;AACxC,QAAI+L,CAAC,GAAGh5B,CAAC,IAAIC,CAAC,GAAGiuB,CAAJ,GAAQ,CAACjuB,CAAD,GAAK6vC,CAAjB,CAAD,IAAwBxoC,CAAC,KAAK,CAA9B,IAAmC2lB,CAA3C;AACA,WAAO,CAAE+L,CAAC,IAAIl5B,CAAN,GAAYk5B,CAAC,KAAM,KAAKl5B,CAAzB,IAAgCG,CAAvC;AACD,GAHD;;AAIA+vH,KAAG,CAACG,GAAJ,GAAW,UAAUnwH,CAAV,EAAaC,CAAb,EAAgBiuB,CAAhB,EAAmB4hB,CAAnB,EAAsBxoC,CAAtB,EAAyBxH,CAAzB,EAA4BmtB,CAA5B,EAA+B;AACxC,QAAI+L,CAAC,GAAGh5B,CAAC,IAAIC,CAAC,GAAG6vC,CAAJ,GAAQ5hB,CAAC,GAAG,CAAC4hB,CAAjB,CAAD,IAAwBxoC,CAAC,KAAK,CAA9B,IAAmC2lB,CAA3C;AACA,WAAO,CAAE+L,CAAC,IAAIl5B,CAAN,GAAYk5B,CAAC,KAAM,KAAKl5B,CAAzB,IAAgCG,CAAvC;AACD,GAHD;;AAIA+vH,KAAG,CAACK,GAAJ,GAAW,UAAUrwH,CAAV,EAAaC,CAAb,EAAgBiuB,CAAhB,EAAmB4hB,CAAnB,EAAsBxoC,CAAtB,EAAyBxH,CAAzB,EAA4BmtB,CAA5B,EAA+B;AACxC,QAAI+L,CAAC,GAAGh5B,CAAC,IAAIC,CAAC,GAAGiuB,CAAJ,GAAQ4hB,CAAZ,CAAD,IAAmBxoC,CAAC,KAAK,CAAzB,IAA8B2lB,CAAtC;AACA,WAAO,CAAE+L,CAAC,IAAIl5B,CAAN,GAAYk5B,CAAC,KAAM,KAAKl5B,CAAzB,IAAgCG,CAAvC;AACD,GAHD;;AAIA+vH,KAAG,CAACO,GAAJ,GAAW,UAAUvwH,CAAV,EAAaC,CAAb,EAAgBiuB,CAAhB,EAAmB4hB,CAAnB,EAAsBxoC,CAAtB,EAAyBxH,CAAzB,EAA4BmtB,CAA5B,EAA+B;AACxC,QAAI+L,CAAC,GAAGh5B,CAAC,IAAIkuB,CAAC,IAAIjuB,CAAC,GAAG,CAAC6vC,CAAT,CAAL,CAAD,IAAsBxoC,CAAC,KAAK,CAA5B,IAAiC2lB,CAAzC;AACA,WAAO,CAAE+L,CAAC,IAAIl5B,CAAN,GAAYk5B,CAAC,KAAM,KAAKl5B,CAAzB,IAAgCG,CAAvC;AACD,GAHD,CA5IS,CAiJT;;;AACA+vH,KAAG,CAACY,UAAJ,GAAiB,EAAjB;AACAZ,KAAG,CAACa,WAAJ,GAAkB,EAAlB;;AAEAj2G,QAAM,CAACC,OAAP,GAAiB,UAAUgtB,OAAV,EAAmBntC,OAAnB,EAA4B;AAC3C,QAAImtC,OAAO,KAAKjvC,SAAZ,IAAyBivC,OAAO,KAAK,IAAzC,EACE,MAAM,IAAIzpC,KAAJ,CAAU,sBAAsBypC,OAAhC,CAAN;AAEF,QAAIipF,WAAW,GAAGvzF,KAAK,CAACO,YAAN,CAAmBkyF,GAAG,CAACnoF,OAAD,EAAUntC,OAAV,CAAtB,CAAlB;AACA,WAAOA,OAAO,IAAIA,OAAO,CAACq2H,OAAnB,GAA6BD,WAA7B,GACHp2H,OAAO,IAAIA,OAAO,CAACs2H,QAAnB,GAA8Bl0F,GAAG,CAACG,aAAJ,CAAkB6zF,WAAlB,CAA9B,GACAvzF,KAAK,CAACQ,UAAN,CAAiB+yF,WAAjB,CAFJ;AAGD,GARD;AAUD,CA/JD,I;;;;;;;;;;;;ACAA;AAAA,IAAIG,aAAa,GAAG,SAASA,aAAT,CAAuBjxH,CAAvB,EAA0BC,CAA1B,EAA6B;AAC/C,SAAOD,CAAC,KAAKC,CAAb;AACD,CAFD;;AAIA,SAAStB,KAAT,CAAgBuyH,QAAhB,EAA0B/1H,OAA1B,EAAmC;AACjC,MAAIA,OAAO,KAAK,KAAK,CAArB,EAAwB;AACtBA,WAAO,GAAG81H,aAAV;AACD;;AAED,MAAIE,QAAJ;AACA,MAAIC,QAAQ,GAAG,EAAf;AACA,MAAIC,UAAJ;AACA,MAAIC,UAAU,GAAG,KAAjB;;AAEA,MAAIC,mBAAmB,GAAG,SAASA,mBAAT,CAA6BC,MAA7B,EAAqC7yH,KAArC,EAA4C;AACpE,WAAOxD,OAAO,CAACq2H,MAAD,EAASJ,QAAQ,CAACzyH,KAAD,CAAjB,EAA0BA,KAA1B,CAAd;AACD,GAFD;;AAIA,MAAIgP,MAAM,GAAG,SAASA,MAAT,GAAkB;AAC7B,SAAK,IAAI8jH,IAAI,GAAG3oH,SAAS,CAAClJ,MAArB,EAA6B8xH,OAAO,GAAG,IAAIh0H,KAAJ,CAAU+zH,IAAV,CAAvC,EAAwDE,IAAI,GAAG,CAApE,EAAuEA,IAAI,GAAGF,IAA9E,EAAoFE,IAAI,EAAxF,EAA4F;AAC1FD,aAAO,CAACC,IAAD,CAAP,GAAgB7oH,SAAS,CAAC6oH,IAAD,CAAzB;AACD;;AAED,QAAIL,UAAU,IAAIH,QAAQ,KAAK,IAA3B,IAAmCO,OAAO,CAAC9xH,MAAR,KAAmBwxH,QAAQ,CAACxxH,MAA/D,IAAyE8xH,OAAO,CAAC7xH,KAAR,CAAc0xH,mBAAd,CAA7E,EAAiH;AAC/G,aAAOF,UAAP;AACD;;AAEDA,cAAU,GAAGH,QAAQ,CAACz0F,KAAT,CAAe,IAAf,EAAqBi1F,OAArB,CAAb;AACAJ,cAAU,GAAG,IAAb;AACAH,YAAQ,GAAG,IAAX;AACAC,YAAQ,GAAGM,OAAX;AACA,WAAOL,UAAP;AACD,GAdD;;AAgBA,SAAO1jH,MAAP;AACD;;AAEchP,oEAAf,E;;;;;;;;;;;ACrCC,aAAU;AACT,MAAIizH,OAAO,GAAG,IAAd;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACE,WAASC,YAAT,CAAsBh1F,GAAtB,EAA2Bi1F,IAA3B,EAAiC;AAC/B,QACEz6F,CAAC,GAAGwF,GAAG,CAACj9B,MADV;AAAA,QAEE+wC,CAAC,GAAGmhF,IAAI,GAAGz6F,CAFb;AAAA,QAGE5e,CAAC,GAAG,CAHN;AAAA,QAIEsV,CAJF;;AAMA,WAAOsJ,CAAC,IAAI,CAAZ,EAAe;AACbtJ,OAAC,GACG8O,GAAG,CAAC5kB,UAAJ,CAAeQ,CAAf,IAAoB,IAAtB,GACC,CAACokB,GAAG,CAAC5kB,UAAJ,CAAe,EAAEQ,CAAjB,IAAsB,IAAvB,KAAgC,CADjC,GAEC,CAACokB,GAAG,CAAC5kB,UAAJ,CAAe,EAAEQ,CAAjB,IAAsB,IAAvB,KAAgC,EAFjC,GAGC,CAACokB,GAAG,CAAC5kB,UAAJ,CAAe,EAAEQ,CAAjB,IAAsB,IAAvB,KAAgC,EAJnC;AAMAsV,OAAC,GAAK,CAACA,CAAC,GAAG,MAAL,IAAe,UAAhB,IAA+B,CAAE,CAACA,CAAC,KAAK,EAAP,IAAa,UAAd,GAA4B,MAA7B,KAAwC,EAAvE,CAAL;AACAA,OAAC,IAAIA,CAAC,KAAK,EAAX;AACAA,OAAC,GAAK,CAACA,CAAC,GAAG,MAAL,IAAe,UAAhB,IAA+B,CAAE,CAACA,CAAC,KAAK,EAAP,IAAa,UAAd,GAA4B,MAA7B,KAAwC,EAAvE,CAAL;AAEF4iB,OAAC,GAAK,CAACA,CAAC,GAAG,MAAL,IAAe,UAAhB,IAA+B,CAAE,CAACA,CAAC,KAAK,EAAP,IAAa,UAAd,GAA4B,MAA7B,KAAwC,EAAvE,CAAD,GAA+E5iB,CAAnF;AAEEsJ,OAAC,IAAI,CAAL;AACA,QAAE5e,CAAF;AACD;;AAED,YAAQ4e,CAAR;AACA,WAAK,CAAL;AAAQsZ,SAAC,IAAI,CAAC9T,GAAG,CAAC5kB,UAAJ,CAAeQ,CAAC,GAAG,CAAnB,IAAwB,IAAzB,KAAkC,EAAvC;;AACR,WAAK,CAAL;AAAQk4B,SAAC,IAAI,CAAC9T,GAAG,CAAC5kB,UAAJ,CAAeQ,CAAC,GAAG,CAAnB,IAAwB,IAAzB,KAAkC,CAAvC;;AACR,WAAK,CAAL;AAAQk4B,SAAC,IAAK9T,GAAG,CAAC5kB,UAAJ,CAAeQ,CAAf,IAAoB,IAA1B;AACAk4B,SAAC,GAAK,CAACA,CAAC,GAAG,MAAL,IAAe,UAAhB,IAA+B,CAAE,CAACA,CAAC,KAAK,EAAP,IAAa,UAAd,GAA4B,MAA7B,KAAwC,EAAvE,CAAL;AAJR;;AAOAA,KAAC,IAAIA,CAAC,KAAK,EAAX;AACAA,KAAC,GAAK,CAACA,CAAC,GAAG,MAAL,IAAe,UAAhB,IAA+B,CAAE,CAACA,CAAC,KAAK,EAAP,IAAa,UAAd,GAA4B,MAA7B,KAAwC,EAAvE,CAAL;AACAA,KAAC,IAAIA,CAAC,KAAK,EAAX;AAEA,WAAOA,CAAC,KAAK,CAAb;AACD;;AAAA;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACE,WAASohF,YAAT,CAAsBrjH,GAAtB,EAA2BojH,IAA3B,EAAiC;AAC/B,QAAIr9E,SAAJ,EAAe/qB,KAAf,EAAsBsoG,EAAtB,EAA0BC,GAA1B,EAA+BC,EAA/B,EAAmCC,GAAnC,EAAwCC,EAAxC,EAA4CC,GAA5C,EAAiDC,EAAjD,EAAqD75G,CAArD;AAEAg8B,aAAS,GAAG/lC,GAAG,CAAC9O,MAAJ,GAAa,CAAzB,CAH+B,CAGH;;AAC5B8pB,SAAK,GAAGhb,GAAG,CAAC9O,MAAJ,GAAa60C,SAArB;AACAu9E,MAAE,GAAGF,IAAL;AACAI,MAAE,GAAG,UAAL;AACAE,MAAE,GAAG,UAAL;AACA35G,KAAC,GAAG,CAAJ;;AAEA,WAAOA,CAAC,GAAGiR,KAAX,EAAkB;AACd4oG,QAAE,GACE5jH,GAAG,CAACuJ,UAAJ,CAAeQ,CAAf,IAAoB,IAAtB,GACC,CAAC/J,GAAG,CAACuJ,UAAJ,CAAe,EAAEQ,CAAjB,IAAsB,IAAvB,KAAgC,CADjC,GAEC,CAAC/J,GAAG,CAACuJ,UAAJ,CAAe,EAAEQ,CAAjB,IAAsB,IAAvB,KAAgC,EAFjC,GAGC,CAAC/J,GAAG,CAACuJ,UAAJ,CAAe,EAAEQ,CAAjB,IAAsB,IAAvB,KAAgC,EAJnC;AAKF,QAAEA,CAAF;AAEA65G,QAAE,GAAM,CAACA,EAAE,GAAG,MAAN,IAAgBJ,EAAjB,IAAwB,CAAE,CAACI,EAAE,KAAK,EAAR,IAAcJ,EAAf,GAAqB,MAAtB,KAAiC,EAAzD,CAAF,GAAmE,UAAxE;AACAI,QAAE,GAAIA,EAAE,IAAI,EAAP,GAAcA,EAAE,KAAK,EAA1B;AACAA,QAAE,GAAM,CAACA,EAAE,GAAG,MAAN,IAAgBF,EAAjB,IAAwB,CAAE,CAACE,EAAE,KAAK,EAAR,IAAcF,EAAf,GAAqB,MAAtB,KAAiC,EAAzD,CAAF,GAAmE,UAAxE;AAEAJ,QAAE,IAAIM,EAAN;AACIN,QAAE,GAAIA,EAAE,IAAI,EAAP,GAAcA,EAAE,KAAK,EAA1B;AACJC,SAAG,GAAM,CAACD,EAAE,GAAG,MAAN,IAAgB,CAAjB,IAAuB,CAAE,CAACA,EAAE,KAAK,EAAR,IAAc,CAAf,GAAoB,MAArB,KAAgC,EAAvD,CAAF,GAAiE,UAAvE;AACAA,QAAE,GAAK,CAACC,GAAG,GAAG,MAAP,IAAiB,MAAlB,IAA6B,CAAE,CAACA,GAAG,KAAK,EAAT,IAAe,MAAhB,GAA0B,MAA3B,KAAsC,EAAnE,CAAN;AACD;;AAEDK,MAAE,GAAG,CAAL;;AAEA,YAAQ79E,SAAR;AACE,WAAK,CAAL;AAAQ69E,UAAE,IAAI,CAAC5jH,GAAG,CAACuJ,UAAJ,CAAeQ,CAAC,GAAG,CAAnB,IAAwB,IAAzB,KAAkC,EAAxC;;AACR,WAAK,CAAL;AAAQ65G,UAAE,IAAI,CAAC5jH,GAAG,CAACuJ,UAAJ,CAAeQ,CAAC,GAAG,CAAnB,IAAwB,IAAzB,KAAkC,CAAxC;;AACR,WAAK,CAAL;AAAQ65G,UAAE,IAAK5jH,GAAG,CAACuJ,UAAJ,CAAeQ,CAAf,IAAoB,IAA3B;AAER65G,UAAE,GAAK,CAACA,EAAE,GAAG,MAAN,IAAgBJ,EAAjB,IAAwB,CAAE,CAACI,EAAE,KAAK,EAAR,IAAcJ,EAAf,GAAqB,MAAtB,KAAiC,EAAzD,CAAD,GAAiE,UAAtE;AACAI,UAAE,GAAIA,EAAE,IAAI,EAAP,GAAcA,EAAE,KAAK,EAA1B;AACAA,UAAE,GAAK,CAACA,EAAE,GAAG,MAAN,IAAgBF,EAAjB,IAAwB,CAAE,CAACE,EAAE,KAAK,EAAR,IAAcF,EAAf,GAAqB,MAAtB,KAAiC,EAAzD,CAAD,GAAiE,UAAtE;AACAJ,UAAE,IAAIM,EAAN;AARF;;AAWAN,MAAE,IAAItjH,GAAG,CAAC9O,MAAV;AAEAoyH,MAAE,IAAIA,EAAE,KAAK,EAAb;AACAA,MAAE,GAAK,CAACA,EAAE,GAAG,MAAN,IAAgB,UAAjB,IAAgC,CAAE,CAACA,EAAE,KAAK,EAAR,IAAc,UAAf,GAA6B,MAA9B,KAAyC,EAAzE,CAAD,GAAiF,UAAtF;AACAA,MAAE,IAAIA,EAAE,KAAK,EAAb;AACAA,MAAE,GAAM,CAACA,EAAE,GAAG,MAAN,IAAgB,UAAjB,IAAgC,CAAE,CAACA,EAAE,KAAK,EAAR,IAAc,UAAf,GAA6B,MAA9B,KAAyC,EAAzE,CAAF,GAAmF,UAAxF;AACAA,MAAE,IAAIA,EAAE,KAAK,EAAb;AAEA,WAAOA,EAAE,KAAK,CAAd;AACD;;AAED,MAAIO,MAAM,GAAGR,YAAb;AACAQ,QAAM,CAACC,EAAP,GAAYX,YAAZ;AACAU,QAAM,CAACE,EAAP,GAAYV,YAAZ;;AAEA,MAAI,IAAJ,EAAmC;AACjCn3G,UAAM,CAACC,OAAP,GAAiB03G,MAAjB;AACD,GAFD,MAEO,sBAON;AACF,CAnIA,GAAD,C;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AAEa;AACb;;AACA,IAAI78D,qBAAqB,GAAGl5D,MAAM,CAACk5D,qBAAnC;AACA,IAAIp9C,cAAc,GAAG9b,MAAM,CAACoZ,SAAP,CAAiB0C,cAAtC;AACA,IAAIo6G,gBAAgB,GAAGl2H,MAAM,CAACoZ,SAAP,CAAiB2rD,oBAAxC;;AAEA,SAASgS,QAAT,CAAkB36D,GAAlB,EAAuB;AACtB,MAAIA,GAAG,KAAK,IAAR,IAAgBA,GAAG,KAAKhgB,SAA5B,EAAuC;AACtC,UAAM,IAAImQ,SAAJ,CAAc,uDAAd,CAAN;AACA;;AAED,SAAOvM,MAAM,CAACoc,GAAD,CAAb;AACA;;AAED,SAAS+5G,eAAT,GAA2B;AAC1B,MAAI;AACH,QAAI,CAACn2H,MAAM,CAACC,MAAZ,EAAoB;AACnB,aAAO,KAAP;AACA,KAHE,CAKH;AAEA;;;AACA,QAAIm2H,KAAK,GAAG,IAAIx1F,MAAJ,CAAW,KAAX,CAAZ,CARG,CAQ6B;;AAChCw1F,SAAK,CAAC,CAAD,CAAL,GAAW,IAAX;;AACA,QAAIp2H,MAAM,CAACyvE,mBAAP,CAA2B2mD,KAA3B,EAAkC,CAAlC,MAAyC,GAA7C,EAAkD;AACjD,aAAO,KAAP;AACA,KAZE,CAcH;;;AACA,QAAIC,KAAK,GAAG,EAAZ;;AACA,SAAK,IAAIp6G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,EAApB,EAAwBA,CAAC,EAAzB,EAA6B;AAC5Bo6G,WAAK,CAAC,MAAMz1F,MAAM,CAACC,YAAP,CAAoB5kB,CAApB,CAAP,CAAL,GAAsCA,CAAtC;AACA;;AACD,QAAIq6G,MAAM,GAAGt2H,MAAM,CAACyvE,mBAAP,CAA2B4mD,KAA3B,EAAkCl2H,GAAlC,CAAsC,UAAUq8B,CAAV,EAAa;AAC/D,aAAO65F,KAAK,CAAC75F,CAAD,CAAZ;AACA,KAFY,CAAb;;AAGA,QAAI85F,MAAM,CAACn4G,IAAP,CAAY,EAAZ,MAAoB,YAAxB,EAAsC;AACrC,aAAO,KAAP;AACA,KAxBE,CA0BH;;;AACA,QAAIo4G,KAAK,GAAG,EAAZ;AACA,2BAAuB94G,KAAvB,CAA6B,EAA7B,EAAiCnO,OAAjC,CAAyC,UAAUknH,MAAV,EAAkB;AAC1DD,WAAK,CAACC,MAAD,CAAL,GAAgBA,MAAhB;AACA,KAFD;;AAGA,QAAIx2H,MAAM,CAACiS,IAAP,CAAYjS,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBs2H,KAAlB,CAAZ,EAAsCp4G,IAAtC,CAA2C,EAA3C,MACF,sBADF,EAC0B;AACzB,aAAO,KAAP;AACA;;AAED,WAAO,IAAP;AACA,GArCD,CAqCE,OAAOoD,GAAP,EAAY;AACb;AACA,WAAO,KAAP;AACA;AACD;;AAEDnD,MAAM,CAACC,OAAP,GAAiB83G,eAAe,KAAKn2H,MAAM,CAACC,MAAZ,GAAqB,UAAUolB,MAAV,EAAkBuyC,MAAlB,EAA0B;AAC9E,MAAIz2D,IAAJ;AACA,MAAI+jC,EAAE,GAAG6xC,QAAQ,CAAC1xD,MAAD,CAAjB;AACA,MAAIoxG,OAAJ;;AAEA,OAAK,IAAInzH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgJ,SAAS,CAAClJ,MAA9B,EAAsCE,CAAC,EAAvC,EAA2C;AAC1CnC,QAAI,GAAGnB,MAAM,CAACsM,SAAS,CAAChJ,CAAD,CAAV,CAAb;;AAEA,SAAK,IAAI4O,GAAT,IAAgB/Q,IAAhB,EAAsB;AACrB,UAAI2a,cAAc,CAAC7B,IAAf,CAAoB9Y,IAApB,EAA0B+Q,GAA1B,CAAJ,EAAoC;AACnCgzB,UAAE,CAAChzB,GAAD,CAAF,GAAU/Q,IAAI,CAAC+Q,GAAD,CAAd;AACA;AACD;;AAED,QAAIgnD,qBAAJ,EAA2B;AAC1Bu9D,aAAO,GAAGv9D,qBAAqB,CAAC/3D,IAAD,CAA/B;;AACA,WAAK,IAAI8a,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGw6G,OAAO,CAACrzH,MAA5B,EAAoC6Y,CAAC,EAArC,EAAyC;AACxC,YAAIi6G,gBAAgB,CAACj8G,IAAjB,CAAsB9Y,IAAtB,EAA4Bs1H,OAAO,CAACx6G,CAAD,CAAnC,CAAJ,EAA6C;AAC5CipB,YAAE,CAACuxF,OAAO,CAACx6G,CAAD,CAAR,CAAF,GAAiB9a,IAAI,CAACs1H,OAAO,CAACx6G,CAAD,CAAR,CAArB;AACA;AACD;AACD;AACD;;AAED,SAAOipB,EAAP;AACA,CAzBD,C;;;;;;;;;;;AChEA,IAAIwxF,MAAM,GAAG,OAAOzlH,GAAP,KAAe,UAAf,IAA6BA,GAAG,CAACmI,SAA9C;AACA,IAAIu9G,iBAAiB,GAAG32H,MAAM,CAACy7D,wBAAP,IAAmCi7D,MAAnC,GAA4C12H,MAAM,CAACy7D,wBAAP,CAAgCxqD,GAAG,CAACmI,SAApC,EAA+C,MAA/C,CAA5C,GAAqG,IAA7H;AACA,IAAIw9G,OAAO,GAAGF,MAAM,IAAIC,iBAAV,IAA+B,OAAOA,iBAAiB,CAACt3H,GAAzB,KAAiC,UAAhE,GAA6Es3H,iBAAiB,CAACt3H,GAA/F,GAAqG,IAAnH;AACA,IAAIw3H,UAAU,GAAGH,MAAM,IAAIzlH,GAAG,CAACmI,SAAJ,CAAc9J,OAAzC;AACA,IAAIwnH,MAAM,GAAG,OAAOr/G,GAAP,KAAe,UAAf,IAA6BA,GAAG,CAAC2B,SAA9C;AACA,IAAI29G,iBAAiB,GAAG/2H,MAAM,CAACy7D,wBAAP,IAAmCq7D,MAAnC,GAA4C92H,MAAM,CAACy7D,wBAAP,CAAgChkD,GAAG,CAAC2B,SAApC,EAA+C,MAA/C,CAA5C,GAAqG,IAA7H;AACA,IAAI49G,OAAO,GAAGF,MAAM,IAAIC,iBAAV,IAA+B,OAAOA,iBAAiB,CAAC13H,GAAzB,KAAiC,UAAhE,GAA6E03H,iBAAiB,CAAC13H,GAA/F,GAAqG,IAAnH;AACA,IAAI43H,UAAU,GAAGH,MAAM,IAAIr/G,GAAG,CAAC2B,SAAJ,CAAc9J,OAAzC;AACA,IAAI4nH,UAAU,GAAG,OAAOhiH,OAAP,KAAmB,UAAnB,IAAiCA,OAAO,CAACkE,SAA1D;AACA,IAAI+9G,UAAU,GAAGD,UAAU,GAAGhiH,OAAO,CAACkE,SAAR,CAAkBhE,GAArB,GAA2B,IAAtD;AACA,IAAIgiH,UAAU,GAAG,OAAOx5D,OAAP,KAAmB,UAAnB,IAAiCA,OAAO,CAACxkD,SAA1D;AACA,IAAIi+G,UAAU,GAAGD,UAAU,GAAGx5D,OAAO,CAACxkD,SAAR,CAAkBhE,GAArB,GAA2B,IAAtD;AACA,IAAIkiH,UAAU,GAAG,OAAO35D,OAAP,KAAmB,UAAnB,IAAiCA,OAAO,CAACvkD,SAA1D;AACA,IAAIm+G,YAAY,GAAGD,UAAU,GAAG35D,OAAO,CAACvkD,SAAR,CAAkBo+G,KAArB,GAA6B,IAA1D;AACA,IAAIC,cAAc,GAAGp2E,OAAO,CAACjoC,SAAR,CAAkB9T,OAAvC;AACA,IAAIoyH,cAAc,GAAG13H,MAAM,CAACoZ,SAAP,CAAiBY,QAAtC;AACA,IAAI29G,gBAAgB,GAAG38D,QAAQ,CAAC5hD,SAAT,CAAmBY,QAA1C;AACA,IAAI49G,MAAM,GAAGh3F,MAAM,CAACxnB,SAAP,CAAiBmD,KAA9B;AACA,IAAIujG,MAAM,GAAGl/E,MAAM,CAACxnB,SAAP,CAAiBhU,KAA9B;AACA,IAAI64D,QAAQ,GAAGr9B,MAAM,CAACxnB,SAAP,CAAiBsD,OAAhC;AACA,IAAIm7G,YAAY,GAAGj3F,MAAM,CAACxnB,SAAP,CAAiBiU,WAApC;AACA,IAAIyqG,YAAY,GAAGl3F,MAAM,CAACxnB,SAAP,CAAiBqkB,WAApC;AACA,IAAIs6F,KAAK,GAAGj7G,MAAM,CAAC1D,SAAP,CAAiBwJ,IAA7B;AACA,IAAIm7C,OAAO,GAAG78D,KAAK,CAACkY,SAAN,CAAgBghB,MAA9B;AACA,IAAI49F,KAAK,GAAG92H,KAAK,CAACkY,SAAN,CAAgB+E,IAA5B;AACA,IAAI85G,SAAS,GAAG/2H,KAAK,CAACkY,SAAN,CAAgBhU,KAAhC;AACA,IAAI8yH,MAAM,GAAGrsH,IAAI,CAACC,KAAlB;AACA,IAAI4xG,aAAa,GAAG,OAAOnhD,MAAP,KAAkB,UAAlB,GAA+BA,MAAM,CAACnjD,SAAP,CAAiB9T,OAAhD,GAA0D,IAA9E;AACA,IAAI6yH,IAAI,GAAGn4H,MAAM,CAACk5D,qBAAlB;AACA,IAAIk/D,WAAW,GAAG,OAAOt3H,MAAP,KAAkB,UAAlB,IAAgC,OAAOA,MAAM,CAACvC,QAAd,KAA2B,QAA3D,GAAsEuC,MAAM,CAACsY,SAAP,CAAiBY,QAAvF,GAAkG,IAApH;AACA,IAAIq+G,iBAAiB,GAAG,OAAOv3H,MAAP,KAAkB,UAAlB,IAAgC,OAAOA,MAAM,CAACvC,QAAd,KAA2B,QAAnF,C,CACA;;AACA,IAAI4+G,WAAW,GAAG,OAAOr8G,MAAP,KAAkB,UAAlB,IAAgCA,MAAM,CAACq8G,WAAvC,KAAuD,OAAOr8G,MAAM,CAACq8G,WAAd,KAA8Bkb,iBAA9B,GAAkD,QAAlD,GAA6D,QAApH,IACZv3H,MAAM,CAACq8G,WADK,GAEZ,IAFN;AAGA,IAAImb,YAAY,GAAGt4H,MAAM,CAACoZ,SAAP,CAAiB2rD,oBAApC;AAEA,IAAInQ,GAAG,GAAG,CAAC,OAAO0I,OAAP,KAAmB,UAAnB,GAAgCA,OAAO,CAACzI,cAAxC,GAAyD70D,MAAM,CAAC60D,cAAjE,MACN,GAAGmH,SAAH,KAAiB96D,KAAK,CAACkY,SAAvB,CAAiC;AAAjC,EACM,UAAU+7B,CAAV,EAAa;AACX,SAAOA,CAAC,CAAC6mB,SAAT,CADW,CACS;AACvB,CAHL,GAIM,IALA,CAAV;;AAQA,SAASu8D,mBAAT,CAA6BziH,GAA7B,EAAkCuqB,GAAlC,EAAuC;AACnC,MACIvqB,GAAG,KAAKguF,QAAR,IACGhuF,GAAG,KAAK,CAACguF,QADZ,IAEGhuF,GAAG,KAAKA,GAFX,IAGIA,GAAG,IAAIA,GAAG,GAAG,CAAC,IAAd,IAAsBA,GAAG,GAAG,IAHhC,IAIGiiH,KAAK,CAAC99G,IAAN,CAAW,GAAX,EAAgBomB,GAAhB,CALP,EAME;AACE,WAAOA,GAAP;AACH;;AACD,MAAIm4F,QAAQ,GAAG,kCAAf;;AACA,MAAI,OAAO1iH,GAAP,KAAe,QAAnB,EAA6B;AACzB,QAAI7J,GAAG,GAAG6J,GAAG,GAAG,CAAN,GAAU,CAACoiH,MAAM,CAAC,CAACpiH,GAAF,CAAjB,GAA0BoiH,MAAM,CAACpiH,GAAD,CAA1C,CADyB,CACwB;;AACjD,QAAI7J,GAAG,KAAK6J,GAAZ,EAAiB;AACb,UAAI2iH,MAAM,GAAG73F,MAAM,CAAC30B,GAAD,CAAnB;AACA,UAAIysH,GAAG,GAAG5Y,MAAM,CAAC7lG,IAAP,CAAYomB,GAAZ,EAAiBo4F,MAAM,CAACr1H,MAAP,GAAgB,CAAjC,CAAV;AACA,aAAO66D,QAAQ,CAAChkD,IAAT,CAAcw+G,MAAd,EAAsBD,QAAtB,EAAgC,KAAhC,IAAyC,GAAzC,GAA+Cv6D,QAAQ,CAAChkD,IAAT,CAAcgkD,QAAQ,CAAChkD,IAAT,CAAcy+G,GAAd,EAAmB,aAAnB,EAAkC,KAAlC,CAAd,EAAwD,IAAxD,EAA8D,EAA9D,CAAtD;AACH;AACJ;;AACD,SAAOz6D,QAAQ,CAAChkD,IAAT,CAAcomB,GAAd,EAAmBm4F,QAAnB,EAA6B,KAA7B,CAAP;AACH;;AAED,IAAIG,aAAa,GAAGn6G,mBAAO,CAAC,qEAAD,CAAP,CAA0Bo6G,MAA9C;;AACA,IAAIC,aAAa,GAAGF,aAAa,IAAI7qF,QAAQ,CAAC6qF,aAAD,CAAzB,GAA2CA,aAA3C,GAA2D,IAA/E;;AAEAv6G,MAAM,CAACC,OAAP,GAAiB,SAASy6G,QAAT,CAAkB3mH,GAAlB,EAAuBjU,OAAvB,EAAgC66H,KAAhC,EAAuCC,IAAvC,EAA6C;AAC1D,MAAI1/G,IAAI,GAAGpb,OAAO,IAAI,EAAtB;;AAEA,MAAIkX,GAAG,CAACkE,IAAD,EAAO,YAAP,CAAH,IAA4BA,IAAI,CAAC2/G,UAAL,KAAoB,QAApB,IAAgC3/G,IAAI,CAAC2/G,UAAL,KAAoB,QAApF,EAA+F;AAC3F,UAAM,IAAI1sH,SAAJ,CAAc,kDAAd,CAAN;AACH;;AACD,MACI6I,GAAG,CAACkE,IAAD,EAAO,iBAAP,CAAH,KAAiC,OAAOA,IAAI,CAAC4/G,eAAZ,KAAgC,QAAhC,GAC3B5/G,IAAI,CAAC4/G,eAAL,GAAuB,CAAvB,IAA4B5/G,IAAI,CAAC4/G,eAAL,KAAyBp1B,QAD1B,GAE3BxqF,IAAI,CAAC4/G,eAAL,KAAyB,IAF/B,CADJ,EAKE;AACE,UAAM,IAAI3sH,SAAJ,CAAc,wFAAd,CAAN;AACH;;AACD,MAAI4sH,aAAa,GAAG/jH,GAAG,CAACkE,IAAD,EAAO,eAAP,CAAH,GAA6BA,IAAI,CAAC6/G,aAAlC,GAAkD,IAAtE;;AACA,MAAI,OAAOA,aAAP,KAAyB,SAAzB,IAAsCA,aAAa,KAAK,QAA5D,EAAsE;AAClE,UAAM,IAAI5sH,SAAJ,CAAc,+EAAd,CAAN;AACH;;AAED,MACI6I,GAAG,CAACkE,IAAD,EAAO,QAAP,CAAH,IACGA,IAAI,CAAC8/G,MAAL,KAAgB,IADnB,IAEG9/G,IAAI,CAAC8/G,MAAL,KAAgB,IAFnB,IAGG,EAAE57G,QAAQ,CAAClE,IAAI,CAAC8/G,MAAN,EAAc,EAAd,CAAR,KAA8B9/G,IAAI,CAAC8/G,MAAnC,IAA6C9/G,IAAI,CAAC8/G,MAAL,GAAc,CAA7D,CAJP,EAKE;AACE,UAAM,IAAI7sH,SAAJ,CAAc,0DAAd,CAAN;AACH;;AACD,MAAI6I,GAAG,CAACkE,IAAD,EAAO,kBAAP,CAAH,IAAiC,OAAOA,IAAI,CAAC+/G,gBAAZ,KAAiC,SAAtE,EAAiF;AAC7E,UAAM,IAAI9sH,SAAJ,CAAc,mEAAd,CAAN;AACH;;AACD,MAAI8sH,gBAAgB,GAAG//G,IAAI,CAAC+/G,gBAA5B;;AAEA,MAAI,OAAOlnH,GAAP,KAAe,WAAnB,EAAgC;AAC5B,WAAO,WAAP;AACH;;AACD,MAAIA,GAAG,KAAK,IAAZ,EAAkB;AACd,WAAO,MAAP;AACH;;AACD,MAAI,OAAOA,GAAP,KAAe,SAAnB,EAA8B;AAC1B,WAAOA,GAAG,GAAG,MAAH,GAAY,OAAtB;AACH;;AAED,MAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;AACzB,WAAOmnH,aAAa,CAACnnH,GAAD,EAAMmH,IAAN,CAApB;AACH;;AACD,MAAI,OAAOnH,GAAP,KAAe,QAAnB,EAA6B;AACzB,QAAIA,GAAG,KAAK,CAAZ,EAAe;AACX,aAAO2xF,QAAQ,GAAG3xF,GAAX,GAAiB,CAAjB,GAAqB,GAArB,GAA2B,IAAlC;AACH;;AACD,QAAIkuB,GAAG,GAAGO,MAAM,CAACzuB,GAAD,CAAhB;AACA,WAAOknH,gBAAgB,GAAGd,mBAAmB,CAACpmH,GAAD,EAAMkuB,GAAN,CAAtB,GAAmCA,GAA1D;AACH;;AACD,MAAI,OAAOluB,GAAP,KAAe,QAAnB,EAA6B;AACzB,QAAIonH,SAAS,GAAG34F,MAAM,CAACzuB,GAAD,CAAN,GAAc,GAA9B;AACA,WAAOknH,gBAAgB,GAAGd,mBAAmB,CAACpmH,GAAD,EAAMonH,SAAN,CAAtB,GAAyCA,SAAhE;AACH;;AAED,MAAIC,QAAQ,GAAG,OAAOlgH,IAAI,CAACy/G,KAAZ,KAAsB,WAAtB,GAAoC,CAApC,GAAwCz/G,IAAI,CAACy/G,KAA5D;;AACA,MAAI,OAAOA,KAAP,KAAiB,WAArB,EAAkC;AAAEA,SAAK,GAAG,CAAR;AAAY;;AAChD,MAAIA,KAAK,IAAIS,QAAT,IAAqBA,QAAQ,GAAG,CAAhC,IAAqC,OAAOrnH,GAAP,KAAe,QAAxD,EAAkE;AAC9D,WAAOzN,OAAO,CAACyN,GAAD,CAAP,GAAe,SAAf,GAA2B,UAAlC;AACH;;AAED,MAAIinH,MAAM,GAAGK,SAAS,CAACngH,IAAD,EAAOy/G,KAAP,CAAtB;;AAEA,MAAI,OAAOC,IAAP,KAAgB,WAApB,EAAiC;AAC7BA,QAAI,GAAG,EAAP;AACH,GAFD,MAEO,IAAI5tH,OAAO,CAAC4tH,IAAD,EAAO7mH,GAAP,CAAP,IAAsB,CAA1B,EAA6B;AAChC,WAAO,YAAP;AACH;;AAED,WAASunH,OAAT,CAAiB/8H,KAAjB,EAAwBwE,IAAxB,EAA8Bw4H,QAA9B,EAAwC;AACpC,QAAIx4H,IAAJ,EAAU;AACN63H,UAAI,GAAGf,SAAS,CAACh+G,IAAV,CAAe++G,IAAf,CAAP;AACAA,UAAI,CAAC/2H,IAAL,CAAUd,IAAV;AACH;;AACD,QAAIw4H,QAAJ,EAAc;AACV,UAAIC,OAAO,GAAG;AACVb,aAAK,EAAEz/G,IAAI,CAACy/G;AADF,OAAd;;AAGA,UAAI3jH,GAAG,CAACkE,IAAD,EAAO,YAAP,CAAP,EAA6B;AACzBsgH,eAAO,CAACX,UAAR,GAAqB3/G,IAAI,CAAC2/G,UAA1B;AACH;;AACD,aAAOH,QAAQ,CAACn8H,KAAD,EAAQi9H,OAAR,EAAiBb,KAAK,GAAG,CAAzB,EAA4BC,IAA5B,CAAf;AACH;;AACD,WAAOF,QAAQ,CAACn8H,KAAD,EAAQ2c,IAAR,EAAcy/G,KAAK,GAAG,CAAtB,EAAyBC,IAAzB,CAAf;AACH;;AAED,MAAI,OAAO7mH,GAAP,KAAe,UAAnB,EAA+B;AAC3B,QAAI/L,IAAI,GAAGyzH,MAAM,CAAC1nH,GAAD,CAAjB;AACA,QAAIF,IAAI,GAAG6nH,UAAU,CAAC3nH,GAAD,EAAMunH,OAAN,CAArB;AACA,WAAO,eAAetzH,IAAI,GAAG,OAAOA,IAAV,GAAiB,cAApC,IAAsD,GAAtD,IAA6D6L,IAAI,CAAC7O,MAAL,GAAc,CAAd,GAAkB,QAAQ40H,KAAK,CAAC/9G,IAAN,CAAWhI,IAAX,EAAiB,IAAjB,CAAR,GAAiC,IAAnD,GAA0D,EAAvH,CAAP;AACH;;AACD,MAAI67B,QAAQ,CAAC37B,GAAD,CAAZ,EAAmB;AACf,QAAI4nH,SAAS,GAAG1B,iBAAiB,GAAGp6D,QAAQ,CAAChkD,IAAT,CAAc2mB,MAAM,CAACzuB,GAAD,CAApB,EAA2B,wBAA3B,EAAqD,IAArD,CAAH,GAAgEimH,WAAW,CAACn+G,IAAZ,CAAiB9H,GAAjB,CAAjG;AACA,WAAO,OAAOA,GAAP,KAAe,QAAf,IAA2B,CAACkmH,iBAA5B,GAAgD2B,SAAS,CAACD,SAAD,CAAzD,GAAuEA,SAA9E;AACH;;AACD,MAAIE,SAAS,CAAC9nH,GAAD,CAAb,EAAoB;AAChB,QAAI7O,CAAC,GAAG,MAAMw0H,YAAY,CAAC79G,IAAb,CAAkB2mB,MAAM,CAACzuB,GAAG,CAAC+nH,QAAL,CAAxB,CAAd;AACA,QAAIC,KAAK,GAAGhoH,GAAG,CAACioH,UAAJ,IAAkB,EAA9B;;AACA,SAAK,IAAIn+G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGk+G,KAAK,CAAC/2H,MAA1B,EAAkC6Y,CAAC,EAAnC,EAAuC;AACnC3Y,OAAC,IAAI,MAAM62H,KAAK,CAACl+G,CAAD,CAAL,CAAS7V,IAAf,GAAsB,GAAtB,GAA4Bi0H,UAAU,CAACj2F,KAAK,CAAC+1F,KAAK,CAACl+G,CAAD,CAAL,CAAStf,KAAV,CAAN,EAAwB,QAAxB,EAAkC2c,IAAlC,CAA3C;AACH;;AACDhW,KAAC,IAAI,GAAL;;AACA,QAAI6O,GAAG,CAACmoH,UAAJ,IAAkBnoH,GAAG,CAACmoH,UAAJ,CAAel3H,MAArC,EAA6C;AAAEE,OAAC,IAAI,KAAL;AAAa;;AAC5DA,KAAC,IAAI,OAAOw0H,YAAY,CAAC79G,IAAb,CAAkB2mB,MAAM,CAACzuB,GAAG,CAAC+nH,QAAL,CAAxB,CAAP,GAAiD,GAAtD;AACA,WAAO52H,CAAP;AACH;;AACD,MAAIoB,OAAO,CAACyN,GAAD,CAAX,EAAkB;AACd,QAAIA,GAAG,CAAC/O,MAAJ,KAAe,CAAnB,EAAsB;AAAE,aAAO,IAAP;AAAc;;AACtC,QAAIm3H,EAAE,GAAGT,UAAU,CAAC3nH,GAAD,EAAMunH,OAAN,CAAnB;;AACA,QAAIN,MAAM,IAAI,CAACoB,gBAAgB,CAACD,EAAD,CAA/B,EAAqC;AACjC,aAAO,MAAME,YAAY,CAACF,EAAD,EAAKnB,MAAL,CAAlB,GAAiC,GAAxC;AACH;;AACD,WAAO,OAAOpB,KAAK,CAAC/9G,IAAN,CAAWsgH,EAAX,EAAe,IAAf,CAAP,GAA8B,IAArC;AACH;;AACD,MAAIG,OAAO,CAACvoH,GAAD,CAAX,EAAkB;AACd,QAAIqd,KAAK,GAAGsqG,UAAU,CAAC3nH,GAAD,EAAMunH,OAAN,CAAtB;;AACA,QAAI,WAAWvnH,GAAX,IAAkB,CAACmmH,YAAY,CAACr+G,IAAb,CAAkB9H,GAAlB,EAAuB,OAAvB,CAAvB,EAAwD;AACpD,aAAO,QAAQyuB,MAAM,CAACzuB,GAAD,CAAd,GAAsB,IAAtB,GAA6B6lH,KAAK,CAAC/9G,IAAN,CAAW8jD,OAAO,CAAC9jD,IAAR,CAAa,cAAcy/G,OAAO,CAACvnH,GAAG,CAACwoH,KAAL,CAAlC,EAA+CnrG,KAA/C,CAAX,EAAkE,IAAlE,CAA7B,GAAuG,IAA9G;AACH;;AACD,QAAIA,KAAK,CAACpsB,MAAN,KAAiB,CAArB,EAAwB;AAAE,aAAO,MAAMw9B,MAAM,CAACzuB,GAAD,CAAZ,GAAoB,GAA3B;AAAiC;;AAC3D,WAAO,QAAQyuB,MAAM,CAACzuB,GAAD,CAAd,GAAsB,IAAtB,GAA6B6lH,KAAK,CAAC/9G,IAAN,CAAWuV,KAAX,EAAkB,IAAlB,CAA7B,GAAuD,IAA9D;AACH;;AACD,MAAI,OAAOrd,GAAP,KAAe,QAAf,IAA2BgnH,aAA/B,EAA8C;AAC1C,QAAIN,aAAa,IAAI,OAAO1mH,GAAG,CAAC0mH,aAAD,CAAV,KAA8B,UAAnD,EAA+D;AAC3D,aAAO1mH,GAAG,CAAC0mH,aAAD,CAAH,EAAP;AACH,KAFD,MAEO,IAAIM,aAAa,KAAK,QAAlB,IAA8B,OAAOhnH,GAAG,CAACunH,OAAX,KAAuB,UAAzD,EAAqE;AACxE,aAAOvnH,GAAG,CAACunH,OAAJ,EAAP;AACH;AACJ;;AACD,MAAI5/D,KAAK,CAAC3nD,GAAD,CAAT,EAAgB;AACZ,QAAIyoH,QAAQ,GAAG,EAAf;AACA/D,cAAU,CAAC58G,IAAX,CAAgB9H,GAAhB,EAAqB,UAAUxV,KAAV,EAAiBuV,GAAjB,EAAsB;AACvC0oH,cAAQ,CAAC34H,IAAT,CAAcy3H,OAAO,CAACxnH,GAAD,EAAMC,GAAN,EAAW,IAAX,CAAP,GAA0B,MAA1B,GAAmCunH,OAAO,CAAC/8H,KAAD,EAAQwV,GAAR,CAAxD;AACH,KAFD;AAGA,WAAO0oH,YAAY,CAAC,KAAD,EAAQjE,OAAO,CAAC38G,IAAR,CAAa9H,GAAb,CAAR,EAA2ByoH,QAA3B,EAAqCxB,MAArC,CAAnB;AACH;;AACD,MAAIr/D,KAAK,CAAC5nD,GAAD,CAAT,EAAgB;AACZ,QAAI2oH,QAAQ,GAAG,EAAf;AACA7D,cAAU,CAACh9G,IAAX,CAAgB9H,GAAhB,EAAqB,UAAUxV,KAAV,EAAiB;AAClCm+H,cAAQ,CAAC74H,IAAT,CAAcy3H,OAAO,CAAC/8H,KAAD,EAAQwV,GAAR,CAArB;AACH,KAFD;AAGA,WAAO0oH,YAAY,CAAC,KAAD,EAAQ7D,OAAO,CAAC/8G,IAAR,CAAa9H,GAAb,CAAR,EAA2B2oH,QAA3B,EAAqC1B,MAArC,CAAnB;AACH;;AACD,MAAIzY,SAAS,CAACxuG,GAAD,CAAb,EAAoB;AAChB,WAAO4oH,gBAAgB,CAAC,SAAD,CAAvB;AACH;;AACD,MAAIna,SAAS,CAACzuG,GAAD,CAAb,EAAoB;AAChB,WAAO4oH,gBAAgB,CAAC,SAAD,CAAvB;AACH;;AACD,MAAIC,SAAS,CAAC7oH,GAAD,CAAb,EAAoB;AAChB,WAAO4oH,gBAAgB,CAAC,SAAD,CAAvB;AACH;;AACD,MAAIt7D,QAAQ,CAACttD,GAAD,CAAZ,EAAmB;AACf,WAAO6nH,SAAS,CAACN,OAAO,CAAC/4H,MAAM,CAACwR,GAAD,CAAP,CAAR,CAAhB;AACH;;AACD,MAAI0rG,QAAQ,CAAC1rG,GAAD,CAAZ,EAAmB;AACf,WAAO6nH,SAAS,CAACN,OAAO,CAAChc,aAAa,CAACzjG,IAAd,CAAmB9H,GAAnB,CAAD,CAAR,CAAhB;AACH;;AACD,MAAIqtD,SAAS,CAACrtD,GAAD,CAAb,EAAoB;AAChB,WAAO6nH,SAAS,CAACvC,cAAc,CAACx9G,IAAf,CAAoB9H,GAApB,CAAD,CAAhB;AACH;;AACD,MAAIqJ,QAAQ,CAACrJ,GAAD,CAAZ,EAAmB;AACf,WAAO6nH,SAAS,CAACN,OAAO,CAAC94F,MAAM,CAACzuB,GAAD,CAAP,CAAR,CAAhB;AACH;;AACD,MAAI,CAAC9L,MAAM,CAAC8L,GAAD,CAAP,IAAgB,CAAC85B,QAAQ,CAAC95B,GAAD,CAA7B,EAAoC;AAChC,QAAI8oH,EAAE,GAAGnB,UAAU,CAAC3nH,GAAD,EAAMunH,OAAN,CAAnB;AACA,QAAIwB,aAAa,GAAGtmE,GAAG,GAAGA,GAAG,CAACziD,GAAD,CAAH,KAAanS,MAAM,CAACoZ,SAAvB,GAAmCjH,GAAG,YAAYnS,MAAf,IAAyBmS,GAAG,CAAClW,WAAJ,KAAoB+D,MAAvG;AACA,QAAIm7H,QAAQ,GAAGhpH,GAAG,YAAYnS,MAAf,GAAwB,EAAxB,GAA6B,gBAA5C;AACA,QAAIo7H,SAAS,GAAG,CAACF,aAAD,IAAkB/d,WAAlB,IAAiCn9G,MAAM,CAACmS,GAAD,CAAN,KAAgBA,GAAjD,IAAwDgrG,WAAW,IAAIhrG,GAAvE,GAA6E2tG,MAAM,CAAC7lG,IAAP,CAAYu+C,KAAK,CAACrmD,GAAD,CAAjB,EAAwB,CAAxB,EAA2B,CAAC,CAA5B,CAA7E,GAA8GgpH,QAAQ,GAAG,QAAH,GAAc,EAApJ;AACA,QAAIE,cAAc,GAAGH,aAAa,IAAI,OAAO/oH,GAAG,CAAClW,WAAX,KAA2B,UAA5C,GAAyD,EAAzD,GAA8DkW,GAAG,CAAClW,WAAJ,CAAgBmK,IAAhB,GAAuB+L,GAAG,CAAClW,WAAJ,CAAgBmK,IAAhB,GAAuB,GAA9C,GAAoD,EAAvI;AACA,QAAIo6G,GAAG,GAAG6a,cAAc,IAAID,SAAS,IAAID,QAAb,GAAwB,MAAMnD,KAAK,CAAC/9G,IAAN,CAAW8jD,OAAO,CAAC9jD,IAAR,CAAa,EAAb,EAAiBmhH,SAAS,IAAI,EAA9B,EAAkCD,QAAQ,IAAI,EAA9C,CAAX,EAA8D,IAA9D,CAAN,GAA4E,IAApG,GAA2G,EAA/G,CAAxB;;AACA,QAAIF,EAAE,CAAC73H,MAAH,KAAc,CAAlB,EAAqB;AAAE,aAAOo9G,GAAG,GAAG,IAAb;AAAoB;;AAC3C,QAAI4Y,MAAJ,EAAY;AACR,aAAO5Y,GAAG,GAAG,GAAN,GAAYia,YAAY,CAACQ,EAAD,EAAK7B,MAAL,CAAxB,GAAuC,GAA9C;AACH;;AACD,WAAO5Y,GAAG,GAAG,IAAN,GAAawX,KAAK,CAAC/9G,IAAN,CAAWghH,EAAX,EAAe,IAAf,CAAb,GAAoC,IAA3C;AACH;;AACD,SAAOr6F,MAAM,CAACzuB,GAAD,CAAb;AACH,CApLD;;AAsLA,SAASkoH,UAAT,CAAoB/2H,CAApB,EAAuBg4H,YAAvB,EAAqChiH,IAArC,EAA2C;AACvC,MAAIiiH,SAAS,GAAG,CAACjiH,IAAI,CAAC2/G,UAAL,IAAmBqC,YAApB,MAAsC,QAAtC,GAAiD,GAAjD,GAAuD,GAAvE;AACA,SAAOC,SAAS,GAAGj4H,CAAZ,GAAgBi4H,SAAvB;AACH;;AAED,SAASn3F,KAAT,CAAe9gC,CAAf,EAAkB;AACd,SAAO26D,QAAQ,CAAChkD,IAAT,CAAc2mB,MAAM,CAACt9B,CAAD,CAApB,EAAyB,IAAzB,EAA+B,QAA/B,CAAP;AACH;;AAED,SAASoB,OAAT,CAAiByN,GAAjB,EAAsB;AAAE,SAAOqmD,KAAK,CAACrmD,GAAD,CAAL,KAAe,gBAAf,KAAoC,CAACgrG,WAAD,IAAgB,EAAE,OAAOhrG,GAAP,KAAe,QAAf,IAA2BgrG,WAAW,IAAIhrG,GAA5C,CAApD,CAAP;AAA+G;;AACvI,SAAS9L,MAAT,CAAgB8L,GAAhB,EAAqB;AAAE,SAAOqmD,KAAK,CAACrmD,GAAD,CAAL,KAAe,eAAf,KAAmC,CAACgrG,WAAD,IAAgB,EAAE,OAAOhrG,GAAP,KAAe,QAAf,IAA2BgrG,WAAW,IAAIhrG,GAA5C,CAAnD,CAAP;AAA8G;;AACrI,SAAS85B,QAAT,CAAkB95B,GAAlB,EAAuB;AAAE,SAAOqmD,KAAK,CAACrmD,GAAD,CAAL,KAAe,iBAAf,KAAqC,CAACgrG,WAAD,IAAgB,EAAE,OAAOhrG,GAAP,KAAe,QAAf,IAA2BgrG,WAAW,IAAIhrG,GAA5C,CAArD,CAAP;AAAgH;;AACzI,SAASuoH,OAAT,CAAiBvoH,GAAjB,EAAsB;AAAE,SAAOqmD,KAAK,CAACrmD,GAAD,CAAL,KAAe,gBAAf,KAAoC,CAACgrG,WAAD,IAAgB,EAAE,OAAOhrG,GAAP,KAAe,QAAf,IAA2BgrG,WAAW,IAAIhrG,GAA5C,CAApD,CAAP;AAA+G;;AACvI,SAASqJ,QAAT,CAAkBrJ,GAAlB,EAAuB;AAAE,SAAOqmD,KAAK,CAACrmD,GAAD,CAAL,KAAe,iBAAf,KAAqC,CAACgrG,WAAD,IAAgB,EAAE,OAAOhrG,GAAP,KAAe,QAAf,IAA2BgrG,WAAW,IAAIhrG,GAA5C,CAArD,CAAP;AAAgH;;AACzI,SAASstD,QAAT,CAAkBttD,GAAlB,EAAuB;AAAE,SAAOqmD,KAAK,CAACrmD,GAAD,CAAL,KAAe,iBAAf,KAAqC,CAACgrG,WAAD,IAAgB,EAAE,OAAOhrG,GAAP,KAAe,QAAf,IAA2BgrG,WAAW,IAAIhrG,GAA5C,CAArD,CAAP;AAAgH;;AACzI,SAASqtD,SAAT,CAAmBrtD,GAAnB,EAAwB;AAAE,SAAOqmD,KAAK,CAACrmD,GAAD,CAAL,KAAe,kBAAf,KAAsC,CAACgrG,WAAD,IAAgB,EAAE,OAAOhrG,GAAP,KAAe,QAAf,IAA2BgrG,WAAW,IAAIhrG,GAA5C,CAAtD,CAAP;AAAiH,C,CAE3I;;;AACA,SAAS27B,QAAT,CAAkB37B,GAAlB,EAAuB;AACnB,MAAIkmH,iBAAJ,EAAuB;AACnB,WAAOlmH,GAAG,IAAI,OAAOA,GAAP,KAAe,QAAtB,IAAkCA,GAAG,YAAYrR,MAAxD;AACH;;AACD,MAAI,OAAOqR,GAAP,KAAe,QAAnB,EAA6B;AACzB,WAAO,IAAP;AACH;;AACD,MAAI,CAACA,GAAD,IAAQ,OAAOA,GAAP,KAAe,QAAvB,IAAmC,CAACimH,WAAxC,EAAqD;AACjD,WAAO,KAAP;AACH;;AACD,MAAI;AACAA,eAAW,CAACn+G,IAAZ,CAAiB9H,GAAjB;AACA,WAAO,IAAP;AACH,GAHD,CAGE,OAAOuU,CAAP,EAAU,CAAE;;AACd,SAAO,KAAP;AACH;;AAED,SAASm3F,QAAT,CAAkB1rG,GAAlB,EAAuB;AACnB,MAAI,CAACA,GAAD,IAAQ,OAAOA,GAAP,KAAe,QAAvB,IAAmC,CAACurG,aAAxC,EAAuD;AACnD,WAAO,KAAP;AACH;;AACD,MAAI;AACAA,iBAAa,CAACzjG,IAAd,CAAmB9H,GAAnB;AACA,WAAO,IAAP;AACH,GAHD,CAGE,OAAOuU,CAAP,EAAU,CAAE;;AACd,SAAO,KAAP;AACH;;AAED,IAAI8zC,MAAM,GAAGx6D,MAAM,CAACoZ,SAAP,CAAiB0C,cAAjB,IAAmC,UAAU5J,GAAV,EAAe;AAAE,SAAOA,GAAG,IAAI,IAAd;AAAqB,CAAtF;;AACA,SAASkD,GAAT,CAAajD,GAAb,EAAkBD,GAAlB,EAAuB;AACnB,SAAOsoD,MAAM,CAACvgD,IAAP,CAAY9H,GAAZ,EAAiBD,GAAjB,CAAP;AACH;;AAED,SAASsmD,KAAT,CAAermD,GAAf,EAAoB;AAChB,SAAOulH,cAAc,CAACz9G,IAAf,CAAoB9H,GAApB,CAAP;AACH;;AAED,SAAS0nH,MAAT,CAAgB5vF,CAAhB,EAAmB;AACf,MAAIA,CAAC,CAAC7jC,IAAN,EAAY;AAAE,WAAO6jC,CAAC,CAAC7jC,IAAT;AAAgB;;AAC9B,MAAIkuC,CAAC,GAAGsjF,MAAM,CAAC39G,IAAP,CAAY09G,gBAAgB,CAAC19G,IAAjB,CAAsBgwB,CAAtB,CAAZ,EAAsC,sBAAtC,CAAR;;AACA,MAAIqK,CAAJ,EAAO;AAAE,WAAOA,CAAC,CAAC,CAAD,CAAR;AAAc;;AACvB,SAAO,IAAP;AACH;;AAED,SAASlpC,OAAT,CAAiBmvH,EAAjB,EAAqBzvH,CAArB,EAAwB;AACpB,MAAIyvH,EAAE,CAACnvH,OAAP,EAAgB;AAAE,WAAOmvH,EAAE,CAACnvH,OAAH,CAAWN,CAAX,CAAP;AAAuB;;AACzC,OAAK,IAAImR,CAAC,GAAG,CAAR,EAAW4e,CAAC,GAAG0/F,EAAE,CAACn3H,MAAvB,EAA+B6Y,CAAC,GAAG4e,CAAnC,EAAsC5e,CAAC,EAAvC,EAA2C;AACvC,QAAIs+G,EAAE,CAACt+G,CAAD,CAAF,KAAUnR,CAAd,EAAiB;AAAE,aAAOmR,CAAP;AAAW;AACjC;;AACD,SAAO,CAAC,CAAR;AACH;;AAED,SAAS69C,KAAT,CAAehvD,CAAf,EAAkB;AACd,MAAI,CAAC8rH,OAAD,IAAY,CAAC9rH,CAAb,IAAkB,OAAOA,CAAP,KAAa,QAAnC,EAA6C;AACzC,WAAO,KAAP;AACH;;AACD,MAAI;AACA8rH,WAAO,CAAC38G,IAAR,CAAanP,CAAb;;AACA,QAAI;AACAksH,aAAO,CAAC/8G,IAAR,CAAanP,CAAb;AACH,KAFD,CAEE,OAAOxH,CAAP,EAAU;AACR,aAAO,IAAP;AACH;;AACD,WAAOwH,CAAC,YAAYmG,GAApB,CAPA,CAOyB;AAC5B,GARD,CAQE,OAAOyV,CAAP,EAAU,CAAE;;AACd,SAAO,KAAP;AACH;;AAED,SAASi6F,SAAT,CAAmB71G,CAAnB,EAAsB;AAClB,MAAI,CAACqsH,UAAD,IAAe,CAACrsH,CAAhB,IAAqB,OAAOA,CAAP,KAAa,QAAtC,EAAgD;AAC5C,WAAO,KAAP;AACH;;AACD,MAAI;AACAqsH,cAAU,CAACl9G,IAAX,CAAgBnP,CAAhB,EAAmBqsH,UAAnB;;AACA,QAAI;AACAE,gBAAU,CAACp9G,IAAX,CAAgBnP,CAAhB,EAAmBusH,UAAnB;AACH,KAFD,CAEE,OAAO/zH,CAAP,EAAU;AACR,aAAO,IAAP;AACH;;AACD,WAAOwH,CAAC,YAAYoK,OAApB,CAPA,CAO6B;AAChC,GARD,CAQE,OAAOwR,CAAP,EAAU,CAAE;;AACd,SAAO,KAAP;AACH;;AAED,SAASs0G,SAAT,CAAmBlwH,CAAnB,EAAsB;AAClB,MAAI,CAACysH,YAAD,IAAiB,CAACzsH,CAAlB,IAAuB,OAAOA,CAAP,KAAa,QAAxC,EAAkD;AAC9C,WAAO,KAAP;AACH;;AACD,MAAI;AACAysH,gBAAY,CAACt9G,IAAb,CAAkBnP,CAAlB;AACA,WAAO,IAAP;AACH,GAHD,CAGE,OAAO4b,CAAP,EAAU,CAAE;;AACd,SAAO,KAAP;AACH;;AAED,SAASqzC,KAAT,CAAejvD,CAAf,EAAkB;AACd,MAAI,CAACksH,OAAD,IAAY,CAAClsH,CAAb,IAAkB,OAAOA,CAAP,KAAa,QAAnC,EAA6C;AACzC,WAAO,KAAP;AACH;;AACD,MAAI;AACAksH,WAAO,CAAC/8G,IAAR,CAAanP,CAAb;;AACA,QAAI;AACA8rH,aAAO,CAAC38G,IAAR,CAAanP,CAAb;AACH,KAFD,CAEE,OAAOwpC,CAAP,EAAU;AACR,aAAO,IAAP;AACH;;AACD,WAAOxpC,CAAC,YAAY2M,GAApB,CAPA,CAOyB;AAC5B,GARD,CAQE,OAAOiP,CAAP,EAAU,CAAE;;AACd,SAAO,KAAP;AACH;;AAED,SAASk6F,SAAT,CAAmB91G,CAAnB,EAAsB;AAClB,MAAI,CAACusH,UAAD,IAAe,CAACvsH,CAAhB,IAAqB,OAAOA,CAAP,KAAa,QAAtC,EAAgD;AAC5C,WAAO,KAAP;AACH;;AACD,MAAI;AACAusH,cAAU,CAACp9G,IAAX,CAAgBnP,CAAhB,EAAmBusH,UAAnB;;AACA,QAAI;AACAF,gBAAU,CAACl9G,IAAX,CAAgBnP,CAAhB,EAAmBqsH,UAAnB;AACH,KAFD,CAEE,OAAO7zH,CAAP,EAAU;AACR,aAAO,IAAP;AACH;;AACD,WAAOwH,CAAC,YAAY8yD,OAApB,CAPA,CAO6B;AAChC,GARD,CAQE,OAAOl3C,CAAP,EAAU,CAAE;;AACd,SAAO,KAAP;AACH;;AAED,SAASuzG,SAAT,CAAmBnvH,CAAnB,EAAsB;AAClB,MAAI,CAACA,CAAD,IAAM,OAAOA,CAAP,KAAa,QAAvB,EAAiC;AAAE,WAAO,KAAP;AAAe;;AAClD,MAAI,OAAO0wH,WAAP,KAAuB,WAAvB,IAAsC1wH,CAAC,YAAY0wH,WAAvD,EAAoE;AAChE,WAAO,IAAP;AACH;;AACD,SAAO,OAAO1wH,CAAC,CAACovH,QAAT,KAAsB,QAAtB,IAAkC,OAAOpvH,CAAC,CAACu2D,YAAT,KAA0B,UAAnE;AACH;;AAED,SAASi4D,aAAT,CAAuBj5F,GAAvB,EAA4B/mB,IAA5B,EAAkC;AAC9B,MAAI+mB,GAAG,CAACj9B,MAAJ,GAAakW,IAAI,CAAC4/G,eAAtB,EAAuC;AACnC,QAAIuC,SAAS,GAAGp7F,GAAG,CAACj9B,MAAJ,GAAakW,IAAI,CAAC4/G,eAAlC;AACA,QAAIwC,OAAO,GAAG,SAASD,SAAT,GAAqB,iBAArB,IAA0CA,SAAS,GAAG,CAAZ,GAAgB,GAAhB,GAAsB,EAAhE,CAAd;AACA,WAAOnC,aAAa,CAACxZ,MAAM,CAAC7lG,IAAP,CAAYomB,GAAZ,EAAiB,CAAjB,EAAoB/mB,IAAI,CAAC4/G,eAAzB,CAAD,EAA4C5/G,IAA5C,CAAb,GAAiEoiH,OAAxE;AACH,GAL6B,CAM9B;;;AACA,MAAIp4H,CAAC,GAAG26D,QAAQ,CAAChkD,IAAT,CAAcgkD,QAAQ,CAAChkD,IAAT,CAAcomB,GAAd,EAAmB,UAAnB,EAA+B,MAA/B,CAAd,EAAsD,cAAtD,EAAsEs7F,OAAtE,CAAR;AACA,SAAOtB,UAAU,CAAC/2H,CAAD,EAAI,QAAJ,EAAcgW,IAAd,CAAjB;AACH;;AAED,SAASqiH,OAAT,CAAiBjqG,CAAjB,EAAoB;AAChB,MAAI8K,CAAC,GAAG9K,CAAC,CAACjW,UAAF,CAAa,CAAb,CAAR;AACA,MAAI3Q,CAAC,GAAG;AACJ,OAAG,GADC;AAEJ,OAAG,GAFC;AAGJ,QAAI,GAHA;AAIJ,QAAI,GAJA;AAKJ,QAAI;AALA,IAMN0xB,CANM,CAAR;;AAOA,MAAI1xB,CAAJ,EAAO;AAAE,WAAO,OAAOA,CAAd;AAAkB;;AAC3B,SAAO,SAAS0xB,CAAC,GAAG,IAAJ,GAAW,GAAX,GAAiB,EAA1B,IAAgCq7F,YAAY,CAAC59G,IAAb,CAAkBuiB,CAAC,CAACxiB,QAAF,CAAW,EAAX,CAAlB,CAAvC;AACH;;AAED,SAASggH,SAAT,CAAmB35F,GAAnB,EAAwB;AACpB,SAAO,YAAYA,GAAZ,GAAkB,GAAzB;AACH;;AAED,SAAS06F,gBAAT,CAA0BxhH,IAA1B,EAAgC;AAC5B,SAAOA,IAAI,GAAG,QAAd;AACH;;AAED,SAASshH,YAAT,CAAsBthH,IAAtB,EAA4BwN,IAA5B,EAAkCnC,OAAlC,EAA2Cw0G,MAA3C,EAAmD;AAC/C,MAAIwC,aAAa,GAAGxC,MAAM,GAAGqB,YAAY,CAAC71G,OAAD,EAAUw0G,MAAV,CAAf,GAAmCpB,KAAK,CAAC/9G,IAAN,CAAW2K,OAAX,EAAoB,IAApB,CAA7D;AACA,SAAOrL,IAAI,GAAG,IAAP,GAAcwN,IAAd,GAAqB,KAArB,GAA6B60G,aAA7B,GAA6C,GAApD;AACH;;AAED,SAASpB,gBAAT,CAA0BD,EAA1B,EAA8B;AAC1B,OAAK,IAAIt+G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGs+G,EAAE,CAACn3H,MAAvB,EAA+B6Y,CAAC,EAAhC,EAAoC;AAChC,QAAI7Q,OAAO,CAACmvH,EAAE,CAACt+G,CAAD,CAAH,EAAQ,IAAR,CAAP,IAAwB,CAA5B,EAA+B;AAC3B,aAAO,KAAP;AACH;AACJ;;AACD,SAAO,IAAP;AACH;;AAED,SAASw9G,SAAT,CAAmBngH,IAAnB,EAAyBy/G,KAAzB,EAAgC;AAC5B,MAAI8C,UAAJ;;AACA,MAAIviH,IAAI,CAAC8/G,MAAL,KAAgB,IAApB,EAA0B;AACtByC,cAAU,GAAG,IAAb;AACH,GAFD,MAEO,IAAI,OAAOviH,IAAI,CAAC8/G,MAAZ,KAAuB,QAAvB,IAAmC9/G,IAAI,CAAC8/G,MAAL,GAAc,CAArD,EAAwD;AAC3DyC,cAAU,GAAG7D,KAAK,CAAC/9G,IAAN,CAAW/Y,KAAK,CAACoY,IAAI,CAAC8/G,MAAL,GAAc,CAAf,CAAhB,EAAmC,GAAnC,CAAb;AACH,GAFM,MAEA;AACH,WAAO,IAAP;AACH;;AACD,SAAO;AACH57H,QAAI,EAAEq+H,UADH;AAEHv+H,QAAI,EAAE06H,KAAK,CAAC/9G,IAAN,CAAW/Y,KAAK,CAAC63H,KAAK,GAAG,CAAT,CAAhB,EAA6B8C,UAA7B;AAFH,GAAP;AAIH;;AAED,SAASpB,YAAT,CAAsBF,EAAtB,EAA0BnB,MAA1B,EAAkC;AAC9B,MAAImB,EAAE,CAACn3H,MAAH,KAAc,CAAlB,EAAqB;AAAE,WAAO,EAAP;AAAY;;AACnC,MAAI04H,UAAU,GAAG,OAAO1C,MAAM,CAAC97H,IAAd,GAAqB87H,MAAM,CAAC57H,IAA7C;AACA,SAAOs+H,UAAU,GAAG9D,KAAK,CAAC/9G,IAAN,CAAWsgH,EAAX,EAAe,MAAMuB,UAArB,CAAb,GAAgD,IAAhD,GAAuD1C,MAAM,CAAC97H,IAArE;AACH;;AAED,SAASw8H,UAAT,CAAoB3nH,GAApB,EAAyBunH,OAAzB,EAAkC;AAC9B,MAAIqC,KAAK,GAAGr3H,OAAO,CAACyN,GAAD,CAAnB;AACA,MAAIooH,EAAE,GAAG,EAAT;;AACA,MAAIwB,KAAJ,EAAW;AACPxB,MAAE,CAACn3H,MAAH,GAAY+O,GAAG,CAAC/O,MAAhB;;AACA,SAAK,IAAI6Y,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG9J,GAAG,CAAC/O,MAAxB,EAAgC6Y,CAAC,EAAjC,EAAqC;AACjCs+G,QAAE,CAACt+G,CAAD,CAAF,GAAQ7G,GAAG,CAACjD,GAAD,EAAM8J,CAAN,CAAH,GAAcy9G,OAAO,CAACvnH,GAAG,CAAC8J,CAAD,CAAJ,EAAS9J,GAAT,CAArB,GAAqC,EAA7C;AACH;AACJ;;AACD,MAAI6qG,IAAI,GAAG,OAAOmb,IAAP,KAAgB,UAAhB,GAA6BA,IAAI,CAAChmH,GAAD,CAAjC,GAAyC,EAApD;AACA,MAAI6pH,MAAJ;;AACA,MAAI3D,iBAAJ,EAAuB;AACnB2D,UAAM,GAAG,EAAT;;AACA,SAAK,IAAIzqG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyrF,IAAI,CAAC55G,MAAzB,EAAiCmuB,CAAC,EAAlC,EAAsC;AAClCyqG,YAAM,CAAC,MAAMhf,IAAI,CAACzrF,CAAD,CAAX,CAAN,GAAwByrF,IAAI,CAACzrF,CAAD,CAA5B;AACH;AACJ;;AAED,OAAK,IAAIrf,GAAT,IAAgBC,GAAhB,EAAqB;AAAE;AACnB,QAAI,CAACiD,GAAG,CAACjD,GAAD,EAAMD,GAAN,CAAR,EAAoB;AAAE;AAAW,KADhB,CACiB;;;AAClC,QAAI6pH,KAAK,IAAIn7F,MAAM,CAACjgC,MAAM,CAACuR,GAAD,CAAP,CAAN,KAAwBA,GAAjC,IAAwCA,GAAG,GAAGC,GAAG,CAAC/O,MAAtD,EAA8D;AAAE;AAAW,KAF1D,CAE2D;;;AAC5E,QAAIi1H,iBAAiB,IAAI2D,MAAM,CAAC,MAAM9pH,GAAP,CAAN,YAA6BpR,MAAtD,EAA8D;AAC1D;AACA,eAF0D,CAEhD;AACb,KAHD,MAGO,IAAIi3H,KAAK,CAAC99G,IAAN,CAAW,QAAX,EAAqB/H,GAArB,CAAJ,EAA+B;AAClCqoH,QAAE,CAACt4H,IAAH,CAAQy3H,OAAO,CAACxnH,GAAD,EAAMC,GAAN,CAAP,GAAoB,IAApB,GAA2BunH,OAAO,CAACvnH,GAAG,CAACD,GAAD,CAAJ,EAAWC,GAAX,CAA1C;AACH,KAFM,MAEA;AACHooH,QAAE,CAACt4H,IAAH,CAAQiQ,GAAG,GAAG,IAAN,GAAawnH,OAAO,CAACvnH,GAAG,CAACD,GAAD,CAAJ,EAAWC,GAAX,CAA5B;AACH;AACJ;;AACD,MAAI,OAAOgmH,IAAP,KAAgB,UAApB,EAAgC;AAC5B,SAAK,IAAIj8G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8gG,IAAI,CAAC55G,MAAzB,EAAiC8Y,CAAC,EAAlC,EAAsC;AAClC,UAAIo8G,YAAY,CAACr+G,IAAb,CAAkB9H,GAAlB,EAAuB6qG,IAAI,CAAC9gG,CAAD,CAA3B,CAAJ,EAAqC;AACjCq+G,UAAE,CAACt4H,IAAH,CAAQ,MAAMy3H,OAAO,CAAC1c,IAAI,CAAC9gG,CAAD,CAAL,CAAb,GAAyB,KAAzB,GAAiCw9G,OAAO,CAACvnH,GAAG,CAAC6qG,IAAI,CAAC9gG,CAAD,CAAL,CAAJ,EAAe/J,GAAf,CAAhD;AACH;AACJ;AACJ;;AACD,SAAOooH,EAAP;AACH,C;;;;;;;;;;;AC9fDn8G,MAAM,CAACC,OAAP,GAAiBG,mBAAO,CAAC,kBAAD,CAAP,CAAgBk7G,OAAjC,C;;;;;;;;;;;;ACAa;;AAEb,IAAIuC,WAAW,GAAG,UAAUt/H,KAAV,EAAiB;AAClC,SAAOA,KAAK,KAAKA,KAAjB;AACA,CAFD;;AAIAyhB,MAAM,CAACC,OAAP,GAAiB,SAAS81C,EAAT,CAAY3wD,CAAZ,EAAeC,CAAf,EAAkB;AAClC,MAAID,CAAC,KAAK,CAAN,IAAWC,CAAC,KAAK,CAArB,EAAwB;AACvB,WAAO,IAAID,CAAJ,KAAU,IAAIC,CAArB;AACA;;AACD,MAAID,CAAC,KAAKC,CAAV,EAAa;AACZ,WAAO,IAAP;AACA;;AACD,MAAIw4H,WAAW,CAACz4H,CAAD,CAAX,IAAkBy4H,WAAW,CAACx4H,CAAD,CAAjC,EAAsC;AACrC,WAAO,IAAP;AACA;;AACD,SAAO,KAAP;AACA,CAXD,C;;;;;;;;;;;;ACNa;;AAEb,IAAIm8D,MAAM,GAAGphD,mBAAO,CAAC,oEAAD,CAApB;;AACA,IAAIwgB,QAAQ,GAAGxgB,mBAAO,CAAC,oDAAD,CAAtB;;AAEA,IAAI08C,cAAc,GAAG18C,mBAAO,CAAC,oEAAD,CAA5B;;AACA,IAAI09G,WAAW,GAAG19G,mBAAO,CAAC,wDAAD,CAAzB;;AACA,IAAI29G,IAAI,GAAG39G,mBAAO,CAAC,gDAAD,CAAlB;;AAEA,IAAI2gD,QAAQ,GAAGngC,QAAQ,CAACk9F,WAAW,EAAZ,EAAgBl8H,MAAhB,CAAvB;AAEA4/D,MAAM,CAACT,QAAD,EAAW;AAChB+8D,aAAW,EAAEA,WADG;AAEhBhhE,gBAAc,EAAEA,cAFA;AAGhBihE,MAAI,EAAEA;AAHU,CAAX,CAAN;AAMA/9G,MAAM,CAACC,OAAP,GAAiB8gD,QAAjB,C;;;;;;;;;;;;ACjBa;;AAEb,IAAIjE,cAAc,GAAG18C,mBAAO,CAAC,oEAAD,CAA5B;;AAEAJ,MAAM,CAACC,OAAP,GAAiB,SAAS69G,WAAT,GAAuB;AACvC,SAAO,OAAOl8H,MAAM,CAACm0D,EAAd,KAAqB,UAArB,GAAkCn0D,MAAM,CAACm0D,EAAzC,GAA8C+G,cAArD;AACA,CAFD,C;;;;;;;;;;;;ACJa;;AAEb,IAAIghE,WAAW,GAAG19G,mBAAO,CAAC,wDAAD,CAAzB;;AACA,IAAIohD,MAAM,GAAGphD,mBAAO,CAAC,oEAAD,CAApB;;AAEAJ,MAAM,CAACC,OAAP,GAAiB,SAAS+9G,YAAT,GAAwB;AACxC,MAAIj9D,QAAQ,GAAG+8D,WAAW,EAA1B;AACAt8D,QAAM,CAAC5/D,MAAD,EAAS;AAAEm0D,MAAE,EAAEgL;AAAN,GAAT,EAA2B;AAChChL,MAAE,EAAE,SAASkoE,YAAT,GAAwB;AAC3B,aAAOr8H,MAAM,CAACm0D,EAAP,KAAcgL,QAArB;AACA;AAH+B,GAA3B,CAAN;AAKA,SAAOA,QAAP;AACA,CARD,C;;;;;;;;;;;;ACLa;;AAEb,IAAIm9D,QAAJ;;AACA,IAAI,CAACt8H,MAAM,CAACiS,IAAZ,EAAkB;AACjB;AACA,MAAImD,GAAG,GAAGpV,MAAM,CAACoZ,SAAP,CAAiB0C,cAA3B;AACA,MAAI08C,KAAK,GAAGx4D,MAAM,CAACoZ,SAAP,CAAiBY,QAA7B;;AACA,MAAIuiH,MAAM,GAAG/9G,mBAAO,CAAC,gEAAD,CAApB,CAJiB,CAIsB;;;AACvC,MAAI85G,YAAY,GAAGt4H,MAAM,CAACoZ,SAAP,CAAiB2rD,oBAApC;AACA,MAAIy3D,cAAc,GAAG,CAAClE,YAAY,CAACr+G,IAAb,CAAkB;AAAED,YAAQ,EAAE;AAAZ,GAAlB,EAAsC,UAAtC,CAAtB;AACA,MAAIyiH,eAAe,GAAGnE,YAAY,CAACr+G,IAAb,CAAkB,YAAY,CAAE,CAAhC,EAAkC,WAAlC,CAAtB;AACA,MAAIyiH,SAAS,GAAG,CACf,UADe,EAEf,gBAFe,EAGf,SAHe,EAIf,gBAJe,EAKf,eALe,EAMf,sBANe,EAOf,aAPe,CAAhB;;AASA,MAAIC,0BAA0B,GAAG,UAAUC,CAAV,EAAa;AAC7C,QAAI7lB,IAAI,GAAG6lB,CAAC,CAAC3gI,WAAb;AACA,WAAO86G,IAAI,IAAIA,IAAI,CAAC39F,SAAL,KAAmBwjH,CAAlC;AACA,GAHD;;AAIA,MAAIC,YAAY,GAAG;AAClBC,qBAAiB,EAAE,IADD;AAElBC,YAAQ,EAAE,IAFQ;AAGlBC,aAAS,EAAE,IAHO;AAIlBC,UAAM,EAAE,IAJU;AAKlBC,iBAAa,EAAE,IALG;AAMlBC,WAAO,EAAE,IANS;AAOlBC,gBAAY,EAAE,IAPI;AAQlBC,eAAW,EAAE,IARK;AASlBC,0BAAsB,EAAE,IATN;AAUlBC,yBAAqB,EAAE,IAVL;AAWlBC,gBAAY,EAAE,IAXI;AAYlBC,eAAW,EAAE,IAZK;AAalBC,gBAAY,EAAE,IAbI;AAclBC,gBAAY,EAAE,IAdI;AAelBC,WAAO,EAAE,IAfS;AAgBlBC,eAAW,EAAE,IAhBK;AAiBlBC,cAAU,EAAE,IAjBM;AAkBlBC,YAAQ,EAAE,IAlBQ;AAmBlBC,YAAQ,EAAE,IAnBQ;AAoBlBC,SAAK,EAAE,IApBW;AAqBlBC,oBAAgB,EAAE,IArBA;AAsBlBC,sBAAkB,EAAE,IAtBF;AAuBlBC,WAAO,EAAE;AAvBS,GAAnB;;AAyBA,MAAIC,wBAAwB,GAAI,YAAY;AAC3C;AACA,QAAI,OAAOn/D,MAAP,KAAkB,WAAtB,EAAmC;AAAE,aAAO,KAAP;AAAe;;AACpD,SAAK,IAAI3tC,CAAT,IAAc2tC,MAAd,EAAsB;AACrB,UAAI;AACH,YAAI,CAAC29D,YAAY,CAAC,MAAMtrG,CAAP,CAAb,IAA0Bnc,GAAG,CAAC6E,IAAJ,CAASilD,MAAT,EAAiB3tC,CAAjB,CAA1B,IAAiD2tC,MAAM,CAAC3tC,CAAD,CAAN,KAAc,IAA/D,IAAuE,OAAO2tC,MAAM,CAAC3tC,CAAD,CAAb,KAAqB,QAAhG,EAA0G;AACzG,cAAI;AACHorG,sCAA0B,CAACz9D,MAAM,CAAC3tC,CAAD,CAAP,CAA1B;AACA,WAFD,CAEE,OAAO7K,CAAP,EAAU;AACX,mBAAO,IAAP;AACA;AACD;AACD,OARD,CAQE,OAAOA,CAAP,EAAU;AACX,eAAO,IAAP;AACA;AACD;;AACD,WAAO,KAAP;AACA,GAjB+B,EAAhC;;AAkBA,MAAI43G,oCAAoC,GAAG,UAAU1B,CAAV,EAAa;AACvD;AACA,QAAI,OAAO19D,MAAP,KAAkB,WAAlB,IAAiC,CAACm/D,wBAAtC,EAAgE;AAC/D,aAAO1B,0BAA0B,CAACC,CAAD,CAAjC;AACA;;AACD,QAAI;AACH,aAAOD,0BAA0B,CAACC,CAAD,CAAjC;AACA,KAFD,CAEE,OAAOl2G,CAAP,EAAU;AACX,aAAO,KAAP;AACA;AACD,GAVD;;AAYA41G,UAAQ,GAAG,SAASrqH,IAAT,CAAc/J,MAAd,EAAsB;AAChC,QAAIyT,QAAQ,GAAGzT,MAAM,KAAK,IAAX,IAAmB,OAAOA,MAAP,KAAkB,QAApD;AACA,QAAIywD,UAAU,GAAGH,KAAK,CAACv+C,IAAN,CAAW/R,MAAX,MAAuB,mBAAxC;AACA,QAAIgsD,WAAW,GAAGqoE,MAAM,CAACr0H,MAAD,CAAxB;AACA,QAAIsT,QAAQ,GAAGG,QAAQ,IAAI68C,KAAK,CAACv+C,IAAN,CAAW/R,MAAX,MAAuB,iBAAlD;AACA,QAAIq2H,OAAO,GAAG,EAAd;;AAEA,QAAI,CAAC5iH,QAAD,IAAa,CAACg9C,UAAd,IAA4B,CAACzE,WAAjC,EAA8C;AAC7C,YAAM,IAAI3nD,SAAJ,CAAc,oCAAd,CAAN;AACA;;AAED,QAAIiyH,SAAS,GAAG/B,eAAe,IAAI9jE,UAAnC;;AACA,QAAIn9C,QAAQ,IAAItT,MAAM,CAAC9E,MAAP,GAAgB,CAA5B,IAAiC,CAACgS,GAAG,CAAC6E,IAAJ,CAAS/R,MAAT,EAAiB,CAAjB,CAAtC,EAA2D;AAC1D,WAAK,IAAI+T,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG/T,MAAM,CAAC9E,MAA3B,EAAmC,EAAE6Y,CAArC,EAAwC;AACvCsiH,eAAO,CAACt8H,IAAR,CAAa2+B,MAAM,CAAC3kB,CAAD,CAAnB;AACA;AACD;;AAED,QAAIi4C,WAAW,IAAIhsD,MAAM,CAAC9E,MAAP,GAAgB,CAAnC,EAAsC;AACrC,WAAK,IAAI8Y,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGhU,MAAM,CAAC9E,MAA3B,EAAmC,EAAE8Y,CAArC,EAAwC;AACvCqiH,eAAO,CAACt8H,IAAR,CAAa2+B,MAAM,CAAC1kB,CAAD,CAAnB;AACA;AACD,KAJD,MAIO;AACN,WAAK,IAAI9V,IAAT,IAAiB8B,MAAjB,EAAyB;AACxB,YAAI,EAAEs2H,SAAS,IAAIp4H,IAAI,KAAK,WAAxB,KAAwCgP,GAAG,CAAC6E,IAAJ,CAAS/R,MAAT,EAAiB9B,IAAjB,CAA5C,EAAoE;AACnEm4H,iBAAO,CAACt8H,IAAR,CAAa2+B,MAAM,CAACx6B,IAAD,CAAnB;AACA;AACD;AACD;;AAED,QAAIo2H,cAAJ,EAAoB;AACnB,UAAIiC,eAAe,GAAGH,oCAAoC,CAACp2H,MAAD,CAA1D;;AAEA,WAAK,IAAIqpB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmrG,SAAS,CAACt5H,MAA9B,EAAsC,EAAEmuB,CAAxC,EAA2C;AAC1C,YAAI,EAAEktG,eAAe,IAAI/B,SAAS,CAACnrG,CAAD,CAAT,KAAiB,aAAtC,KAAwDnc,GAAG,CAAC6E,IAAJ,CAAS/R,MAAT,EAAiBw0H,SAAS,CAACnrG,CAAD,CAA1B,CAA5D,EAA4F;AAC3FgtG,iBAAO,CAACt8H,IAAR,CAAay6H,SAAS,CAACnrG,CAAD,CAAtB;AACA;AACD;AACD;;AACD,WAAOgtG,OAAP;AACA,GAxCD;AAyCA;;AACDngH,MAAM,CAACC,OAAP,GAAiBi+G,QAAjB,C;;;;;;;;;;;;ACzHa;;AAEb,IAAIl3H,KAAK,GAAGlE,KAAK,CAACkY,SAAN,CAAgBhU,KAA5B;;AACA,IAAIm3H,MAAM,GAAG/9G,mBAAO,CAAC,gEAAD,CAApB;;AAEA,IAAIkgH,QAAQ,GAAG1+H,MAAM,CAACiS,IAAtB;AACA,IAAIqqH,QAAQ,GAAGoC,QAAQ,GAAG,SAASzsH,IAAT,CAAc2qH,CAAd,EAAiB;AAAE,SAAO8B,QAAQ,CAAC9B,CAAD,CAAf;AAAqB,CAA3C,GAA8Cp+G,mBAAO,CAAC,sEAAD,CAA5E;AAEA,IAAImgH,YAAY,GAAG3+H,MAAM,CAACiS,IAA1B;;AAEAqqH,QAAQ,CAACH,IAAT,GAAgB,SAASyC,cAAT,GAA0B;AACzC,MAAI5+H,MAAM,CAACiS,IAAX,EAAiB;AAChB,QAAI4sH,sBAAsB,GAAI,YAAY;AACzC;AACA,UAAI3iI,IAAI,GAAG8D,MAAM,CAACiS,IAAP,CAAY3F,SAAZ,CAAX;AACA,aAAOpQ,IAAI,IAAIA,IAAI,CAACkH,MAAL,KAAgBkJ,SAAS,CAAClJ,MAAzC;AACA,KAJ6B,CAI5B,CAJ4B,EAIzB,CAJyB,CAA9B;;AAKA,QAAI,CAACy7H,sBAAL,EAA6B;AAC5B7+H,YAAM,CAACiS,IAAP,GAAc,SAASA,IAAT,CAAc/J,MAAd,EAAsB;AAAE;AACrC,YAAIq0H,MAAM,CAACr0H,MAAD,CAAV,EAAoB;AACnB,iBAAOy2H,YAAY,CAACv5H,KAAK,CAAC6U,IAAN,CAAW/R,MAAX,CAAD,CAAnB;AACA;;AACD,eAAOy2H,YAAY,CAACz2H,MAAD,CAAnB;AACA,OALD;AAMA;AACD,GAdD,MAcO;AACNlI,UAAM,CAACiS,IAAP,GAAcqqH,QAAd;AACA;;AACD,SAAOt8H,MAAM,CAACiS,IAAP,IAAeqqH,QAAtB;AACA,CAnBD;;AAqBAl+G,MAAM,CAACC,OAAP,GAAiBi+G,QAAjB,C;;;;;;;;;;;;AC/Ba;;AAEb,IAAI9jE,KAAK,GAAGx4D,MAAM,CAACoZ,SAAP,CAAiBY,QAA7B;;AAEAoE,MAAM,CAACC,OAAP,GAAiB,SAAS61C,WAAT,CAAqBv3D,KAArB,EAA4B;AAC5C,MAAI0jC,GAAG,GAAGm4B,KAAK,CAACv+C,IAAN,CAAWtd,KAAX,CAAV;AACA,MAAI4/H,MAAM,GAAGl8F,GAAG,KAAK,oBAArB;;AACA,MAAI,CAACk8F,MAAL,EAAa;AACZA,UAAM,GAAGl8F,GAAG,KAAK,gBAAR,IACR1jC,KAAK,KAAK,IADF,IAER,OAAOA,KAAP,KAAiB,QAFT,IAGR,OAAOA,KAAK,CAACyG,MAAb,KAAwB,QAHhB,IAIRzG,KAAK,CAACyG,MAAN,IAAgB,CAJR,IAKRo1D,KAAK,CAACv+C,IAAN,CAAWtd,KAAK,CAACi/D,MAAjB,MAA6B,mBAL9B;AAMA;;AACD,SAAO2gE,MAAP;AACA,CAZD,C;;;;;;;;;;;;CCFA;;AACA,IAAItqH,IAAI,GAAGuM,mBAAO,CAAC,wDAAD,CAAlB;;AACA,IAAIsgH,WAAW,GAAG,UAAU3sH,GAAV,EAAe;AAChC,SAAO,OAAOA,GAAP,KAAe,WAAf,IAA8BA,GAAG,KAAK,IAA7C;AACA,CAFD;;AAGA,IAAIomD,UAAU,GAAG/5C,mBAAO,CAAC,8DAAD,CAAP,EAAjB;;AACA,IAAI81C,SAAS,GAAG91C,mBAAO,CAAC,kEAAD,CAAvB;;AACA,IAAIu4D,QAAQ,GAAG/2E,MAAf;AACA,IAAI++H,KAAK,GAAGzqE,SAAS,CAAC,sBAAD,CAArB;AACA,IAAI0qE,iBAAiB,GAAG1qE,SAAS,CAAC,uCAAD,CAAjC;AACA,IAAI2qE,kBAAkB,GAAG1mE,UAAU,GAAGv4D,MAAM,CAACk5D,qBAAV,GAAkC,IAArE,C,CAEA;;AACA96C,MAAM,CAACC,OAAP,GAAiB,SAASpe,MAAT,CAAgBolB,MAAhB,EAAwB65G,OAAxB,EAAiC;AACjD,MAAI,CAACJ,WAAW,CAACz5G,MAAD,CAAhB,EAA0B;AAAE,UAAM,IAAI9Y,SAAJ,CAAc,0BAAd,CAAN;AAAkD;;AAC9E,MAAI4yH,SAAS,GAAGpoD,QAAQ,CAAC1xD,MAAD,CAAxB;AACA,MAAI/hB,CAAJ,EAAOs0D,MAAP,EAAe37C,CAAf,EAAkB2H,KAAlB,EAAyBo5F,IAAzB,EAA+BrgH,KAA/B,EAAsCuV,GAAtC;;AACA,OAAK5O,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGgJ,SAAS,CAAClJ,MAA1B,EAAkC,EAAEE,CAApC,EAAuC;AACtCs0D,UAAM,GAAGmf,QAAQ,CAACzqE,SAAS,CAAChJ,CAAD,CAAV,CAAjB;AACAsgB,SAAK,GAAG3R,IAAI,CAAC2lD,MAAD,CAAZ;AACA,QAAIwnE,UAAU,GAAG7mE,UAAU,KAAKv4D,MAAM,CAACk5D,qBAAP,IAAgC+lE,kBAArC,CAA3B;;AACA,QAAIG,UAAJ,EAAgB;AACfpiB,UAAI,GAAGoiB,UAAU,CAACxnE,MAAD,CAAjB;;AACA,WAAK37C,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG+gG,IAAI,CAAC55G,MAArB,EAA6B,EAAE6Y,CAA/B,EAAkC;AACjC/J,WAAG,GAAG8qG,IAAI,CAAC/gG,CAAD,CAAV;;AACA,YAAI+iH,iBAAiB,CAACpnE,MAAD,EAAS1lD,GAAT,CAArB,EAAoC;AACnC6sH,eAAK,CAACn7G,KAAD,EAAQ1R,GAAR,CAAL;AACA;AACD;AACD;;AACD,SAAK+J,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2H,KAAK,CAACxgB,MAAtB,EAA8B,EAAE6Y,CAAhC,EAAmC;AAClC/J,SAAG,GAAG0R,KAAK,CAAC3H,CAAD,CAAX;AACAtf,WAAK,GAAGi7D,MAAM,CAAC1lD,GAAD,CAAd;;AACA,UAAI8sH,iBAAiB,CAACpnE,MAAD,EAAS1lD,GAAT,CAArB,EAAoC;AACnCitH,iBAAS,CAACjtH,GAAD,CAAT,GAAiBvV,KAAjB;AACA;AACD;AACD;;AACD,SAAOwiI,SAAP;AACA,CA1BD,C;;;;;;;;;;;;ACfa;;AAEb,IAAInmE,gBAAgB,GAAGx6C,mBAAO,CAAC,oEAAD,CAA9B;;AACA,IAAIwgB,QAAQ,GAAGxgB,mBAAO,CAAC,oDAAD,CAAtB;;AAEA,IAAI08C,cAAc,GAAG18C,mBAAO,CAAC,wEAAD,CAA5B;;AACA,IAAI09G,WAAW,GAAG19G,mBAAO,CAAC,4DAAD,CAAzB;;AACA,IAAI29G,IAAI,GAAG39G,mBAAO,CAAC,oDAAD,CAAlB;;AAEA,IAAI2gD,QAAQ,GAAGngC,QAAQ,CAACiB,KAAT,CAAei8F,WAAW,EAA1B,CAAf,C,CACA;;AACA,IAAIthE,KAAK,GAAG,SAAS36D,MAAT,CAAgBolB,MAAhB,EAAwB65G,OAAxB,EAAiC;AAC5C,SAAO//D,QAAQ,CAACn/D,MAAD,EAASsM,SAAT,CAAf;AACA,CAFD;;AAIA0sD,gBAAgB,CAAC4B,KAAD,EAAQ;AACvBshE,aAAW,EAAEA,WADU;AAEvBhhE,gBAAc,EAAEA,cAFO;AAGvBihE,MAAI,EAAEA;AAHiB,CAAR,CAAhB;AAMA/9G,MAAM,CAACC,OAAP,GAAiBu8C,KAAjB,C;;;;;;;;;;;;ACrBa;;AAEb,IAAIM,cAAc,GAAG18C,mBAAO,CAAC,wEAAD,CAA5B;;AAEA,IAAI6gH,2BAA2B,GAAG,YAAY;AAC7C,MAAI,CAACr/H,MAAM,CAACC,MAAZ,EAAoB;AACnB,WAAO,KAAP;AACA;AACD;AACD;AACA;AACA;;;AACC,MAAIogC,GAAG,GAAG,sBAAV;AACA,MAAIi/F,OAAO,GAAGj/F,GAAG,CAAC5iB,KAAJ,CAAU,EAAV,CAAd;AACA,MAAItd,GAAG,GAAG,EAAV;;AACA,OAAK,IAAI8b,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqjH,OAAO,CAACl8H,MAA5B,EAAoC,EAAE6Y,CAAtC,EAAyC;AACxC9b,OAAG,CAACm/H,OAAO,CAACrjH,CAAD,CAAR,CAAH,GAAkBqjH,OAAO,CAACrjH,CAAD,CAAzB;AACA;;AACD,MAAI9J,GAAG,GAAGnS,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBE,GAAlB,CAAV;AACA,MAAIo2D,MAAM,GAAG,EAAb;;AACA,OAAK,IAAIhlC,CAAT,IAAcpf,GAAd,EAAmB;AAClBokD,UAAM,IAAIhlC,CAAV;AACA;;AACD,SAAO8O,GAAG,KAAKk2B,MAAf;AACA,CApBD;;AAsBA,IAAIgpE,0BAA0B,GAAG,YAAY;AAC5C,MAAI,CAACv/H,MAAM,CAACC,MAAR,IAAkB,CAACD,MAAM,CAACw/H,iBAA9B,EAAiD;AAChD,WAAO,KAAP;AACA;AACD;AACD;AACA;AACA;;;AACC,MAAIC,OAAO,GAAGz/H,MAAM,CAACw/H,iBAAP,CAAyB;AAAE,OAAG;AAAL,GAAzB,CAAd;;AACA,MAAI;AACHx/H,UAAM,CAACC,MAAP,CAAcw/H,OAAd,EAAuB,IAAvB;AACA,GAFD,CAEE,OAAO/4G,CAAP,EAAU;AACX,WAAO+4G,OAAO,CAAC,CAAD,CAAP,KAAe,GAAtB;AACA;;AACD,SAAO,KAAP;AACA,CAfD;;AAiBArhH,MAAM,CAACC,OAAP,GAAiB,SAAS69G,WAAT,GAAuB;AACvC,MAAI,CAACl8H,MAAM,CAACC,MAAZ,EAAoB;AACnB,WAAOi7D,cAAP;AACA;;AACD,MAAImkE,2BAA2B,EAA/B,EAAmC;AAClC,WAAOnkE,cAAP;AACA;;AACD,MAAIqkE,0BAA0B,EAA9B,EAAkC;AACjC,WAAOrkE,cAAP;AACA;;AACD,SAAOl7D,MAAM,CAACC,MAAd;AACA,CAXD,C;;;;;;;;;;;;AC3Ca;;AAEb,IAAI2/D,MAAM,GAAGphD,mBAAO,CAAC,oEAAD,CAApB;;AACA,IAAI09G,WAAW,GAAG19G,mBAAO,CAAC,4DAAD,CAAzB;;AAEAJ,MAAM,CAACC,OAAP,GAAiB,SAASqhH,UAAT,GAAsB;AACtC,MAAIvgE,QAAQ,GAAG+8D,WAAW,EAA1B;AACAt8D,QAAM,CACL5/D,MADK,EAEL;AAAEC,UAAM,EAAEk/D;AAAV,GAFK,EAGL;AAAEl/D,UAAM,EAAE,YAAY;AAAE,aAAOD,MAAM,CAACC,MAAP,KAAkBk/D,QAAzB;AAAoC;AAA5D,GAHK,CAAN;AAKA,SAAOA,QAAP;AACA,CARD,C;;;;;;;;;;;;ACLa;;AAEb,IAAIwgE,OAAO,GAAG3/H,MAAd;AACA,IAAIs7D,UAAU,GAAG/uD,SAAjB;;AAEA6R,MAAM,CAACC,OAAP,GAAiB,SAASoL,KAAT,GAAiB;AACjC,MAAI,QAAQ,IAAR,IAAgB,SAASk2G,OAAO,CAAC,IAAD,CAApC,EAA4C;AAC3C,UAAM,IAAIrkE,UAAJ,CAAe,oDAAf,CAAN;AACA;;AACD,MAAInqD,MAAM,GAAG,EAAb;;AACA,MAAI,KAAKyuH,UAAT,EAAqB;AACpBzuH,UAAM,IAAI,GAAV;AACA;;AACD,MAAI,KAAKytB,MAAT,EAAiB;AAChBztB,UAAM,IAAI,GAAV;AACA;;AACD,MAAI,KAAK0uH,UAAT,EAAqB;AACpB1uH,UAAM,IAAI,GAAV;AACA;;AACD,MAAI,KAAK2uH,SAAT,EAAoB;AACnB3uH,UAAM,IAAI,GAAV;AACA;;AACD,MAAI,KAAK4uH,MAAT,EAAiB;AAChB5uH,UAAM,IAAI,GAAV;AACA;;AACD,MAAI,KAAK6uH,OAAT,EAAkB;AACjB7uH,UAAM,IAAI,GAAV;AACA;;AACD,MAAI,KAAK8uH,MAAT,EAAiB;AAChB9uH,UAAM,IAAI,GAAV;AACA;;AACD,SAAOA,MAAP;AACA,CA3BD,C;;;;;;;;;;;;ACLa;;AAEb,IAAIyuD,MAAM,GAAGphD,mBAAO,CAAC,oEAAD,CAApB;;AACA,IAAIwgB,QAAQ,GAAGxgB,mBAAO,CAAC,oDAAD,CAAtB;;AAEA,IAAI08C,cAAc,GAAG18C,mBAAO,CAAC,iFAAD,CAA5B;;AACA,IAAI09G,WAAW,GAAG19G,mBAAO,CAAC,qEAAD,CAAzB;;AACA,IAAI29G,IAAI,GAAG39G,mBAAO,CAAC,6DAAD,CAAlB;;AAEA,IAAI0hH,UAAU,GAAGlhG,QAAQ,CAACk9F,WAAW,EAAZ,CAAzB;AAEAt8D,MAAM,CAACsgE,UAAD,EAAa;AAClBhE,aAAW,EAAEA,WADK;AAElBhhE,gBAAc,EAAEA,cAFE;AAGlBihE,MAAI,EAAEA;AAHY,CAAb,CAAN;AAMA/9G,MAAM,CAACC,OAAP,GAAiB6hH,UAAjB,C;;;;;;;;;;;;ACjBa;;AAEb,IAAIhlE,cAAc,GAAG18C,mBAAO,CAAC,iFAAD,CAA5B;;AAEA,IAAIs6C,mBAAmB,GAAGt6C,mBAAO,CAAC,oEAAD,CAAP,CAA6Bs6C,mBAAvD;;AACA,IAAIr5B,KAAK,GAAGz/B,MAAM,CAACy7D,wBAAnB;;AAEAr9C,MAAM,CAACC,OAAP,GAAiB,SAAS69G,WAAT,GAAuB;AACvC,MAAIpjE,mBAAmB,IAAK,MAAD,CAASrvC,KAAT,KAAmB,KAA9C,EAAqD;AACpD,QAAIwzF,UAAU,GAAGx9E,KAAK,CAAC3iB,MAAM,CAAC1D,SAAR,EAAmB,OAAnB,CAAtB;;AACA,QAAI6jG,UAAU,IAAI,OAAOA,UAAU,CAAC59G,GAAlB,KAA0B,UAAxC,IAAsD,OAAQ,GAAD,CAAM0gI,MAAb,KAAwB,SAAlF,EAA6F;AAC5F,aAAO9iB,UAAU,CAAC59G,GAAlB;AACA;AACD;;AACD,SAAO67D,cAAP;AACA,CARD,C;;;;;;;;;;;;ACPa;;AAEb,IAAIpC,mBAAmB,GAAGt6C,mBAAO,CAAC,oEAAD,CAAP,CAA6Bs6C,mBAAvD;;AACA,IAAIojE,WAAW,GAAG19G,mBAAO,CAAC,qEAAD,CAAzB;;AACA,IAAI2gG,IAAI,GAAGn/G,MAAM,CAACy7D,wBAAlB;AACA,IAAI/C,cAAc,GAAG14D,MAAM,CAAC04D,cAA5B;AACA,IAAIynE,OAAO,GAAG5zH,SAAd;AACA,IAAIwvD,QAAQ,GAAG/7D,MAAM,CAAC60D,cAAtB;AACA,IAAIh4C,KAAK,GAAG,GAAZ;;AAEAuB,MAAM,CAACC,OAAP,GAAiB,SAAS+hH,SAAT,GAAqB;AACrC,MAAI,CAACtnE,mBAAD,IAAwB,CAACiD,QAA7B,EAAuC;AACtC,UAAM,IAAIokE,OAAJ,CAAY,2FAAZ,CAAN;AACA;;AACD,MAAIhhE,QAAQ,GAAG+8D,WAAW,EAA1B;AACA,MAAIjc,KAAK,GAAGlkD,QAAQ,CAACl/C,KAAD,CAApB;AACA,MAAIogG,UAAU,GAAGkC,IAAI,CAACc,KAAD,EAAQ,OAAR,CAArB;;AACA,MAAI,CAAChD,UAAD,IAAeA,UAAU,CAAC59G,GAAX,KAAmB8/D,QAAtC,EAAgD;AAC/CzG,kBAAc,CAACunD,KAAD,EAAQ,OAAR,EAAiB;AAC9BlgF,kBAAY,EAAE,IADgB;AAE9B84B,gBAAU,EAAE,KAFkB;AAG9Bx5D,SAAG,EAAE8/D;AAHyB,KAAjB,CAAd;AAKA;;AACD,SAAOA,QAAP;AACA,CAfD,C;;;;;;;;;;;;ACVa;;AAEb,IAAIpgC,YAAY,GAAGvgB,mBAAO,CAAC,4DAAD,CAA1B;;AACA,IAAI81C,SAAS,GAAG91C,mBAAO,CAAC,kEAAD,CAAvB;;AACA,IAAIk7G,OAAO,GAAGl7G,mBAAO,CAAC,8DAAD,CAArB;;AAEA,IAAI88C,UAAU,GAAGv8B,YAAY,CAAC,aAAD,CAA7B;AACA,IAAI0hF,QAAQ,GAAG1hF,YAAY,CAAC,WAAD,EAAc,IAAd,CAA3B;AACA,IAAIq6B,IAAI,GAAGr6B,YAAY,CAAC,OAAD,EAAU,IAAV,CAAvB;AAEA,IAAIshG,WAAW,GAAG/rE,SAAS,CAAC,uBAAD,EAA0B,IAA1B,CAA3B;AACA,IAAIgsE,WAAW,GAAGhsE,SAAS,CAAC,uBAAD,EAA0B,IAA1B,CAA3B;AACA,IAAIisE,WAAW,GAAGjsE,SAAS,CAAC,uBAAD,EAA0B,IAA1B,CAA3B;AACA,IAAIW,OAAO,GAAGX,SAAS,CAAC,mBAAD,EAAsB,IAAtB,CAAvB;AACA,IAAIksE,OAAO,GAAGlsE,SAAS,CAAC,mBAAD,EAAsB,IAAtB,CAAvB;AACA,IAAIU,OAAO,GAAGV,SAAS,CAAC,mBAAD,EAAsB,IAAtB,CAAvB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,IAAImsE,WAAW,GAAG,UAAU3iH,IAAV,EAAgB5L,GAAhB,EAAqB;AAAE;AACxC,OAAK,IAAI5U,IAAI,GAAGwgB,IAAX,EAAiBvgB,IAAtB,EAA4B,CAACA,IAAI,GAAGD,IAAI,CAACZ,IAAb,MAAuB,IAAnD,EAAyDY,IAAI,GAAGC,IAAhE,EAAsE;AACrE,QAAIA,IAAI,CAAC2U,GAAL,KAAaA,GAAjB,EAAsB;AACrB5U,UAAI,CAACZ,IAAL,GAAYa,IAAI,CAACb,IAAjB;AACAa,UAAI,CAACb,IAAL,GAAYohB,IAAI,CAACphB,IAAjB;AACAohB,UAAI,CAACphB,IAAL,GAAYa,IAAZ,CAHqB,CAGH;;AAClB,aAAOA,IAAP;AACA;AACD;AACD,CATD;;AAWA,IAAImjI,OAAO,GAAG,UAAUC,OAAV,EAAmBzuH,GAAnB,EAAwB;AACrC,MAAI8e,IAAI,GAAGyvG,WAAW,CAACE,OAAD,EAAUzuH,GAAV,CAAtB;AACA,SAAO8e,IAAI,IAAIA,IAAI,CAACr0B,KAApB;AACA,CAHD;;AAIA,IAAIikI,OAAO,GAAG,UAAUD,OAAV,EAAmBzuH,GAAnB,EAAwBvV,KAAxB,EAA+B;AAC5C,MAAIq0B,IAAI,GAAGyvG,WAAW,CAACE,OAAD,EAAUzuH,GAAV,CAAtB;;AACA,MAAI8e,IAAJ,EAAU;AACTA,QAAI,CAACr0B,KAAL,GAAaA,KAAb;AACA,GAFD,MAEO;AACN;AACAgkI,WAAO,CAACjkI,IAAR,GAAe;AAAE;AAChBwV,SAAG,EAAEA,GADS;AAEdxV,UAAI,EAAEikI,OAAO,CAACjkI,IAFA;AAGdC,WAAK,EAAEA;AAHO,KAAf;AAKA;AACD,CAZD;;AAaA,IAAIkkI,OAAO,GAAG,UAAUF,OAAV,EAAmBzuH,GAAnB,EAAwB;AACrC,SAAO,CAAC,CAACuuH,WAAW,CAACE,OAAD,EAAUzuH,GAAV,CAApB;AACA,CAFD;;AAIAkM,MAAM,CAACC,OAAP,GAAiB,SAASo2C,cAAT,GAA0B;AAC1C,MAAIqsE,GAAJ;AACA,MAAIC,EAAJ;AACA,MAAIC,EAAJ;AACA,MAAIvrE,OAAO,GAAG;AACb2b,UAAM,EAAE,UAAUl/D,GAAV,EAAe;AACtB,UAAI,CAACujD,OAAO,CAACrgD,GAAR,CAAYlD,GAAZ,CAAL,EAAuB;AACtB,cAAM,IAAIopD,UAAJ,CAAe,mCAAmCo+D,OAAO,CAACxnH,GAAD,CAAzD,CAAN;AACA;AACD,KALY;AAMb7S,OAAG,EAAE,UAAU6S,GAAV,EAAe;AAAE;AACrB,UAAIuuG,QAAQ,IAAIvuG,GAAZ,KAAoB,OAAOA,GAAP,KAAe,QAAf,IAA2B,OAAOA,GAAP,KAAe,UAA9D,CAAJ,EAA+E;AAC9E,YAAI4uH,GAAJ,EAAS;AACR,iBAAOT,WAAW,CAACS,GAAD,EAAM5uH,GAAN,CAAlB;AACA;AACD,OAJD,MAIO,IAAIknD,IAAJ,EAAU;AAChB,YAAI2nE,EAAJ,EAAQ;AACP,iBAAO9rE,OAAO,CAAC8rE,EAAD,EAAK7uH,GAAL,CAAd;AACA;AACD,OAJM,MAIA;AACN,YAAI8uH,EAAJ,EAAQ;AAAE;AACT,iBAAON,OAAO,CAACM,EAAD,EAAK9uH,GAAL,CAAd;AACA;AACD;AACD,KApBY;AAqBbkD,OAAG,EAAE,UAAUlD,GAAV,EAAe;AACnB,UAAIuuG,QAAQ,IAAIvuG,GAAZ,KAAoB,OAAOA,GAAP,KAAe,QAAf,IAA2B,OAAOA,GAAP,KAAe,UAA9D,CAAJ,EAA+E;AAC9E,YAAI4uH,GAAJ,EAAS;AACR,iBAAOP,WAAW,CAACO,GAAD,EAAM5uH,GAAN,CAAlB;AACA;AACD,OAJD,MAIO,IAAIknD,IAAJ,EAAU;AAChB,YAAI2nE,EAAJ,EAAQ;AACP,iBAAO/rE,OAAO,CAAC+rE,EAAD,EAAK7uH,GAAL,CAAd;AACA;AACD,OAJM,MAIA;AACN,YAAI8uH,EAAJ,EAAQ;AAAE;AACT,iBAAOH,OAAO,CAACG,EAAD,EAAK9uH,GAAL,CAAd;AACA;AACD;;AACD,aAAO,KAAP;AACA,KApCY;AAqCbtP,OAAG,EAAE,UAAUsP,GAAV,EAAevV,KAAf,EAAsB;AAC1B,UAAI8jH,QAAQ,IAAIvuG,GAAZ,KAAoB,OAAOA,GAAP,KAAe,QAAf,IAA2B,OAAOA,GAAP,KAAe,UAA9D,CAAJ,EAA+E;AAC9E,YAAI,CAAC4uH,GAAL,EAAU;AACTA,aAAG,GAAG,IAAIrgB,QAAJ,EAAN;AACA;;AACD6f,mBAAW,CAACQ,GAAD,EAAM5uH,GAAN,EAAWvV,KAAX,CAAX;AACA,OALD,MAKO,IAAIy8D,IAAJ,EAAU;AAChB,YAAI,CAAC2nE,EAAL,EAAS;AACRA,YAAE,GAAG,IAAI3nE,IAAJ,EAAL;AACA;;AACDonE,eAAO,CAACO,EAAD,EAAK7uH,GAAL,EAAUvV,KAAV,CAAP;AACA,OALM,MAKA;AACN,YAAI,CAACqkI,EAAL,EAAS;AACR;AACL;AACA;AACA;AACA;AACKA,YAAE,GAAG;AAAE9uH,eAAG,EAAE,EAAP;AAAWxV,gBAAI,EAAE;AAAjB,WAAL;AACA;;AACDkkI,eAAO,CAACI,EAAD,EAAK9uH,GAAL,EAAUvV,KAAV,CAAP;AACA;AACD;AA3DY,GAAd;AA6DA,SAAO84D,OAAP;AACA,CAlED,C;;;;;;;;;;;;ACzDa;;AACbr3C,MAAM,CAACC,OAAP,GAAiB+Y,IAAI,IAAI;AACxB,QAAM6pG,oBAAoB,GAAG,YAAYr+G,IAAZ,CAAiBwU,IAAjB,CAA7B;AACA,QAAM8pG,WAAW,GAAG,oBAAoBt+G,IAApB,CAAyBwU,IAAzB,CAApB,CAFwB,CAE4B;;AAEpD,MAAI6pG,oBAAoB,IAAIC,WAA5B,EAAyC;AACxC,WAAO9pG,IAAP;AACA;;AAED,SAAOA,IAAI,CAAC1a,OAAL,CAAa,KAAb,EAAoB,GAApB,CAAP;AACA,CATD,C;;;;;;;;;;;ACDA,IAAIykH,EAAE,GAAG3iH,mBAAO,CAAC,uCAAD,CAAhB;;AACA,IAAI4iH,EAAE,GAAG5iH,mBAAO,CAAC,uCAAD,CAAhB;;AAEA,IAAI6iH,IAAI,GAAGD,EAAX;AACAC,IAAI,CAACF,EAAL,GAAUA,EAAV;AACAE,IAAI,CAACD,EAAL,GAAUA,EAAV;AAEAhjH,MAAM,CAACC,OAAP,GAAiBgjH,IAAjB,C;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA,IAAIC,SAAS,GAAG,EAAhB;;AACA,KAAK,IAAIrlH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,GAApB,EAAyB,EAAEA,CAA3B,EAA8B;AAC5BqlH,WAAS,CAACrlH,CAAD,CAAT,GAAe,CAACA,CAAC,GAAG,KAAL,EAAYjC,QAAZ,CAAqB,EAArB,EAAyB0B,MAAzB,CAAgC,CAAhC,CAAf;AACD;;AAED,SAAS6lH,WAAT,CAAqB5xG,GAArB,EAA0BvF,MAA1B,EAAkC;AAChC,MAAInO,CAAC,GAAGmO,MAAM,IAAI,CAAlB;AACA,MAAIo3G,GAAG,GAAGF,SAAV,CAFgC,CAGhC;;AACA,SAAQ,CAACE,GAAG,CAAC7xG,GAAG,CAAC1T,CAAC,EAAF,CAAJ,CAAJ,EAAgBulH,GAAG,CAAC7xG,GAAG,CAAC1T,CAAC,EAAF,CAAJ,CAAnB,EACTulH,GAAG,CAAC7xG,GAAG,CAAC1T,CAAC,EAAF,CAAJ,CADM,EACMulH,GAAG,CAAC7xG,GAAG,CAAC1T,CAAC,EAAF,CAAJ,CADT,EACqB,GADrB,EAETulH,GAAG,CAAC7xG,GAAG,CAAC1T,CAAC,EAAF,CAAJ,CAFM,EAEMulH,GAAG,CAAC7xG,GAAG,CAAC1T,CAAC,EAAF,CAAJ,CAFT,EAEqB,GAFrB,EAGTulH,GAAG,CAAC7xG,GAAG,CAAC1T,CAAC,EAAF,CAAJ,CAHM,EAGMulH,GAAG,CAAC7xG,GAAG,CAAC1T,CAAC,EAAF,CAAJ,CAHT,EAGqB,GAHrB,EAITulH,GAAG,CAAC7xG,GAAG,CAAC1T,CAAC,EAAF,CAAJ,CAJM,EAIMulH,GAAG,CAAC7xG,GAAG,CAAC1T,CAAC,EAAF,CAAJ,CAJT,EAIqB,GAJrB,EAKTulH,GAAG,CAAC7xG,GAAG,CAAC1T,CAAC,EAAF,CAAJ,CALM,EAKMulH,GAAG,CAAC7xG,GAAG,CAAC1T,CAAC,EAAF,CAAJ,CALT,EAMTulH,GAAG,CAAC7xG,GAAG,CAAC1T,CAAC,EAAF,CAAJ,CANM,EAMMulH,GAAG,CAAC7xG,GAAG,CAAC1T,CAAC,EAAF,CAAJ,CANT,EAOTulH,GAAG,CAAC7xG,GAAG,CAAC1T,CAAC,EAAF,CAAJ,CAPM,EAOMulH,GAAG,CAAC7xG,GAAG,CAAC1T,CAAC,EAAF,CAAJ,CAPT,CAAD,CAOuBkC,IAPvB,CAO4B,EAP5B,CAAP;AAQD;;AAEDC,MAAM,CAACC,OAAP,GAAiBkjH,WAAjB,C;;;;;;;;;;;ACvBA;AACA;AAEA,IAAIE,MAAM,GAAGjjH,mBAAO,CAAC,sBAAD,CAApB;;AAEAJ,MAAM,CAACC,OAAP,GAAiB,SAASqjH,OAAT,GAAmB;AAClC,SAAOD,MAAM,CAACtgG,WAAP,CAAmB,EAAnB,CAAP;AACD,CAFD,C;;;;;;;;;;;ACLA,IAAIwgG,GAAG,GAAGnjH,mBAAO,CAAC,iDAAD,CAAjB;;AACA,IAAI+iH,WAAW,GAAG/iH,mBAAO,CAAC,iEAAD,CAAzB,C,CAEA;AACA;AACA;AACA;;;AAEA,IAAIojH,OAAJ;;AACA,IAAIC,SAAJ,C,CAEA;;;AACA,IAAIC,UAAU,GAAG,CAAjB;AACA,IAAIC,UAAU,GAAG,CAAjB,C,CAEA;;AACA,SAASZ,EAAT,CAAYjjI,OAAZ,EAAqByxB,GAArB,EAA0BvF,MAA1B,EAAkC;AAChC,MAAInO,CAAC,GAAG0T,GAAG,IAAIvF,MAAP,IAAiB,CAAzB;AACA,MAAI3mB,CAAC,GAAGksB,GAAG,IAAI,EAAf;AAEAzxB,SAAO,GAAGA,OAAO,IAAI,EAArB;AACA,MAAI8yB,IAAI,GAAG9yB,OAAO,CAAC8yB,IAAR,IAAgB4wG,OAA3B;AACA,MAAII,QAAQ,GAAG9jI,OAAO,CAAC8jI,QAAR,KAAqB5lI,SAArB,GAAiC8B,OAAO,CAAC8jI,QAAzC,GAAoDH,SAAnE,CANgC,CAQhC;AACA;AACA;;AACA,MAAI7wG,IAAI,IAAI,IAAR,IAAgBgxG,QAAQ,IAAI,IAAhC,EAAsC;AACpC,QAAIC,SAAS,GAAGN,GAAG,EAAnB;;AACA,QAAI3wG,IAAI,IAAI,IAAZ,EAAkB;AAChB;AACAA,UAAI,GAAG4wG,OAAO,GAAG,CACfK,SAAS,CAAC,CAAD,CAAT,GAAe,IADA,EAEfA,SAAS,CAAC,CAAD,CAFM,EAEDA,SAAS,CAAC,CAAD,CAFR,EAEaA,SAAS,CAAC,CAAD,CAFtB,EAE2BA,SAAS,CAAC,CAAD,CAFpC,EAEyCA,SAAS,CAAC,CAAD,CAFlD,CAAjB;AAID;;AACD,QAAID,QAAQ,IAAI,IAAhB,EAAsB;AACpB;AACAA,cAAQ,GAAGH,SAAS,GAAG,CAACI,SAAS,CAAC,CAAD,CAAT,IAAgB,CAAhB,GAAoBA,SAAS,CAAC,CAAD,CAA9B,IAAqC,MAA5D;AACD;AACF,GAxB+B,CA0BhC;AACA;AACA;AACA;;;AACA,MAAIC,KAAK,GAAGhkI,OAAO,CAACgkI,KAAR,KAAkB9lI,SAAlB,GAA8B8B,OAAO,CAACgkI,KAAtC,GAA8C,IAAI36H,IAAJ,GAAWuF,OAAX,EAA1D,CA9BgC,CAgChC;AACA;;AACA,MAAIq1H,KAAK,GAAGjkI,OAAO,CAACikI,KAAR,KAAkB/lI,SAAlB,GAA8B8B,OAAO,CAACikI,KAAtC,GAA8CJ,UAAU,GAAG,CAAvE,CAlCgC,CAoChC;;AACA,MAAIK,EAAE,GAAIF,KAAK,GAAGJ,UAAT,GAAuB,CAACK,KAAK,GAAGJ,UAAT,IAAqB,KAArD,CArCgC,CAuChC;;AACA,MAAIK,EAAE,GAAG,CAAL,IAAUlkI,OAAO,CAAC8jI,QAAR,KAAqB5lI,SAAnC,EAA8C;AAC5C4lI,YAAQ,GAAGA,QAAQ,GAAG,CAAX,GAAe,MAA1B;AACD,GA1C+B,CA4ChC;AACA;;;AACA,MAAI,CAACI,EAAE,GAAG,CAAL,IAAUF,KAAK,GAAGJ,UAAnB,KAAkC5jI,OAAO,CAACikI,KAAR,KAAkB/lI,SAAxD,EAAmE;AACjE+lI,SAAK,GAAG,CAAR;AACD,GAhD+B,CAkDhC;;;AACA,MAAIA,KAAK,IAAI,KAAb,EAAoB;AAClB,UAAM,IAAIvgI,KAAJ,CAAU,kDAAV,CAAN;AACD;;AAEDkgI,YAAU,GAAGI,KAAb;AACAH,YAAU,GAAGI,KAAb;AACAN,WAAS,GAAGG,QAAZ,CAzDgC,CA2DhC;;AACAE,OAAK,IAAI,cAAT,CA5DgC,CA8DhC;;AACA,MAAIG,EAAE,GAAG,CAAC,CAACH,KAAK,GAAG,SAAT,IAAsB,KAAtB,GAA8BC,KAA/B,IAAwC,WAAjD;AACA1+H,GAAC,CAACwY,CAAC,EAAF,CAAD,GAASomH,EAAE,KAAK,EAAP,GAAY,IAArB;AACA5+H,GAAC,CAACwY,CAAC,EAAF,CAAD,GAASomH,EAAE,KAAK,EAAP,GAAY,IAArB;AACA5+H,GAAC,CAACwY,CAAC,EAAF,CAAD,GAASomH,EAAE,KAAK,CAAP,GAAW,IAApB;AACA5+H,GAAC,CAACwY,CAAC,EAAF,CAAD,GAASomH,EAAE,GAAG,IAAd,CAnEgC,CAqEhC;;AACA,MAAIC,GAAG,GAAIJ,KAAK,GAAG,WAAR,GAAsB,KAAvB,GAAgC,SAA1C;AACAz+H,GAAC,CAACwY,CAAC,EAAF,CAAD,GAASqmH,GAAG,KAAK,CAAR,GAAY,IAArB;AACA7+H,GAAC,CAACwY,CAAC,EAAF,CAAD,GAASqmH,GAAG,GAAG,IAAf,CAxEgC,CA0EhC;;AACA7+H,GAAC,CAACwY,CAAC,EAAF,CAAD,GAASqmH,GAAG,KAAK,EAAR,GAAa,GAAb,GAAmB,IAA5B,CA3EgC,CA2EE;;AAClC7+H,GAAC,CAACwY,CAAC,EAAF,CAAD,GAASqmH,GAAG,KAAK,EAAR,GAAa,IAAtB,CA5EgC,CA8EhC;;AACA7+H,GAAC,CAACwY,CAAC,EAAF,CAAD,GAAS+lH,QAAQ,KAAK,CAAb,GAAiB,IAA1B,CA/EgC,CAiFhC;;AACAv+H,GAAC,CAACwY,CAAC,EAAF,CAAD,GAAS+lH,QAAQ,GAAG,IAApB,CAlFgC,CAoFhC;;AACA,OAAK,IAAIxlG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuB,EAAEA,CAAzB,EAA4B;AAC1B/4B,KAAC,CAACwY,CAAC,GAAGugB,CAAL,CAAD,GAAWxL,IAAI,CAACwL,CAAD,CAAf;AACD;;AAED,SAAO7M,GAAG,GAAGA,GAAH,GAAS4xG,WAAW,CAAC99H,CAAD,CAA9B;AACD;;AAED2a,MAAM,CAACC,OAAP,GAAiB8iH,EAAjB,C;;;;;;;;;;;AC5GA,IAAIQ,GAAG,GAAGnjH,mBAAO,CAAC,iDAAD,CAAjB;;AACA,IAAI+iH,WAAW,GAAG/iH,mBAAO,CAAC,iEAAD,CAAzB;;AAEA,SAAS4iH,EAAT,CAAYljI,OAAZ,EAAqByxB,GAArB,EAA0BvF,MAA1B,EAAkC;AAChC,MAAInO,CAAC,GAAG0T,GAAG,IAAIvF,MAAP,IAAiB,CAAzB;;AAEA,MAAI,OAAOlsB,OAAP,IAAmB,QAAvB,EAAiC;AAC/ByxB,OAAG,GAAGzxB,OAAO,KAAK,QAAZ,GAAuB,IAAIgD,KAAJ,CAAU,EAAV,CAAvB,GAAuC,IAA7C;AACAhD,WAAO,GAAG,IAAV;AACD;;AACDA,SAAO,GAAGA,OAAO,IAAI,EAArB;AAEA,MAAIqkI,IAAI,GAAGrkI,OAAO,CAACgzB,MAAR,IAAkB,CAAChzB,OAAO,CAACyjI,GAAR,IAAeA,GAAhB,GAA7B,CATgC,CAWhC;;AACAY,MAAI,CAAC,CAAD,CAAJ,GAAWA,IAAI,CAAC,CAAD,CAAJ,GAAU,IAAX,GAAmB,IAA7B;AACAA,MAAI,CAAC,CAAD,CAAJ,GAAWA,IAAI,CAAC,CAAD,CAAJ,GAAU,IAAX,GAAmB,IAA7B,CAbgC,CAehC;;AACA,MAAI5yG,GAAJ,EAAS;AACP,SAAK,IAAI6yG,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAG,EAAtB,EAA0B,EAAEA,EAA5B,EAAgC;AAC9B7yG,SAAG,CAAC1T,CAAC,GAAGumH,EAAL,CAAH,GAAcD,IAAI,CAACC,EAAD,CAAlB;AACD;AACF;;AAED,SAAO7yG,GAAG,IAAI4xG,WAAW,CAACgB,IAAD,CAAzB;AACD;;AAEDnkH,MAAM,CAACC,OAAP,GAAiB+iH,EAAjB,C;;;;;;;;;;;;AC5Ba;;AAEb,IAAI5lH,QAAQ,GAAGgD,mBAAO,CAAC,oDAAD,CAAtB;;AACA,IAAIihD,QAAQ,GAAGjhD,mBAAO,CAAC,kEAAD,CAAtB;;AACA,IAAIghD,SAAS,GAAGhhD,mBAAO,CAAC,oEAAD,CAAvB;;AACA,IAAIsvB,QAAQ,GAAGtvB,mBAAO,CAAC,oDAAD,CAAtB;;AACA,IAAIq/F,QAAQ,GAAGr/F,mBAAO,CAAC,oDAAD,CAAtB,C,CAEA;;;AACAJ,MAAM,CAACC,OAAP,GAAiB,SAASg2C,mBAAT,CAA6B13D,KAA7B,EAAoC;AACpD;AACA,MAAIA,KAAK,IAAI,IAAT,IAAkB,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,OAAOA,KAAP,KAAiB,UAApE,EAAiF;AAChF,WAAO,IAAP;AACA;;AACD,MAAI6e,QAAQ,CAAC7e,KAAD,CAAZ,EAAqB;AACpB,WAAO,QAAP;AACA;;AACD,MAAI8iE,QAAQ,CAAC9iE,KAAD,CAAZ,EAAqB;AACpB,WAAO,QAAP;AACA;;AACD,MAAI6iE,SAAS,CAAC7iE,KAAD,CAAb,EAAsB;AACrB,WAAO,SAAP;AACA;;AACD,MAAImxC,QAAQ,CAACnxC,KAAD,CAAZ,EAAqB;AACpB,WAAO,QAAP;AACA;;AACD,MAAIkhH,QAAQ,CAAClhH,KAAD,CAAZ,EAAqB;AACpB,WAAO,QAAP;AACA;AACD,CApBD,C;;;;;;;;;;;;ACTa;;AAEb,IAAIm9D,KAAK,GAAGt7C,mBAAO,CAAC,8CAAD,CAAnB;;AACA,IAAIu7C,KAAK,GAAGv7C,mBAAO,CAAC,8CAAD,CAAnB;;AACA,IAAImiG,SAAS,GAAGniG,mBAAO,CAAC,sDAAD,CAAvB;;AACA,IAAIoiG,SAAS,GAAGpiG,mBAAO,CAAC,sDAAD,CAAvB;;AAEAJ,MAAM,CAACC,OAAP,GAAiB,SAASk2C,eAAT,CAAyB53D,KAAzB,EAAgC;AAChD,MAAIA,KAAK,IAAI,OAAOA,KAAP,KAAiB,QAA9B,EAAwC;AACvC,QAAIm9D,KAAK,CAACn9D,KAAD,CAAT,EAAkB;AACjB,aAAO,KAAP;AACA;;AACD,QAAIo9D,KAAK,CAACp9D,KAAD,CAAT,EAAkB;AACjB,aAAO,KAAP;AACA;;AACD,QAAIgkH,SAAS,CAAChkH,KAAD,CAAb,EAAsB;AACrB,aAAO,SAAP;AACA;;AACD,QAAIikH,SAAS,CAACjkH,KAAD,CAAb,EAAsB;AACrB,aAAO,SAAP;AACA;AACD;;AACD,SAAO,KAAP;AACA,CAhBD,C;;;;;;;;;;;;ACPa;;AAEb,IAAI2S,OAAO,GAAGkP,mBAAO,CAAC,gDAAD,CAArB;;AACA,IAAIqgB,oBAAoB,GAAGrgB,mBAAO,CAAC,8EAAD,CAAlC;;AACA,IAAI81C,SAAS,GAAG91C,mBAAO,CAAC,kEAAD,CAAvB;;AAEA,IAAI6+F,SAAS,GAAG/oD,SAAS,CAAC,2BAAD,CAAzB;;AACA,IAAI8oD,cAAc,GAAG5+F,mBAAO,CAAC,sEAAD,CAAP,EAArB;;AAEA,IAAIkgB,CAAC,GAAG,OAAOC,UAAP,KAAsB,WAAtB,GAAoCC,MAApC,GAA6CD,UAArD;AACA,IAAIkhF,WAAW,GAAGhhF,oBAAoB,EAAtC;AAEA,IAAIihF,MAAM,GAAGxrD,SAAS,CAAC,wBAAD,CAAtB;AACA,IAAIyrD,SAAS,GAAG,EAAhB;;AACA,IAAIZ,IAAI,GAAG3gG,mBAAO,CAAC,oHAAD,CAAlB;;AACA,IAAIq2C,cAAc,GAAG70D,MAAM,CAAC60D,cAA5B,C,CAA4C;;AAC5C,IAAIuoD,cAAc,IAAI+B,IAAlB,IAA0BtqD,cAA9B,EAA8C;AAC7CvlD,SAAO,CAACuwG,WAAD,EAAc,UAAUG,UAAV,EAAsB;AAC1C,QAAI,OAAOthF,CAAC,CAACshF,UAAD,CAAR,KAAyB,UAA7B,EAAyC;AACxC,UAAI1nD,GAAG,GAAG,IAAI55B,CAAC,CAACshF,UAAD,CAAL,EAAV;;AACA,UAAIl/G,MAAM,CAACq8G,WAAP,IAAsB7kD,GAA1B,EAA+B;AAC9B,YAAI2nD,KAAK,GAAGprD,cAAc,CAACyD,GAAD,CAA1B;AACA,YAAI2kD,UAAU,GAAGkC,IAAI,CAACc,KAAD,EAAQn/G,MAAM,CAACq8G,WAAf,CAArB;;AACA,YAAI,CAACF,UAAL,EAAiB;AAChB,cAAIiD,UAAU,GAAGrrD,cAAc,CAACorD,KAAD,CAA/B;AACAhD,oBAAU,GAAGkC,IAAI,CAACe,UAAD,EAAap/G,MAAM,CAACq8G,WAApB,CAAjB;AACA;;AACD4C,iBAAS,CAACC,UAAD,CAAT,GAAwB/C,UAAU,CAAC59G,GAAnC;AACA;AACD;AACD,GAbM,CAAP;AAcA;;AAED,IAAI8gH,cAAc,GAAG,SAASC,iBAAT,CAA2BzjH,KAA3B,EAAkC;AACtD,MAAI8lI,SAAS,GAAG,KAAhB;AACAnzH,SAAO,CAACywG,SAAD,EAAY,UAAUO,MAAV,EAAkBN,UAAlB,EAA8B;AAChD,QAAI,CAACyiB,SAAL,EAAgB;AACf,UAAI;AACH,YAAIr8H,IAAI,GAAGk6G,MAAM,CAACrmG,IAAP,CAAYtd,KAAZ,CAAX;;AACA,YAAIyJ,IAAI,KAAK45G,UAAb,EAAyB;AACxByiB,mBAAS,GAAGr8H,IAAZ;AACA;AACD,OALD,CAKE,OAAOsgB,CAAP,EAAU,CAAE;AACd;AACD,GATM,CAAP;AAUA,SAAO+7G,SAAP;AACA,CAbD;;AAeA,IAAIliB,YAAY,GAAG/hG,mBAAO,CAAC,8DAAD,CAA1B;;AAEAJ,MAAM,CAACC,OAAP,GAAiB,SAASq2C,eAAT,CAAyB/3D,KAAzB,EAAgC;AAChD,MAAI,CAAC4jH,YAAY,CAAC5jH,KAAD,CAAjB,EAA0B;AAAE,WAAO,KAAP;AAAe;;AAC3C,MAAI,CAACygH,cAAD,IAAmB,EAAEt8G,MAAM,CAACq8G,WAAP,IAAsBxgH,KAAxB,CAAvB,EAAuD;AAAE,WAAOmjH,MAAM,CAACzC,SAAS,CAAC1gH,KAAD,CAAV,EAAmB,CAAnB,EAAsB,CAAC,CAAvB,CAAb;AAAyC;;AAClG,SAAOwjH,cAAc,CAACxjH,KAAD,CAArB;AACA,CAJD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClDA,MAAM+lI,KAAN,CAAY;AACVzmI,aAAW,CAACwpC,KAAD,EAAQ;AACjB,SAAKA,KAAL;AACEk9F,uBAAiB,EAAEl9F,KAAK,CAACk9F,iBAAN,IAA2B,EADhD;AAEEC,uBAAiB,EAAEn9F,KAAK,CAACm9F,iBAAN,IAA2B,EAFhD;AAGEC,sBAAgB,EAAEp9F,KAAK,CAACo9F,gBAAN,IAA0B,EAH9C;AAIEC,sBAAgB,EAAEr9F,KAAK,CAACq9F,gBAAN,IAA0B,EAJ9C;AAKEC,iBAAW,EAAE,KALf;AAMEC,aAAO,EAAE,KANX;AAOEC,cAAQ,EAAE,KAPZ;AAQEC,kBAAY,EAAE,IARhB;AASEnzF,WAAK,EAAE,IATT;AAUE3lB,YAAM,EAAE;AAVV,OAWKqb,KAXL;AAaD;;AAED5hC,QAAM,CAACs/H,IAAD,EAAO;AACX,WAAO,IAAIT,KAAJ,iCACF,KAAKj9F,KADH;AAELk9F,uBAAiB,EAAE,CAAC,GAAG,KAAKl9F,KAAL,CAAWk9F,iBAAf,EAAkCQ,IAAlC;AAFd,OAAP;AAID;;AAEDC,UAAQ,CAACC,KAAD,EAAQ;AACd,QAAIC,OAAO,GAAG,IAAI7rH,GAAJ,CAAQ4rH,KAAR,CAAd;AACA,WAAO,IAAIX,KAAJ,iCACF,KAAKj9F,KADH;AAELk9F,uBAAiB,EAAE,KAAKl9F,KAAL,CAAWk9F,iBAAX,CAA6B9+H,MAA7B,CACjBs/H,IAAI,IAAI,CAACG,OAAO,CAACluH,GAAR,CAAYpV,MAAM,CAACiS,IAAP,CAAYkxH,IAAZ,EAAkB,CAAlB,CAAZ,CADQ;AAFd,OAAP;AAMD;;AAEDI,QAAM,CAACF,KAAK,GAAG,EAAT,EAAa;AACjB,QAAI,CAACniI,KAAK,CAACwD,OAAN,CAAc2+H,KAAd,CAAL,EAA2B;AACzBA,WAAK,GAAG,CAACA,KAAD,CAAR;AACD;;AAED,QAAIG,KAAK,GAAG,IAAId,KAAJ,iCAAe,KAAKj9F,KAApB;AAA2Bm9F,uBAAiB,EAAES;AAA9C,OAAZ;AACAG,SAAK,CAAC/9F,KAAN,CAAYs9F,WAAZ,GAA0B,KAA1B;AACA,WAAOS,KAAP;AACD;;AAEDC,WAAS,CAACN,IAAD,EAAO;AACd,QAAIK,KAAK,GAAG,KAAKD,MAAL,CAAY;AAAEpyH,YAAM,EAAEgyH;AAAV,KAAZ,CAAZ;AACAK,SAAK,CAAC/9F,KAAN,CAAYs9F,WAAZ,GAA0B,IAA1B;AACA,WAAOS,KAAP;AACD;;AAEDE,SAAO,CAACL,KAAD,EAAQ;AACb,QAAI,CAACniI,KAAK,CAACwD,OAAN,CAAc2+H,KAAd,CAAL,EAA2B;AACzBA,WAAK,GAAG,CAACA,KAAD,CAAR;AACD;;AAED,WAAO,IAAIX,KAAJ,iCACF,KAAKj9F,KADH;AAELo9F,sBAAgB,EAAE,CAAC,GAAG,KAAKp9F,KAAL,CAAWo9F,gBAAf,EAAiC,GAAGQ,KAApC;AAFb,OAAP;AAID;;AAEDM,SAAO,CAACN,KAAD,EAAQ;AACb,QAAI,CAACniI,KAAK,CAACwD,OAAN,CAAc2+H,KAAd,CAAL,EAA2B;AACzBA,WAAK,GAAG,CAACA,KAAD,CAAR;AACD;;AAED,WAAO,IAAIX,KAAJ,iCACF,KAAKj9F,KADH;AAELq9F,sBAAgB,EAAE,CAAC,GAAG,KAAKr9F,KAAL,CAAWq9F,gBAAf,EAAiC,GAAGO,KAApC;AAFb,OAAP;AAID;;AAEDtzF,OAAK,CAACj6B,GAAD,EAAM;AACT,WAAO,IAAI4sH,KAAJ,iCAAe,KAAKj9F,KAApB;AAA2BsK,WAAK,EAAEj6B;AAAlC,OAAP;AACD;;AAEDsU,QAAM,CAACtU,GAAD,EAAM;AACV,WAAO,IAAI4sH,KAAJ,iCAAe,KAAKj9F,KAApB;AAA2Brb,YAAM,EAAEtU;AAAnC,OAAP;AACD;;AAEDuuB,KAAG,GAAG;AACJ,WAAO,IAAIq+F,KAAJ,iCAAe,KAAKj9F,KAApB;AAA2Bu9F,aAAO,EAAE;AAApC,OAAP;AACD;;AAEDC,UAAQ,GAAG;AACT,WAAO,IAAIP,KAAJ,iCAAe,KAAKj9F,KAApB;AAA2Bw9F,cAAQ,EAAE;AAArC,OAAP;AACD;;AAEDW,sBAAoB,GAAG;AACrB,WAAO,IAAIlB,KAAJ,iCAAe,KAAKj9F,KAApB;AAA2By9F,kBAAY,EAAE;AAAzC,OAAP;AACD;;AAEDhlI,SAAO,CAACob,IAAD,EAAO;AACZ,WAAO,IAAIopH,KAAJ,iCAAe,KAAKj9F,KAApB;AAA2Bo+F,kBAAY,EAAEvqH;AAAzC,OAAP;AACD;;AAEDD,WAAS,GAAG;AACV,WAAO,KAAKosB,KAAZ;AACD;;AAlGS;;AAqGZ,SAASq+F,iBAAT,CAA2BN,KAA3B,EAAkCO,cAAlC,EAAkD;AAChD,MAAIC,UAAU,GAAGR,KAAK,CAACnqH,SAAN,GAAkBypH,gBAAnC;;AACA,MAAIkB,UAAU,CAAC5gI,MAAX,KAAsB,CAA1B,EAA6B;AAC3B,QAAI2gI,cAAJ,EAAoB;AAClB;AAASE,aAAK,EAAE;AAAhB,SAA0BF,cAA1B;AACD;;AACD,WAAO,IAAP;AACD;;AAED,MAAIG,UAAU,GAAGF,UAAU,CAAC,CAAD,CAA3B;;AACA,MAAI,OAAOE,UAAP,KAAsB,QAA1B,EAAoC;AAClC,WAAO;AAAE99F,WAAK,EAAE89F,UAAT;AAAqBD,WAAK,EAAE;AAA5B,KAAP;AACD,GAZ+C,CAahD;;;AACA,qBAAcjkI,MAAM,CAACiS,IAAP,CAAYiyH,UAAZ,CAAd;AAAA;AAAA,MAAK99F,KAAL;;AACA,SAAO;AAAEA,SAAF;AAAS69F,SAAK,EAAEC,UAAU,CAAC99F,KAAD;AAA1B,GAAP;AACD;;AAEDhoB,MAAM,CAACC,OAAP,GAAiB,SAASw0B,CAAT,CAAWsxF,KAAX,EAAkB;AACjC,SAAO,IAAIzB,KAAJ,CAAU;AAAEyB;AAAF,GAAV,CAAP;AACD,CAFD,C;;;;;;;;;;;ACvHA;AAEA,IAAI3/D,IAAJ;AAEApmD,MAAM,CAACC,OAAP,GAAiB;AAAEmmD;AAAF,CAAjB,C;;;;;;;;;;;ACJA,MAAM3xB,CAAC,GAAGr0B,mBAAO,CAAC,gDAAD,CAAjB;;AACA,MAAM4lH,QAAQ,GAAG5lH,mBAAO,CAAC,8CAAD,CAAxB;;AAEA,SAASgmD,IAAT,CAAcp+D,IAAd,EAAoBlK,IAApB,EAA0B;AACxB,SAAOkoI,QAAQ,CAAC5/D,IAAT,CAAcp+D,IAAd,EAAoBlK,IAApB,CAAP;AACD;;AAED,eAAemoI,SAAf,CAAyBj+H,IAAzB,EAA+By5B,IAA/B,EAAqC;AACnC,QAAM2kC,IAAI,CAAC,kBAAD,EAAqB;AAAE8/D,cAAU,EAAEl+H;AAAd,GAArB,CAAV;;AACA,MAAI;AACF,UAAMy5B,IAAI,EAAV;AACD,GAFD,CAEE,OAAOnZ,CAAP,EAAU;AACV,UAAM89C,IAAI,CAAC,kBAAD,CAAV;AACA,UAAM99C,CAAN;AACD;;AACD,QAAM89C,IAAI,CAAC,mBAAD,CAAV;AACD;;AAED,eAAe+/D,UAAf,CAA0BC,QAA1B,EAAoC;AAClC,SAAOhgE,IAAI,CAAC,iBAAD,EAAoB;AAAEigE,MAAE,EAAED;AAAN,GAApB,CAAX;AACD;;AAED,eAAeE,kBAAf,CAAkC7kG,IAAlC,EAAwC;AACtC,QAAM2kC,IAAI,CAAC,wBAAD,CAAV;;AACA,MAAI;AACF,UAAM3kC,IAAI,EAAV;AACD,GAFD,SAEU;AACR,UAAM2kC,IAAI,CAAC,sBAAD,CAAV;AACD;AACF;;AAED,SAASmgE,QAAT,CAAkBnB,KAAlB,EAAyB;AACvB,SAAOh/D,IAAI,CAAC,WAAD,EAAc;AAAEg/D,SAAK,EAAEA,KAAK,CAACnqH,SAAN;AAAT,GAAd,CAAX;AACD;;AAED,SAASurH,eAAT,GAA2B;AACzB,SAAOpgE,IAAI,CAAC,mBAAD,CAAX;AACD;;AAED,SAASqgE,cAAT,CAAwBl9H,KAAxB,EAA+B;AAC7B,SAAO68D,IAAI,CAAC,kBAAD,EAAqB;AAAE78D;AAAF,GAArB,CAAX;AACD;;AAED,SAASm9H,eAAT,CAAyBn9H,KAAzB,EAAgCo9H,UAAhC,EAA4CpoI,KAA5C,EAAmD;AACjD,SAAO6nE,IAAI,CAAC,uBAAD,EAA0B;AAAE78D,SAAF;AAASo9H,cAAT;AAAqB18H,UAAM,EAAE1L;AAA7B,GAA1B,CAAX;AACD;;AAED,SAASqoI,kBAAT,CAA4Br9H,KAA5B,EAAmCo9H,UAAnC,EAA+CE,IAA/C,EAAqD;AACnD,SAAOzgE,IAAI,CAAC,0BAAD,EAA6B;AAAE78D,SAAF;AAASo9H,cAAT;AAAqBE;AAArB,GAA7B,CAAX;AACD;;AAED,SAASC,eAAT,CAAyBC,SAAzB,EAAoCC,YAApC,EAAkD;AAChD,SAAO5gE,IAAI,CAAC,sBAAD,EAAyB;AAAE2gE,aAAF;AAAaC;AAAb,GAAzB,CAAX;AACD;;AAED,SAASC,kBAAT,CAA4BF,SAA5B,EAAuCC,YAAvC,EAAqD;AACnD,SAAO5gE,IAAI,CAAC,yBAAD,EAA4B;AAAE2gE,aAAF;AAAaC;AAAb,GAA5B,CAAX;AACD;;AAED,SAASE,eAAT,CAAyBH,SAAzB,EAAoCrjI,SAApC,EAA+C67C,OAA/C,EAAwD;AACtD,SAAO6mB,IAAI,CAAC,sBAAD,EAAyB;AAAE2gE,aAAF;AAAarjI,aAAb;AAAwB67C;AAAxB,GAAzB,CAAX;AACD;;AAED,SAAS4nF,kBAAT,CAA4BJ,SAA5B,EAAuCjuC,IAAvC,EAA6C;AAC3C,SAAO1yB,IAAI,CAAC,yBAAD,EAA4B;AAAE2gE,aAAF;AAAajuC;AAAb,GAA5B,CAAX;AACD;;AAED,SAASsuC,iBAAT,CAA2Bf,EAA3B,EAA+BgB,MAA/B,EAAuC;AACrC,SAAOjhE,IAAI,CAAC,wBAAD,EAA2B;AAAEigE,MAAF;AAAMgB;AAAN,GAA3B,CAAX;AACD;;AAED,SAASC,iBAAT,CAA2BjB,EAA3B,EAA+B;AAC7B,SAAOjgE,IAAI,CAAC,wBAAD,EAA2B;AAAEigE;AAAF,GAA3B,CAAX;AACD;;AAED,SAASkB,WAAT,GAAuB;AACrB,SAAOnhE,IAAI,CAAC,kBAAD,CAAX;AACD;;AAED,SAASohE,aAAT,CAAuBC,OAAvB,EAAgCC,cAAhC,EAAgD;AAC9C,SAAOthE,IAAI,CAAC,oBAAD,EAAuB;AAAEqhE,WAAF;AAAWC;AAAX,GAAvB,CAAX;AACD;;AAED,SAASC,aAAT,CAAuBtB,EAAvB,EAA2BgB,MAA3B,EAAmC;AACjC,SAAOjhE,IAAI,CAAC,oBAAD,EAAuB;AAAEigE,MAAF;AAAMgB;AAAN,GAAvB,CAAX;AACD;;AAED,SAASO,YAAT,CAAsBvB,EAAtB,EAA0BwB,iBAA1B,EAA6CC,kBAA7C,EAAiE;AAC/D,SAAO1hE,IAAI,CAAC,mBAAD,EAAsB;AAC/BigE,MAD+B;AAE/BwB,qBAF+B;AAG/BC;AAH+B,GAAtB,CAAX;AAKD;;AAED,SAASC,aAAT,CAAuB1B,EAAvB,EAA2B;AACzB,SAAOjgE,IAAI,CAAC,oBAAD,EAAuB;AAAEigE;AAAF,GAAvB,CAAX;AACD;;AAED,SAAS2B,aAAT,CAAuB3B,EAAvB,EAA2B;AACzB,SAAOjgE,IAAI,CAAC,oBAAD,EAAuB;AAAEigE;AAAF,GAAvB,CAAX;AACD;;AAED,SAAS4B,iBAAT,GAA6B;AAC3B,SAAO7hE,IAAI,CAAC,oBAAD,EAAuB;AAAE8hE,WAAO,EAAE;AAAX,GAAvB,CAAX;AACD;;AAED,SAASC,mBAAT,CAA6BC,KAA7B,EAAoC;AAClC,SAAOhiE,IAAI,CAAC,2BAAD,EAA8B;AAAEgiE;AAAF,GAA9B,CAAX;AACD;;AAED,SAASC,mBAAT,CAA6BhC,EAA7B,EAAiCgB,MAAjC,EAAyC;AACvC,SAAOjhE,IAAI,CAAC,2BAAD,EAA8B;AAAEigE,MAAF;AAAMgB;AAAN,GAA9B,CAAX;AACD;;AAED,SAASiB,mBAAT,CAA6BjC,EAA7B,EAAiCyB,kBAAjC,EAAqD;AACnD,SAAO1hE,IAAI,CAAC,2BAAD,EAA8B;AAAEigE,MAAF;AAAMyB;AAAN,GAA9B,CAAX;AACD;;AAED,SAASS,aAAT,GAAyB;AACvB,SAAOniE,IAAI,CAAC,oBAAD,EAAuB;AAAE8hE,WAAO,EAAE;AAAX,GAAvB,CAAX;AACD;;AAED,SAASM,cAAT,CAAwBC,QAAxB,EAAkC;AAChC,SAAOriE,IAAI,CAAC,qBAAD,EAAwB;AAAEqiE;AAAF,GAAxB,CAAX;AACD;;AAED,SAASC,cAAT,CAAwBrC,EAAxB,EAA4BgB,MAA5B,EAAoC;AAClC,SAAOjhE,IAAI,CAAC,qBAAD,EAAwB;AAAEigE,MAAF;AAAMgB;AAAN,GAAxB,CAAX;AACD;;AAED,SAASsB,cAAT,CAAwBtC,EAAxB,EAA4ByB,kBAA5B,EAAgD;AAC9C,SAAO1hE,IAAI,CAAC,qBAAD,EAAwB;AAAEigE,MAAF;AAAMyB;AAAN,GAAxB,CAAX;AACD;;AAED,SAASc,SAAT,GAAqB;AACnB,SAAOxiE,IAAI,CAAC,gBAAD,CAAX;AACD;;AAED,SAASyiE,WAAT,CAAqBC,KAArB,EAA4B;AAC1B,SAAO1iE,IAAI,CAAC,kBAAD,EAAqB;AAAE0iE;AAAF,GAArB,CAAX;AACD;;AAED,SAASC,WAAT,CAAqB1C,EAArB,EAAyBgB,MAAzB,EAAiC;AAC/B,SAAOjhE,IAAI,CAAC,kBAAD,EAAqB;AAAEigE,MAAF;AAAMgB;AAAN,GAArB,CAAX;AACD;;AAED,SAAS2B,WAAT,CAAqB3C,EAArB,EAAyB;AACvB,SAAOjgE,IAAI,CAAC,kBAAD,EAAqB;AAAEigE;AAAF,GAArB,CAAX;AACD;;AAED,SAAS4C,aAAT,CAAuBC,OAAvB,EAAgC;AAC9B,SAAO9iE,IAAI,CAAC,qBAAD,EAAwB;AAAE8iE;AAAF,GAAxB,CAAX;AACD;;AAED,SAASC,eAAT,CAAyBD,OAAzB,EAAkC74H,IAAlC,EAAwC;AACtC,SAAO+1D,IAAI,CAAC,uBAAD,EAA0B;AAAEgjE,YAAQ,EAAEF,OAAZ;AAAqB74H;AAArB,GAA1B,CAAX;AACD;;AAED,SAASg5H,eAAT,CAAyBhD,EAAzB,EAA6BgB,MAA7B,EAAqC;AACnC,SAAOjhE,IAAI,CAAC,uBAAD,EAA0B;AAAEigE,MAAF;AAAMgB;AAAN,GAA1B,CAAX;AACD;;AAED,SAASiC,eAAT,CAAyBjD,EAAzB,EAA6B;AAC3B,SAAOjgE,IAAI,CAAC,uBAAD,EAA0B;AAAEigE;AAAF,GAA1B,CAAX;AACD;;AAEDrmH,MAAM,CAACC,OAAP,GAAiB;AACfgmH,WADe;AAGfM,UAHe;AAIf9xF,GAJe;AAMf0xF,YANe;AAOfG,oBAPe;AAQfE,iBARe;AASfC,gBATe;AAUfC,iBAVe;AAWfE,oBAXe;AAafE,iBAbe;AAcfG,oBAde;AAefE,oBAfe;AAgBfD,iBAhBe;AAiBfE,mBAjBe;AAkBfE,mBAlBe;AAoBfC,aApBe;AAqBfC,eArBe;AAsBfG,eAtBe;AAuBfC,cAvBe;AAwBfG,eAxBe;AAyBfC,eAzBe;AA2BfO,eA3Be;AA4BfJ,qBA5Be;AA6BfE,qBA7Be;AA8BfC,qBA9Be;AA+BfE,gBA/Be;AAgCfE,gBAhCe;AAiCfC,gBAjCe;AAmCfC,WAnCe;AAoCfC,aApCe;AAqCfE,aArCe;AAsCfC,aAtCe;AAuCfC,eAvCe;AAwCfE,iBAxCe;AAyCfG,iBAzCe;AA0CfD;AA1Ce,CAAjB,C;;;;;;;;;;;;;;;;;;;;;;;ACvKA,MAAMn0F,CAAC,GAAG90B,mBAAO,CAAC,sDAAD,CAAjB;;AACA,MAAMmpH,gBAAgB,GAAGnpH,mBAAO,CAAC,4CAAD,CAAhC;;AACA,MAAM6iH,IAAI,GAAG7iH,mBAAO,CAAC,0CAAD,CAApB;;AACA,MAAMopH,MAAM,GAAGppH,mBAAO,CAAC,kDAAD,CAAtB;;AACA,MAAM+3C,MAAM,GAAG/3C,mBAAO,CAAC,0DAAD,CAAtB;;AACA,iBAA4BA,mBAAO,CAAC,4FAAD,CAAnC;AAAA,MAAQqpH,eAAR,YAAQA,eAAR,C,CAEA;;;AAEA,SAASC,cAAT,CAAwBvuH,IAAxB,EAA8B;AAC5B,UAAQA,IAAR;AACE,SAAK,MAAL;AACA,SAAK,UAAL;AACE,aAAO,UAAP;;AACF,SAAK,YAAL;AACE,aAAO,QAAP;;AACF,SAAK,SAAL;AACE,aAAO,SAAP;;AACF,SAAK,mBAAL;AACE,aAAO,YAAP;;AACF,SAAK,UAAL;AACE,aAAO,UAAP;;AACF;AACE,aAAO,OAAP;AAbJ;AAeD;;AAED,SAASg9D,SAAT,CAAmBje,GAAnB,EAAwBpmD,GAAxB,EAA6B;AAC3B,SAAO,CAAC,GAAGomD,GAAJ,EAAS10D,IAAT,CAAc,CAACyyD,KAAD,EAAQgB,KAAR,KAAkB;AACrC,QAAIhB,KAAK,CAACnkD,GAAD,CAAL,GAAamlD,KAAK,CAACnlD,GAAD,CAAtB,EAA6B;AAC3B,aAAO,CAAC,CAAR;AACD,KAFD,MAEO,IAAImkD,KAAK,CAACnkD,GAAD,CAAL,GAAamlD,KAAK,CAACnlD,GAAD,CAAtB,EAA6B;AAClC,aAAO,CAAP;AACD;;AACD,WAAO,CAAP;AACD,GAPM,CAAP;AAQD;;AAED,SAASwxH,OAAT,CAAiBprE,GAAjB,EAAsByvE,OAAtB,EAA+B;AAC7B,SAAOzvE,GAAG,CAACj7D,MAAJ,CAAW,UAAS8U,GAAT,EAAcmO,IAAd,EAAoB;AACpC,QAAIpO,GAAG,GAAGoO,IAAI,CAACynH,OAAD,CAAd;;AACA,QAAI,CAAC51H,GAAG,CAAC2J,cAAJ,CAAmB5J,GAAnB,CAAL,EAA8B;AAC5BC,SAAG,CAACD,GAAD,CAAH,GAAW,EAAX;AACD;;AACDC,OAAG,CAACD,GAAD,CAAH,CAASjQ,IAAT,CAAcqe,IAAd;AACA,WAAOnO,GAAP;AACD,GAPM,EAOJ,EAPI,CAAP;AAQD;;AAED,SAAS61H,MAAT,CAAgBrrI,KAAhB,EAAuB;AACrB,MAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAC7B;AACA;AACA;AAEA,uBAAyBA,KAAK,CAAC8gB,KAAN,CAAY,GAAZ,CAAzB;AAAA;AAAA,QAAK/V,IAAL;AAAA,QAAWC,KAAX;AAAA,QAAkBlJ,GAAlB;;AACA,QAAIA,GAAG,IAAI,IAAX,EAAiB;AACf,aAAO,IAAI8I,IAAJ,CAASiW,QAAQ,CAAC9V,IAAD,CAAjB,EAAyB8V,QAAQ,CAAC7V,KAAD,CAAR,GAAkB,CAA3C,EAA8C6V,QAAQ,CAAC/e,GAAD,CAAtD,CAAP;AACD,KAFD,MAEO,IAAIkJ,KAAK,IAAI,IAAb,EAAmB;AACxB,aAAO,IAAIJ,IAAJ,CAASiW,QAAQ,CAAC9V,IAAD,CAAjB,EAAyB8V,QAAQ,CAAC7V,KAAD,CAAR,GAAkB,CAA3C,EAA8C,CAA9C,CAAP;AACD,KAFM,MAEA;AACL,aAAO,IAAIJ,IAAJ,CAASiW,QAAQ,CAAC9V,IAAD,CAAjB,EAAyB,CAAzB,EAA4B,CAA5B,CAAP;AACD;AACF;;AACD,SAAO/K,KAAP;AACD;;AAED,SAASsrI,aAAT,CAAuB7oI,IAAvB,EAA6B;AAC3B,SAAOk0C,CAAC,CAACt4B,MAAF,CAASgtH,MAAM,CAAC5oI,IAAD,CAAf,EAAuB,SAAvB,CAAP;AACD;;AAED,SAAS8oI,eAAT,GAA2B;AACzB,SAAO50F,CAAC,CAACt4B,MAAF,CAAS,IAAIzT,IAAJ,EAAT,EAAqB,SAArB,CAAP;AACD,C,CAED;;;AAEA,eAAe4gI,cAAf,CAA8B1jI,IAA9B,EAAoC2jI,WAApC,EAAiD;AAC/C,SAAOvkH,OAAO,CAAC0pD,GAAR,CACL9oE,IAAI,CAAC4jI,QAAL,CAAcloI,GAAd,CAAkB,MAAM0lI,OAAN,IAAiB;AACjC,QAAI,CAACA,OAAO,CAACyC,WAAb,EAA0B;AACxB,YAAM7D,EAAE,GAAG,MAAMluE,MAAM,CAACqvE,aAAP,CAAqB;AACpCrsH,YAAI,EAAEuuH,cAAc,CAACjC,OAAO,CAAC0C,WAAT,CADgB;AAEpCniI,YAAI,EAAEy/H,OAAO,CAAC2C,WAFsB;AAGpCC,iBAAS,EAAE5C,OAAO,CAAC6C,QAAR,GAAmB,KAAnB,GAA2B,IAHF;AAIpCC,cAAM,EAAE9C,OAAO,CAACluG,MAAR,GAAiB,IAAjB,GAAwB;AAJI,OAArB,CAAjB;AAMAywG,iBAAW,CAACxlI,GAAZ,CAAgBijI,OAAO,CAAC+C,QAAxB,EAAkCnE,EAAlC;AACD;AACF,GAVD,CADK,CAAP;AAaD;;AAED,eAAeoE,gBAAf,CAAgCpkI,IAAhC,EAAsC2jI,WAAtC,EAAmD;AACjD,QAAMU,gBAAgB,GAAGvyD,SAAS,CAAC9xE,IAAI,CAACqkI,gBAAN,EAAwB,eAAxB,CAAlC;AAEA,QAAMjlH,OAAO,CAAC0pD,GAAR,CACJu7D,gBAAgB,CAAC3oI,GAAjB,CAAqB,MAAM4oI,cAAN,IAAwB;AAC3C,QACEA,cAAc,CAACxvH,IAAf,KAAwB,SAAxB,IACA,CAACwvH,cAAc,CAACT,WADhB,IAEAS,cAAc,CAACC,aAFf,IAGAD,cAAc,CAACC,aAAf,CAA6B3kI,IAA7B,CAAkC4kI,GAAG,IAAI,CAACA,GAAG,CAACX,WAA9C,IAA6D,CAJ/D,EAKE;AACA,YAAM7D,EAAE,GAAG,MAAMluE,MAAM,CAACgwE,mBAAP,CAA2B;AAC1CngI,YAAI,EAAE2iI,cAAc,CAAC3iI,IADqB;AAE1C8iI,iBAAS,EAAE;AAF+B,OAA3B,CAAjB;AAIAd,iBAAW,CAACxlI,GAAZ,CAAgBmmI,cAAc,CAACH,QAA/B,EAAyCnE,EAAzC;;AAEA,UAAIsE,cAAc,CAACC,aAAnB,EAAkC;AAChC,cAAMA,aAAa,GAAGzyD,SAAS,CAC7BwyD,cAAc,CAACC,aADc,EAE7B,eAF6B,CAA/B;AAIAA,qBAAa,CAAC9rI,OAAd,GALgC,CAOhC;AACA;;AACA,aAAK,IAAI2pI,QAAT,IAAqBmC,aAArB,EAAoC;AAClC,cAAI,CAACnC,QAAQ,CAACyB,WAAd,EAA2B;AACzB,kBAAM7D,EAAE,GAAG,MAAMluE,MAAM,CAACqwE,cAAP,CAAsB;AACrCxgI,kBAAI,EAAEygI,QAAQ,CAACzgI,IADsB;AAErC+iI,sBAAQ,EAAEf,WAAW,CAAC/oI,GAAZ,CAAgBwnI,QAAQ,CAACuC,gBAAzB;AAF2B,aAAtB,CAAjB;AAIAhB,uBAAW,CAACxlI,GAAZ,CAAgBikI,QAAQ,CAAC+B,QAAzB,EAAmCnE,EAAnC;AACD;AACF;AACF;AACF;AACF,GAjCD,CADI,CAAN;AAoCD;;AAED,eAAe4E,YAAf,CAA4B5kI,IAA5B,EAAkC2jI,WAAlC,EAA+C;AAC7C,OAAK,IAAIlB,KAAT,IAAkBziI,IAAI,CAAC6kI,MAAvB,EAA+B;AAC7B,QAAI,CAACpC,KAAK,CAACoB,WAAX,EAAwB;AACtB,UAAI7D,EAAE,GAAG,MAAMluE,MAAM,CAAC0wE,WAAP,CAAmB;AAChC7gI,YAAI,EAAE8gI,KAAK,CAAC9gI,IADoB;AAEhCygI,gBAAQ,EAAEuB,WAAW,CAAC/oI,GAAZ,CAAgB6nI,KAAK,CAACqC,kBAAtB,KAA6C,IAFvB;AAGhCC,qBAAa,EAAEpB,WAAW,CAAC/oI,GAAZ,CAAgB6nI,KAAK,CAACuC,eAAtB,KAA0C;AAHzB,OAAnB,CAAf,CADsB,CAOtB;;AAEArB,iBAAW,CAACxlI,GAAZ,CAAgBskI,KAAK,CAAC0B,QAAtB,EAAgCnE,EAAhC;AACD;AACF;AACF;;AAED,eAAeY,kBAAf,CAAkC5gI,IAAlC,EAAwC2jI,WAAxC,EAAqD;AACnD,QAAMsB,UAAU,GAAG,MAAMnzE,MAAM,CAACowE,aAAP,EAAzB;AACA,QAAMgD,gBAAgB,GAAGD,UAAU,CAAC5wH,IAAX,CAAgBmwH,GAAG,IAAIA,GAAG,CAAC7iI,IAAJ,KAAa,QAApC,EAA8Cq+H,EAAvE;AACA,QAAM4D,QAAQ,GAAG,MAAM9xE,MAAM,CAACovE,WAAP,EAAvB;AACA,QAAM2D,MAAM,GAAG,MAAM/yE,MAAM,CAACywE,SAAP,EAArB;;AAEA,WAAS4C,WAAT,CAAqBnF,EAArB,EAAyB;AACvB,QAAIA,EAAE,IAAI,IAAN,IAAcA,EAAE,KAAK,oBAAzB,EAA+C;AAC7C,aAAO,IAAP;AACD,KAFD,MAEO,IACLA,EAAE,KAAK,8BAAP,IACAA,EAAE,KAAK,6BAFF,EAGL;AACA,aAAOkF,gBAAP;AACD;;AACD,WAAOvB,WAAW,CAAC/oI,GAAZ,CAAgBolI,EAAhB,CAAP;AACD;;AAED,WAASoF,WAAT,CAAqBC,MAArB,EAA6B;AAC3B,QAAIC,IAAI,GAAG1B,QAAQ,CAACvvH,IAAT,CAAcixH,IAAI,IAAIA,IAAI,CAACtF,EAAL,KAAYqF,MAAlC,CAAX;;AACA,QAAI,CAACC,IAAL,EAAW;AACT,YAAM,IAAInoI,KAAJ,CAAU,uDAAV,CAAN;AACD;;AACD,WAAOmoI,IAAI,CAACtB,SAAZ;AACD,GAxBkD,CA0BnD;AACA;;;AACA,OAAK,IAAIuB,WAAT,IAAwBvlI,IAAI,CAAC2gI,YAA7B,EAA2C;AACzCgD,eAAW,CAACxlI,GAAZ,CAAgBonI,WAAW,CAACpB,QAA5B,EAAsCvH,IAAI,CAACD,EAAL,EAAtC;AACD;;AAED,MAAI6I,SAAS,GAAG,CAAhB;AACA,MAAIC,mBAAmB,GAAGxG,OAAO,CAACj/H,IAAI,CAAC2gI,YAAN,EAAoB,WAApB,CAAjC;AAEA,QAAMvhH,OAAO,CAAC0pD,GAAR,CACJvtE,MAAM,CAACiS,IAAP,CAAYi4H,mBAAZ,EAAiC/pI,GAAjC,CAAqC,MAAMglI,SAAN,IAAmB;AACtD,QAAIC,YAAY,GAAG8E,mBAAmB,CAAC/E,SAAD,CAAtC;AAEA,QAAIgF,QAAQ,GAAG/E,YAAY,CACxBjlI,GADY,CACR6pI,WAAW,IAAI;AAClB,UAAIA,WAAW,CAAC1B,WAAhB,EAA6B;AAC3B;AACD;;AAED,UAAI7D,EAAE,GAAG2D,WAAW,CAAC/oI,GAAZ,CAAgB2qI,WAAW,CAACpB,QAA5B,CAAT;AACA,UAAIwB,UAAU,GACZhC,WAAW,CAAC/oI,GAAZ,CAAgB2qI,WAAW,CAACK,qBAA5B,KAAsD,IADxD;AAGA,UAAInD,KAAK,GAAG,IAAZ;;AACA,UAAIkD,UAAJ,EAAgB;AACdlD,aAAK,GAAGoC,MAAM,CAACxwH,IAAP,CACNuJ,CAAC,IACCA,CAAC,CAACmnH,aAAF,KAAoBpB,WAAW,CAAC/oI,GAAZ,CAAgB2qI,WAAW,CAACP,eAA5B,CAFhB,EAGNhF,EAHF;AAID,OALD,MAKO;AACLyC,aAAK,GAAGkB,WAAW,CAAC/oI,GAAZ,CAAgB2qI,WAAW,CAAC1C,OAA5B,CAAR;AACD;;AAED,UAAIgD,cAAc,GAAG;AACnB7F,UADmB;AAEnBp8H,cAAM,EAAEw/H,eAAe,CAACmC,WAAW,CAAC3hI,MAAb,CAFJ;AAGnBw+H,gBAAQ,EAAEgD,WAAW,CAACzB,WAAW,CAAC/oI,GAAZ,CAAgB8lI,SAAhB,CAAD,CAAX,GACN,IADM,GAENyE,WAAW,CAACI,WAAW,CAACjF,UAAb,CALI;AAMnB3lI,YAAI,EAAE4qI,WAAW,CAAC5qI,IANC;AAOnBmrI,aAAK,EAAEP,WAAW,CAACQ,IAAZ,IAAoB,IAPR;AAQnBtD,aARmB;AASnBuD,mBAAW,EAAEL;AATM,OAArB;AAYAE,oBAAc,CAACI,eAAf,GACEV,WAAW,CAACW,eAAZ,IACAX,WAAW,CAACW,eAAZ,CAA4BxqI,GAA5B,CAAgC,CAACswB,CAAD,EAAIxU,CAAJ,KAAU;AACxC,eAAO;AACL5T,gBAAM,EAAEw/H,eAAe,CAACp3G,CAAC,CAACpoB,MAAH,CADlB;AAELw+H,kBAAQ,EAAE+C,WAAW,CAACn5G,CAAC,CAACs0G,UAAH;AAFhB,SAAP;AAID,OALD,CAFF;AASA,aAAOuF,cAAP;AACD,KA1CY,EA2CZzmI,MA3CY,CA2CLiH,CAAC,IAAIA,CA3CA,CAAf;AA6CA,UAAMyrD,MAAM,CAAC2uE,eAAP,CAAuBkD,WAAW,CAAC/oI,GAAZ,CAAgB8lI,SAAhB,CAAvB,EAAmDgF,QAAnD,CAAN;AACD,GAjDD,CADI,CAAN;AAoDD;;AAED,SAASS,aAAT,CAAuBnmI,IAAvB,EAA6BomI,eAA7B,EAA8C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,QAAMC,OAAO,GAAG,CAAC,GAAGD,eAAJ,CAAhB;AACApmI,MAAI,CAACqkI,gBAAL,CAAsBx5H,OAAtB,CAA8By5H,cAAc,IAAI;AAC9C,QAAIA,cAAc,CAACC,aAAnB,EAAkC;AAChCD,oBAAc,CAACC,aAAf,CAA6B15H,OAA7B,CAAqCu3H,QAAQ,IAAI;AAC/C,YAAI,CAACiE,OAAO,CAAChyH,IAAR,CAAarV,CAAC,IAAIA,CAAC,CAACshI,UAAF,KAAiB8B,QAAQ,CAAC+B,QAA5C,CAAL,EAA4D;AAC1DkC,iBAAO,CAAC7oI,IAAR,CAAa;AACX8oI,oBAAQ,EAAE,CADC;AAEXhG,sBAAU,EAAE8B,QAAQ,CAAC+B;AAFV,WAAb;AAID;AACF,OAPD;AAQD;AACF,GAXD;AAYA,SAAOkC,OAAP;AACD;;AAED,eAAeE,aAAf,CAA6BvmI,IAA7B,EAAmC2jI,WAAnC,EAAgD;AAC9C,MAAI0C,OAAO,GAAGv0D,SAAS,CAAC9xE,IAAI,CAACwmI,cAAN,EAAsB,OAAtB,CAAvB;AACA,MAAIC,aAAa,GAAGjD,aAAa,CAAC6C,OAAO,CAAC,CAAD,CAAP,CAAWnjI,KAAZ,CAAjC;AACA,MAAIqR,YAAY,GAAGkvH,eAAe,EAAlC;AAEA,QAAM3xE,MAAM,CAACmuE,kBAAP,CAA0B,YAAY;AAC1C,UAAMyG,cAAc,GAAG,EAAvB;;AAEA,SAAK,IAAIC,MAAT,IAAmBN,OAAnB,EAA4B;AAC1B,UAAIO,MAAM,GAAGT,aAAa,CACxBnmI,IADwB,EAExB2mI,MAAM,CAACE,yBAAP,CAAiCznI,MAAjC,CAAwCJ,CAAC,IAAI,CAACA,CAAC,CAAC6kI,WAAhD,CAFwB,CAA1B;AAKA,YAAMzkH,OAAO,CAAC0pD,GAAR,CACJ89D,MAAM,CAAClrI,GAAP,CAAW,MAAMorI,SAAN,IAAmB;AAC5B,YAAIljI,MAAM,GAAGw/H,eAAe,CAAC0D,SAAS,CAACR,QAAX,CAA5B;AACA,YAAIS,KAAK,GAAGpD,WAAW,CAAC/oI,GAAZ,CAAgBksI,SAAS,CAACxG,UAA1B,CAAZ;AACA,YAAIp9H,KAAK,GAAGsgI,aAAa,CAACmD,MAAM,CAACzjI,KAAR,CAAzB;;AACA,YAAI,CAAC6jI,KAAL,EAAY;AACV;AACD;;AAED,cAAMj1E,MAAM,CAACuuE,eAAP,CAAuBn9H,KAAvB,EAA8B6jI,KAA9B,EAAqCnjI,MAArC,CAAN;;AAEA,YAAIkjI,SAAS,CAACE,oBAAV,KAAmC,eAAvC,EAAwD;AACtD;AACA;AACAN,wBAAc,CAACK,KAAD,CAAd,GAAwB,KAAxB;AACD,SAJD,MAIO,IACLD,SAAS,CAACE,oBAAV,KAAmC,UAAnC,IACAN,cAAc,CAACK,KAAD,CAFT,EAGL;AACA;AACA;AACAL,wBAAc,CAACK,KAAD,CAAd,GAAwB,IAAxB;AAEA,gBAAMj1E,MAAM,CAACyuE,kBAAP,CAA0Br9H,KAA1B,EAAiC6jI,KAAjC,EAAwC,IAAxC,CAAN;AACD;AACF,OAxBD,CADI,CAAN;AA2BD;AACF,GArCK,CAAN;AAsCD;;AAED,SAASE,kBAAT,CAA4BrrG,GAA5B,EAAiC;AAC/B;AACA;AACA;AACA;AACA,SAAOA,GAAG,CAAC5iB,KAAJ,CAAU,GAAV,EAAepgB,MAAf,CAAsB,CAACoyB,KAAD,EAAQ7U,OAAR,KAAoB;AAC/C,2BAAoBA,OAAO,CAAC6C,KAAR,CAAc,GAAd,CAApB;AAAA;AAAA,UAAOvZ,CAAP;AAAA,UAAUmX,MAAV;;AACA,WAAOoU,KAAK,GAAGjS,QAAQ,CAACnC,MAAD,CAAvB;AACD,GAHM,EAGJ,CAHI,CAAP;AAID;;AAED,SAASswH,gBAAT,CAA0BC,MAA1B,EAAkChnH,OAAlC,EAA2C;AACzC,MAAIinH,OAAO,GAAGjnH,OAAO,CAClBzkB,GADW,CACPoX,KAAK,IAAI;AACZ,UAAMu0H,QAAQ,GAAGF,MAAM,CAAC9qH,QAAP,CAAgBvJ,KAAhB,EAAuByC,QAAvB,CAAgC,MAAhC,CAAjB;AAEA,QAAIvV,IAAJ;;AACA,QAAI;AACFA,UAAI,GAAGuG,IAAI,CAAC0G,KAAL,CAAWo6H,QAAX,CAAP;AACD,KAFD,CAEE,OAAOplH,CAAP,EAAU;AACV,aAAO,IAAP;AACD;;AAED,QAAIjiB,IAAI,CAACsnI,gBAAT,EAA2B;AACzB,aAAO;AACLC,kBAAU,EAAEvnI,IAAI,CAACunI,UADZ;AAELC,iBAAS,EAAExnI,IAAI,CAACynI,aAFX;AAGLC,kBAAU,EAAET,kBAAkB,CAACjnI,IAAI,CAAC2nI,SAAN;AAHzB,OAAP;AAKD;;AAED,WAAO,IAAP;AACD,GApBW,EAqBXvoI,MArBW,CAqBJiH,CAAC,IAAIA,CArBD,CAAd;AAuBA+gI,SAAO,GAAGt1D,SAAS,CAACs1D,OAAD,EAAU,YAAV,CAAnB;AACA,SAAOA,OAAO,CAACA,OAAO,CAACzoI,MAAR,GAAiB,CAAlB,CAAP,CAA4B4oI,UAAnC;AACD;;AAED,eAAeK,QAAf,CAAwB5nI,IAAxB,EAA8B;AAC5B,QAAM2jI,WAAW,GAAG,IAAIn3H,GAAJ,EAApB;AAEA6mB,SAAO,CAACsrE,GAAR,CAAY,uBAAZ;AACA,QAAM+kC,cAAc,CAAC1jI,IAAD,EAAO2jI,WAAP,CAApB;AAEAtwG,SAAO,CAACsrE,GAAR,CAAY,yBAAZ;AACA,QAAMylC,gBAAgB,CAACpkI,IAAD,EAAO2jI,WAAP,CAAtB;AAEAtwG,SAAO,CAACsrE,GAAR,CAAY,qBAAZ;AACA,QAAMimC,YAAY,CAAC5kI,IAAD,EAAO2jI,WAAP,CAAlB;AAEAtwG,SAAO,CAACsrE,GAAR,CAAY,2BAAZ;AACA,QAAMiiC,kBAAkB,CAAC5gI,IAAD,EAAO2jI,WAAP,CAAxB;AAEAtwG,SAAO,CAACsrE,GAAR,CAAY,sBAAZ;AACA,QAAM4nC,aAAa,CAACvmI,IAAD,EAAO2jI,WAAP,CAAnB;AAEAtwG,SAAO,CAACsrE,GAAR,CAAY,eAAZ;AACD;;AAED,SAASkpC,aAAT,CAAuBtpH,QAAvB,EAAiC;AAC/B,MAAIupH,YAAY,GAAG5E,gBAAgB,CAAC3kH,QAAD,CAAnC;;AAEA,MAAI,CAAC,QAAQJ,IAAR,CAAa2pH,YAAb,CAAL,EAAiC;AAC/B,WAAO,IAAP;AACD;;AAEDA,cAAY,GAAGA,YAAY,CAAC7vH,OAAb,CAAqB,QAArB,EAA+B,EAA/B,EAAmCA,OAAnC,CAA2C,SAA3C,EAAsD,EAAtD,CAAf,CAP+B,CAS/B;AACA;AACA;;AACA,MAAI43B,CAAC,GAAGi4F,YAAY,CAAChwH,KAAb,CAAmB,gBAAnB,CAAR;;AACA,MAAI,CAAC+3B,CAAL,EAAQ;AACN,WAAO,IAAP;AACD;;AACD,SAAOA,CAAC,CAAC,CAAD,CAAR;AACD;;AAED,SAASk4F,OAAT,CAAiB5nH,OAAjB,EAA0BwS,IAA1B,EAAgC;AAC9B,MAAI8C,KAAK,GAAGtV,OAAO,CAAC/gB,MAAR,CAAe6iB,CAAC,IAAIA,CAAC,CAACnG,SAAF,KAAgB6W,IAApC,CAAZ;;AACA,MAAI8C,KAAK,CAAC92B,MAAN,KAAiB,CAArB,EAAwB;AACtB,UAAM,IAAIxB,KAAJ,CAAU,0BAA0Bw1B,IAApC,CAAN;AACD;;AACD,MAAI8C,KAAK,CAAC92B,MAAN,IAAgB,CAApB,EAAuB;AACrB,UAAM,IAAIxB,KAAJ,CAAU,uCAAuCw1B,IAAjD,CAAN;AACD;;AACD,SAAO8C,KAAK,CAAC,CAAD,CAAZ;AACD;;AAED,SAAS/b,IAAT,CAAc,GAAGsuH,KAAjB,EAAwB;AACtB,SAAOA,KAAK,CAACrnI,KAAN,CAAY,CAAZ,EAAe/H,MAAf,CAAsB,CAACmsD,IAAD,EAAOpyB,IAAP,KAAgB;AAC3C,WAAOoyB,IAAI,GAAG,GAAP,GAAapyB,IAAI,CAAC1a,OAAL,CAAa,KAAb,EAAoB,EAApB,CAApB;AACD,GAFM,EAEJ+vH,KAAK,CAAC,CAAD,CAAL,CAAS/vH,OAAT,CAAiB,KAAjB,EAAwB,EAAxB,CAFI,CAAP;AAGD;;AAED,eAAegwH,YAAf,CAA4B1pH,QAA5B,EAAsC8X,MAAtC,EAA8C;AAC5C,MAAIwpG,UAAU,GAAGgI,aAAa,CAACtpH,QAAD,CAA9B;;AAEA,MAAI,CAACshH,UAAL,EAAiB;AACf,UAAM,IAAI1iI,KAAJ,CAAU,uBAAuBohB,QAAjC,CAAN;AACD;;AAED,MAAI4oH,MAAM,GAAG,IAAIhE,MAAJ,CAAW9sG,MAAX,CAAb;AACA,MAAIlW,OAAO,GAAGgnH,MAAM,CAACjnH,UAAP,EAAd;AAEA,MAAIjK,IAAI,GAAG,EAAX;AACA,MAAIiyH,QAAQ,GAAG/nH,OAAO,CAAC,CAAD,CAAP,CAAWrE,SAAX,CAAqBhE,KAArB,CAA2B,gBAA3B,CAAf;;AACA,MAAIowH,QAAJ,EAAc;AACZjyH,QAAI,GAAGiyH,QAAQ,CAAC,CAAD,CAAR,GAAc,GAArB;AACD;;AAED,MAAIC,OAAO,GAAGhB,MAAM,CAAC9qH,QAAP,CAAgB0rH,OAAO,CAAC5nH,OAAD,EAAUlK,IAAI,GAAG,cAAjB,CAAvB,CAAd;AACA,MAAI+oE,IAAI,GAAGz4E,IAAI,CAAC0G,KAAL,CAAWk7H,OAAO,CAAC5yH,QAAR,CAAiB,MAAjB,CAAX,CAAX;AACA,MAAI6yH,UAAU,GAAG1uH,IAAI,CAACzD,IAAD,EAAO+oE,IAAI,CAACqpD,sBAAZ,CAArB;AAEA,MAAIC,WAAW,GAAGnoH,OAAO,CAAC/gB,MAAR,CAAe6iB,CAAC,IAChCA,CAAC,CAACnG,SAAF,CAAYkrE,UAAZ,CAAuBttE,IAAI,CAAC0uH,UAAD,EAAa,SAAb,CAA3B,CADgB,CAAlB;AAGA,MAAIb,UAAU,GAAGL,gBAAgB,CAACC,MAAD,EAASmB,WAAT,CAAjC;AAEA,QAAMC,SAAS,GAAG7uH,IAAI,CAAC0uH,UAAD,EAAab,UAAb,EAAyB,cAAzB,CAAtB;AACA,MAAIF,QAAJ;;AACA,MAAI;AACFA,YAAQ,GAAGF,MAAM,CAAC9qH,QAAP,CAAgB0rH,OAAO,CAAC5nH,OAAD,EAAUooH,SAAV,CAAvB,EAA6ChzH,QAA7C,CAAsD,MAAtD,CAAX;AACD,GAFD,CAEE,OAAO0M,CAAP,EAAU;AACVoR,WAAO,CAACsrE,GAAR,CAAY18E,CAAZ;AACA,UAAM,IAAI9kB,KAAJ,CAAU,iCAAV,CAAN;AACD;;AAED,MAAI6C,IAAJ;;AACA,MAAI;AACFA,QAAI,GAAGuG,IAAI,CAAC0G,KAAL,CAAWo6H,QAAX,CAAP;AACD,GAFD,CAEE,OAAOplH,CAAP,EAAU;AACV,UAAM,IAAI9kB,KAAJ,CAAU,gCAAV,CAAN;AACD;;AAED,SAAO20D,MAAM,CAAC8tE,SAAP,CAAiBC,UAAjB,EAA6B,MAAM+H,QAAQ,CAAC5nI,IAAD,CAA3C,CAAP;AACD;;AAED2Z,MAAM,CAACC,OAAP,GAAiB;AAAEquH;AAAF,CAAjB,C;;;;;;;;;;;AC/bA,SAAS7E,eAAT,CAAyBrrG,CAAzB,EAA4B;AAC1B,SAAO3wB,IAAI,CAACwQ,KAAL,CAAWmgB,CAAC,GAAG,GAAf,IAAsB,CAA7B;AACD;;AAED,SAASywG,eAAT,CAAyBzwG,CAAzB,EAA4B;AAC1B,SAAOxf,UAAU,CAAC,CAACwf,CAAC,GAAG,GAAL,EAAUvf,OAAV,CAAkB,CAAlB,CAAD,CAAjB;AACD;;AAEDmB,MAAM,CAACC,OAAP,GAAiB;AAAEwpH,iBAAF;AAAmBoF;AAAnB,CAAjB,C;;;;;;;;;;;ACRA,MAAM35F,CAAC,GAAG90B,mBAAO,CAAC,sDAAD,CAAjB;;AACA,MAAM6iH,IAAI,GAAG7iH,mBAAO,CAAC,0CAAD,CAApB;;AACA,MAAM+3C,MAAM,GAAG/3C,mBAAO,CAAC,0DAAD,CAAtB;;AACA,iBAA4BA,mBAAO,CAAC,4FAAD,CAAnC;AAAA,MAAQqpH,eAAR,YAAQA,eAAR;;AAEA,SAASqF,cAAT,CAAwB7kI,MAAxB,EAAgC;AAC9B;AACA;AACA,SAAOwD,IAAI,CAACwQ,KAAL,CAAWhU,MAAM,GAAG,EAApB,CAAP;AACD;;AAED,SAAS4/H,aAAT,CAAuB7oI,IAAvB,EAA6B;AAC3B,MAAIowB,KAAK,GAAGpwB,IAAI,CAACqe,KAAL,CAAW,GAAX,CAAZ;AACA,SAAO+R,KAAK,CAAC,CAAD,CAAL,GAAW,GAAX,GAAiBA,KAAK,CAAC,CAAD,CAA7B;AACD;;AAED,SAASs4G,cAAT,CAAwBvuH,IAAxB,EAA8B;AAC5B,UAAQA,IAAR;AACE,SAAK,MAAL;AACA,SAAK,UAAL;AACE,aAAO,UAAP;;AACF,SAAK,YAAL;AACA,SAAK,cAAL;AACE,aAAO,QAAP;;AACF,SAAK,SAAL;AACE,aAAO,SAAP;;AACF,SAAK,mBAAL;AACE,aAAO,YAAP;;AACF,SAAK,UAAL;AACE,aAAO,UAAP;;AACF;AACE,aAAO,OAAP;AAdJ;AAgBD;;AAED,SAASg9D,SAAT,CAAmBje,GAAnB,EAAwBpmD,GAAxB,EAA6B;AAC3B,SAAO,CAAC,GAAGomD,GAAJ,EAAS10D,IAAT,CAAc,CAACyyD,KAAD,EAAQgB,KAAR,KAAkB;AACrC,QAAIhB,KAAK,CAACnkD,GAAD,CAAL,GAAamlD,KAAK,CAACnlD,GAAD,CAAtB,EAA6B;AAC3B,aAAO,CAAC,CAAR;AACD,KAFD,MAEO,IAAImkD,KAAK,CAACnkD,GAAD,CAAL,GAAamlD,KAAK,CAACnlD,GAAD,CAAtB,EAA6B;AAClC,aAAO,CAAP;AACD;;AACD,WAAO,CAAP;AACD,GAPM,CAAP;AAQD;;AAED,SAASwxH,OAAT,CAAiBprE,GAAjB,EAAsByvE,OAAtB,EAA+B;AAC7B,SAAOzvE,GAAG,CAACj7D,MAAJ,CAAW,UAAS8U,GAAT,EAAcmO,IAAd,EAAoB;AACpC,QAAIpO,GAAG,GAAGoO,IAAI,CAACynH,OAAD,CAAd;;AACA,QAAI,CAAC51H,GAAG,CAAC2J,cAAJ,CAAmB5J,GAAnB,CAAL,EAA8B;AAC5BC,SAAG,CAACD,GAAD,CAAH,GAAW,EAAX;AACD;;AACDC,OAAG,CAACD,GAAD,CAAH,CAASjQ,IAAT,CAAcqe,IAAd;AACA,WAAOnO,GAAP;AACD,GAPM,EAOJ,EAPI,CAAP;AAQD;;AAED,SAASg2H,cAAT,CAAwB1jI,IAAxB,EAA8B2jI,WAA9B,EAA2C;AACzC,SAAOvkH,OAAO,CAAC0pD,GAAR,CACL9oE,IAAI,CAAC4jI,QAAL,CAAcloI,GAAd,CAAkB,MAAM0lI,OAAN,IAAiB;AACjC,QAAI,CAACA,OAAO,CAACsH,OAAb,EAAsB;AACpB,UAAI1I,EAAE,GAAG,MAAMluE,MAAM,CAACqvE,aAAP,CAAqB;AAClCrsH,YAAI,EAAEuuH,cAAc,CAACjC,OAAO,CAACtsH,IAAT,CADc;AAElCnT,YAAI,EAAEy/H,OAAO,CAACz/H,IAFoB;AAGlCqiI,iBAAS,EAAE5C,OAAO,CAACuH,SAAR,GAAoB,KAApB,GAA4B,IAHL;AAIlCzE,cAAM,EAAE9C,OAAO,CAAC8C;AAJkB,OAArB,CAAf;AAMAP,iBAAW,CAACxlI,GAAZ,CAAgBijI,OAAO,CAACpB,EAAxB,EAA4BA,EAA5B;AACD;AACF,GAVD,CADK,CAAP;AAaD;;AAED,eAAeoE,gBAAf,CAAgCpkI,IAAhC,EAAsC2jI,WAAtC,EAAmD;AACjD;AACA;AAEA,QAAMsB,UAAU,GAAG,MAAMnzE,MAAM,CAACowE,aAAP,EAAzB;AACA,QAAM0G,WAAW,GAAG3D,UAAU,CAAC5wH,IAAX,CAAgBmwH,GAAG,IAAIA,GAAG,CAAC7iI,IAAJ,KAAa,QAApC,EAA8Cq+H,EAAlE;AACA,QAAM6I,oBAAoB,GAAG,CAAC,gBAAD,EAAmB,yBAAnB,CAA7B;;AAEA,WAASC,eAAT,CAAyBtE,GAAzB,EAA8B;AAC5B,QACEA,GAAG,CAACuE,iBAAJ,KACA/oI,IAAI,CAACgpI,eAAL,CAAqB30H,IAArB,CACE0tH,KAAK,IAAIA,KAAK,CAACpgI,IAAN,KAAe,0BAD1B,EAEEq+H,EAJJ,EAKE;AACA,UAAI6I,oBAAoB,CAACz4H,QAArB,CAA8Bo0H,GAAG,CAAC7iI,IAAlC,CAAJ,EAA6C;AAC3C,eAAO,QAAP;AACD,OAFD,MAEO;AACL,eAAO,UAAP;AACD;AACF,KAXD,MAWO,IACL6iI,GAAG,CAACuE,iBAAJ,KACA/oI,IAAI,CAACgpI,eAAL,CAAqB30H,IAArB,CAA0B0tH,KAAK,IAAIA,KAAK,CAACpgI,IAAN,KAAe,sBAAlD,EACGq+H,EAHE,EAIL;AACA,aAAO,YAAP;AACD;AACF,GA3BgD,CA4BjD;AACA;;;AAEA,OAAK,IAAI+B,KAAT,IAAkB/hI,IAAI,CAACgpI,eAAvB,EAAwC;AACtC,QAAI,CAACjH,KAAK,CAAC2G,OAAX,EAAoB;AAClB;AACA,UACE3G,KAAK,CAACpgI,IAAN,KAAe,0BAAf,IACAogI,KAAK,CAACpgI,IAAN,KAAe,sBAFjB,EAGE;AACA,YAAIsnI,OAAO,GAAG,MAAMn3E,MAAM,CAACgwE,mBAAP,CAA2B;AAC7CngI,cAAI,EAAEogI,KAAK,CAACpgI,IADiC;AAE7C8iI,mBAAS,EAAE;AAFkC,SAA3B,CAApB;AAIAd,mBAAW,CAACxlI,GAAZ,CAAgB4jI,KAAK,CAAC/B,EAAtB,EAA0BiJ,OAA1B;AACD;;AAED,UAAIC,IAAI,GAAGlpI,IAAI,CAACilI,UAAL,CAAgB7lI,MAAhB,CACTolI,GAAG,IAAIA,GAAG,CAACuE,iBAAJ,KAA0BhH,KAAK,CAAC/B,EAD9B,CAAX;;AAIA,WAAK,IAAIwE,GAAT,IAAgB0E,IAAI,CAACzwI,OAAL,EAAhB,EAAgC;AAC9B,YAAI,CAAC+rI,GAAG,CAACkE,OAAT,EAAkB;AAChB,cAAIS,WAAW,GAAG,EAAlB;AACAA,qBAAW,CAACxnI,IAAZ,GAAmB6iI,GAAG,CAAC7iI,IAAvB,CAFgB,CAIhB;AACA;;AACA,kBAAQmnI,eAAe,CAACtE,GAAD,CAAvB;AACE,iBAAK,QAAL;AAAe;AACb;AACA,oBAAIxE,EAAE,GAAG4I,WAAT;AACAjF,2BAAW,CAACxlI,GAAZ,CAAgBqmI,GAAG,CAACxE,EAApB,EAAwBA,EAAxB;AACA;AACD;;AACD,iBAAK,YAAL,CAPF,CAOqB;;AACnB,iBAAK,UAAL;AAAiB;AACf;;AACF;AAAS;AACPmJ,2BAAW,CAACzE,QAAZ,GAAuBuE,OAAvB;AACA,oBAAIjJ,EAAE,GAAG,MAAMluE,MAAM,CAACqwE,cAAP,CAAsBgH,WAAtB,CAAf;AACAxF,2BAAW,CAACxlI,GAAZ,CAAgBqmI,GAAG,CAACxE,EAApB,EAAwBA,EAAxB;AACA;AACD;AAfH;AAiBD;AACF;AACF;AACF;AACF;;AAED,SAAS4E,YAAT,CAAsB5kI,IAAtB,EAA4B2jI,WAA5B,EAAyC;AACvC,SAAOvkH,OAAO,CAAC0pD,GAAR,CACL9oE,IAAI,CAAC6kI,MAAL,CAAYnpI,GAAZ,CAAgB,MAAM+mI,KAAN,IAAe;AAC7B,QAAI,CAACA,KAAK,CAACiG,OAAX,EAAoB;AAClB,UAAI1I,EAAE,GAAG,MAAMluE,MAAM,CAAC0wE,WAAP,CAAmB;AAChC7gI,YAAI,EAAE8gI,KAAK,CAAC9gI;AADoB,OAAnB,CAAf;AAGAgiI,iBAAW,CAACxlI,GAAZ,CAAgBskI,KAAK,CAACzC,EAAtB,EAA0BA,EAA1B;AACD;AACF,GAPD,CADK,CAAP;AAUD;;AAED,eAAeY,kBAAf,CAAkC5gI,IAAlC,EAAwC2jI,WAAxC,EAAqD;AACnD,QAAMkB,MAAM,GAAG,MAAM/yE,MAAM,CAACywE,SAAP,EAArB;AACA,QAAM0C,UAAU,GAAG,MAAMnzE,MAAM,CAACowE,aAAP,EAAzB;AACA,QAAM0G,WAAW,GAAG3D,UAAU,CAAC5wH,IAAX,CAAgBmwH,GAAG,IAAIA,GAAG,CAAC7iI,IAAJ,KAAa,QAApC,EAA8Cq+H,EAAlE;AACA,QAAMoJ,oBAAoB,GAAGnE,UAAU,CAAC5wH,IAAX,CAC3BmwH,GAAG,IAAIA,GAAG,CAAC7iI,IAAJ,KAAa,mBADO,EAE3Bq+H,EAFF,CAJmD,CAM7C;;AACN,QAAMqJ,iBAAiB,GAAGrpI,IAAI,CAAC6kI,MAAL,CAAYxwH,IAAZ,CACxBouH,KAAK,IAAIA,KAAK,CAAC9gI,IAAN,KAAe,kBADA,EAExBq+H,EAFF;AAIA,MAAIyF,mBAAmB,GAAGxG,OAAO,CAACj/H,IAAI,CAAC2gI,YAAN,EAAoB,YAApB,CAAjC;AACA,MAAI2I,sBAAsB,GAAGrK,OAAO,CAACj/H,IAAI,CAACimI,eAAN,EAAuB,gBAAvB,CAApC,CAZmD,CAcnD;AACA;;AACA,OAAK,IAAIV,WAAT,IAAwBvlI,IAAI,CAAC2gI,YAA7B,EAA2C;AACzCgD,eAAW,CAACxlI,GAAZ,CAAgBonI,WAAW,CAACvF,EAA5B,EAAgCpD,IAAI,CAACD,EAAL,EAAhC;AACD;;AAED,QAAMv9G,OAAO,CAAC0pD,GAAR,CACJvtE,MAAM,CAACiS,IAAP,CAAYi4H,mBAAZ,EAAiC/pI,GAAjC,CAAqC,MAAMglI,SAAN,IAAmB;AACtD,QAAIC,YAAY,GAAG8E,mBAAmB,CAAC/E,SAAD,CAAtC;AAEA,QAAIgF,QAAQ,GAAG/E,YAAY,CACxBjlI,GADY,CACR6pI,WAAW,IAAI;AAClB,UAAIA,WAAW,CAACmD,OAAhB,EAAyB;AACvB,eAAO,IAAP;AACD,OAHiB,CAKlB;;;AACA,UAAIzC,eAAe,GAAGqD,sBAAsB,CAAC/D,WAAW,CAACvF,EAAb,CAA5C;;AACA,UAAIiG,eAAJ,EAAqB;AACnBA,uBAAe,GAAGA,eAAe,CAACvqI,GAAhB,CAAoB6tI,QAAQ,IAAI;AAChD,iBAAO;AACL3lI,kBAAM,EAAE6kI,cAAc,CAACc,QAAQ,CAAC3lI,MAAV,CADjB;AAELw+H,oBAAQ,EAAEuB,WAAW,CAAC/oI,GAAZ,CAAgB2uI,QAAQ,CAACC,WAAzB,KAAyC,IAF9C;AAGL1D,iBAAK,EAAEyD,QAAQ,CAACxD;AAHX,WAAP;AAKD,SANiB,CAAlB;AAOD,OAfiB,CAiBlB;;;AACA,UAAIF,cAAc,GAAG;AACnB7F,UAAE,EAAE2D,WAAW,CAAC/oI,GAAZ,CAAgB2qI,WAAW,CAACvF,EAA5B,CADe;AAEnBoB,eAAO,EAAEuC,WAAW,CAAC/oI,GAAZ,CAAgB2qI,WAAW,CAACkE,UAA5B,CAFU;AAGnB9uI,YAAI,EAAE4qI,WAAW,CAAC5qI,IAHC;AAInBiJ,cAAM,EAAE6kI,cAAc,CAAClD,WAAW,CAAC3hI,MAAb,CAJH;AAKnBw+H,gBAAQ,EAAEuB,WAAW,CAAC/oI,GAAZ,CAAgB2qI,WAAW,CAACiE,WAA5B,KAA4C,IALnC;AAMnBE,eAAO,EAAE,CAAC,SAAD,EAAY,YAAZ,EAA0Bt5H,QAA1B,CAAmCm1H,WAAW,CAACmE,OAA/C,CANU;AAOnB5D,aAAK,EAAEP,WAAW,CAACQ,IAAZ,IAAoB,IAPR;AAQnB4D,mBAAW,EAAEpE,WAAW,CAACqE,SAAZ,IAAyB,IARnB;AASnB5D,mBAAW,EACTrC,WAAW,CAAC/oI,GAAZ,CAAgB2qI,WAAW,CAACsE,uBAA5B,KAAwD,IAVvC;AAWnB5D,uBAAe,EAAEA;AAXE,OAArB,CAlBkB,CAgClB;;AACA,UAAIV,WAAW,CAACuE,mBAAhB,EAAqC;AACnCjE,sBAAc,CAACpD,KAAf,GAAuBoC,MAAM,CAACxwH,IAAP,CACrBuJ,CAAC,IACCA,CAAC,CAACmnH,aAAF,KACApB,WAAW,CAAC/oI,GAAZ,CAAgB2qI,WAAW,CAACuE,mBAA5B,CAHmB,EAIrB9J,EAJF;AAKD,OAND,MAMO;AACL6F,sBAAc,CAACpD,KAAf,GAAuBkB,WAAW,CAAC/oI,GAAZ,CAAgB2qI,WAAW,CAACxC,QAA5B,CAAvB;AACD,OAzCiB,CA2ClB;;;AACA,UACEwC,WAAW,CAACxC,QAAZ,KAAyBsG,iBAAzB,IACA1F,WAAW,CAAC/oI,GAAZ,CAAgB2qI,WAAW,CAACiE,WAA5B,MAA6CZ,WAF/C,EAGE;AACA/C,sBAAc,CAACzD,QAAf,GAA0BgH,oBAA1B;AACAvD,sBAAc,CAACpD,KAAf,GAAuB,IAAvB;AACD;;AACD,aAAOoD,cAAP;AACD,KArDY,EAsDZzmI,MAtDY,CAsDLiH,CAAC,IAAIA,CAtDA,CAAf;AAwDA,UAAMyrD,MAAM,CAAC2uE,eAAP,CAAuBkD,WAAW,CAAC/oI,GAAZ,CAAgB8lI,SAAhB,CAAvB,EAAmDgF,QAAnD,CAAN;AACD,GA5DD,CADI,CAAN;AA+DD;;AAED,eAAea,aAAf,CAA6BvmI,IAA7B,EAAmC2jI,WAAnC,EAAgD;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAI0C,OAAO,GAAGv0D,SAAS,CAAC9xE,IAAI,CAAC8P,MAAN,EAAc,OAAd,CAAvB;AAEA,QAAMi6H,iBAAiB,GAAG/pI,IAAI,CAACgpI,eAAL,CAAqB30H,IAArB,CACxB0tH,KAAK,IAAIA,KAAK,CAACpgI,IAAN,KAAe,0BADA,EAExBq+H,EAFF;AAGA,QAAMgK,mBAAmB,GAAGhqI,IAAI,CAACgpI,eAAL,CAAqB30H,IAArB,CAC1B0tH,KAAK,IAAIA,KAAK,CAACpgI,IAAN,KAAe,sBADE,EAE1Bq+H,EAFF;AAIA,QAAMluE,MAAM,CAACmuE,kBAAP,CAA0B,YAAY;AAC1C,SAAK,IAAI0G,MAAT,IAAmBN,OAAnB,EAA4B;AAC1B,UAAInjI,KAAK,GAAGsgI,aAAa,CAACmD,MAAM,CAACzjI,KAAR,CAAzB;AAEA,YAAMkc,OAAO,CAAC0pD,GAAR,CACJ69D,MAAM,CAAC1B,UAAP,CAAkBvpI,GAAlB,CAAsB,MAAMorI,SAAN,IAAmB;AACvC,YAAIC,KAAK,GAAGpD,WAAW,CAAC/oI,GAAZ,CAAgBksI,SAAS,CAAC9G,EAA1B,CAAZ;AACA,YAAIp8H,MAAM,GAAGkjI,SAAS,CAACR,QAAV,GAAqB,EAAlC;;AAEA,YACE,CAACS,KAAD,IACAD,SAAS,CAACiC,iBAAV,KAAgCgB,iBADhC,IAEAjD,SAAS,CAACiC,iBAAV,KAAgCiB,mBAHlC,EAIE;AACA;AACD;;AAED,cAAMl4E,MAAM,CAACuuE,eAAP,CAAuBn9H,KAAvB,EAA8B6jI,KAA9B,EAAqCnjI,MAArC,CAAN;AACD,OAbD,CADI,CAAN;AAgBD;AACF,GArBK,CAAN;AAsBD,C,CAED;;;AAEA,eAAegkI,QAAf,CAAwB5nI,IAAxB,EAA8B;AAC5B,QAAM2jI,WAAW,GAAG,IAAIn3H,GAAJ,EAApB;AAEA6mB,SAAO,CAACsrE,GAAR,CAAY,uBAAZ;AACA,QAAM+kC,cAAc,CAAC1jI,IAAD,EAAO2jI,WAAP,CAApB;AAEAtwG,SAAO,CAACsrE,GAAR,CAAY,yBAAZ;AACA,QAAMylC,gBAAgB,CAACpkI,IAAD,EAAO2jI,WAAP,CAAtB;AAEAtwG,SAAO,CAACsrE,GAAR,CAAY,qBAAZ;AACA,QAAMimC,YAAY,CAAC5kI,IAAD,EAAO2jI,WAAP,CAAlB;AAEAtwG,SAAO,CAACsrE,GAAR,CAAY,2BAAZ;AACA,QAAMiiC,kBAAkB,CAAC5gI,IAAD,EAAO2jI,WAAP,CAAxB;AAEAtwG,SAAO,CAACsrE,GAAR,CAAY,sBAAZ;AACA,QAAM4nC,aAAa,CAACvmI,IAAD,EAAO2jI,WAAP,CAAnB;AAEAtwG,SAAO,CAACsrE,GAAR,CAAY,eAAZ;AACD;;AAED,eAAesrC,WAAf,CAA2BjqI,IAA3B,EAAiC;AAC/B,MAAIA,IAAI,CAACA,IAAT,EAAe;AACbA,QAAI,GAAGA,IAAI,CAACA,IAAZ;AACD;;AAED,SAAO8xD,MAAM,CAAC8tE,SAAP,CAAiB5/H,IAAI,CAAC2mI,MAAL,CAAYhlI,IAA7B,EAAmC,MAAMimI,QAAQ,CAAC5nI,IAAI,CAAC2mI,MAAN,CAAjD,CAAP;AACD;;AAEDhtH,MAAM,CAACC,OAAP,GAAiB;AAAEqwH;AAAF,CAAjB,C;;;;;;;;;;;ACnUA,SAAS7G,eAAT,CAAyBrrG,CAAzB,EAA4B;AAC1B,SAAO3wB,IAAI,CAACwQ,KAAL,CAAWmgB,CAAC,GAAG,GAAf,IAAsB,CAA7B;AACD;;AAED,SAASywG,eAAT,CAAyBzwG,CAAzB,EAA4B;AAC1B,SAAOxf,UAAU,CAAC,CAACwf,CAAC,GAAG,GAAL,EAAUvf,OAAV,CAAkB,CAAlB,CAAD,CAAjB;AACD;;AAEDmB,MAAM,CAACC,OAAP,GAAiB;AAAEwpH,iBAAF;AAAmBoF;AAAnB,CAAjB,C;;;;;;;;;;;;;;;;;;;;;;;;;;ACRe,eAAe0B,YAAf,CAA4BC,EAA5B,EAAgCvN,IAAhC,EAAsC;AACnD,WAASwN,QAAT,CAAkB79G,IAAlB,EAAwB;AACtB,WAAOA,IAAI,CAACmyG,IAAL,IAAa,IAAb,GAAoBnyG,IAAI,CAACmyG,IAAzB,GAAgCnyG,IAAI,CAAC89G,WAA5C;AACD;;AAEDF,IAAE,CAACG,SAAH,CAAc;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAzBE,EALmD,CAgCnD;;AACA,MAAI3D,MAAM,GAAGwD,EAAE,CAACjK,QAAH,CACV,oEADU,EAEX,EAFW,EAGX,IAHW,CAAb;AAKAiK,IAAE,CAAC5E,WAAH,CAAe,MAAM;AACnBoB,UAAM,CAACjrI,GAAP,CAAW6uI,WAAW,IAAI;AACxB,UAAIzyH,KAAK,GAAGyyH,WAAW,CAAC5oI,IAAZ,CAAiBmW,KAAjB,CACV,2CADU,CAAZ;;AAGA,UAAIA,KAAK,IAAI,IAAb,EAAmB;AACjBub,eAAO,CAACsrE,GAAR,CAAY,oCAAZ,EAAkD4rC,WAAW,CAAC5oI,IAA9D;AACA;AACD;;AAED,UAAImT,IAAI,GAAGgD,KAAK,CAAC,CAAD,CAAhB;AACA,UAAI5U,KAAK,GAAG4U,KAAK,CAAC,CAAD,CAAL,CAASnX,KAAT,CAAe,CAAf,EAAkB,CAAlB,IAAuB,GAAvB,GAA6BmX,KAAK,CAAC,CAAD,CAAL,CAASnX,KAAT,CAAe,CAAf,CAAzC;AACA,UAAI6pI,OAAO,GAAGzxH,QAAQ,CAACjB,KAAK,CAAC,CAAD,CAAN,CAAtB;AACA,UAAI0sH,GAAG,GAAG1sH,KAAK,CAAC,CAAD,CAAf;AAEA,UAAIlU,MAAM,GAAGmV,QAAQ,CAACqxH,QAAQ,CAACG,WAAD,CAAT,CAArB;;AACA,UAAInkI,KAAK,CAACxC,MAAD,CAAT,EAAmB;AACjBA,cAAM,GAAG,CAAT;AACD;;AAED,UAAI6mI,SAAS,GAAGF,WAAW,CAAC5oI,IAAZ,CAAiBqX,KAAjB,CAAuB,GAAvB,EAA4B,CAA5B,CAAhB;AACA,UAAI0xH,SAAS,GAAGP,EAAE,CAACjK,QAAH,CACd,gDADc,EAEd,CAAE,GAAEuK,SAAU,cAAajG,GAAI,EAA/B,CAFc,EAGd,IAHc,CAAhB;AAMA,UAAI9E,KAAK,GAAG5qH,IAAI,KAAK,eAAT,GAA2B,iBAA3B,GAA+C,cAA3D;AACAq1H,QAAE,CAACjK,QAAH,CACG,eAAcR,KAAM,kEADvB,EAEE,CACG,GAAEx8H,KAAM,IAAGshI,GAAI,EADlB,EAEEgG,OAFF,EAGEhG,GAHF,EAIE5gI,MAJF,EAKE8mI,SAAS,CAAC/rI,MAAV,GAAmB,CAAnB,IAAwByrI,QAAQ,CAACM,SAAS,CAAC,CAAD,CAAV,CAAR,KAA2B,MAAnD,GAA4D,CAA5D,GAAgE,CALlE,CAFF;AAUD,KArCD;AAsCD,GAvCD,EAtCmD,CA+EnD;;AACA,MAAIC,OAAO,GAAGR,EAAE,CAACjK,QAAH,CACX,oEADW,EAEZ,EAFY,EAGZ,IAHY,CAAd;AAKAiK,IAAE,CAAC5E,WAAH,CAAe,MAAM;AACnBoF,WAAO,CAACjvI,GAAR,CAAY26B,MAAM,IAAI;AACpB,UAAIve,KAAK,GAAGue,MAAM,CAAC10B,IAAP,CAAYmW,KAAZ,CAAkB,wBAAlB,CAAZ;;AACA,UAAIA,KAAJ,EAAW;AACT,YAAI5U,KAAK,GAAG4U,KAAK,CAAC,CAAD,CAAL,CAASnX,KAAT,CAAe,CAAf,EAAkB,CAAlB,IAAuB,GAAvB,GAA6BmX,KAAK,CAAC,CAAD,CAAL,CAASnX,KAAT,CAAe,CAAf,CAAzC;AACA,YAAIiD,MAAM,GAAGmV,QAAQ,CAACqxH,QAAQ,CAAC/zG,MAAD,CAAT,CAArB;;AACA,YAAIjwB,KAAK,CAACxC,MAAD,CAAT,EAAmB;AACjBA,gBAAM,GAAG,CAAT;AACD;;AAEDumI,UAAE,CAACjK,QAAH,CACG,6DADH,EAEE,CAACh9H,KAAD,EAAQU,MAAR,CAFF;AAID;AACF,KAdD;AAeD,GAhBD,EArFmD,CAuGnD;;AACA,MAAIkiI,KAAK,GAAGqE,EAAE,CAACjK,QAAH,CACT,2DADS,EAEV,EAFU,EAGV,IAHU,CAAZ;;AAMA,MAAI0K,SAAS,GAAGhvG,GAAG,IAAI;AACrB,QAAI;AACF,UAAI1jC,KAAK,GAAGqO,IAAI,CAAC0G,KAAL,CAAW2uB,GAAX,CAAZ;AACA,aAAO1jC,KAAK,IAAIA,KAAK,KAAK,EAAnB,GAAwBA,KAAxB,GAAgC,IAAvC;AACD,KAHD,CAGE,OAAO+pB,CAAP,EAAU;AACV,aAAO,IAAP;AACD;AACF,GAPD;;AASAkoH,IAAE,CAAC5E,WAAH,CAAe,MAAM;AACnBO,SAAK,CAACj7H,OAAN,CAAcggI,IAAI,IAAI;AACpB,UAAIC,MAAM,GAAGF,SAAS,CAACR,QAAQ,CAACS,IAAD,CAAT,CAAtB;;AACA,UAAIC,MAAJ,EAAY;AACV,+BAAaD,IAAI,CAAClpI,IAAL,CAAUqX,KAAV,CAAgB,GAAhB,CAAb;AAAA;AAAA,YAAOgnH,EAAP;;AACAmK,UAAE,CAACjK,QAAH,CAAa,4CAAb,EAA0D,CAACF,EAAD,EAAK8K,MAAL,CAA1D;AACD;AACF,KAND;AAOD,GARD;AAUAX,IAAE,CAACG,SAAH,CAAc;AAChB;AACA;AACA;AACA,GAJE;AAKD,C;;;;;;;;;;;ACtID,IAAIxwH,KAAK,GAAGC,mBAAO,CAAC,uEAAD,CAAnB;;AACA,IAAIY,EAAE,GAAGb,KAAK,CAACixH,UAAN,CAAiBhxH,OAAjB,EAAT;AAAA,IACCC,GAAG,GAAGD,mBAAO,CAAC,kBAAD,CADd;;AAGAY,EAAE,CAACQ,UAAH,GAAgBR,EAAE,CAACQ,UAAH,IAAiBnB,GAAG,CAACmB,UAArC;;AAEA,IAAIlB,QAAQ,GAAGF,mBAAO,CAAC,yEAAD,CAAtB;AAAA,IACCG,OAAO,GAAGH,mBAAO,CAAC,uEAAD,CADlB;;AAGA,IAAI+F,KAAK,GAAG,OAAO3B,IAAP,CAAY4V,OAAO,CAACK,QAApB,CAAZ;;AAGAza,MAAM,CAACC,OAAP,GAAiB;AAAU;AAAUja,KAApB,EAA2B;AAC3C,MAAI8b,IAAI,GAAG9jB,SAAX;AAAA,MACCqzI,SAAS,GAAG,EADb;;AAGA,MAAIrrI,KAAK,IAAI,OAAOA,KAAP,KAAiB,QAA9B,EAAwC;AAAE;AACzC,QAAIgb,EAAE,CAACQ,UAAH,CAAcxb,KAAd,CAAJ,EAA0B;AACzBqrI,eAAS,GAAGrrI,KAAZ;AACA8b,UAAI,GAAG,IAAIvB,OAAJ,CAAYva,KAAZ,EAAmBma,KAAK,CAACW,SAAN,CAAgBW,IAAnC,CAAP;AACA,KAHD,MAGO;AACN,YAAMtB,KAAK,CAACyB,MAAN,CAAaC,gBAAnB;AACA;AACD,GAPD,MAOO,IAAI7b,KAAK,IAAIob,MAAM,CAACC,QAAP,CAAgBrb,KAAhB,CAAb,EAAqC;AAAE;AAC7C8b,QAAI,GAAG,IAAIvB,OAAJ,CAAYva,KAAZ,EAAmBma,KAAK,CAACW,SAAN,CAAgBQ,MAAnC,CAAP;AACA,GAFM,MAEA;AAAE;AACRQ,QAAI,GAAG,IAAIvB,OAAJ,CAAY,IAAZ,EAAkBJ,KAAK,CAACW,SAAN,CAAgBC,IAAlC,CAAP;AACA;;AAED,WAASiB,QAAT,CAAkBwa,MAAlB,EAA0Bx0B,IAA1B,EAAgC;AAC/Bw0B,UAAM,GAAGnc,GAAG,CAACqF,OAAJ,CAAYrF,GAAG,CAACmC,SAAJ,CAAcga,MAAd,CAAZ,CAAT;AACA,QAAIpL,KAAK,GAAGppB,IAAI,CAACqX,KAAL,CAAW,GAAX,CAAZ;;AACA,SAAK,IAAIxB,CAAC,GAAG,CAAR,EAAW4e,CAAC,GAAGrL,KAAK,CAACpsB,MAA1B,EAAkC6Y,CAAC,GAAG4e,CAAtC,EAAyC5e,CAAC,EAA1C,EAA8C;AAC7C,UAAImb,IAAI,GAAG3Y,GAAG,CAACmC,SAAJ,CAAcnC,GAAG,CAACN,IAAJ,CAASyc,MAAT,EAAiBpL,KAAK,CAACpqB,KAAN,CAAY6W,CAAZ,EAAe4e,CAAf,EAAkB1c,IAAlB,CAAuBM,GAAG,CAACoC,GAA3B,CAAjB,CAAd,CAAX;;AACA,UAAIuW,IAAI,CAAChsB,OAAL,CAAawvB,MAAb,MAAyB,CAA7B,EAAgC;AAC/B,eAAOxD,IAAP;AACA;AACD;;AACD,WAAO3Y,GAAG,CAACmC,SAAJ,CAAcnC,GAAG,CAACN,IAAJ,CAASyc,MAAT,EAAiBnc,GAAG,CAAC6G,QAAJ,CAAalf,IAAb,CAAjB,CAAd,CAAP;AACA;;AAED,WAASia,QAAT;AAAkB;AAAU9I,OAA5B,EAAmC;AAClC,QAAIA,KAAK,IAAI2I,IAAb,EAAmB;AAClB,UAAII,IAAJ,CADkB,CAElB;;AACA,UAAI,OAAO/I,KAAP,KAAiB,QAArB,EACC+I,IAAI,GAAGJ,IAAI,CAACG,QAAL,CAAc9I,KAAd,CAAP,CAJiB,CAKlB;;AACA,UAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,OAAOA,KAAK,CAACgJ,SAAb,KAA2B,WAAxD,IAAuE,OAAOhJ,KAAK,CAACiJ,MAAb,KAAwB,WAAnG,EACCF,IAAI,GAAGJ,IAAI,CAACG,QAAL,CAAc9I,KAAK,CAACgJ,SAApB,CAAP;;AAED,UAAID,IAAJ,EAAU;AACT,eAAOA,IAAP;AACA;AACD;;AACD,WAAO,IAAP;AACA;;AAED,SAAO;AACN;AACF;AACA;AACA;AACA;AACA;AACEQ,YAAQ,EAAE;AAAU;AAAUvJ,SAApB,EAA2B;AACpC,UAAI+I,IAAI,GAAGD,QAAQ,CAAC9I,KAAD,CAAnB;AACA,aAAO+I,IAAI,IAAIA,IAAI,CAACU,OAAL,EAAR,IAA0B,IAAjC;AACA,KAVK;;AAYN;AACF;AACA;AACA;AACA;AACA;AACA;AACEC,iBAAa,EAAE;AAAU;AAAU1J,SAApB;AAA2B;AAAY2J,YAAvC,EAAiD;AAC/D,UAAIZ,IAAI,GAAGD,QAAQ,CAAC9I,KAAD,CAAnB;;AACA,UAAI+I,IAAJ,EAAU;AACTA,YAAI,CAACa,YAAL,CAAkBD,QAAlB;AACA,OAFD,MAEO;AACNA,gBAAQ,CAAC,IAAD,EAAO,yBAAyB3J,KAAhC,CAAR;AACA;AACD,KA1BK;;AA4BN;AACF;AACA;AACA;AACA;AACA;AACA;AACE6J,cAAU,EAAE;AAAU;AAAU7J,SAApB;AAA2B;AAAqB8J,YAAhD,EAA0D;AACrE,UAAIf,IAAI,GAAGD,QAAQ,CAAC9I,KAAD,CAAnB;;AACA,UAAI+I,IAAJ,EAAU;AACT,YAAI7b,IAAI,GAAG6b,IAAI,CAACU,OAAL,EAAX;;AACA,YAAIvc,IAAI,IAAIA,IAAI,CAACrB,MAAjB,EAAyB;AACxB,iBAAOqB,IAAI,CAACuV,QAAL,CAAcqH,QAAQ,IAAI,MAA1B,CAAP;AACA;AACD;;AACD,aAAO,EAAP;AACA,KA5CK;;AA8CN;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACEC,mBAAe,EAAE;AAAU;AAAU/J,SAApB;AAA2B;AAAY2J,YAAvC;AAAiD;AAAqBG,YAAtE,EAAgF;AAChG,UAAIf,IAAI,GAAGD,QAAQ,CAAC9I,KAAD,CAAnB;;AACA,UAAI+I,IAAJ,EAAU;AACTA,YAAI,CAACa,YAAL,CAAkB,UAAU1c,IAAV,EAAgB8c,GAAhB,EAAqB;AACtC,cAAIA,GAAJ,EAAS;AACRL,oBAAQ,CAACzc,IAAD,EAAO8c,GAAP,CAAR;AACA;AACA;;AAED,cAAI9c,IAAI,IAAIA,IAAI,CAACrB,MAAjB,EAAyB;AACxB8d,oBAAQ,CAACzc,IAAI,CAACuV,QAAL,CAAcqH,QAAQ,IAAI,MAA1B,CAAD,CAAR;AACA,WAFD,MAEO;AACNH,oBAAQ,CAAC,EAAD,CAAR;AACA;AACD,SAXD;AAYA,OAbD,MAaO;AACNA,gBAAQ,CAAC,EAAD,CAAR;AACA;AACD,KAxEK;;AA0EN;AACF;AACA;AACA;AACA;AACEM,cAAU,EAAE;AAAU;AAAUjK,SAApB,EAA2B;AAAE;AACxC,UAAI+I,IAAI,GAAGD,QAAQ,CAAC9I,KAAD,CAAnB;;AACA,UAAI+I,IAAJ,EAAU;AACTJ,YAAI,CAACuB,WAAL,CAAiBnB,IAAI,CAACC,SAAtB;AACA;AACD,KApFK;;AAsFN;AACF;AACA;AACA;AACA;AACEmB,iBAAa,EAAE;AAAU;AAAUC,WAApB,EAA6B;AAAE;AAC7CzB,UAAI,CAACyB,OAAL,GAAeA,OAAf;AACA,KA7FK;;AA+FN;AACF;AACA;AACA;AACA;AACEC,iBAAa,EAAE,YAAY;AAC1B,aAAO1B,IAAI,CAACyB,OAAL,IAAgB,EAAvB;AACA,KAtGK;;AAwGN;AACF;AACA;AACA;AACA;AACA;AACA;AACEE,sBAAkB,EAAE;AAAU;AAAUtK,SAApB;AAA2B;AAAUoK,WAArC,EAA8C;AACjE,UAAIrB,IAAI,GAAGD,QAAQ,CAAC9I,KAAD,CAAnB;;AACA,UAAI+I,IAAJ,EAAU;AACTA,YAAI,CAACqB,OAAL,GAAeA,OAAf;AACA;AACD,KApHK;;AAsHN;AACF;AACA;AACA;AACA;AACA;AACEG,sBAAkB,EAAE;AAAU;AAAUvK,SAApB,EAA2B;AAC9C,UAAI+I,IAAI,GAAGD,QAAQ,CAAC9I,KAAD,CAAnB;;AACA,UAAI+I,IAAJ,EAAU;AACT,eAAOA,IAAI,CAACqB,OAAL,IAAgB,EAAvB;AACA;;AACD,aAAO,EAAP;AACA,KAlIK;;AAoIN;AACF;AACA;AACA;AACA;AACA;AACEI,cAAU,EAAE;AAAU;AAAUxK,SAApB;AAA2B;AAAUyK,WAArC,EAA8C;AACzD,UAAI1B,IAAI,GAAGD,QAAQ,CAAC9I,KAAD,CAAnB;;AACA,UAAI+I,IAAJ,EAAU;AACTA,YAAI,CAAC2B,OAAL,CAAaD,OAAb;AACA;AACD,KA/IK;;AAiJN;AACF;AACA;AACA;AACA;AACA;AACA;AACEE,gBAAY,EAAE;AAAU;AAAUC,aAApB;AAA+B;AAAUzB,WAAzC;AAAkD;AAAU0B,WAA5D,EAAqE;AAClF,UAAIhD,EAAE,CAACQ,UAAH,CAAcuC,SAAd,CAAJ,EAA8B;AAC7B,YAAIzB,OAAJ,EAAa;AACZA,iBAAO,GAAGA,OAAO,CAACjD,KAAR,CAAc,IAAd,EAAoBU,IAApB,CAAyB,GAAzB,CAAV;;AACA,cAAIuC,OAAO,CAACmhB,MAAR,CAAenhB,OAAO,CAACtd,MAAR,GAAiB,CAAhC,MAAuC,GAA3C,EAAgD;AAC/Csd,mBAAO,IAAI,GAAX;AACA;AACD,SALD,MAKO;AACNA,iBAAO,GAAG,EAAV;AACA;;AACD,YAAI2B,CAAC,GAAGF,SAAS,CAAC1E,KAAV,CAAgB,IAAhB,EAAsBU,IAAtB,CAA2B,GAA3B,EAAgCV,KAAhC,CAAsC,GAAtC,EAA2CzZ,GAA3C,EAAR;;AAEA,YAAIoe,OAAJ,EAAa;AACZ,eAAKI,OAAL,CAAa9B,OAAO,GAAG0B,OAAvB,EAAgChD,EAAE,CAACW,YAAH,CAAgBoC,SAAhB,CAAhC,EAA4D,EAA5D,EAAgE,CAAhE;AACA,SAFD,MAEO;AACN,eAAKK,OAAL,CAAa9B,OAAO,GAAG2B,CAAvB,EAA0BjD,EAAE,CAACW,YAAH,CAAgBoC,SAAhB,CAA1B,EAAsD,EAAtD,EAA0D,CAA1D;AACA;AACD,OAhBD,MAgBO;AACN,cAAM5D,KAAK,CAACyB,MAAN,CAAayC,cAAb,CAA4B/F,OAA5B,CAAoC,IAApC,EAA0CyF,SAA1C,CAAN;AACA;AACD,KA5KK;;AA8KN;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACEO,kBAAc,EAAE;AAAU;AAAUP,aAApB;AAA+B;AAAUzB,WAAzC;AAAkD;AAAmB7c,UAArE,EAA6E;AAC5F,UAAIA,MAAM,KAAKzH,SAAf,EAA0B;AACzByH,cAAM,GAAG,YAAY;AACpB,iBAAO,IAAP;AACA,SAFD;AAGA,OAJD,MAIO,IAAIA,MAAM,YAAYiZ,MAAtB,EAA8B;AACpCjZ,cAAM,GAAG,UAAUA,MAAV,EAAkB;AAC1B,iBAAO,UAAUic,QAAV,EAAoB;AAC1B,mBAAOjc,MAAM,CAAC+e,IAAP,CAAY9C,QAAZ,CAAP;AACA,WAFD;AAGA,SAJQ,CAIPjc,MAJO,CAAT;AAKA;;AAED,UAAI6c,OAAJ,EAAa;AACZA,eAAO,GAAGA,OAAO,CAACjD,KAAR,CAAc,IAAd,EAAoBU,IAApB,CAAyB,GAAzB,CAAV;;AACA,YAAIuC,OAAO,CAACmhB,MAAR,CAAenhB,OAAO,CAACtd,MAAR,GAAiB,CAAhC,MAAuC,GAA3C,EAAgD;AAC/Csd,iBAAO,IAAI,GAAX;AACA;AACD,OALD,MAKO;AACNA,eAAO,GAAG,EAAV;AACA,OApB2F,CAqB5F;;;AACAyB,eAAS,GAAG1D,GAAG,CAACmC,SAAJ,CAAcuB,SAAd,CAAZ;AACAA,eAAS,GAAGA,SAAS,CAAC1E,KAAV,CAAgB,IAAhB,EAAsBU,IAAtB,CAA2B,GAA3B,CAAZ,CAvB4F,CAuB/C;;AAC7C,UAAIgE,SAAS,CAAC0f,MAAV,CAAiB1f,SAAS,CAAC/e,MAAV,GAAmB,CAApC,MAA2C,GAA/C,EACC+e,SAAS,IAAI,GAAb;;AAED,UAAI/C,EAAE,CAACQ,UAAH,CAAcuC,SAAd,CAAJ,EAA8B;AAE7B,YAAIU,KAAK,GAAGtE,KAAK,CAACuE,SAAN,CAAgBX,SAAhB,CAAZ;AAAA,YACCY,IAAI,GAAG,IADR;;AAGA,YAAIF,KAAK,CAACzf,MAAV,EAAkB;AACjByf,eAAK,CAACvT,OAAN,CAAc,UAAU8nB,IAAV,EAAgB;AAC7B,gBAAI/U,CAAC,GAAG+U,IAAI,CAAC3Z,KAAL,CAAW,IAAX,EAAiBU,IAAjB,CAAsB,GAAtB,EAA2BzB,OAA3B,CAAmC,IAAII,MAAJ,CAAWqF,SAAS,CAACzF,OAAV,CAAkB,UAAlB,EAA8B,MAA9B,CAAX,EAAkD,GAAlD,CAAnC,EAA2F,EAA3F,CAAR,CAD6B,CAC2E;;AACxG,gBAAI7Y,MAAM,CAACwe,CAAD,CAAV,EAAe;AACd,kBAAIA,CAAC,CAACwf,MAAF,CAASxf,CAAC,CAACjf,MAAF,GAAW,CAApB,MAA2B,GAA/B,EAAoC;AACnC2f,oBAAI,CAACP,OAAL,CAAa9B,OAAO,GAAG2B,CAAvB,EAA0BjD,EAAE,CAACW,YAAH,CAAgBqX,IAAhB,CAA1B,EAAiD,EAAjD,EAAqD,CAArD;AACA,eAFD,MAEO;AACNrU,oBAAI,CAACP,OAAL,CAAa9B,OAAO,GAAG2B,CAAvB,EAA0B7C,MAAM,CAAC4D,KAAP,CAAa,CAAb,CAA1B,EAA2C,EAA3C,EAA+C,CAA/C;AACA;AACD;AACD,WATD;AAUA;AACD,OAjBD,MAiBO;AACN,cAAM7E,KAAK,CAACyB,MAAN,CAAayC,cAAb,CAA4B/F,OAA5B,CAAoC,IAApC,EAA0CyF,SAA1C,CAAN;AACA;AACD,KArOK;;AAuON;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEK,WAAO,EAAE;AAAU;AAAUjC,aAApB;AAA+B;AAAUyB,WAAzC;AAAkD;AAAUL,WAA5D;AAAqE;AAAUqC,QAA/E,EAAqF;AAC7F,UAAIzM,KAAK,GAAG,IAAImH,QAAJ,EAAZ;AACAnH,WAAK,CAACgJ,SAAN,GAAkBA,SAAlB;AACAhJ,WAAK,CAACoK,OAAN,GAAgBA,OAAO,IAAI,EAA3B;;AAEA,UAAI,CAACqC,IAAL,EAAW;AACV,YAAIzM,KAAK,CAAC+M,WAAV,EAAuB;AACtBN,cAAI,GAAI,WAAW,EAAZ,GAAkB,IAAzB,CADsB,CACS;AAC/B,SAFD,MAEO;AACNA,cAAI,GAAG,SAAS,EAAhB,CADM,CACc;AACpB;AACD;;AAEDzM,WAAK,CAACyM,IAAN,GAAaA,IAAb;AAEAzM,WAAK,CAAC0K,OAAN,CAAcD,OAAd;;AACA9B,UAAI,CAACwE,QAAL,CAAcnN,KAAd;AACA,KAlQK;;AAoQN;AACF;AACA;AACA;AACA;AACEoN,cAAU,EAAE,YAAY;AACvB,UAAIzE,IAAJ,EAAU;AACT,eAAOA,IAAI,CAAC0E,OAAZ;AACA,OAFD,MAEO;AACN,eAAO,EAAP;AACA;AACD,KA/QK;;AAiRN;AACF;AACA;AACA;AACA;AACA;AACEvE,YAAQ,EAAE;AAAU;AAAUja,QAApB,EAA0B;AACnC,aAAOia,QAAQ,CAACja,IAAD,CAAf;AACA,KAzRK;;AA2RN;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE0e,kBAAc,EAAE;AAAU;AAAUvN,SAApB;AAA2B;AAAUwN,cAArC;AAAiD;AAAWC,qBAA5D;AAA+E;AAAWC,aAA1F,EAAqG;AACpHA,eAAS,GAAGA,SAAS,IAAI,KAAzB;AACAD,uBAAiB,GAAG,OAAOA,iBAAP,KAA6B,WAA7B,GAA2C,IAA3C,GAAkDA,iBAAtE;AAEA,UAAI1E,IAAI,GAAGD,QAAQ,CAAC9I,KAAD,CAAnB;;AACA,UAAI,CAAC+I,IAAL,EAAW;AACV,cAAM/B,KAAK,CAACyB,MAAN,CAAaoF,QAAnB;AACA;;AAED,UAAI7E,SAAS,GAAGD,IAAI,CAACC,SAArB;AAEA,UAAI8E,MAAM,GAAGjF,QAAQ,CAAC2E,UAAD,EAAaC,iBAAiB,GAAGzE,SAAH,GAAe9B,GAAG,CAAC6G,QAAJ,CAAa/E,SAAb,CAA7C,CAArB;;AAEA,UAAID,IAAI,CAACgE,WAAT,EAAsB;AACrBe,cAAM,GAAG5G,GAAG,CAACqF,OAAJ,CAAYuB,MAAZ,EAAoB,IAApB,CAAT;;AACA,YAAIE,QAAQ,GAAGrF,IAAI,CAACsF,gBAAL,CAAsBlF,IAAtB,CAAf;;AACAiF,gBAAQ,CAACjW,OAAT,CAAiB,UAAUmW,KAAV,EAAiB;AACjC,cAAIA,KAAK,CAACnB,WAAV,EAAuB;AACvB,cAAItC,OAAO,GAAGyD,KAAK,CAACzE,OAAN,EAAd;;AACA,cAAI,CAACgB,OAAL,EAAc;AACb,kBAAMzD,KAAK,CAACyB,MAAN,CAAa0F,iBAAnB;AACA;;AACD,cAAIC,SAAS,GAAGvF,QAAQ,CAAC2E,UAAD,EAAaC,iBAAiB,GAAGS,KAAK,CAAClF,SAAT,GAAqB9B,GAAG,CAAC6G,QAAJ,CAAaG,KAAK,CAAClF,SAAnB,CAAnD,CAAxB;AAEAhC,eAAK,CAACsH,WAAN,CAAkBF,SAAlB,EAA6B3D,OAA7B,EAAsCiD,SAAtC;AACA,SATD;AAUA,eAAO,IAAP;AACA;;AAED,UAAIjD,OAAO,GAAG1B,IAAI,CAACU,OAAL,EAAd;AACA,UAAI,CAACgB,OAAL,EAAc,MAAMzD,KAAK,CAACyB,MAAN,CAAa0F,iBAAnB;;AAEd,UAAItG,EAAE,CAACQ,UAAH,CAAcyF,MAAd,KAAyB,CAACJ,SAA9B,EAAyC;AACxC,cAAM1G,KAAK,CAACyB,MAAN,CAAa8F,aAAnB;AACA;;AACDvH,WAAK,CAACsH,WAAN,CAAkBR,MAAlB,EAA0BrD,OAA1B,EAAmCiD,SAAnC;AAEA,aAAO,IAAP;AACA,KA9UK;;AAgVN;AACF;AACA;AACA;AACErC,QAAI,EAAE,YAAY;AACjB,UAAI,CAAC1C,IAAL,EAAW;AACV,eAAO,KAAP;AACA;;AAED,WAAK,IAAI3I,KAAT,IAAkB2I,IAAI,CAAC0E,OAAvB,EAAgC;AAC/B,YAAI;AACH,cAAIrN,KAAK,CAAC+M,WAAV,EAAuB;AACtB;AACA;;AACD,cAAItC,OAAO,GAAG9B,IAAI,CAAC0E,OAAL,CAAarN,KAAb,EAAoByJ,OAApB,EAAd;;AACA,cAAI,CAACgB,OAAL,EAAc;AACb,mBAAO,KAAP;AACA;AACD,SARD,CAQE,OAAOT,GAAP,EAAY;AACb,iBAAO,KAAP;AACA;AACD;;AACD,aAAO,IAAP;AACA,KAvWK;;AAyWN;AACF;AACA;AACA;AACA;AACA;AACA;AACEwE,gBAAY,EAAE;AAAU;AAAUhB,cAApB;AAAgC;AAAWE,aAA3C,EAAsD;AACnEA,eAAS,GAAGA,SAAS,IAAI,KAAzB;;AACA,UAAI,CAAC/E,IAAL,EAAW;AACV,cAAM3B,KAAK,CAACyB,MAAN,CAAagG,MAAnB;AACA;;AACD9F,UAAI,CAAC0E,OAAL,CAAatV,OAAb,CAAqB,UAAUiI,KAAV,EAAiB;AACrC,YAAIgJ,SAAS,GAAGH,QAAQ,CAAC2E,UAAD,EAAaxN,KAAK,CAACgJ,SAAN,CAAgBvG,QAAhB,EAAb,CAAxB;;AACA,YAAIzC,KAAK,CAAC+M,WAAV,EAAuB;AACtB/F,eAAK,CAAC0H,OAAN,CAAc1F,SAAd;AACA;AACA;;AACD,YAAIyB,OAAO,GAAGzK,KAAK,CAACyJ,OAAN,EAAd;;AACA,YAAI,CAACgB,OAAL,EAAc;AACb,gBAAMzD,KAAK,CAACyB,MAAN,CAAa0F,iBAAnB;AACA;;AACDnH,aAAK,CAACsH,WAAN,CAAkBtF,SAAlB,EAA6ByB,OAA7B,EAAsCiD,SAAtC;;AACA,YAAI;AACH7F,YAAE,CAAC8G,UAAH,CAAc3F,SAAd,EAAyBhJ,KAAK,CAACiJ,MAAN,CAAahL,IAAtC,EAA4C+B,KAAK,CAACiJ,MAAN,CAAahL,IAAzD;AACA,SAFD,CAEE,OAAO+L,GAAP,EAAY;AACb,gBAAMhD,KAAK,CAACyB,MAAN,CAAa0F,iBAAnB;AACA;AACD,OAhBD;AAiBA,KAtYK;;AAwYN;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACES,qBAAiB,EAAE;AAAU;AAAUpB,cAApB;AAAgC;AAAWE,aAA3C;AAAsD;AAAY/D,YAAlE,EAA4E;AAC9F,UAAI,CAACA,QAAL,EAAe;AACdA,gBAAQ,GAAG,YAAW,CAAE,CAAxB;AACA;;AACD+D,eAAS,GAAGA,SAAS,IAAI,KAAzB;;AACA,UAAI,CAAC/E,IAAL,EAAW;AACVgB,gBAAQ,CAAC,IAAItf,KAAJ,CAAU2c,KAAK,CAACyB,MAAN,CAAagG,MAAvB,CAAD,CAAR;AACA;AACA;;AAED,UAAIpB,OAAO,GAAG1E,IAAI,CAAC0E,OAAnB;AACA,UAAI3I,CAAC,GAAG2I,OAAO,CAACxhB,MAAhB;AACAwhB,aAAO,CAACtV,OAAR,CAAgB,UAAUiI,KAAV,EAAiB;AAChC,YAAI0E,CAAC,IAAI,CAAT,EAAY,OADoB,CACZ;;AAEpB,YAAIsE,SAAS,GAAG9B,GAAG,CAACmC,SAAJ,CAAcrJ,KAAK,CAACgJ,SAAN,CAAgBvG,QAAhB,EAAd,CAAhB;;AAEA,YAAIzC,KAAK,CAAC+M,WAAV,EAAuB;AACtB/F,eAAK,CAAC0H,OAAN,CAAc7F,QAAQ,CAAC2E,UAAD,EAAaxE,SAAb,CAAtB;AACA,cAAI,EAAEtE,CAAF,KAAQ,CAAZ,EACCiF,QAAQ,CAAC9kB,SAAD,CAAR;AACD;AACA;;AACDmb,aAAK,CAAC4J,YAAN,CAAmB,UAAUa,OAAV,EAAmBT,GAAnB,EAAwB;AAC1C,cAAItF,CAAC,IAAI,CAAT,EAAY;;AACZ,cAAIsF,GAAJ,EAAS;AACRL,oBAAQ,CAAC,IAAItf,KAAJ,CAAU2f,GAAV,CAAD,CAAR;AACA;AACA;;AACD,cAAI,CAACS,OAAL,EAAc;AACb/F,aAAC,GAAG,CAAJ;AACAiF,oBAAQ,CAAC,IAAItf,KAAJ,CAAU2c,KAAK,CAACyB,MAAN,CAAa0F,iBAAvB,CAAD,CAAR;AACA;AACA;;AAEDnH,eAAK,CAAC2I,gBAAN,CAAuB9G,QAAQ,CAAC2E,UAAD,EAAaxE,SAAb,CAA/B,EAAwDyB,OAAxD,EAAiEiD,SAAjE,EAA4E,UAAUkC,IAAV,EAAgB;AAC3F,gBAAI;AACH/H,gBAAE,CAAC8G,UAAH,CAAczH,GAAG,CAACqF,OAAJ,CAAYiB,UAAZ,EAAwBxE,SAAxB,CAAd,EAAkDhJ,KAAK,CAACiJ,MAAN,CAAahL,IAA/D,EAAqE+B,KAAK,CAACiJ,MAAN,CAAahL,IAAlF;AACA,aAFD,CAEE,OAAO+L,GAAP,EAAY;AACbL,sBAAQ,CAAC,IAAItf,KAAJ,CAAU,sBAAV,CAAD,CAAR;AACA;;AACD,gBAAIqa,CAAC,IAAI,CAAT,EAAY;;AACZ,gBAAI,CAACkL,IAAL,EAAW;AACVlL,eAAC,GAAG,CAAJ;AACAiF,sBAAQ,CAAC,IAAItf,KAAJ,CAAU,iBAAV,CAAD,CAAR;AACA;AACA;;AACD,gBAAI,EAAEqa,CAAF,KAAQ,CAAZ,EACCiF,QAAQ,CAAC9kB,SAAD,CAAR;AACD,WAdD;AAeA,SA3BD;AA4BA,OAvCD;AAwCA,KApcK;;AAscN;AACF;AACA;AACA;AACA;AACA;AACEmrB,YAAQ,EAAE;AAAU;AAAUC,kBAApB;AAAoC;AAAYtG,YAAhD,EAA0D;AACnE,UAAI5U,SAAS,CAAClJ,MAAV,KAAqB,CAAzB,EAA4B;AAC3B,YAAI,OAAOokB,cAAP,KAA0B,UAA9B,EAA0C;AACzCtG,kBAAQ,GAAGsG,cAAX;AACAA,wBAAc,GAAG,EAAjB;AACA;AACD;;AAED,UAAI,CAACA,cAAD,IAAmBioH,SAAvB,EAAkC;AACjCjoH,sBAAc,GAAGioH,SAAjB;AACA;;AACD,UAAI,CAACjoH,cAAL,EAAqB;;AAErB,UAAIC,OAAO,GAAGvH,IAAI,CAACwH,gBAAL,EAAd;;AACA,UAAID,OAAJ,EAAa;AACZ,YAAIE,EAAE,GAAGpJ,KAAK,CAACsH,WAAN,CAAkB2B,cAAlB,EAAkCC,OAAlC,EAA2C,IAA3C,CAAT;AACA,YAAI,OAAOvG,QAAP,KAAoB,UAAxB,EAAoCA,QAAQ,CAAC,CAACyG,EAAD,GAAM,IAAI/lB,KAAJ,CAAU,QAAV,CAAN,GAA4B,IAA7B,EAAmC,EAAnC,CAAR;AACpC;AACD,KA9dK;;AAgeN;AACF;AACA;AACA;AACA;AACEsmB,YAAQ,EAAE;AAAU;AAAYC,aAAtB;AAAiC;AAAYC,UAA7C;AAAqD;AAAYC,eAAjE;AAA8E;AAAYC,aAA1F,EAAqG;AAC9G,WAAKhjB,OAAL,GAAe,CAAf;;AACA,UAAI,OAAO6iB,SAAP,KAAqB,UAAzB,EAAqC;AACpCjI,YAAI,CAAC+H,aAAL,CAAmBE,SAAnB,EAA8BC,MAA9B,EAAsCC,WAAtC,EAAmDC,SAAnD;;AACA,eAAO,IAAP;AACA;;AACD,aAAOpI,IAAI,CAACwH,gBAAL,EAAP;AACA;AA5eK,GAAP;AA8eA,CA5hBD,C;;;;;;;;;;;ACZA,IAAInJ,KAAK,GAAGC,mBAAO,CAAC,wEAAD,CAAnB;AAAA,IACIU,SAAS,GAAGX,KAAK,CAACW,SADtB;AAGA;;;AACAd,MAAM,CAACC,OAAP,GAAiB,YAAY;AACzB,MAAIkK,QAAQ,GAAG,IAAf;AAAA,MACIC,QAAQ,GAAG,IADf;AAAA,MAEIC,MAAM,GAAG,CAFb;AAAA,MAGIC,OAAO,GAAG,CAHd;AAAA,MAIIC,KAAK,GAAG,CAJZ;AAAA,MAKIC,IAAI,GAAG,CALX;AAAA,MAMIC,eAAe,GAAG,CANtB;AAAA,MAOIC,KAAK,GAAG,CAPZ;AAAA,MAQIC,SAAS,GAAG,CARhB;AAAA,MASIC,SAAS,GAAG,CAThB;AAAA,MAWIC,OAAO,GAAG,CAXd;AAAA,MAYIC,UAAU,GAAG,CAZjB;AAAA,MAaIC,OAAO,GAAG,CAbd;AAAA,MAcI7G,KAAK,GAAG,CAdZ;AAAA,MAeI8G,OAAO,GAAG,CAfd;AAiBA,MAAIE,WAAW,GAAG,EAAlB;;AAEA,WAASC,OAAT,CAAiBnN,GAAjB,EAAsB;AAClBA,OAAG,GAAG,IAAI7U,IAAJ,CAAS6U,GAAT,CAAN;AACAuM,SAAK,GAAG,CAACvM,GAAG,CAACjC,WAAJ,KAAoB,IAApB,GAA2B,IAA5B,KAAqC,EAArC,CAAyC;AAAzC,MACDiC,GAAG,CAAChC,QAAJ,KAAiB,CAAlB,IAAwB,EADtB,CACyC;AADzC,MAEFgC,GAAG,CAAC/B,OAAJ,MAAiB,EAFf,CAEyC;AAE7C;AAJI,MAKF+B,GAAG,CAAC9B,QAAJ,MAAkB,EALhB,CAKsB;AALtB,MAMF8B,GAAG,CAAC7B,UAAJ,MAAoB,CANlB,CAMsB;AANtB,MAOF6B,GAAG,CAAC5B,UAAJ,MAAoB,CAP1B,CAFkB,CASY;AACjC;;AAED+O,SAAO,CAAC,CAAC,IAAIhiB,IAAJ,EAAF,CAAP;AAEA,SAAO;AACH,QAAIiiB,IAAJ,GAAY;AAAE,aAAOjB,QAAP;AAAkB,KAD7B;;AAEH,QAAIiB,IAAJ,CAAUpN,GAAV,EAAe;AAAEmM,cAAQ,GAAGnM,GAAX;AAAiB,KAF/B;;AAIH,QAAIxB,OAAJ,GAAe;AAAE,aAAO4N,QAAP;AAAkB,KAJhC;;AAKH,QAAI5N,OAAJ,CAAawB,GAAb,EAAkB;AAAEoM,cAAQ,GAAGpM,GAAX;AAAgB,KALjC;;AAOH,QAAIqN,KAAJ,GAAa;AAAE,aAAOhB,MAAP;AAAe,KAP3B;;AAQH,QAAIgB,KAAJ,CAAWrN,GAAX,EAAgB;AAAEqM,YAAM,GAAGrM,GAAT;AAAe,KAR9B;;AAUH,QAAI1b,MAAJ,GAAc;AAAE,aAAOgoB,OAAP;AAAiB,KAV9B;;AAWH,QAAIhoB,MAAJ,CAAY0b,GAAZ,EAAiB;AAAEsM,aAAO,GAAGtM,GAAV;AAAgB,KAXhC;;AAaH,QAAI5G,IAAJ,GAAY;AAAE,aAAO,IAAIjO,IAAJ,CACjB,CAAEohB,KAAK,IAAI,EAAV,GAAgB,IAAjB,IAAyB,IADR,EAEjB,CAAEA,KAAK,IAAI,EAAV,GAAgB,IAAjB,IAAyB,CAFR,EAGhBA,KAAK,IAAI,EAAV,GAAgB,IAHC,EAIhBA,KAAK,IAAI,EAAV,GAAgB,IAJC,EAKhBA,KAAK,IAAI,CAAV,GAAe,IALE,EAMjB,CAACA,KAAK,GAAG,IAAT,KAAkB,CAND,CAAP;AAQb,KArBE;;AAsBH,QAAInT,IAAJ,CAAU4G,GAAV,EAAe;AACXmN,aAAO,CAACnN,GAAD,CAAP;AACH,KAxBE;;AA0BH,QAAIwN,GAAJ,GAAW;AAAE,aAAOhB,IAAP;AAAc,KA1BxB;;AA2BH,QAAIgB,GAAJ,CAASxN,GAAT,EAAc;AAAEwM,UAAI,GAAGxM,GAAP;AAAa,KA3B1B;;AA6BH,QAAI0N,cAAJ,GAAsB;AAAE,aAAOjB,eAAP;AAAyB,KA7B9C;;AA8BH,QAAIiB,cAAJ,CAAoB1N,GAApB,EAAyB;AAAEyM,qBAAe,GAAGzM,GAAlB;AAAwB,KA9BhD;;AAgCH,QAAI2K,IAAJ,GAAY;AAAE,aAAO+B,KAAP;AAAe,KAhC1B;;AAiCH,QAAI/B,IAAJ,CAAU3K,GAAV,EAAe;AAAE0M,WAAK,GAAG1M,GAAR;AAAc,KAjC5B;;AAmCH,QAAI2N,cAAJ,GAAsB;AAAE,aAAOhB,SAAP;AAAmB,KAnCxC;;AAoCH,QAAIgB,cAAJ,CAAoB3N,GAApB,EAAyB;AAAE2M,eAAS,GAAG3M,GAAZ;AAAkB,KApC1C;;AAsCH,QAAI4N,WAAJ,GAAmB;AAAE,aAAOhB,SAAP;AAAkB,KAtCpC;;AAuCH,QAAIgB,WAAJ,CAAiB5N,GAAjB,EAAsB;AAAE4M,eAAS,GAAG5M,GAAZ;AAAkB,KAvCvC;;AAyCH,QAAI6N,aAAJ,GAAqB;AAAE,aAAOhB,OAAP;AAAgB,KAzCpC;;AA0CH,QAAIgB,aAAJ,CAAmB7N,GAAnB,EAAwB;AAAE6M,aAAO,GAAG7M,GAAV;AAAe,KA1CtC;;AA4CH,QAAI8N,YAAJ,GAAoB;AAAE,aAAOhB,UAAP;AAAmB,KA5CtC;;AA6CH,QAAIgB,YAAJ,CAAkB9N,GAAlB,EAAuB;AAAE8M,gBAAU,GAAG9M,GAAb;AAAkB,KA7CxC;;AA+CH,QAAI+N,MAAJ,GAAc;AAAE,aAAOhB,OAAP;AAAgB,KA/C7B;;AAgDH,QAAIgB,MAAJ,CAAY/N,GAAZ,EAAiB;AAAE+M,aAAO,GAAG/M,GAAV;AAAe,KAhD/B;;AAkDH,QAAI4H,IAAJ,GAAY;AAAE,aAAO1B,KAAP;AAAc,KAlDzB;;AAmDH,QAAI0B,IAAJ,CAAU5H,GAAV,EAAe;AAAEkG,WAAK,GAAGlG,GAAR;AAAa,KAnD3B;;AAqDH,QAAIgO,MAAJ,GAAc;AAAE,aAAOhB,OAAP;AAAgB,KArD7B;;AAsDH,QAAIgB,MAAJ,CAAYhO,GAAZ,EAAiB;AAAEgN,aAAO,GAAGhN,GAAV;AAAe,KAtD/B;;AAwDH,QAAIiO,SAAJ,GAAiB;AAAE,aAAO,CAAC5B,MAAM,GAAG,CAAV,MAAiB,CAAxB;AAA2B,KAxD3C;;AA0DH,QAAI6B,eAAJ,GAAuB;AACnB,aAAOpL,SAAS,CAACqL,MAAV,GAAmBxB,SAAnB,GAA+BC,SAA/B,GAA2CC,OAAlD;AACH,KA5DE;;AA8DH,QAAIuB,cAAJ,GAAsB;AAClB,aAAOpB,OAAO,GAAGlK,SAAS,CAACuL,MAApB,GAA6BnB,WAAW,CAACoB,QAAzC,GAAoDpB,WAAW,CAACqB,QAAvE;AACH,KAhEE;;AAkEH,QAAIC,UAAJ,GAAkB;AACd,aAAOtB,WAAP;AACH,KApEE;;AAsEHuB,4BAAwB,EAAG;AAAS;AAAUzmB,SAAnB,EAA0B;AACjD,UAAIK,IAAI,GAAGL,KAAK,CAACgB,KAAN,CAAYgkB,OAAZ,EAAqBA,OAAO,GAAGlK,SAAS,CAACuL,MAAzC,CAAX,CADiD,CAEjD;;AACA,UAAIhmB,IAAI,CAACqmB,YAAL,CAAkB,CAAlB,MAAyB5L,SAAS,CAAC6L,MAAvC,EAA+C;AAC3C,cAAMxM,KAAK,CAACyB,MAAN,CAAagL,WAAnB;AACH;;AACD1B,iBAAW,GAAG;AACV;AACA1O,eAAO,EAAGnW,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAACgM,MAA5B,CAFA;AAGV;AACAzB,aAAK,EAAGhlB,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAACiM,MAA5B,CAJE;AAKV;AACAzqB,cAAM,EAAG+D,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAACkM,MAA5B,CANC;AAOV;AACA5V,YAAI,EAAG/Q,IAAI,CAACqmB,YAAL,CAAkB5L,SAAS,CAACmM,MAA5B,CARG;AASV;AACAzB,WAAG,EAAGnlB,IAAI,CAACqmB,YAAL,CAAkB5L,SAAS,CAACoM,MAA5B,CAVI;AAWV;AACAxB,sBAAc,EAAGrlB,IAAI,CAACqmB,YAAL,CAAkB5L,SAAS,CAACqM,MAA5B,CAZP;AAaV;AACAxE,YAAI,EAAGtiB,IAAI,CAACqmB,YAAL,CAAkB5L,SAAS,CAACsM,MAA5B,CAdG;AAeV;AACAd,gBAAQ,EAAGjmB,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAACuM,MAA5B,CAhBD;AAiBV;AACAd,gBAAQ,EAAGlmB,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAACwM,MAA5B;AAlBD,OAAd;AAoBH,KAhGE;AAkGHC,kBAAc,EAAG;AAAS;AAAUlnB,QAAnB,EAAyB;AACtC;AACA,UAAIA,IAAI,CAACrB,MAAL,KAAgB8b,SAAS,CAACqL,MAA1B,IAAoC9lB,IAAI,CAACqmB,YAAL,CAAkB,CAAlB,MAAyB5L,SAAS,CAAC0M,MAA3E,EAAmF;AAC/E,cAAMrN,KAAK,CAACyB,MAAN,CAAa6L,WAAnB;AACH,OAJqC,CAKtC;;;AACAtD,cAAQ,GAAG9jB,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAAC4M,MAA5B,CAAX,CANsC,CAOtC;;AACAtD,cAAQ,GAAG/jB,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAAC6M,MAA5B,CAAX,CARsC,CAStC;;AACAtD,YAAM,GAAGhkB,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAAC8M,MAA5B,CAAT,CAVsC,CAWtC;;AACAtD,aAAO,GAAGjkB,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAAC+M,MAA5B,CAAV,CAZsC,CAatC;;AACAtD,WAAK,GAAGlkB,IAAI,CAACqmB,YAAL,CAAkB5L,SAAS,CAACgN,MAA5B,CAAR,CAdsC,CAetC;;AACAtD,UAAI,GAAGnkB,IAAI,CAACqmB,YAAL,CAAkB5L,SAAS,CAACiN,MAA5B,CAAP,CAhBsC,CAiBtC;;AACAtD,qBAAe,GAAGpkB,IAAI,CAACqmB,YAAL,CAAkB5L,SAAS,CAACkN,MAA5B,CAAlB,CAlBsC,CAmBtC;;AACAtD,WAAK,GAAGrkB,IAAI,CAACqmB,YAAL,CAAkB5L,SAAS,CAACmN,MAA5B,CAAR,CApBsC,CAqBtC;;AACAtD,eAAS,GAAGtkB,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAACoN,MAA5B,CAAZ,CAtBsC,CAuBtC;;AACAtD,eAAS,GAAGvkB,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAACqN,MAA5B,CAAZ,CAxBsC,CAyBtC;;AACAtD,aAAO,GAAGxkB,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAACsN,MAA5B,CAAV,CA1BsC,CA2BtC;;AACAtD,gBAAU,GAAGzkB,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAACuN,MAA5B,CAAb,CA5BsC,CA6BtC;;AACAtD,aAAO,GAAG1kB,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAACwN,MAA5B,CAAV,CA9BsC,CA+BtC;;AACApK,WAAK,GAAG7d,IAAI,CAACqmB,YAAL,CAAkB5L,SAAS,CAACyN,MAA5B,CAAR,CAhCsC,CAiCtC;;AACAvD,aAAO,GAAG3kB,IAAI,CAACqmB,YAAL,CAAkB5L,SAAS,CAAC0N,MAA5B,CAAV;AACH,KArIE;AAuIHC,sBAAkB,EAAG,YAAW;AAC5B;AACA,UAAIpoB,IAAI,GAAG+a,MAAM,CAAC4D,KAAP,CAAalE,SAAS,CAACuL,MAAvB,CAAX,CAF4B,CAG5B;;AACAhmB,UAAI,CAACqoB,aAAL,CAAmB5N,SAAS,CAAC6L,MAA7B,EAAqC,CAArC,EAJ4B,CAK5B;;AACAtmB,UAAI,CAACsoB,aAAL,CAAmBvE,QAAnB,EAA6BtJ,SAAS,CAACgM,MAAvC,EAN4B,CAO5B;;AACAzmB,UAAI,CAACsoB,aAAL,CAAmBtE,MAAnB,EAA2BvJ,SAAS,CAACiM,MAArC,EAR4B,CAS5B;;AACA1mB,UAAI,CAACsoB,aAAL,CAAmBrE,OAAnB,EAA4BxJ,SAAS,CAACkM,MAAtC,EAV4B,CAW5B;;AACA3mB,UAAI,CAACqoB,aAAL,CAAmBnE,KAAnB,EAA0BzJ,SAAS,CAACmM,MAApC,EAZ4B,CAa5B;;AACA5mB,UAAI,CAACqoB,aAAL,CAAmBlE,IAAnB,EAAyB1J,SAAS,CAACoM,MAAnC,EAd4B,CAe5B;;AACA7mB,UAAI,CAACqoB,aAAL,CAAmBjE,eAAnB,EAAoC3J,SAAS,CAACqM,MAA9C,EAhB4B,CAiB5B;;AACA9mB,UAAI,CAACqoB,aAAL,CAAmBhE,KAAnB,EAA0B5J,SAAS,CAACsM,MAApC,EAlB4B,CAmB5B;;AACA/mB,UAAI,CAACsoB,aAAL,CAAmBhE,SAAnB,EAA8B7J,SAAS,CAACuM,MAAxC,EApB4B,CAqB5B;;AACAhnB,UAAI,CAACsoB,aAAL,CAAmB/D,SAAnB,EAA8B9J,SAAS,CAACwM,MAAxC;AACA,aAAOjnB,IAAP;AACH,KA/JE;AAiKHuoB,uBAAmB,EAAG,YAAW;AAC7B;AACA,UAAIvoB,IAAI,GAAG+a,MAAM,CAAC4D,KAAP,CAAalE,SAAS,CAACqL,MAAV,GAAmBxB,SAAnB,GAA+BC,SAA/B,GAA2CC,OAAxD,CAAX,CAF6B,CAG7B;;AACAxkB,UAAI,CAACqoB,aAAL,CAAmB5N,SAAS,CAAC0M,MAA7B,EAAqC,CAArC,EAJ6B,CAK7B;;AACAnnB,UAAI,CAACsoB,aAAL,CAAmBxE,QAAnB,EAA6BrJ,SAAS,CAAC4M,MAAvC,EAN6B,CAO7B;;AACArnB,UAAI,CAACsoB,aAAL,CAAmBvE,QAAnB,EAA6BtJ,SAAS,CAAC6M,MAAvC,EAR6B,CAS7B;;AACAtnB,UAAI,CAACsoB,aAAL,CAAmBtE,MAAnB,EAA2BvJ,SAAS,CAAC8M,MAArC,EAV6B,CAW7B;;AACAvnB,UAAI,CAACsoB,aAAL,CAAmBrE,OAAnB,EAA4BxJ,SAAS,CAAC+M,MAAtC,EAZ6B,CAa7B;;AACAxnB,UAAI,CAACqoB,aAAL,CAAmBnE,KAAnB,EAA0BzJ,SAAS,CAACgN,MAApC,EAd6B,CAe7B;;AACAznB,UAAI,CAACqoB,aAAL,CAAmBlE,IAAnB,EAAyB1J,SAAS,CAACiN,MAAnC,EAhB6B,CAiB7B;;AACA1nB,UAAI,CAACqoB,aAAL,CAAmBjE,eAAnB,EAAoC3J,SAAS,CAACkN,MAA9C,EAlB6B,CAmB7B;;AACA3nB,UAAI,CAACqoB,aAAL,CAAmBhE,KAAnB,EAA0B5J,SAAS,CAACmN,MAApC,EApB6B,CAqB7B;;AACA5nB,UAAI,CAACsoB,aAAL,CAAmBhE,SAAnB,EAA8B7J,SAAS,CAACoN,MAAxC,EAtB6B,CAuB7B;;AACA7nB,UAAI,CAACsoB,aAAL,CAAmB/D,SAAnB,EAA8B9J,SAAS,CAACqN,MAAxC,EAxB6B,CAyB7B;;AACA9nB,UAAI,CAACsoB,aAAL,CAAmB9D,OAAnB,EAA4B/J,SAAS,CAACsN,MAAtC,EA1B6B,CA2B7B;;AACA/nB,UAAI,CAACsoB,aAAL,CAAmB7D,UAAnB,EAA+BhK,SAAS,CAACuN,MAAzC,EA5B6B,CA6B7B;;AACAhoB,UAAI,CAACsoB,aAAL,CAAmB5D,OAAnB,EAA4BjK,SAAS,CAACwN,MAAtC,EA9B6B,CA+B7B;;AACAjoB,UAAI,CAACqoB,aAAL,CAAmBxK,KAAnB,EAA0BpD,SAAS,CAACyN,MAApC,EAhC6B,CAiC7B;;AACAloB,UAAI,CAACqoB,aAAL,CAAmB1D,OAAnB,EAA4BlK,SAAS,CAAC0N,MAAtC,EAlC6B,CAmC7B;;AACAnoB,UAAI,CAACwoB,IAAL,CAAU,IAAV,EAAgB/N,SAAS,CAACqL,MAA1B;AACA,aAAO9lB,IAAP;AACH,KAvME;AAyMHuV,YAAQ,EAAG,YAAW;AAClB,aAAO,QACH,aADG,GACauO,QADb,GACwB,KADxB,GAEH,gBAFG,GAEgBC,QAFhB,GAE2B,KAF3B,GAGH,cAHG,GAGcC,MAHd,GAGuB,KAHvB,GAIH,eAJG,GAIelK,KAAK,CAAC6O,cAAN,CAAqB1E,OAArB,CAJf,GAI+C,KAJ/C,GAKH,aALG,GAKa,KAAKlT,IALlB,GAKyB,KALzB,GAMH,cANG,GAMcoT,IAAI,CAAC5O,QAAL,CAAc,EAAd,EAAkBqT,WAAlB,EANd,GAMgD,KANhD,GAOH,uBAPG,GAOuBxE,eAPvB,GAOyC,WAPzC,GAQH,aARG,GAQaC,KARb,GAQqB,WARrB,GASH,uBATG,GASuBC,SATvB,GASmC,KATnC,GAUH,oBAVG,GAUoBC,SAVpB,GAUgC,WAVhC,GAWH,sBAXG,GAWsBC,OAXtB,GAWgC,WAXhC,GAYH,qBAZG,GAYqBC,UAZrB,GAYkC,KAZlC,GAaH,eAbG,GAaeC,OAbf,GAayB,KAbzB,GAcH,aAdG,GAca7G,KAdb,GAcqB,KAdrB,GAeH,eAfG,GAee8G,OAff,GAeyB,KAfzB,GAgBH,wBAhBG,IAgByBlK,SAAS,CAACqL,MAAV,GAAmBxB,SAAnB,GAA+BC,SAA/B,GAA2CC,OAhBpE,IAgB+E,UAhB/E,GAiBH,GAjBJ;AAkBH;AA5NE,GAAP;AA8NH,CAhQD,C;;;;;;;;;;;ACJA5K,OAAO,CAACiP,WAAR,GAAsB9O,mBAAO,CAAC,uFAAD,CAA7B;AACAH,OAAO,CAACkP,UAAR,GAAqB/O,mBAAO,CAAC,qFAAD,CAA5B,C;;;;;;;;;;;ACDA,IAAID,KAAK,GAAGC,mBAAO,CAAC,wEAAD,CAAnB;AAAA,IACIU,SAAS,GAAGX,KAAK,CAACW,SADtB;AAGA;;;AACAd,MAAM,CAACC,OAAP,GAAiB,YAAY;AACzB,MAAImP,cAAc,GAAG,CAArB;AAAA,MACIC,aAAa,GAAG,CADpB;AAAA,MAEI3E,KAAK,GAAG,CAFZ;AAAA,MAGIM,OAAO,GAAG,CAHd;AAAA,MAIIsE,cAAc,GAAG,CAJrB;AAMA,SAAO;AACH,QAAIC,WAAJ,GAAmB;AAAE,aAAOH,cAAP;AAAuB,KADzC;;AAEH,QAAIG,WAAJ;AAAiB;AAAUvR,OAA3B,EAAgC;AAAEoR,oBAAc,GAAGC,aAAa,GAAGrR,GAAjC;AAAuC,KAFtE;;AAIH,QAAIwR,YAAJ,GAAoB;AAAE,aAAOH,aAAP;AAAsB,KAJzC;;AAKH,QAAIG,YAAJ;AAAkB;AAAUxR,OAA5B,EAAiC;AAAEqR,mBAAa,GAAGD,cAAc,GAAGpR,GAAjC;AAAuC,KALvE;;AAOH,QAAI2K,IAAJ,GAAY;AAAE,aAAO+B,KAAP;AAAc,KAPzB;;AAQH,QAAI/B,IAAJ;AAAU;AAAU3K,OAApB,EAAyB;AAAE0M,WAAK,GAAG1M,GAAR;AAAc,KARtC;;AAUH,QAAIgO,MAAJ,GAAc;AAAE,aAAOhB,OAAP;AAAgB,KAV7B;;AAWH,QAAIgB,MAAJ;AAAY;AAAUhO,OAAtB,EAA2B;AAAEgN,aAAO,GAAGhN,GAAV;AAAgB,KAX1C;;AAaH,QAAI6N,aAAJ,GAAqB;AAAE,aAAOyD,cAAP;AAAuB,KAb3C;;AAcH,QAAIzD,aAAJ;AAAmB;AAAU7N,OAA7B,EAAkC;AAAEsR,oBAAc,GAAGtR,GAAjB;AAAuB,KAdxD;;AAgBH,QAAIyR,cAAJ,GAAsB;AAClB,aAAO3O,SAAS,CAAC4O,MAAV,GAAmBJ,cAA1B;AACH,KAlBE;;AAoBH/B,kBAAc,EAAG;AAAS;AAAUlnB,QAAnB,EAAyB;AACtC;AACA,UAAIA,IAAI,CAACrB,MAAL,KAAgB8b,SAAS,CAAC4O,MAA1B,IAAoCrpB,IAAI,CAACqmB,YAAL,CAAkB,CAAlB,MAAyB5L,SAAS,CAAC6O,MAA3E,EACI,MAAMxP,KAAK,CAACyB,MAAN,CAAakO,WAAnB,CAHkC,CAKtC;;AACAV,oBAAc,GAAG/oB,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAACiP,MAA5B,CAAjB,CANsC,CAOtC;;AACAV,mBAAa,GAAGhpB,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAACkP,MAA5B,CAAhB,CARsC,CAStC;;AACAtF,WAAK,GAAGrkB,IAAI,CAACqmB,YAAL,CAAkB5L,SAAS,CAACmP,MAA5B,CAAR,CAVsC,CAWtC;;AACAjF,aAAO,GAAG3kB,IAAI,CAACqmB,YAAL,CAAkB5L,SAAS,CAACoP,MAA5B,CAAV,CAZsC,CAatC;;AACAZ,oBAAc,GAAGjpB,IAAI,CAACwmB,YAAL,CAAkB/L,SAAS,CAACqP,MAA5B,CAAjB;AACH,KAnCE;AAqCHM,YAAQ,EAAG,YAAW;AACnB,UAAIprB,CAAC,GAAG+b,MAAM,CAAC4D,KAAP,CAAalE,SAAS,CAAC4O,MAAV,GAAmBJ,cAAhC,CAAR,CADmB,CAElB;;AACAjqB,OAAC,CAACqpB,aAAF,CAAgB5N,SAAS,CAAC6O,MAA1B,EAAkC,CAAlC;AACAtqB,OAAC,CAACqpB,aAAF,CAAgB,CAAhB,EAAmB,CAAnB,EAJkB,CAKlB;;AACArpB,OAAC,CAACspB,aAAF,CAAgBS,cAAhB,EAAgCtO,SAAS,CAACiP,MAA1C,EANkB,CAOlB;;AACA1qB,OAAC,CAACspB,aAAF,CAAgBU,aAAhB,EAA+BvO,SAAS,CAACkP,MAAzC,EARkB,CASlB;;AACA3qB,OAAC,CAACqpB,aAAF,CAAgBhE,KAAhB,EAAuB5J,SAAS,CAACmP,MAAjC,EAVkB,CAWlB;;AACA5qB,OAAC,CAACqpB,aAAF,CAAgB1D,OAAhB,EAAyBlK,SAAS,CAACoP,MAAnC,EAZkB,CAalB;;AACA7qB,OAAC,CAACspB,aAAF,CAAgBW,cAAhB,EAAgCxO,SAAS,CAACqP,MAA1C,EAdkB,CAelB;;AACA9qB,OAAC,CAACwpB,IAAF,CAAO,GAAP,EAAY/N,SAAS,CAAC4O,MAAtB;AAEA,aAAOrqB,CAAP;AACH,KAxDE;AA0DHuW,YAAQ,EAAG,YAAW;AAClB,aAAO,QACH,oBADG,GACoBwT,cADpB,GACqC,KADrC,GAEH,qBAFG,GAEqBC,aAFrB,GAEqC,KAFrC,GAGH,aAHG,GAGa3E,KAHb,GAGqB,WAHrB,GAIH,iBAJG,GAIiBM,OAAO,CAACpP,QAAR,CAAiB,EAAjB,EAAqBqT,WAArB,EAJjB,GAIsD,KAJtD,GAKH,wBALG,GAKwBK,cALxB,GAKyC,IALzC,GAMP,GANA;AAOH;AAlEE,GAAP;AAoEH,CA3ED,C;;;;;;;;;;;ACJAtP,MAAM,CAACC,OAAP,GAAiB;AAAU;AAAU2Q,KAApB,EAA2B;AAE1C,MAAIC,IAAI,GAAGzQ,mBAAO,CAAC,kBAAD,CAAlB;;AAEA,MAAIlF,IAAI,GAAG;AAAC4V,aAAS,EAAE,CAAC1R,QAAQ,CAACwR,KAAK,CAAC5rB,MAAN,GAAe,IAAhB,CAAR,GAAgC,CAAjC,IAAsC;AAAlD,GAAX;AAEA,SAAO;AACL+rB,WAAO,EAAE,YAAY;AACnB,aAAOF,IAAI,CAACG,cAAL,CAAoBJ,KAApB,EAA2B1V,IAA3B,CAAP;AACD,KAHI;AAKL+V,gBAAY,EAAE;AAAU;AAAYnO,YAAtB,EAAgC;AAC5C,UAAIoO,GAAG,GAAGL,IAAI,CAACM,gBAAL,CAAsBjW,IAAtB,CAAV;AAAA,UAAuCkW,KAAK,GAAG,EAA/C;AAAA,UAAmDC,KAAK,GAAG,CAA3D;AACAH,SAAG,CAACI,EAAJ,CAAO,MAAP,EAAe,UAAUjrB,IAAV,EAAgB;AAC7B+qB,aAAK,CAACvtB,IAAN,CAAWwC,IAAX;AACAgrB,aAAK,IAAIhrB,IAAI,CAACrB,MAAd;AACD,OAHD;AAIAksB,SAAG,CAACI,EAAJ,CAAO,KAAP,EAAc,YAAY;AACxB,YAAIC,GAAG,GAAGnQ,MAAM,CAAC4D,KAAP,CAAaqM,KAAb,CAAV;AAAA,YAA+BG,OAAO,GAAG,CAAzC;AACAD,WAAG,CAAC1C,IAAJ,CAAS,CAAT;;AACA,aAAK,IAAIhR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuT,KAAK,CAACpsB,MAA1B,EAAkC6Y,CAAC,EAAnC,EAAuC;AACrC,cAAI4T,IAAI,GAAGL,KAAK,CAACvT,CAAD,CAAhB;AACA4T,cAAI,CAACC,IAAL,CAAUH,GAAV,EAAeC,OAAf;AACAA,iBAAO,IAAIC,IAAI,CAACzsB,MAAhB;AACD;;AACD8d,gBAAQ,IAAIA,QAAQ,CAACyO,GAAD,CAApB;AACD,OATD;AAUAL,SAAG,CAACryB,GAAJ,CAAQ+xB,KAAR;AACD;AAtBI,GAAP;AAwBD,CA9BD,C;;;;;;;;;;;ACAA3Q,OAAO,CAAC0R,QAAR,GAAmBvR,mBAAO,CAAC,iFAAD,CAA1B;AACAH,OAAO,CAAC2R,QAAR,GAAmBxR,mBAAO,CAAC,iFAAD,CAA1B,C;;;;;;;;;;;ACDAJ,MAAM,CAACC,OAAP,GAAiB;AAAU;AAAU2Q,KAApB,EAA2B;AAE1C,MAAIC,IAAI,GAAGzQ,mBAAO,CAAC,kBAAD,CAAlB;;AAEA,SAAO;AACL0R,WAAO,EAAE,YAAY;AACnB,aAAOjB,IAAI,CAACkB,cAAL,CAAoBnB,KAApB,CAAP;AACD,KAHI;AAKLoB,gBAAY,EAAE;AAAU;AAAYlP,YAAtB,EAAgC;AAC5C,UAAIoO,GAAG,GAAGL,IAAI,CAACoB,gBAAL,EAAV;AAAA,UAAmCb,KAAK,GAAG,EAA3C;AAAA,UAA+CC,KAAK,GAAG,CAAvD;AACAH,SAAG,CAACI,EAAJ,CAAO,MAAP,EAAe,UAAUjrB,IAAV,EAAgB;AAC7B+qB,aAAK,CAACvtB,IAAN,CAAWwC,IAAX;AACAgrB,aAAK,IAAIhrB,IAAI,CAACrB,MAAd;AACD,OAHD;AAIAksB,SAAG,CAACI,EAAJ,CAAO,KAAP,EAAc,YAAY;AACxB,YAAIC,GAAG,GAAGnQ,MAAM,CAAC4D,KAAP,CAAaqM,KAAb,CAAV;AAAA,YAA+BG,OAAO,GAAG,CAAzC;AACAD,WAAG,CAAC1C,IAAJ,CAAS,CAAT;;AACA,aAAK,IAAIhR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuT,KAAK,CAACpsB,MAA1B,EAAkC6Y,CAAC,EAAnC,EAAuC;AACrC,cAAI4T,IAAI,GAAGL,KAAK,CAACvT,CAAD,CAAhB;AACA4T,cAAI,CAACC,IAAL,CAAUH,GAAV,EAAeC,OAAf;AACAA,iBAAO,IAAIC,IAAI,CAACzsB,MAAhB;AACD;;AACD8d,gBAAQ,IAAIA,QAAQ,CAACyO,GAAD,CAApB;AACD,OATD;AAUAL,SAAG,CAACryB,GAAJ,CAAQ+xB,KAAR;AACD;AAtBI,GAAP;AAwBD,CA5BD,C;;;;;;;;;;;ACAA5Q,MAAM,CAACC,OAAP,GAAiB;AACb;AACAoM,QAAM,EAAa,EAFN;AAEU;AACvBM,QAAM,EAAa,UAHN;AAGkB;AAC/BG,QAAM,EAAa,CAJN;AAIS;AACtBC,QAAM,EAAa,CALN;AAKS;AACtBC,QAAM,EAAa,CANN;AAMS;AACtBC,QAAM,EAAa,EAPN;AAOU;AACvBC,QAAM,EAAa,EARN;AAQU;AACvBC,QAAM,EAAa,EATN;AASU;AACvBC,QAAM,EAAa,EAVN;AAUU;AACvBC,QAAM,EAAa,EAXN;AAWU;AACvBC,QAAM,EAAa,EAZN;AAYU;;AAEvB;AACAwG,QAAM,EAAa,UAfN;AAekB;AAC/BC,QAAM,EAAa,EAhBN;AAgBU;AACvBC,QAAM,EAAa,CAjBN;AAiBS;AACtBC,QAAM,EAAa,CAlBN;AAkBS;AACtBC,QAAM,EAAa,EAnBN;AAmBU;;AAEvB;AACA/H,QAAM,EAAa,EAtBN;AAsBU;AACvBqB,QAAM,EAAa,UAvBN;AAuBkB;AAC/BE,QAAM,EAAa,CAxBN;AAwBS;AACtBC,QAAM,EAAa,CAzBN;AAyBS;AACtBC,QAAM,EAAa,CA1BN;AA0BS;AACtBC,QAAM,EAAa,EA3BN;AA2BU;AACvBC,QAAM,EAAa,EA5BN;AA4BU;AACvBC,QAAM,EAAa,EA7BN;AA6BU;AACvBC,QAAM,EAAa,EA9BN;AA8BU;AACvBC,QAAM,EAAa,EA/BN;AA+BU;AACvBC,QAAM,EAAa,EAhCN;AAgCU;AACvBC,QAAM,EAAa,EAjCN;AAiCU;AACvBC,QAAM,EAAa,EAlCN;AAkCU;AACvBC,QAAM,EAAa,EAnCN;AAmCU;AACvBC,QAAM,EAAa,EApCN;AAoCU;AACvBC,QAAM,EAAa,EArCN;AAqCU;AACvBC,QAAM,EAAa,EAtCN;AAsCU;;AAEvB;AACAkB,QAAM,EAAa,EAzCN;AAyCU;AACvBC,QAAM,EAAa,UA1CN;AA0CkB;AAC/BI,QAAM,EAAa,CA3CN;AA2CS;AACtBC,QAAM,EAAa,EA5CN;AA4CU;AACvBC,QAAM,EAAa,EA7CN;AA6CU;AACvBC,QAAM,EAAa,EA9CN;AA8CU;AACvBC,QAAM,EAAa,EA/CN;AA+CU;;AAEvB;AACA7E,QAAM,EAAa,CAlDN;AAkDS;AACtB0J,QAAM,EAAa,CAnDN;AAmDS;AACtBC,UAAQ,EAAW,CApDN;AAoDS;AACtBC,UAAQ,EAAW,CArDN;AAqDS;AACtBC,UAAQ,EAAW,CAtDN;AAsDS;AACtBC,UAAQ,EAAW,CAvDN;AAuDS;AACtBC,UAAQ,EAAW,CAxDN;AAwDS;AACtB;AACA9J,UAAQ,EAAW,CA1DN;AA0DS;AACtB+J,mBAAiB,EAAE,CA3DN;AA2DS;AACtBC,QAAM,EAAa,EA5DN;AA4DS;AACtB;AACAC,OAAK,EAAc,EA9DN;AA8DU;AACvB;AACAC,MAAI,EAAe,EAhEN;AAgEU;AACvB;AACAC,WAAS,EAAU,EAlEN;AAkEU;AACvBC,UAAQ,EAAW,EAnEN;AAmEU;;AAEvB;AACAE,SAAO,EAAY,CAtEN;AAsEU;AACvBC,WAAS,EAAU,CAvEN;AAuEU;AACvBC,WAAS,EAAU,CAxEN;AAwEU;AACvBC,UAAQ,EAAW,CAzEN;AAyEU;AACvBC,SAAO,EAAY,CA1EN;AA0EU;AACvBE,SAAO,EAAY,EA3EN;AA2EU;AACvBm7G,SAAO,EAAY,IA5EN;AA4EY;AACzBl7G,SAAO,EAAY,IA7EN;AA6EY;;AAEzB;AACA3U,MAAI,EAAe,CAhFN;AAiFbH,QAAM,EAAa,CAjFN;AAkFbP,MAAI,EAAe,CAlFN;;AAoFb;AACAsV,OAAK,EAAc,CArFN;AAsFbC,SAAO,EAAY,CAtFN;;AAwFb;AACAC,UAAQ,EAAW,MAzFN;AA0FbC,WAAS,EAAU,MA1FN;AA2FbC,QAAM,EAAa,MA3FN;AA4FbC,QAAM,EAAa,MA5FN;AA6FbC,SAAO,EAAY,MA7FN;AA8FbC,YAAU,EAAS,MA9FN;AA+FbC,SAAO,EAAY,MA/FN;AAgGbC,SAAO,EAAY,MAhGN;AAiGbC,UAAQ,EAAW,MAjGN;AAkGbC,eAAa,EAAM,MAlGN;AAmGbC,kBAAgB,EAAG,MAnGN;AAoGbC,kBAAgB,EAAG,MApGN;AAqGbC,cAAY,EAAO,MArGN;AAsGbC,eAAa,EAAM,MAtGN;AAuGbC,kBAAgB,EAAG,MAvGN;AAwGbC,SAAO,EAAY,MAxGN;AAyGbC,SAAO,EAAY,MAzGN;AA0GbC,WAAS,EAAU,MA1GN;AA4GbC,gBAAc,EAAK,UA5GN;AA6GbC,gBAAc,EAAK,MA7GN;AA8GbC,kBAAgB,EAAG,CA9GN;AA+GbC,gBAAc,EAAK,CA/GN;AAgHbC,cAAY,EAAO,EAhHN;AAiHbC,cAAY,EAAO;AAjHN,CAAjB,C;;;;;;;;;;;ACAA9X,MAAM,CAACC,OAAP,GAAiB;AACb;AACA,iBAAgB,oCAFH;AAGb,iBAAgB,oCAHH;AAIb,iBAAgB,oCAJH;;AAMb;AACA,aAAY,uBAPC;AAQb,aAAY,uBARC;AASb,qBAAoB,gCATP;AAUb,oBAAmB,wCAVN;;AAYb;AACA,gBAAe,mDAbF;AAcb,sBAAqB,4EAdR;AAeb,mBAAkB,4EAfL;AAgBb,wBAAuB,6EAhBV;AAiBb,0BAAyB,8EAjBZ;AAkBb,sBAAqB,wEAlBR;AAmBb,0BAAwB,wEAnBX;AAoBb,uBAAqB,8EApBR;AAqBb,yBAAwB,6DArBX;AAsBb,wBAAuB,yCAtBV;;AAwBb;AACA,uBAAsB,4BAzBT;AA0Bb,mBAAkB,4BA1BL;AA2Bb,YAAW,wBA3BE;AA4Bb,cAAa,qBA5BA;AA6Bb,6BAA4B,iCA7Bf;AA8Bb,oBAAmB,oBA9BN;AA+Bb,qBAAoB,iBA/BP;AAgCb,sBAAqB,kBAhCR;AAiCb,oBAAmB;AAjCN,CAAjB,C;;;;;;;;;;;ACAA,IAAIe,EAAE,GAAGZ,mBAAO,CAAC,kFAAD,CAAP,CAAwBA,OAAxB,EAAT;AAAA,IACIC,GAAG,GAAGD,mBAAO,CAAC,kBAAD,CADjB;;AAGAY,EAAE,CAACQ,UAAH,GAAgBR,EAAE,CAACQ,UAAH,IAAiBnB,GAAG,CAACmB,UAArC;;AAEAxB,MAAM,CAACC,OAAP,GAAiB;AAAS;AAAU+Y,IAAnB,EAAyB;AAEtC,MAAIC,KAAK,GAAGD,IAAI,IAAI,EAApB;AAAA,MACIu4G,YAAY,GAAG,CADnB;AAAA,MAEIr4G,IAAI,GAAGC,OAAO,EAFlB;AAAA,MAGIC,KAAK,GAAG,IAHZ;;AAKA,WAASD,OAAT,GAAmB;AACf,WAAO;AACHE,eAAS,EAAG,KADT;AAEHC,cAAQ,EAAG,KAFR;AAGHC,YAAM,EAAG,KAHN;AAIHC,gBAAU,EAAG,KAJV;AAKHxT,WAAK,EAAG,CALL;AAMHyT,WAAK,EAAG;AANL,KAAP;AAQH;;AAED,MAAIR,KAAK,IAAIjY,EAAE,CAACQ,UAAH,CAAcyX,KAAd,CAAb,EAAmC;AAC/BG,SAAK,GAAGpY,EAAE,CAACmD,QAAH,CAAY8U,KAAZ,CAAR;AACAC,QAAI,CAACG,SAAL,GAAiBD,KAAK,CAAClT,WAAN,EAAjB;AACAgT,QAAI,CAAClT,KAAL,GAAaoT,KAAK,CAACpT,KAAnB;AACAkT,QAAI,CAACO,KAAL,GAAaL,KAAK,CAACK,KAAnB;AACAP,QAAI,CAACM,UAAL,GAAkB,CAAC,EAAE,IAAIpa,QAAQ,CAAE,CAACga,KAAK,CAAC/S,IAAN,GAAajH,QAAQ,CAAE,KAAF,EAAS,CAAT,CAAtB,EAAmCxD,QAAnC,CAA6C,CAA7C,EAAgD,CAAhD,CAAF,CAAd,CAAnB;AACAsd,QAAI,CAACI,QAAL,GAAgB,CAAC,EAAE,IAAIla,QAAQ,CAAE,CAACga,KAAK,CAAC/S,IAAN,GAAajH,QAAQ,CAAE,KAAF,EAAS,CAAT,CAAtB,EAAmCxD,QAAnC,CAA6C,CAA7C,EAAgD,CAAhD,CAAF,CAAd,CAAjB;AACAsd,QAAI,CAACK,MAAL,GAAclZ,GAAG,CAAC6G,QAAJ,CAAa+R,KAAb,EAAoB,CAApB,MAA2B,GAAzC;AACH,GARD,MAQO;AACHS,WAAO,CAACC,IAAR,CAAa,mBAAmBV,KAAhC;AACH;;AAED,SAAO;AAEH,QAAII,SAAJ,GAAiB;AACb,aAAOH,IAAI,CAACG,SAAZ;AACH,KAJE;;AAMH,QAAIO,QAAJ,GAAgB;AACZ,aAAOV,IAAI,CAACI,QAAZ;AACH,KARE;;AAUH,QAAIC,MAAJ,GAAc;AACV,aAAOL,IAAI,CAACK,MAAZ;AACH,KAZE;;AAcH,QAAIvT,KAAJ,GAAa;AACT,aAAOkT,IAAI,CAAClT,KAAZ;AACH,KAhBE;;AAkBH,QAAIyT,KAAJ,GAAa;AACV,aAAOP,IAAI,CAACO,KAAZ;AACF,KApBE;;AAuBH,QAAID,UAAJ,GAAkB;AACd,aAAON,IAAI,CAACM,UAAZ;AACH,KAzBE;;AA2BHK,oBAAgB,EAAG,UAAS7b,GAAT,EAAc,CAEhC,CA7BE;AA+BH8b,oBAAgB,EAAG,UAAU9b,GAAV,EAAe,CAEjC,CAjCE;AAmCHpC,YAAQ,EAAG,YAAW;AACnB,aAAO,QACH,cADG,GACcqd,KADd,GACsB,KADtB,GAEH,oBAFG,GAEoBC,IAAI,CAACG,SAFzB,GAEqC,KAFrC,GAGH,mBAHG,GAGmBH,IAAI,CAACI,QAHxB,GAGmC,KAHnC,GAIH,iBAJG,GAIiBJ,IAAI,CAACK,MAJtB,GAI+B,KAJ/B,GAKH,qBALG,GAKqBL,IAAI,CAACM,UAL1B,GAKuC,KALvC,GAMH,cANG,GAMcN,IAAI,CAAClT,KANnB,GAM2B,IAN3B,GAOH,cAPG,GAOckT,IAAI,CAACO,KAPnB,GAO2B,IAP3B,GAQP,GARA;AASF;AA7CE,GAAP;AAgDH,CA9ED,C;;;;;;;;;;;ACLAxZ,OAAO,CAACG,OAAR,GAAkB,YAAW;AAC3B,MAAIY,EAAE,GAAGZ,mBAAO,CAAC,cAAD,CAAhB;;AACA,MAAIga,OAAO,CAACC,QAAR,CAAiB,UAAjB,CAAJ,EAAkC;AACjC,QAAI;AACFC,gBAAU,GAAGla,mBAAO,CAAC,qIAAD,CAApB;;AACA,UAAIxe,MAAM,CAACiS,IAAP,CAAYymB,UAAZ,EAAwBt1B,MAAxB,GAAiC,CAArC,EAAwC;AACtCgc,UAAE,GAAGsZ,UAAL;AACA;AACH,KALD,CAKE,OAAOhS,CAAP,EAAU,CAAE;AACd;;AACD,SAAOtH,EAAP;AACD,CAXD,C;;;;;;;;;;;ACAAhB,MAAM,CAACC,OAAP,GAAiBG,mBAAO,CAAC,wEAAD,CAAxB;AACAJ,MAAM,CAACC,OAAP,CAAemxH,UAAf,GAA4BhxH,mBAAO,CAAC,kFAAD,CAAnC;AACAJ,MAAM,CAACC,OAAP,CAAea,SAAf,GAA2BV,mBAAO,CAAC,gFAAD,CAAlC;AACAJ,MAAM,CAACC,OAAP,CAAe2B,MAAf,GAAwBxB,mBAAO,CAAC,0EAAD,CAA/B;AACAJ,MAAM,CAACC,OAAP,CAAesa,QAAf,GAA0Bna,mBAAO,CAAC,wEAAD,CAAjC,C;;;;;;;;;;;ACJA,IAAIY,EAAE,GAAGZ,mBAAO,CAAC,kFAAD,CAAP,CAAwBA,OAAxB,EAAT;AAAA,IACIC,GAAG,GAAGD,mBAAO,CAAC,kBAAD,CADjB;;AAGAY,EAAE,CAACQ,UAAH,GAAgBR,EAAE,CAACQ,UAAH,IAAiBnB,GAAG,CAACmB,UAArC;;AAEAxB,MAAM,CAACC,OAAP,GAAkB,YAAW;AAEzB,MAAI0a,QAAQ,GAAG,EAAf;AAAA,MACI7Z,SAAS,GAAGV,mBAAO,CAAC,gFAAD,CADvB;AAAA,MAEIwB,MAAM,GAAGxB,mBAAO,CAAC,0EAAD,CAFpB;AAAA,MAIIoxH,cAAc,GAAGnxH,GAAG,CAACoC,GAJzB;;AAOA,WAASoY,SAAT;AAAmB;AAAU7B,MAA7B,EAAmC;AAC/B,QAAI+B,YAAY,GAAG/B,IAAI,CAAC3Z,KAAL,CAAWmyH,cAAX,EAA2B,CAA3B,CAAnB;AACAx4G,QAAI,CAAC3Z,KAAL,CAAWmyH,cAAX,EAA2BtgI,OAA3B,CAAmC,UAASlJ,IAAT,EAAe;AAC9C,UAAI,CAACA,IAAD,IAASA,IAAI,CAACsV,MAAL,CAAY,CAAC,CAAb,EAAe,CAAf,MAAsB,GAAnC,EAAwC;AACxCyd,kBAAY,IAAIy2G,cAAc,GAAGxpI,IAAjC;AACA,UAAIod,IAAJ;;AACA,UAAI;AACAA,YAAI,GAAGpE,EAAE,CAACmD,QAAH,CAAY4W,YAAZ,CAAP;AACH,OAFD,CAEE,OAAOzS,CAAP,EAAU;AACRtH,UAAE,CAAC6Z,SAAH,CAAaE,YAAb;AACH;;AACD,UAAI3V,IAAI,IAAIA,IAAI,CAACL,MAAL,EAAZ,EACI,MAAMnD,MAAM,CAACqW,eAAP,CAAuB3Z,OAAvB,CAA+B,IAA/B,EAAqCyc,YAArC,CAAN;AACP,KAXD;AAYH;;AAED,WAASW,QAAT;AAAkB;AAAUC,KAA5B;AAAiC;AAAUC,SAA3C;AAAoD;AAAW61G,YAA/D,EAA2E;AACvE,QAAI,OAAO71G,OAAP,KAAmB,SAAvB,EAAkC;AAC9B61G,gBAAU,GAAG71G,OAAb;AACAA,aAAO,GAAG59B,SAAV;AACH;;AACD,QAAI89B,KAAK,GAAG,EAAZ;AACA9a,MAAE,CAAC+a,WAAH,CAAeJ,GAAf,EAAoBzqB,OAApB,CAA4B,UAASiX,IAAT,EAAe;AACvC,UAAI6Q,IAAI,GAAG3Y,GAAG,CAACN,IAAJ,CAAS4b,GAAT,EAAcxT,IAAd,CAAX;AAEA,UAAInH,EAAE,CAACmD,QAAH,CAAY6U,IAAZ,EAAkB9S,WAAlB,MAAmCurH,UAAvC,EACI31G,KAAK,GAAGA,KAAK,CAACE,MAAN,CAAaN,QAAQ,CAAC1C,IAAD,EAAO4C,OAAP,EAAgB61G,UAAhB,CAArB,CAAR;;AAEJ,UAAI,CAAC71G,OAAD,IAAYA,OAAO,CAACpX,IAAR,CAAawU,IAAb,CAAhB,EAAoC;AAChC8C,aAAK,CAACj4B,IAAN,CAAWwc,GAAG,CAACmC,SAAJ,CAAcwW,IAAd,KAAuBhY,EAAE,CAACmD,QAAH,CAAY6U,IAAZ,EAAkB9S,WAAlB,KAAkCsrH,cAAlC,GAAmD,EAA1E,CAAX;AACH;AAEJ,KAVD;AAWA,WAAO11G,KAAP;AACH;;AAED,SAAO;AACHjU,WAAO,EAAG;AAAS;AAAUmR,QAAnB,EAAyB;AAC/B6B,eAAS,CAAC7B,IAAD,CAAT;AACH,KAHE;AAKHoD,SAAK,EAAG,UAAS7K,GAAT,EAAc;AAClB,UAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;AACzBA,WAAG,GAAGnQ,MAAM,CAAC4D,KAAP,CAAauM,GAAG,CAACvsB,MAAjB,EAAyBusB,GAAzB,CAAN;AACH;;AACD,UAAIlsB,CAAC,GAAG+b,MAAM,CAAC4D,KAAP,CAAa,CAAb,CAAR;;AACA,UAAI,CAAC2V,QAAQ,CAAC31B,MAAd,EAAsB;AAClB,aAAK,IAAIo5B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,GAApB,EAAyBA,CAAC,EAA1B,EAA8B;AAC1B,cAAI9K,CAAC,GAAG8K,CAAR;;AACA,eAAK,IAAIjL,CAAC,GAAG,CAAb,EAAgB,EAAEA,CAAF,IAAO,CAAvB,GAA4B;AACxB,cAAI,CAACG,CAAC,GAAG,CAAL,MAAY,CAAhB,EAAoB;AAAEA,aAAC,GAAG,aAAcA,CAAC,KAAK,CAAxB;AAA6B,WAAnD,MAAyD;AAAEA,aAAC,GAAGA,CAAC,KAAK,CAAV;AAAc;;AAC7E,cAAIA,CAAC,GAAG,CAAR,EAAW;AACPjuB,aAAC,CAACqsI,YAAF,CAAep+G,CAAf,EAAkB,CAAlB;AACAA,aAAC,GAAGjuB,CAAC,CAACqnB,YAAF,CAAe,CAAf,CAAJ;AACH;;AACDiO,kBAAQ,CAACyD,CAAD,CAAR,GAAc9K,CAAd;AACH;AACJ;;AACD,UAAI9H,GAAG,GAAG,CAAV;AAAA,UAAa8Q,GAAG,GAAG,CAAnB;AAAA,UAAsB5L,GAAG,GAAGa,GAAG,CAACvsB,MAAhC;AAAA,UAAwCsyH,EAAE,GAAG,CAAC9rG,GAA9C;;AACA,aAAM,EAAEkF,GAAF,IAAS,CAAf,EAAkB4mG,EAAE,GAAG38F,QAAQ,CAAC,CAAC28F,EAAE,GAAG/lG,GAAG,CAAC+K,GAAG,EAAJ,CAAT,IAAoB,IAArB,CAAR,GAAsCg7F,EAAE,KAAK,CAAlD;;AAClB9rG,SAAG,GAAG,CAAC8rG,EAAP;AACAjyH,OAAC,CAACqsI,YAAF,CAAelmH,GAAG,GAAG,UAArB,EAAiC,CAAjC;AACA,aAAOnmB,CAAC,CAACqnB,YAAF,CAAe,CAAf,CAAP;AACH,KA3BE;AA6BHsC,kBAAc,EAAG;AAAS;AAAU1sB,UAAnB,EAA2B;AACxC,cAAQA,MAAR;AACI,aAAKwe,SAAS,CAACwK,MAAf;AACI,iBAAO,aAAahpB,MAAb,GAAsB,GAA7B;;AACJ,aAAKwe,SAAS,CAACyK,QAAf;AACI,iBAAO,eAAejpB,MAAf,GAAwB,GAA/B;;AACJ;AACI,iBAAO,kBAAkBA,MAAlB,GAA2B,GAAlC;AANR;AASH,KAvCE;AAyCHmlB,eAAW,EAAG;AAAS;AAAUuR,QAAnB;AAAyB;AAAUpV,WAAnC;AAA4C;AAAWiD,aAAvD;AAAkE;AAAUjB,QAA5E,EAAkF;AAC5F,UAAI5E,EAAE,CAACQ,UAAH,CAAcwX,IAAd,CAAJ,EAAyB;AACrB,YAAI,CAACnS,SAAL,EACI,OAAO,KAAP,CAFiB,CAEH;;AAElB,YAAIzB,IAAI,GAAGpE,EAAE,CAACmD,QAAH,CAAY6U,IAAZ,CAAX;;AACA,YAAI5T,IAAI,CAACc,WAAL,EAAJ,EAAwB;AACpB,iBAAO,KAAP;AACH;AACJ;;AACD,UAAI0U,MAAM,GAAGva,GAAG,CAAC2a,OAAJ,CAAYhC,IAAZ,CAAb;;AACA,UAAI,CAAChY,EAAE,CAACQ,UAAH,CAAcoZ,MAAd,CAAL,EAA4B;AACxBC,iBAAS,CAACD,MAAD,CAAT;AACH;;AAED,UAAIK,EAAJ;;AACA,UAAI;AACAA,UAAE,GAAGja,EAAE,CAACka,QAAH,CAAYlC,IAAZ,EAAkB,GAAlB,EAAuB,GAAvB,CAAL,CADA,CACkC;AACrC,OAFD,CAEE,OAAM1Q,CAAN,EAAS;AACPtH,UAAE,CAACyH,SAAH,CAAauQ,IAAb,EAAmB,GAAnB;AACAiC,UAAE,GAAGja,EAAE,CAACka,QAAH,CAAYlC,IAAZ,EAAkB,GAAlB,EAAuB,GAAvB,CAAL;AACH;;AACD,UAAIiC,EAAJ,EAAQ;AACJ,YAAI;AACAja,YAAE,CAACma,SAAH,CAAaF,EAAb,EAAiBrX,OAAjB,EAA0B,CAA1B,EAA6BA,OAAO,CAAC5e,MAArC,EAA6C,CAA7C;AACH,SAFD,CAGA,OAAOsjB,CAAP,EAAS;AACL,gBAAMA,CAAN;AACH,SALD,SAMQ;AACJtH,YAAE,CAACoa,SAAH,CAAaH,EAAb;AACH;AACJ;;AACDja,QAAE,CAACyH,SAAH,CAAauQ,IAAb,EAAmBpT,IAAI,IAAI,GAA3B;AACA,aAAO,IAAP;AACH,KA5EE;AA8EHkD,oBAAgB,EAAG;AAAS;AAAUkQ,QAAnB;AAAyB;AAAUpV,WAAnC;AAA4C;AAAWiD,aAAvD;AAAkE;AAAUjB,QAA5E;AAAkF;AAAY9C,YAA9F,EAAwG;AACvH,UAAG,OAAO8C,IAAP,KAAgB,UAAnB,EAA+B;AAC3B9C,gBAAQ,GAAG8C,IAAX;AACAA,YAAI,GAAG5nB,SAAP;AACH;;AAEDgjB,QAAE,CAACqa,MAAH,CAAUrC,IAAV,EAAgB,UAASqC,MAAT,EAAiB;AAC7B,YAAGA,MAAM,IAAI,CAACxU,SAAd,EACI,OAAO/D,QAAQ,CAAC,KAAD,CAAf;AAEJ9B,UAAE,CAACoE,IAAH,CAAQ4T,IAAR,EAAc,UAAS7V,GAAT,EAAciC,IAAd,EAAoB;AAC9B,cAAGiW,MAAM,IAAGjW,IAAI,CAACc,WAAL,EAAZ,EAAgC;AAC5B,mBAAOpD,QAAQ,CAAC,KAAD,CAAf;AACH;;AAED,cAAI8X,MAAM,GAAGva,GAAG,CAAC2a,OAAJ,CAAYhC,IAAZ,CAAb;AACAhY,YAAE,CAACqa,MAAH,CAAUT,MAAV,EAAkB,UAASS,MAAT,EAAiB;AAC/B,gBAAG,CAACA,MAAJ,EACIR,SAAS,CAACD,MAAD,CAAT;AAEJ5Z,cAAE,CAACkE,IAAH,CAAQ8T,IAAR,EAAc,GAAd,EAAmB,GAAnB,EAAwB,UAAS7V,GAAT,EAAc8X,EAAd,EAAkB;AACtC,kBAAG9X,GAAH,EAAQ;AACJnC,kBAAE,CAACua,KAAH,CAASvC,IAAT,EAAe,GAAf,EAAoB,YAAW;AAC3BhY,oBAAE,CAACkE,IAAH,CAAQ8T,IAAR,EAAc,GAAd,EAAmB,GAAnB,EAAwB,UAAS7V,GAAT,EAAc8X,EAAd,EAAkB;AACtCja,sBAAE,CAACwa,KAAH,CAASP,EAAT,EAAarX,OAAb,EAAsB,CAAtB,EAAyBA,OAAO,CAAC5e,MAAjC,EAAyC,CAAzC,EAA4C,YAAW;AACnDgc,wBAAE,CAACya,KAAH,CAASR,EAAT,EAAa,YAAW;AACpBja,0BAAE,CAACua,KAAH,CAASvC,IAAT,EAAepT,IAAI,IAAI,GAAvB,EAA4B,YAAW;AACnC9C,kCAAQ,CAAC,IAAD,CAAR;AACH,yBAFD;AAGH,uBAJD;AAKH,qBAND;AAOH,mBARD;AASH,iBAVD;AAWH,eAZD,MAYO;AACH,oBAAGmY,EAAH,EAAO;AACHja,oBAAE,CAACwa,KAAH,CAASP,EAAT,EAAarX,OAAb,EAAsB,CAAtB,EAAyBA,OAAO,CAAC5e,MAAjC,EAAyC,CAAzC,EAA4C,YAAW;AACnDgc,sBAAE,CAACya,KAAH,CAASR,EAAT,EAAa,YAAW;AACpBja,wBAAE,CAACua,KAAH,CAASvC,IAAT,EAAepT,IAAI,IAAI,GAAvB,EAA4B,YAAW;AACnC9C,gCAAQ,CAAC,IAAD,CAAR;AACH,uBAFD;AAGH,qBAJD;AAKH,mBAND;AAOH,iBARD,MAQO;AACH9B,oBAAE,CAACua,KAAH,CAASvC,IAAT,EAAepT,IAAI,IAAI,GAAvB,EAA4B,YAAW;AACnC9C,4BAAQ,CAAC,IAAD,CAAR;AACH,mBAFD;AAGH;AACJ;AACJ,aA5BD;AA6BH,WAjCD;AAkCH,SAxCD;AAyCH,OA7CD;AA8CH,KAlIE;AAoIH4B,aAAS,EAAG;AAAS;AAAUsU,QAAnB,EAAyB;AACjC,aAAO0C,QAAQ,CAAC1C,IAAD,EAAO,IAAP,CAAf;AACH,KAtIE;AAwIHiD,iBAAa,EAAG;AAAS;AAAUjD,QAAnB,EAAyB,CAExC,CA1IE;AA4IHkD,iBAAa,EAAG;AAAS;AAAUlD,QAAnB,EAAyB,CAExC,CA9IE;AAgJHlP,YAAQ,EAAG,UAAS9jB,KAAT,EAAgB;AACvB,UAAIob,MAAM,CAACC,QAAP,CAAgBrb,KAAhB,CAAJ,EAA4B;AACxB,eAAOA,KAAP;AACH,OAFD,MAEO;AACH,YAAIA,KAAK,CAAChB,MAAN,KAAiB,CAArB,EAAwB;AACpB,iBAAOoc,MAAM,CAAC4D,KAAP,CAAa,CAAb,CAAP;AACH;;AACD,eAAO5D,MAAM,CAACre,IAAP,CAAYiD,KAAZ,EAAmB,MAAnB,CAAP;AACH;AACJ,KAzJE;AA2JH8a,aAAS,EAAGA,SA3JT;AA4JHc,UAAM,EAAGA;AA5JN,GAAP;AA8JH,CA3MgB,EAAjB,C;;;;;;;;;;;ACLA,IAAIzB,KAAK,GAAGC,mBAAO,CAAC,uEAAD,CAAnB;AAAA,IACIwc,OAAO,GAAGxc,mBAAO,CAAC,6EAAD,CADrB;AAAA,IAEIU,SAAS,GAAGX,KAAK,CAACW,SAFtB;AAAA,IAGI+b,OAAO,GAAGzc,mBAAO,CAAC,6EAAD,CAHrB;;AAKAJ,MAAM,CAACC,OAAP,GAAiB;AAAU;AAAUja,KAApB,EAA2B;AAExC,MAAI82B,YAAY,GAAG,IAAIF,OAAO,CAAC1N,WAAZ,EAAnB;AAAA,MACI6N,UAAU,GAAG3b,MAAM,CAAC4D,KAAP,CAAa,CAAb,CADjB;AAAA,MAEIgY,QAAQ,GAAG5b,MAAM,CAAC4D,KAAP,CAAa,CAAb,CAFf;AAAA,MAGIiY,YAAY,GAAG,KAHnB;AAAA,MAIIC,gBAAgB,GAAG,IAJvB;AAAA,MAKIC,MAAM,GAAG/b,MAAM,CAAC4D,KAAP,CAAa,CAAb,CALb;;AAOA,WAASoY,wBAAT,GAAoC;AAChC,QAAI,CAACp3B,KAAD,IAAU,CAACob,MAAM,CAACC,QAAP,CAAgBrb,KAAhB,CAAf,EAAuC;AACnC,aAAOob,MAAM,CAAC4D,KAAP,CAAa,CAAb,CAAP;AACH;;AACD8X,gBAAY,CAACrQ,wBAAb,CAAsCzmB,KAAtC;;AACA,WAAOA,KAAK,CAACgB,KAAN,CAAY81B,YAAY,CAAC1Q,cAAzB,EAAyC0Q,YAAY,CAAC1Q,cAAb,GAA8B0Q,YAAY,CAACpR,cAApF,CAAP;AACH;;AAED,WAAS2R,OAAT,CAAiBh3B,IAAjB,EAAuB;AACnB;AACA,QAAI,CAACy2B,YAAY,CAACzR,KAAb,GAAqB,GAAtB,MAA+B,GAAnC,EAAwC;AACrC,UAAIlL,KAAK,CAACic,KAAN,CAAY/1B,IAAZ,MAAsBy2B,YAAY,CAACtQ,UAAb,CAAwBhB,GAAlD,EAAuD;AACnD,eAAO,KAAP;AACH;AACH,KAJD,MAIO,CACH;AACA;AACA;AACH;;AACD,WAAO,IAAP;AACH;;AAED,WAAS8R,UAAT;AAAoB;AAAWC,OAA/B;AAAsC;AAAYza,UAAlD;AAA4D;AAAUH,MAAtE,EAA4E;AACxE,QAAG,OAAOG,QAAP,KAAoB,WAApB,IAAmC,OAAOya,KAAP,KAAiB,QAAvD,EAAiE;AAC7D5a,UAAI,GAAC4a,KAAL;AACAA,WAAK,GAAC,KAAK,CAAX;AACH;;AACD,QAAIN,YAAJ,EAAkB;AACd,UAAIM,KAAK,IAAIza,QAAb,EAAuB;AACnBA,gBAAQ,CAAC1B,MAAM,CAAC4D,KAAP,CAAa,CAAb,CAAD,EAAkB7E,KAAK,CAACyB,MAAN,CAAaiX,uBAA/B,CAAR,CADmB,CAC8C;AACpE;;AACD,aAAOzX,MAAM,CAAC4D,KAAP,CAAa,CAAb,CAAP;AACH;;AAED,QAAIwY,cAAc,GAAGJ,wBAAwB,EAA7C;;AAEA,QAAII,cAAc,CAACx4B,MAAf,KAA0B,CAA9B,EAAiC;AAC7B,UAAIu4B,KAAK,IAAIza,QAAb,EAAuBA,QAAQ,CAAC0a,cAAD,EAAiBrd,KAAK,CAACyB,MAAN,CAAamW,OAA9B,CAAR,CADM,CACyC;;AACtE,aAAOyF,cAAP;AACH;;AAED,QAAIn3B,IAAI,GAAG+a,MAAM,CAAC4D,KAAP,CAAa8X,YAAY,CAACnU,IAA1B,CAAX;;AAEA,YAAQmU,YAAY,CAACx6B,MAArB;AACI,WAAK6d,KAAK,CAACW,SAAN,CAAgBwK,MAArB;AACIkS,sBAAc,CAAC9L,IAAf,CAAoBrrB,IAApB;;AACA,YAAI,CAACg3B,OAAO,CAACh3B,IAAD,CAAZ,EAAoB;AAChB,cAAIk3B,KAAK,IAAIza,QAAb,EAAuBA,QAAQ,CAACzc,IAAD,EAAO8Z,KAAK,CAACyB,MAAN,CAAaoW,OAApB,CAAR,CADP,CAC4C;;AAC5D,iBAAO7X,KAAK,CAACyB,MAAN,CAAaoW,OAApB;AACH,SAHD,MAGO;AAAC;AACJ,cAAIuF,KAAK,IAAIza,QAAb,EAAuBA,QAAQ,CAACzc,IAAD,CAAR;AACvB,iBAAOA,IAAP;AACH;;AACL,WAAK8Z,KAAK,CAACW,SAAN,CAAgByK,QAArB;AACI,YAAIkS,QAAQ,GAAG,IAAIZ,OAAO,CAACjL,QAAZ,CAAqB4L,cAArB,CAAf;;AACA,YAAI,CAACD,KAAL,EAAY;AACR,cAAIxqB,MAAM,GAAG0qB,QAAQ,CAAC3L,OAAT,CAAiBzrB,IAAjB,CAAb;AACA0M,gBAAM,CAAC2e,IAAP,CAAYrrB,IAAZ,EAAkB,CAAlB;;AACA,cAAI,CAACg3B,OAAO,CAACh3B,IAAD,CAAZ,EAAoB;AAChBqzB,mBAAO,CAACC,IAAR,CAAaxZ,KAAK,CAACyB,MAAN,CAAaoW,OAAb,GAAuB,GAAvB,GAA6B+E,UAAU,CAACnhB,QAAX,EAA1C;AACH;;AACD,iBAAOvV,IAAP;AACH,SAPD,MAOO;AACHo3B,kBAAQ,CAACzL,YAAT,CAAsB,UAASjf,MAAT,EAAiB;AACnCA,kBAAM,CAAC2e,IAAP,CAAYrrB,IAAZ,EAAkB,CAAlB;;AACA,gBAAI,CAACg3B,OAAO,CAACh3B,IAAD,CAAZ,EAAoB;AAChB,kBAAIyc,QAAJ,EAAcA,QAAQ,CAACzc,IAAD,EAAO8Z,KAAK,CAACyB,MAAN,CAAaoW,OAApB,CAAR,CADE,CACoC;AACvD,aAFD,MAEO;AAAE;AACL,kBAAIlV,QAAJ,EAAcA,QAAQ,CAACzc,IAAD,CAAR;AACjB;AACJ,WAPD;AAQH;;AACD;;AACJ;AACI,YAAIk3B,KAAK,IAAIza,QAAb,EAAuBA,QAAQ,CAAC1B,MAAM,CAAC4D,KAAP,CAAa,CAAb,CAAD,EAAkB7E,KAAK,CAACyB,MAAN,CAAasW,cAA/B,CAAR;AACvB,eAAO/X,KAAK,CAACyB,MAAN,CAAasW,cAApB;AAhCR;AAkCH;;AAED,WAASwF,QAAT;AAAkB;AAAWH,OAA7B;AAAoC;AAAYza,UAAhD,EAA0D;AACtD,QAAI,CAAC,CAACoa,gBAAD,IAAqB,CAACA,gBAAgB,CAACl4B,MAAxC,KAAmDoc,MAAM,CAACC,QAAP,CAAgBrb,KAAhB,CAAvD,EAA+E;AAC3E;AACA,UAAIu3B,KAAK,IAAIza,QAAb,EAAuBA,QAAQ,CAACsa,wBAAwB,EAAzB,CAAR;AACvB,aAAOA,wBAAwB,EAA/B;AACH;;AAED,QAAIF,gBAAgB,CAACl4B,MAAjB,IAA2B,CAACi4B,YAAhC,EAA8C;AAC1C,UAAIO,cAAJ,CAD0C,CAE1C;;AACA,cAAQV,YAAY,CAACx6B,MAArB;AACI,aAAK6d,KAAK,CAACW,SAAN,CAAgBwK,MAArB;AACIwR,sBAAY,CAACpR,cAAb,GAA8BoR,YAAY,CAACnU,IAA3C;AAEA6U,wBAAc,GAAGpc,MAAM,CAAC4D,KAAP,CAAakY,gBAAgB,CAACl4B,MAA9B,CAAjB;AACAk4B,0BAAgB,CAACxL,IAAjB,CAAsB8L,cAAtB;AAEA,cAAID,KAAK,IAAIza,QAAb,EAAuBA,QAAQ,CAAC0a,cAAD,CAAR;AACvB,iBAAOA,cAAP;;AACJ;AACA,aAAKrd,KAAK,CAACW,SAAN,CAAgByK,QAArB;AAEI,cAAIoS,QAAQ,GAAG,IAAId,OAAO,CAAClL,QAAZ,CAAqBuL,gBAArB,CAAf;;AACA,cAAI,CAACK,KAAL,EAAY;AACR,gBAAIK,QAAQ,GAAGD,QAAQ,CAAC5M,OAAT,EAAf;AACA+L,wBAAY,CAACpR,cAAb,GAA8BkS,QAAQ,CAAC54B,MAAvC;AACA,mBAAO44B,QAAP;AACH,WAJD,MAIO;AACHD,oBAAQ,CAAC1M,YAAT,CAAsB,UAAS5qB,IAAT,EAAe;AACjCm3B,4BAAc,GAAGpc,MAAM,CAAC4D,KAAP,CAAa3e,IAAI,CAACrB,MAAlB,CAAjB;AACA83B,0BAAY,CAACpR,cAAb,GAA8BrlB,IAAI,CAACrB,MAAnC;AACAqB,kBAAI,CAACqrB,IAAL,CAAU8L,cAAV;AACA1a,sBAAQ,IAAIA,QAAQ,CAAC0a,cAAD,CAApB;AACH,aALD;AAMH;;AACDG,kBAAQ,GAAG,IAAX;AACA;AA1BR;AA4BH,KA/BD,MA+BO;AACH,UAAIJ,KAAK,IAAIza,QAAb,EAAuB;AACnBA,gBAAQ,CAAC1B,MAAM,CAAC4D,KAAP,CAAa,CAAb,CAAD,CAAR;AACH,OAFD,MAEO;AACH,eAAO5D,MAAM,CAAC4D,KAAP,CAAa,CAAb,CAAP;AACH;AACJ;AACJ;;AAED,WAAS6Y,YAAT,CAAsBnB,MAAtB,EAA8B1Q,MAA9B,EAAsC;AAClC,WAAO,CAAC0Q,MAAM,CAAChQ,YAAP,CAAoBV,MAAM,GAAG,CAA7B,KAAmC,CAApC,IAAyC0Q,MAAM,CAAChQ,YAAP,CAAoBV,MAApB,CAAhD;AACH;;AAED,WAAS8R,UAAT,CAAoBz3B,IAApB,EAA0B;AACtB,QAAI2lB,MAAM,GAAG,CAAb;AACA,QAAI+R,SAAJ,EAAepV,IAAf,EAAqB8I,IAArB;;AACA,WAAMzF,MAAM,GAAC3lB,IAAI,CAACrB,MAAlB,EAA0B;AACtB+4B,eAAS,GAAG13B,IAAI,CAACwmB,YAAL,CAAkBb,MAAlB,CAAZ;AACAA,YAAM,IAAI,CAAV;AACArD,UAAI,GAAGtiB,IAAI,CAACwmB,YAAL,CAAkBb,MAAlB,CAAP;AACAA,YAAM,IAAI,CAAV;AACAyF,UAAI,GAAGprB,IAAI,CAACW,KAAL,CAAWglB,MAAX,EAAmBA,MAAM,GAACrD,IAA1B,CAAP;AACAqD,YAAM,IAAIrD,IAAV;;AACA,UAAG7H,SAAS,CAACyV,QAAV,KAAuBwH,SAA1B,EAAqC;AACjCC,qCAA6B,CAACvM,IAAD,CAA7B;AACH;AACJ;AACJ,GAzJuC,CA2JxC;;;AACA,WAASuM,6BAAT,CAAuC33B,IAAvC,EAA6C;AACzC,QAAIsiB,IAAJ,EAAU+C,cAAV,EAA0BM,MAA1B,EAAkCF,YAAlC;;AAEA,QAAGzlB,IAAI,CAACrB,MAAL,IAAe8b,SAAS,CAAC8W,cAA5B,EAA4C;AACxCjP,UAAI,GAAGkV,YAAY,CAACx3B,IAAD,EAAOya,SAAS,CAAC6W,gBAAjB,CAAnB;;AACA,UAAGmF,YAAY,CAACnU,IAAb,KAAsB7H,SAAS,CAAC2W,cAAnC,EAAmD;AAC/CqF,oBAAY,CAACnU,IAAb,GAAoBA,IAApB;AACH;AACJ;;AACD,QAAGtiB,IAAI,CAACrB,MAAL,IAAe8b,SAAS,CAAC+W,YAA5B,EAA0C;AACtCnM,oBAAc,GAAGmS,YAAY,CAACx3B,IAAD,EAAOya,SAAS,CAAC8W,cAAjB,CAA7B;;AACA,UAAGkF,YAAY,CAACpR,cAAb,KAAgC5K,SAAS,CAAC2W,cAA7C,EAA6D;AACzDqF,oBAAY,CAACpR,cAAb,GAA8BA,cAA9B;AACH;AACJ;;AACD,QAAGrlB,IAAI,CAACrB,MAAL,IAAe8b,SAAS,CAACgX,YAA5B,EAA0C;AACtC9L,YAAM,GAAG6R,YAAY,CAACx3B,IAAD,EAAOya,SAAS,CAAC+W,YAAjB,CAArB;;AACA,UAAGiF,YAAY,CAAC9Q,MAAb,KAAwBlL,SAAS,CAAC2W,cAArC,EAAqD;AACjDqF,oBAAY,CAAC9Q,MAAb,GAAsBA,MAAtB;AACH;AACJ;;AACD,QAAG3lB,IAAI,CAACrB,MAAL,IAAe8b,SAAS,CAACgX,YAAV,GAAuB,CAAzC,EAA4C;AACxChM,kBAAY,GAAGzlB,IAAI,CAACqmB,YAAL,CAAkB5L,SAAS,CAACgX,YAA5B,CAAf;;AACA,UAAGgF,YAAY,CAAChR,YAAb,KAA8BhL,SAAS,CAAC4W,cAA3C,EAA2D;AACvDoF,oBAAY,CAAChR,YAAb,GAA4BA,YAA5B;AACH;AACJ;AACJ;;AAGD,SAAO;AACH,QAAI3J,SAAJ,GAAiB;AAAE,aAAO4a,UAAU,CAACnhB,QAAX,EAAP;AAA+B,KAD/C;;AAEH,QAAIqiB,YAAJ,GAAmB;AAAE,aAAOlB,UAAP;AAAoB,KAFtC;;AAGH,QAAI5a,SAAJ,CAAenE,GAAf,EAAoB;AAChB+e,gBAAU,GAAG5c,KAAK,CAAC2J,QAAN,CAAe9L,GAAf,CAAb;AACA,UAAIkgB,QAAQ,GAAGnB,UAAU,CAACA,UAAU,CAAC/3B,MAAX,GAAoB,CAArB,CAAzB;AACAi4B,kBAAY,GAAIiB,QAAQ,KAAK,EAAd,IAAsBA,QAAQ,KAAK,EAAlD;AACApB,kBAAY,CAACnR,cAAb,GAA8BoR,UAAU,CAAC/3B,MAAzC;AACH,KARE;;AAUH,QAAIm5B,KAAJ,GAAa;AAAE,aAAOhB,MAAP;AAAgB,KAV5B;;AAWH,QAAIgB,KAAJ,CAAWngB,GAAX,EAAgB;AACZmf,YAAM,GAAGnf,GAAT;AACA8e,kBAAY,CAAClR,WAAb,GAA2B5N,GAAG,CAAChZ,MAA/B;AACA84B,gBAAU,CAAC9f,GAAD,CAAV;AACH,KAfE;;AAiBH,QAAIuF,OAAJ,GAAe;AAAE,aAAOyZ,QAAQ,CAACphB,QAAT,EAAP;AAA6B,KAjB3C;;AAkBH,QAAI2H,OAAJ,CAAavF,GAAb,EAAkB;AACdgf,cAAQ,GAAG7c,KAAK,CAAC2J,QAAN,CAAe9L,GAAf,CAAX;AACA8e,kBAAY,CAACjR,aAAb,GAA6BmR,QAAQ,CAACh4B,MAAtC;AACH,KArBE;;AAuBH,QAAIgD,IAAJ,GAAY;AAAE,UAAIo2B,CAAC,GAAGrB,UAAU,CAACnhB,QAAX,EAAR;;AAA+B,aAAOqhB,YAAY,GAAGmB,CAAC,CAAC9gB,MAAF,CAAS8gB,CAAC,CAACp5B,MAAF,GAAW,CAApB,EAAuBqa,KAAvB,CAA6B,GAA7B,EAAkCzZ,GAAlC,EAAH,GAA6Cw4B,CAAC,CAAC/e,KAAF,CAAQ,GAAR,EAAazZ,GAAb,EAAhE;AAAqF,KAvB/H;;AAwBH,QAAIsgB,WAAJ,GAAmB;AAAE,aAAO+W,YAAP;AAAqB,KAxBvC;;AA0BHoB,qBAAiB,EAAG,YAAW;AAC3B,aAAOX,QAAQ,CAAC,KAAD,EAAQ,IAAR,CAAf;AACH,KA5BE;AA8BHY,0BAAsB,EAAG;AAAS;AAAYxb,YAArB,EAA+B;AACpD4a,cAAQ,CAAC,IAAD,EAAO5a,QAAP,CAAR;AACH,KAhCE;AAkCHe,WAAO,EAAG,UAAStlB,KAAT,EAAgB;AACtB2+B,sBAAgB,GAAG/c,KAAK,CAAC2J,QAAN,CAAevrB,KAAf,CAAnB;;AACA,UAAI,CAAC0+B,YAAD,IAAiBC,gBAAgB,CAACl4B,MAAtC,EAA8C;AAC1C83B,oBAAY,CAACnU,IAAb,GAAoBuU,gBAAgB,CAACl4B,MAArC;AACA83B,oBAAY,CAACx6B,MAAb,GAAsB6d,KAAK,CAACW,SAAN,CAAgByK,QAAtC;AACAuR,oBAAY,CAACtR,GAAb,GAAmBrL,KAAK,CAACic,KAAN,CAAY79B,KAAZ,CAAnB;AACAu+B,oBAAY,CAACyB,OAAb,GAAuB,IAAvB;AACH,OALD,MAKO;AAAE;AACLzB,oBAAY,CAACx6B,MAAb,GAAsB6d,KAAK,CAACW,SAAN,CAAgBwK,MAAtC;AACH;AACJ,KA5CE;AA8CH1I,WAAO,EAAG,UAASD,IAAT,EAAe;AACrB,UAAIma,YAAY,CAACyB,OAAjB,EAA0B;AAClC,eAAOrB,gBAAP;AACA,OAFQ,MAEF;AACN,eAAOI,UAAU,CAAC,KAAD,EAAQ,IAAR,EAAc3a,IAAd,CAAjB;AACS;AACJ,KApDE;AAsDHI,gBAAY,EAAG;AAAS;AAAYD,YAArB,EAA+BH,IAA/B,EAAqC;AACzD,UAAIma,YAAY,CAACyB,OAAjB,EAA0B;AACzBzb,gBAAQ,CAACoa,gBAAD,CAAR;AACA,OAFD,MAEO;AACNI,kBAAU,CAAC,IAAD,EAAOxa,QAAP,EAAiBH,IAAjB,CAAV;AACS;AACJ,KA5DE;;AA8DH,QAAIiD,IAAJ,CAASA,IAAT,EAAe;AAAEkX,kBAAY,CAAClX,IAAb,GAAoBA,IAApB;AAA2B,KA9DzC;;AA+DH,QAAIA,IAAJ,GAAW;AAAE,aAAOkX,YAAY,CAAClX,IAApB;AAA2B,KA/DrC;;AAiEH,QAAIxD,MAAJ;AAAW;AAAU/b,QAArB,EAA2B;AACvBy2B,kBAAY,CAACvP,cAAb,CAA4BlnB,IAA5B;AACH,KAnEE;;AAqEH,QAAI+b,MAAJ,GAAa;AACT,aAAO0a,YAAP;AACH,KAvEE;;AAyEH0B,cAAU,EAAG,YAAW;AACpB,UAAIpc,MAAM,GAAG0a,YAAY,CAAClO,mBAAb,EAAb,CADoB,CAEpB;;;AACAmO,gBAAU,CAACrL,IAAX,CAAgBtP,MAAhB,EAAwBjC,KAAK,CAACW,SAAN,CAAgBqL,MAAxC;;AACA,UAAI2Q,YAAY,CAAClR,WAAjB,EAA8B;AAC1BuR,cAAM,CAACzL,IAAP,CAAYtP,MAAZ,EAAoBjC,KAAK,CAACW,SAAN,CAAgBqL,MAAhB,GAAyB4Q,UAAU,CAAC/3B,MAAxD;AACH;;AACD,UAAI83B,YAAY,CAACjR,aAAjB,EAAgC;AAC5BmR,gBAAQ,CAACtL,IAAT,CAActP,MAAd,EAAsBjC,KAAK,CAACW,SAAN,CAAgBqL,MAAhB,GAAyB4Q,UAAU,CAAC/3B,MAApC,GAA6C83B,YAAY,CAAClR,WAAhF,EAA6FoR,QAAQ,CAACh4B,MAAtG;AACH;;AACD,aAAOod,MAAP;AACH,KApFE;AAsFHxG,YAAQ,EAAG,YAAW;AAClB,aAAO,QACH,mBADG,GACmBmhB,UAAU,CAACnhB,QAAX,EADnB,GAC2C,OAD3C,GAEH,cAFG,IAEeqhB,YAAY,GAAGF,UAAU,CAACnhB,QAAX,GAAsB0C,OAAtB,CAA8B,KAA9B,EAAqC,EAArC,EAAyCe,KAAzC,CAA+C,GAA/C,EAAoDzZ,GAApD,EAAH,GAA+Dm3B,UAAU,CAACnhB,QAAX,GAAsByD,KAAtB,CAA4B,GAA5B,EAAiCzZ,GAAjC,EAF1F,IAEoI,OAFpI,GAGH,iBAHG,GAGiBo3B,QAAQ,CAACphB,QAAT,EAHjB,GAGuC,OAHvC,GAIH,oBAJG,GAIoBqhB,YAJpB,GAImC,KAJnC,GAKH,eALG,GAKeH,YAAY,CAAClhB,QAAb,GAAwB0C,OAAxB,CAAgC,MAAhC,EAAwC,MAAxC,EAAgDA,OAAhD,CAAwD,KAAxD,EAA+D,KAA/D,CALf,GAKwF,KALxF,GAMH,wBANG,IAMyBtY,KAAK,IAAIA,KAAK,CAAChB,MAAN,GAAgB,eAAzB,IAA4C,MANrE,IAM+E,KAN/E,GAOH,cAPG,IAOek4B,gBAAgB,IAAIA,gBAAgB,CAACl4B,MAAjB,GAA2B,eAA/C,IAAkE,MAPjF,IAO2F,KAP3F,GAQH,GARJ;AASH;AAhGE,GAAP;AAkGH,CA5RD,C;;;;;;;;;;;ACLA,IAAIsb,QAAQ,GAAGF,mBAAO,CAAC,yEAAD,CAAtB;AAAA,IACCwc,OAAO,GAAGxc,mBAAO,CAAC,6EAAD,CADlB;AAAA,IAECD,KAAK,GAAGC,mBAAO,CAAC,uEAAD,CAFhB;;AAIAJ,MAAM,CAACC,OAAP,GAAiB;AAAU;AAAiBja,KAA3B;AAAkC;AAAU2rI,SAA5C,EAAuD;AACvE,MAAIjzG,SAAS,GAAG,EAAhB;AAAA,MACCC,UAAU,GAAG,EADd;AAAA,MAEC3B,QAAQ,GAAG5b,MAAM,CAAC4D,KAAP,CAAa,CAAb,CAFZ;AAAA,MAGCtD,QAAQ,GAAG,EAHZ;AAAA,MAICV,EAAE,GAAGb,KAAK,CAACixH,UAAN,CAAiBhxH,OAAjB,EAJN;AAAA,MAKCa,QAAQ,GAAG,IALZ;AAAA,MAMC2d,UAAU,GAAG,IAAIhC,OAAO,CAACzN,UAAZ,EANd;;AAQA,MAAIwiH,SAAS,KAAKxxH,KAAK,CAACW,SAAN,CAAgBW,IAAlC,EAAwC;AACvC;AACAC,YAAQ,GAAG1b,KAAX;AACAib,YAAQ,GAAGD,EAAE,CAACW,YAAH,CAAgBD,QAAhB,CAAX;AACAod,kBAAc;AACd,GALD,MAKO,IAAI6yG,SAAS,KAAKxxH,KAAK,CAACW,SAAN,CAAgBQ,MAAlC,EAA0C;AAChD;AACAL,YAAQ,GAAGjb,KAAX;AACA84B,kBAAc;AACd,GAJM,MAIA,CACN;AACA;;AAED,WAASje,WAAT,GAAuB;AACtB8d,cAAU,GAAG,EAAb;AACAD,aAAS,GAAG,IAAI57B,KAAJ,CAAU87B,UAAU,CAACrP,WAArB,CAAZ,CAFsB,CAE0B;;AAChD,QAAIxrB,KAAK,GAAG66B,UAAU,CAAC5S,MAAvB,CAHsB,CAGU;;AAChC,SAAK,IAAInO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6gB,SAAS,CAAC15B,MAA9B,EAAsC6Y,CAAC,EAAvC,EAA2C;AAE1C,UAAIqT,GAAG,GAAGntB,KAAV;AAAA,UACCoV,KAAK,GAAG,IAAImH,QAAJ,CAAaW,QAAb,CADT;AAEA9H,WAAK,CAACiJ,MAAN,GAAenB,QAAQ,CAACja,KAAT,CAAekqB,GAAf,EAAoBA,GAAG,IAAI/Q,KAAK,CAACW,SAAN,CAAgBqL,MAA3C,CAAf;AAEAhT,WAAK,CAACgJ,SAAN,GAAkBlB,QAAQ,CAACja,KAAT,CAAekqB,GAAf,EAAoBA,GAAG,IAAI/X,KAAK,CAACiJ,MAAN,CAAauJ,cAAxC,CAAlB;;AAEA,UAAIxS,KAAK,CAACiJ,MAAN,CAAawJ,WAAjB,EAA8B;AAC7BzS,aAAK,CAACglB,KAAN,GAAcld,QAAQ,CAACja,KAAT,CAAekqB,GAAf,EAAoBA,GAAG,IAAI/X,KAAK,CAACiJ,MAAN,CAAawJ,WAAxC,CAAd;AACA;;AAED,UAAIzS,KAAK,CAACiJ,MAAN,CAAayJ,aAAjB,EACC1S,KAAK,CAACoK,OAAN,GAAgBtC,QAAQ,CAACja,KAAT,CAAekqB,GAAf,EAAoBA,GAAG,GAAG/X,KAAK,CAACiJ,MAAN,CAAayJ,aAAvC,CAAhB;AAED9nB,WAAK,IAAIoV,KAAK,CAACiJ,MAAN,CAAa8J,eAAtB;AAEAwS,eAAS,CAAC7gB,CAAD,CAAT,GAAe1E,KAAf;AACAwlB,gBAAU,CAACxlB,KAAK,CAACgJ,SAAP,CAAV,GAA8BhJ,KAA9B;AACA;AACD;;AAED,WAAS2lB,cAAT,GAA0B;AACzB,QAAIjhB,CAAC,GAAGoD,QAAQ,CAACjc,MAAT,GAAkBmb,KAAK,CAACW,SAAN,CAAgB4O,MAA1C;AAAA,QAAkD;AACjD0O,KAAC,GAAG3wB,IAAI,CAACge,GAAL,CAAS,CAAT,EAAY5N,CAAC,GAAG,MAAhB,CADL;AAAA,QAC8B;AAC7BqhB,aAAS,GAAG,CAAC,CAFd,CADyB,CAGR;;AAEjB,SAAKrhB,CAAL,EAAQA,CAAC,IAAIugB,CAAb,EAAgBvgB,CAAC,EAAjB,EAAqB;AACpB,UAAIoD,QAAQ,CAACpD,CAAD,CAAR,KAAgB,IAApB,EAA0B,SADN,CACgB;;AACpC,UAAIoD,QAAQ,CAACyL,YAAT,CAAsB7O,CAAtB,MAA6BsC,KAAK,CAACW,SAAN,CAAgB6O,MAAjD,EAAyD;AAAE;AAC1DuP,iBAAS,GAAGrhB,CAAZ;AACA;AACA;AACD;;AACD,QAAI,CAAC,CAACqhB,SAAN,EACC,MAAM/e,KAAK,CAACyB,MAAN,CAAamX,cAAnB;AAED6F,cAAU,CAACrR,cAAX,CAA0BtM,QAAQ,CAACja,KAAT,CAAek4B,SAAf,EAA0BA,SAAS,GAAG/e,KAAK,CAACW,SAAN,CAAgB4O,MAAtD,CAA1B;;AACA,QAAIkP,UAAU,CAAC/S,aAAf,EAA8B;AAC7BmR,cAAQ,GAAG/b,QAAQ,CAACja,KAAT,CAAek4B,SAAS,GAAG/e,KAAK,CAACW,SAAN,CAAgB4O,MAA3C,CAAX;AACA;;AACD7O,eAAW;AACX;;AAED,SAAO;AACN;AACF;AACA;AACA;AACE,QAAI2F,OAAJ,GAAc;AACb,aAAOkY,SAAP;AACA,KAPK;;AASN;AACF;AACA;AACA;AACE,QAAInb,OAAJ,GAAc;AACb,aAAOyZ,QAAQ,CAACphB,QAAT,EAAP;AACA,KAfK;;AAgBN,QAAI2H,OAAJ,CAAYvF,GAAZ,EAAiB;AAChB4gB,gBAAU,CAAC/S,aAAX,GAA2B7N,GAAG,CAAChZ,MAA/B;AACAg4B,cAAQ,GAAGhf,GAAX;AACA,KAnBK;;AAqBN;AACF;AACA;AACA;AACA;AACA;AACEiE,YAAQ,EAAE;AAAU;AAAUE,aAApB,EAA+B;AACxC,aAAOwc,UAAU,CAACxc,SAAD,CAAV,IAAyB,IAAhC;AACA,KA7BK;;AA+BN;AACF;AACA;AACA;AACA;AACEmE,YAAQ,EAAE;AAAU;AAAYnN,SAAtB,EAA6B;AACtCulB,eAAS,CAAC76B,IAAV,CAAesV,KAAf;AACAwlB,gBAAU,CAACxlB,KAAK,CAACgJ,SAAP,CAAV,GAA8BhJ,KAA9B;AACAylB,gBAAU,CAACpP,YAAX,GAA0BkP,SAAS,CAAC15B,MAApC;AACA,KAxCK;;AA0CN;AACF;AACA;AACA;AACA;AACA;AACEqe,eAAW,EAAE;AAAU;AAAUlB,aAApB,EAA+B;AAC3C,UAAIhJ,KAAK,GAAGwlB,UAAU,CAACxc,SAAD,CAAtB;;AACA,UAAIhJ,KAAK,IAAIA,KAAK,CAAC+M,WAAnB,EAAgC;AAC/B,YAAIqZ,KAAK,GAAG,IAAZ;;AACA,aAAKnY,gBAAL,CAAsBjO,KAAtB,EAA6BjI,OAA7B,CAAqC,UAAUmW,KAAV,EAAiB;AACrD,cAAIA,KAAK,CAAClF,SAAN,KAAoBA,SAAxB,EAAmC;AAClCod,iBAAK,CAAClc,WAAN,CAAkBgE,KAAK,CAAClF,SAAxB;AACA;AACD,SAJD;AAKA;;AACDuc,eAAS,CAACv3B,MAAV,CAAiBu3B,SAAS,CAAC1xB,OAAV,CAAkBmM,KAAlB,CAAjB,EAA2C,CAA3C;AACA,aAAOwlB,UAAU,CAACxc,SAAD,CAAjB;AACAyc,gBAAU,CAACpP,YAAX,GAA0BkP,SAAS,CAAC15B,MAApC;AACA,KA7DK;;AA+DN;AACF;AACA;AACA;AACA;AACA;AACEoiB,oBAAgB,EAAE;AAAU;AAAYjO,SAAtB,EAA6B;AAC9C,UAAIA,KAAK,CAAC+M,WAAV,EAAuB;AACtB,YAAIxG,IAAI,GAAG,EAAX;AAAA,YACC1X,IAAI,GAAGmR,KAAK,CAACgJ,SADd;AAAA,YAECuO,GAAG,GAAG1oB,IAAI,CAAChD,MAFZ;AAIA05B,iBAAS,CAACxtB,OAAV,CAAkB,UAAUsuB,QAAV,EAAoB;AACrC,cAAIA,QAAQ,CAACrd,SAAT,CAAmB7E,MAAnB,CAA0B,CAA1B,EAA6BoT,GAA7B,MAAsC1oB,IAA1C,EAAgD;AAC/C0X,gBAAI,CAAC7b,IAAL,CAAU27B,QAAV;AACA;AACD,SAJD;AAKA,eAAO9f,IAAP;AACA;;AACD,aAAO,EAAP;AACA,KAnFK;;AAqFN;AACF;AACA;AACA;AACA;AACE4J,oBAAgB,EAAE,YAAY;AAC7B,UAAIoV,SAAS,CAAC15B,MAAV,GAAmB,CAAvB,EAA0B;AACzB05B,iBAAS,CAACl5B,IAAV,CAAe,UAAUJ,CAAV,EAAaC,CAAb,EAAgB;AAC9B,cAAIusI,KAAK,GAAGxsI,CAAC,CAAC+c,SAAF,CAAYkd,WAAZ,EAAZ;AACA,cAAIwyG,KAAK,GAAGxsI,CAAC,CAAC8c,SAAF,CAAYkd,WAAZ,EAAZ;;AACA,cAAIuyG,KAAK,GAAGC,KAAZ,EAAmB;AAClB,mBAAO,CAAC,CAAR;AACA;;AACD,cAAID,KAAK,GAAGC,KAAZ,EAAmB;AAClB,mBAAO,CAAP;AACA;;AACD,iBAAO,CAAP;AACA,SAVD;AAWA;;AAED,UAAIlyG,SAAS,GAAG,CAAhB;AAAA,UACCF,SAAS,GAAG,EADb;AAAA,UAECC,YAAY,GAAG,EAFhB;AAAA,UAGCE,MAAM,GAAG,CAHV;AAKAhB,gBAAU,CAACjW,IAAX,GAAkB,CAAlB;AACAiW,gBAAU,CAAC5S,MAAX,GAAoB,CAApB;AAEA0S,eAAS,CAACxtB,OAAV,CAAkB,UAAUiI,KAAV,EAAiB;AAClC;AACA,YAAIqkB,cAAc,GAAGrkB,KAAK,CAACklB,iBAAN,EAArB,CAFkC,CAGlC;;AACAllB,aAAK,CAACiJ,MAAN,CAAa4J,MAAb,GAAsB4T,MAAtB;AACA,YAAIpT,UAAU,GAAGrT,KAAK,CAACiJ,MAAN,CAAaqM,kBAAb,EAAjB;AACA,YAAIoR,YAAY,GAAG1mB,KAAK,CAAC8kB,YAAN,CAAmBj5B,MAAtC;AACA,YAAIm5B,KAAK,GAAGhlB,KAAK,CAACglB,KAAN,CAAYviB,QAAZ,EAAZ;AACA,YAAIkkB,UAAU,GAAG1e,MAAM,CAAC4D,KAAP,CAAa6a,YAAY,GAAG1B,KAAK,CAACn5B,MAAlC,CAAjB;AACAmU,aAAK,CAAC8kB,YAAN,CAAmBvM,IAAnB,CAAwBoO,UAAxB,EAAoC,CAApC;AACAA,kBAAU,CAACjR,IAAX,CAAgBsP,KAAhB,EAAuB0B,YAAvB;AAEA,YAAIE,UAAU,GAAGvT,UAAU,CAACxnB,MAAX,GAAoB86B,UAAU,CAAC96B,MAA/B,GAAwCw4B,cAAc,CAACx4B,MAAxE;AAEA46B,cAAM,IAAIG,UAAV;AAEAN,iBAAS,CAAC57B,IAAV,CAAe2oB,UAAf;AACAiT,iBAAS,CAAC57B,IAAV,CAAei8B,UAAf;AACAL,iBAAS,CAAC57B,IAAV,CAAe25B,cAAf;AAEA,YAAIwC,WAAW,GAAG7mB,KAAK,CAACqlB,UAAN,EAAlB;AACAkB,oBAAY,CAAC77B,IAAb,CAAkBm8B,WAAlB;AACApB,kBAAU,CAACjW,IAAX,IAAmBqX,WAAW,CAACh7B,MAA/B;AACA26B,iBAAS,IAAKI,UAAU,GAAGC,WAAW,CAACh7B,MAAvC;AACA,OAxBD;AA0BA26B,eAAS,IAAIf,UAAU,CAACnP,cAAxB,CAjD6B,CAiDW;AACxC;;AACAmP,gBAAU,CAAC5S,MAAX,GAAoB4T,MAApB;AAEAA,YAAM,GAAG,CAAT;AACA,UAAIK,SAAS,GAAG7e,MAAM,CAAC4D,KAAP,CAAa2a,SAAb,CAAhB;AACAF,eAAS,CAACvuB,OAAV,CAAkB,UAAU0S,OAAV,EAAmB;AACpCA,eAAO,CAAC8N,IAAR,CAAauO,SAAb,EAAwBL,MAAxB,EADoC,CACH;;AACjCA,cAAM,IAAIhc,OAAO,CAAC5e,MAAlB;AACA,OAHD;AAIA06B,kBAAY,CAACxuB,OAAb,CAAqB,UAAU0S,OAAV,EAAmB;AACvCA,eAAO,CAAC8N,IAAR,CAAauO,SAAb,EAAwBL,MAAxB,EADuC,CACN;;AACjCA,cAAM,IAAIhc,OAAO,CAAC5e,MAAlB;AACA,OAHD;AAKA,UAAIk7B,EAAE,GAAGtB,UAAU,CAACnO,QAAX,EAAT;;AACA,UAAIuM,QAAJ,EAAc;AACbA,gBAAQ,CAACtL,IAAT,CAAcwO,EAAd,EAAkB/f,KAAK,CAACW,SAAN,CAAgB4O,MAAlC,EADa,CAC8B;;AAC3C;;AAEDwQ,QAAE,CAACxO,IAAH,CAAQuO,SAAR,EAAmBL,MAAnB,EArE6B,CAqED;;AAE5B,aAAOK,SAAP;AACA,KAlKK;AAoKNpW,iBAAa,EAAE;AAAU;AAAYE,aAAtB;AAAiC;AAAYC,UAA7C;AAAqD;AAAYC,eAAjE;AAA8E;AAAYC,aAA1F,EAAqG;AACnH,UAAIwU,SAAS,CAAC15B,MAAV,GAAmB,CAAvB,EAA0B;AACzB05B,iBAAS,CAACl5B,IAAV,CAAe,UAAUJ,CAAV,EAAaC,CAAb,EAAgB;AAC9B,cAAIusI,KAAK,GAAGxsI,CAAC,CAAC+c,SAAF,CAAYkd,WAAZ,EAAZ;AACA,cAAIwyG,KAAK,GAAGxsI,CAAC,CAAC8c,SAAF,CAAYkd,WAAZ,EAAZ;;AACA,cAAIuyG,KAAK,GAAGC,KAAZ,EAAmB;AAClB,mBAAO,CAAC,CAAR;AACA;;AACD,cAAID,KAAK,GAAGC,KAAZ,EAAmB;AAClB,mBAAO,CAAP;AACA;;AACD,iBAAO,CAAP;AACA,SAVD;AAWA;;AAED,UAAIlyG,SAAS,GAAG,CAAhB;AAAA,UACCF,SAAS,GAAG,EADb;AAAA,UAECC,YAAY,GAAG,EAFhB;AAAA,UAGCE,MAAM,GAAG,CAHV;AAKAhB,gBAAU,CAACjW,IAAX,GAAkB,CAAlB;AACAiW,gBAAU,CAAC5S,MAAX,GAAoB,CAApB;;AAEA,UAAI0R,QAAQ,GAAG,UAAUgB,SAAV,EAAqB;AACnC,YAAI/Z,IAAI,GAAGzW,SAAS,CAACsvD,MAArB;;AACA,YAAI9+B,SAAS,CAAC15B,MAAd,EAAsB;AACrB,cAAImU,KAAK,GAAGulB,SAAS,CAAC94B,GAAV,EAAZ;AACA,cAAIoC,IAAI,GAAGmR,KAAK,CAACgJ,SAAN,GAAkBhJ,KAAK,CAACglB,KAAN,CAAYviB,QAAZ,EAA7B;AACA,cAAIqO,WAAJ,EAAiBA,WAAW,CAACjiB,IAAD,CAAX;AACjBmR,eAAK,CAACmlB,sBAAN,CAA6B,UAAUd,cAAV,EAA0B;AACtD,gBAAItT,SAAJ,EAAeA,SAAS,CAACliB,IAAD,CAAT;AAEfmR,iBAAK,CAACiJ,MAAN,CAAa4J,MAAb,GAAsB4T,MAAtB,CAHsD,CAItD;;AACA,gBAAIpT,UAAU,GAAGrT,KAAK,CAACiJ,MAAN,CAAaqM,kBAAb,EAAjB;AACA,gBAAIqR,UAAJ;;AACA,gBAAI;AACHA,wBAAU,GAAG1e,MAAM,CAAC4D,KAAP,CAAahd,IAAI,CAAChD,MAAlB,EAA0BgD,IAA1B,CAAb,CADG,CAC4C;AAC/C,aAFD,CAEE,OAAMsgB,CAAN,EAAQ;AACTwX,wBAAU,GAAG,IAAI1e,MAAJ,CAAWpZ,IAAX,CAAb,CADS,CACsB;AAC/B;;AACD,gBAAI+3B,UAAU,GAAGvT,UAAU,CAACxnB,MAAX,GAAoB86B,UAAU,CAAC96B,MAA/B,GAAwCw4B,cAAc,CAACx4B,MAAxE;AAEA46B,kBAAM,IAAIG,UAAV;AAEAN,qBAAS,CAAC57B,IAAV,CAAe2oB,UAAf;AACAiT,qBAAS,CAAC57B,IAAV,CAAei8B,UAAf;AACAL,qBAAS,CAAC57B,IAAV,CAAe25B,cAAf;AAEA,gBAAIwC,WAAW,GAAG7mB,KAAK,CAACqlB,UAAN,EAAlB;AACAkB,wBAAY,CAAC77B,IAAb,CAAkBm8B,WAAlB;AACApB,sBAAU,CAACjW,IAAX,IAAmBqX,WAAW,CAACh7B,MAA/B;AACA26B,qBAAS,IAAKI,UAAU,GAAGC,WAAW,CAACh7B,MAAvC;;AAEA,gBAAI05B,SAAS,CAAC15B,MAAd,EAAsB;AACrB2f,kBAAI,CAAC+Z,SAAD,CAAJ;AACA,aAFD,MAEO;AAGNiB,uBAAS,IAAIf,UAAU,CAACnP,cAAxB,CAHM,CAGkC;AACxC;;AACAmP,wBAAU,CAAC5S,MAAX,GAAoB4T,MAApB;AAEAA,oBAAM,GAAG,CAAT;AACA,kBAAIK,SAAS,GAAG7e,MAAM,CAAC4D,KAAP,CAAa2a,SAAb,CAAhB;AACAF,uBAAS,CAACvuB,OAAV,CAAkB,UAAU0S,OAAV,EAAmB;AACpCA,uBAAO,CAAC8N,IAAR,CAAauO,SAAb,EAAwBL,MAAxB,EADoC,CACH;;AACjCA,sBAAM,IAAIhc,OAAO,CAAC5e,MAAlB;AACA,eAHD;AAIA06B,0BAAY,CAACxuB,OAAb,CAAqB,UAAU0S,OAAV,EAAmB;AACvCA,uBAAO,CAAC8N,IAAR,CAAauO,SAAb,EAAwBL,MAAxB,EADuC,CACN;;AACjCA,sBAAM,IAAIhc,OAAO,CAAC5e,MAAlB;AACA,eAHD;AAKA,kBAAIk7B,EAAE,GAAGtB,UAAU,CAACnO,QAAX,EAAT;;AACA,kBAAIuM,QAAJ,EAAc;AACbA,wBAAQ,CAACtL,IAAT,CAAcwO,EAAd,EAAkB/f,KAAK,CAACW,SAAN,CAAgB4O,MAAlC,EADa,CAC8B;;AAC3C;;AAEDwQ,gBAAE,CAACxO,IAAH,CAAQuO,SAAR,EAAmBL,MAAnB,EAvBM,CAuBsB;;AAE5B7V,uBAAS,CAACkW,SAAD,CAAT;AACA;AACD,WAtDD;AAuDA;AACD,OA9DD;;AAgEAvC,cAAQ,CAACgB,SAAD,CAAR;AACA;AA5PK,GAAP;AA8PA,CApUD,C;;;;;;;;;;;;;yEC4B6BywC;AAG5B,SAAO;AAKNA,SAPDA,IAAMA,KAAO,IAAIt8D,GAAJ,EAEN;AAaNye,kBAAYnW,CAAZmW,EAA6BwgH,CAA7BxgH,EAA6BwgH;AAC5B,UAAMC,IAAW5iE,EAAIluE,GAAJkuE,CAAQh0D,CAARg0D,CAAjB;AACc4iE,WAAYA,EAASluI,IAATkuI,CAAcD,CAAdC,CAAZA,IAEb5iE,EAAI3qE,GAAJ2qE,CAAQh0D,CAARg0D,EAAc,CAAC2iE,CAAD,CAAd3iE,CAFa4iE;AAEED,KAjBX;AA2BNx1G,mBAAanhB,CAAbmhB,EAA8Bw1G,CAA9Bx1G,EAA8Bw1G;AAC7B,UAAMC,IAAW5iE,EAAIluE,GAAJkuE,CAAQh0D,CAARg0D,CAAjB;AACI4iE,WACHA,EAAS5qI,MAAT4qI,CAAgBA,EAAS/kI,OAAT+kI,CAAiBD,CAAjBC,MAA8B,CAA9CA,EAAiD,CAAjDA,CADGA;AAC8C,KA9B7C;AA4CNrlG,oBAAcvxB,CAAduxB,EAA+BslG,CAA/BtlG,EAA+BslG;AAAAA,OAC5B7iE,EAAIluE,GAAJkuE,CAAQh0D,CAARg0D,KAAiB,EADW6iE,EACchrI,KADdgrI,GACsBjwI,GADtBiwI,CAC0B,UAACF,CAAD,EAACA;AAAcA,UAAQE,CAARF;AAAQE,OADjDA,GACiDA,CAC7E7iE,EAAIluE,GAAJkuE,CAAQ,GAARA,KAAgB,EAD6D6iE,EAC5BhrI,KAD4BgrI,GACpBjwI,GADoBiwI,CAChB,UAACF,CAAD,EAACA;AAAcA,UAAQ32H,CAAR22H,EAAcE,CAAdF;AAAcE,OADbA,CADjDA;AAE8DA;AA9CvF,GAAP;AA8C8FA,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjF/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,UAAT,CAAoBvyH,IAApB,EAA0B;AACxB,SAAOA,IAAI,CAAC,CAAEjS,IAAI,CAACqlB,MAAL,KAAgBpT,IAAI,CAAC1a,MAAtB,GAAgC,CAAjC,IAAsC0a,IAAI,CAAC1a,MAA5C,CAAX;AACD;;AAED,SAASiY,MAAT,CAAgB7e,KAAhB,EAAuBS,GAAvB,EAA4B;AAC1B,SAAOT,KAAK,GAAG,CAACS,GAAG,GAAGT,KAAP,IAAgBqP,IAAI,CAACqlB,MAAL,EAA/B;AACD;;AAED,SAASo/G,OAAT,CAAiB9zI,KAAjB,EAAwBS,GAAxB,EAA6B;AAC3B,SAAOoe,MAAM,CAAC7e,KAAD,EAAQS,GAAR,CAAN,GAAqB,CAA5B;AACD;;AAED,SAASszI,OAAT,CAAiB1tH,KAAjB,EAAwBujB,KAAxB,EAA+B;AAC7B,MAAI9lB,IAAI,GAAGuC,KAAK,CAAC,CAAD,CAAhB;;AACA,OAAK,IAAI5G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4G,KAAK,CAACzf,MAA1B,EAAkC6Y,CAAC,EAAnC,EAAuC;AACrC,QAAI4G,KAAK,CAAC5G,CAAD,CAAL,CAASmqB,KAAT,IAAkB9lB,IAAI,CAAC8lB,KAAD,CAA1B,EAAmC;AACjC9lB,UAAI,GAAGuC,KAAK,CAAC5G,CAAD,CAAZ;AACD;AACF;;AACD,SAAOqE,IAAP;AACD;;AAED,SAASkwH,qBAAT,CAA+B9G,UAA/B,EAA2C;AACzC,SAAOA,UAAU,CAAC5wH,IAAX,CAAgB4Y,CAAC,IAAIA,CAAC,CAACtrB,IAAF,KAAW,mBAAhC,EAAqDq+H,EAA5D;AACD;;AAED,SAASgM,mBAAT,CAA6BnH,MAA7B,EAAqCoH,MAArC,EAA6C;AAC3C,MAAIC,WAAW,GAAGrH,MAAM,CAACxwH,IAAP,CAAYuJ,CAAC,IAAIA,CAAC,CAACjc,IAAF,KAAW,SAA5B,CAAlB;AACA,MAAIwqI,aAAa,GAAGtH,MAAM,CAACzlI,MAAP,CAClBwe,CAAC,IAAIA,CAAC,CAACjc,IAAF,KAAW,SAAX,IAAwBic,CAAC,CAACjc,IAAF,KAAW,kBADtB,CAApB;AAGA,MAAIyqI,YAAY,GAAGH,MAAM,CAAC53H,IAAP,CAAY4lB,CAAC,IAAIA,CAAC,CAACwqG,SAAF,KAAgB,CAAjC,CAAnB;AACA,MAAI4H,WAAW,GAAGJ,MAAM,CAAC53H,IAAP,CAAY4lB,CAAC,IAAIA,CAAC,CAACwqG,SAAF,KAAgB,CAAjC,CAAlB;AACA,MAAIQ,UAAU,GAAGmH,YAAY,CAACnH,UAAb,CAAwB7lI,MAAxB,CACf6tB,CAAC,IACC,CACE,MADF,EAEE,aAFF,EAGE,eAHF,EAIE,UAJF,EAKE,SALF,EAME,MANF,EAOE,SAPF,EAQEtmB,OARF,CAQUsmB,CAAC,CAACtrB,IARZ,MAQsB,CAAC,CAVV,CAAjB;AAaA,SAAO;AACLuqI,eADK;AAELC,iBAAa,EAAEA,aAAa,CAAC/sI,MAAd,CAAqBwe,CAAC,IAAI,CAACA,CAAC,CAAC0uH,IAA7B,CAFV;AAGLD,eAHK;AAILE,qBAAiB,EAAEtH,UAJd;AAKLuH,kBAAc,EAAEP,MAAM,CAAC53H,IAAP,CAAY4lB,CAAC,IAAIA,CAAC,CAACt4B,IAAF,KAAW,OAA5B,EAAqCsjI,UALhD;AAMLwH,cAAU,EAAEN,aAAa,CAAC/sI,MAAd,CAAqBwe,CAAC,IAAIA,CAAC,CAAC0uH,IAA5B;AANP,GAAP;AAQD;;AAED,eAAeI,mBAAf,CAAmChB,QAAnC,EAA6CtK,OAA7C,EAAsDyD,MAAtD,EAA8DoH,MAA9D,EAAsE;AACpE,6BAOID,mBAAmB,CAACnH,MAAD,EAASoH,MAAT,CAPvB;AAAA,MACEC,WADF,wBACEA,WADF;AAAA,MAEEC,aAFF,wBAEEA,aAFF;AAAA,MAGEE,WAHF,wBAGEA,WAHF;AAAA,MAIEE,iBAJF,wBAIEA,iBAJF;AAAA,MAKEC,cALF,wBAKEA,cALF;AAAA,MAMEC,UANF,wBAMEA,UANF;;AAQA,MAAIE,eAAe,GAAGd,OAAO,CAAC,GAAD,EAAM,GAAN,CAA7B;AAEA,MAAIlL,YAAY,GAAG,EAAnB;;AACA,OAAK,IAAInpH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGm1H,eAApB,EAAqCn1H,CAAC,EAAtC,EAA0C;AACxC,QAAIirH,KAAJ;;AACA,QAAIr7H,IAAI,CAACqlB,MAAL,KAAgB,IAApB,EAA0B;AACxBg2G,WAAK,GAAGyJ,WAAR;AACD,KAFD,MAEO;AACLzJ,WAAK,GAAGmJ,UAAU,CAACO,aAAD,CAAlB;AACD;;AAED,QAAI/J,QAAJ;;AACA,QAAIK,KAAK,CAAC9gI,IAAN,KAAe,SAAnB,EAA8B;AAC5BygI,cAAQ,GAAGiK,WAAW,CAACpH,UAAZ,CAAuB5wH,IAAvB,CAA4B4Y,CAAC,IAAIA,CAAC,CAACtrB,IAAF,KAAW,QAA5C,CAAX;AACD,KAFD,MAEO;AACLygI,cAAQ,GAAGwJ,UAAU,CAACW,iBAAD,CAArB;AACD;;AAED,QAAI3oI,MAAJ;;AACA,QAAI6+H,KAAK,CAAC9gI,IAAN,KAAe,SAAnB,EAA8B;AAC5BiC,YAAM,GAAGioI,OAAO,CAAC,KAAD,EAAQ,KAAR,CAAhB;AACD,KAFD,MAEO;AACLjoI,YAAM,GAAGioI,OAAO,CAAC,CAAD,EAAIzkI,IAAI,CAACqlB,MAAL,KAAgB,IAAhB,GAAuB,CAAC,IAAxB,GAA+B,CAAC,GAApC,CAAhB;AACD;;AAED,QAAI84G,WAAW,GAAG;AAChB3hI,YADgB;AAEhB6+H,WAAK,EAAEA,KAAK,CAACzC,EAFG;AAGhBoB,aAAO,EAAEA,OAAO,CAACpB,EAHD;AAIhBrlI,UAAI,EAAEiyI,sDAAA,CAAmBA,yDAAA,EAAnB,EAA6Cp1H,CAAC,GAAG,CAAL,GAAU,CAAtD,CAJU;AAKhB4qH,cAAQ,EAAEA,QAAQ,CAACpC;AALH,KAAlB;AAOAW,gBAAY,CAACnjI,IAAb,CAAkB+nI,WAAlB;;AAEA,QAAIn+H,IAAI,CAACqlB,MAAL,KAAgB,GAApB,EAAyB;AACvB,UAAI1tB,CAAC,GAAIwmI,WAAW,CAAC3hI,MAAZ,GAAqB,CAAtB,GAA2B,CAAnC;;AACA,UAAIipI,IAAI,GAAG,MACTpK,KAAK,KAAKyJ,WAAV,GACIG,WAAW,CAACpH,UAAZ,CAAuB5wH,IAAvB,CAA4B4Y,CAAC,IAAIA,CAAC,CAACtrB,IAAF,KAAW,QAA5C,EAAsDq+H,EAD1D,GAEI4L,UAAU,CAACW,iBAAD,CAAV,CAA8BvM,EAHpC;;AAIAuF,iBAAW,CAACU,eAAZ,GAA8B,CAC5B;AAAEriI,cAAM,EAAE7E,CAAV;AAAaqjI,gBAAQ,EAAEyK,IAAI;AAA3B,OAD4B,EAE5B;AAAEjpI,cAAM,EAAE7E,CAAV;AAAaqjI,gBAAQ,EAAEyK,IAAI;AAA3B,OAF4B,EAG5B;AACEjpI,cAAM,EAAE2hI,WAAW,CAAC3hI,MAAZ,GAAqB7E,CAAC,GAAG,CADnC;AAEEqjI,gBAAQ,EAAEyK,IAAI;AAFhB,OAH4B,CAA9B;AAQD;AACF;;AAED,MAAIpG,aAAa,GAAGmG,4DAAA,CAClBjM,YAAY,CAACA,YAAY,CAAChiI,MAAb,GAAsB,CAAvB,CAAZ,CAAsChE,IADpB,CAApB;AAGA,MAAImV,MAAM,GAAG88H,6DAAA,CACXnG,aADW,EAEXmG,2DAAA,EAFW,CAAb;AAIA,MAAIl6H,UAAU,GAAGk6H,yDAAA,EAAjB;;AACA,OAAK,IAAI1pI,KAAT,IAAkB4M,MAAlB,EAA0B;AACxB,QAAInV,IAAI,GAAGiyI,sDAAA,CAAmB1pI,KAAnB,EAA0B,IAA1B,CAAX;;AACA,QAAI0pI,uDAAA,CAAoBjyI,IAApB,EAA0B+X,UAA1B,CAAJ,EAA2C;AACzCiuH,kBAAY,CAACnjI,IAAb,CAAkB;AAChBoG,cAAM,EAAE,CAAC,KADO;AAEhB6+H,aAAK,EAAEgK,UAAU,CAACp4H,IAAX,CAAgBuJ,CAAC,IAAIA,CAAC,CAACjc,IAAF,CAAOq3B,WAAP,GAAqB5oB,QAArB,CAA8B,OAA9B,CAArB,EAA6D4vH,EAFpD;AAGhBoB,eAAO,EAAEA,OAAO,CAACpB,EAHD;AAIhBrlI,YAJgB;AAKhBynI,gBAAQ,EAAEoK,cAAc,CAACn4H,IAAf,CAAoB4Y,CAAC,IAAIA,CAAC,CAACtrB,IAAF,KAAW,OAApC,EAA6Cq+H;AALvC,OAAlB;AAOD;;AAEDrlI,QAAI,GAAGiyI,sDAAA,CAAmB1pI,KAAnB,EAA0B,IAA1B,CAAP;;AACA,QAAI0pI,uDAAA,CAAoBjyI,IAApB,EAA0B+X,UAA1B,CAAJ,EAA2C;AACzCiuH,kBAAY,CAACnjI,IAAb,CAAkB;AAChBoG,cAAM,EAAE,CAAC,IADO;AAEhB6+H,aAAK,EAAEgK,UAAU,CAACp4H,IAAX,CAAgBuJ,CAAC,IAAIA,CAAC,CAACjc,IAAF,CAAOq3B,WAAP,GAAqB5oB,QAArB,CAA8B,OAA9B,CAArB,EAA6D4vH,EAFpD;AAGhBoB,eAAO,EAAEA,OAAO,CAACpB,EAHD;AAIhBrlI,YAJgB;AAKhBynI,gBAAQ,EAAEoK,cAAc,CAACn4H,IAAf,CAAoB4Y,CAAC,IAAIA,CAAC,CAACtrB,IAAF,KAAW,OAApC,EAA6Cq+H;AALvC,OAAlB;AAOD;;AAEDrlI,QAAI,GAAGiyI,sDAAA,CAAmB1pI,KAAnB,EAA0B,GAA1B,CAAP;;AACA,QAAI0pI,uDAAA,CAAoBjyI,IAApB,EAA0B+X,UAA1B,CAAJ,EAA2C;AACzCiuH,kBAAY,CAACnjI,IAAb,CAAkB;AAChBoG,cAAM,EAAE,CAAC,MADO;AAEhB6+H,aAAK,EAAEgK,UAAU,CAACp4H,IAAX,CAAgBuJ,CAAC,IAAIA,CAAC,CAACjc,IAAF,CAAOq3B,WAAP,GAAqB5oB,QAArB,CAA8B,OAA9B,CAArB,EAA6D4vH,EAFpD;AAGhBoB,eAAO,EAAEA,OAAO,CAACpB,EAHD;AAIhBrlI,YAJgB;AAKhBynI,gBAAQ,EAAEoK,cAAc,CAACn4H,IAAf,CAAoB4Y,CAAC,IAAIA,CAAC,CAACtrB,IAAF,KAAW,UAApC,EAAgDq+H;AAL1C,OAAlB;AAOD;;AAEDrlI,QAAI,GAAGiyI,sDAAA,CAAmB1pI,KAAnB,EAA0B,IAA1B,CAAP;;AACA,QAAI0pI,uDAAA,CAAoBjyI,IAApB,EAA0B+X,UAA1B,CAAJ,EAA2C;AACzCiuH,kBAAY,CAACnjI,IAAb,CAAkB;AAChBoG,cAAM,EAAE,CAAC,IADO;AAEhB6+H,aAAK,EAAEgK,UAAU,CAACp4H,IAAX,CAAgBuJ,CAAC,IAAIA,CAAC,CAACjc,IAAF,CAAOq3B,WAAP,GAAqB5oB,QAArB,CAA8B,UAA9B,CAArB,EACJ4vH,EAHa;AAIhBoB,eAAO,EAAEA,OAAO,CAACpB,EAJD;AAKhBrlI,YALgB;AAMhBynI,gBAAQ,EAAEoK,cAAc,CAACn4H,IAAf,CAAoB4Y,CAAC,IAAIA,CAAC,CAACtrB,IAAF,KAAW,UAApC,EAAgDq+H;AAN1C,OAAlB;AAQD;;AAEDrlI,QAAI,GAAGiyI,sDAAA,CAAmB1pI,KAAnB,EAA0B,IAA1B,CAAP;;AACA,QAAI0pI,uDAAA,CAAoBjyI,IAApB,EAA0B+X,UAA1B,CAAJ,EAA2C;AACzCiuH,kBAAY,CAACnjI,IAAb,CAAkB;AAChBoG,cAAM,EAAE,CAAC,IADO;AAEhB6+H,aAAK,EAAEgK,UAAU,CAACp4H,IAAX,CAAgBuJ,CAAC,IAAIA,CAAC,CAACjc,IAAF,CAAOq3B,WAAP,GAAqB5oB,QAArB,CAA8B,UAA9B,CAArB,EACJ4vH,EAHa;AAIhBoB,eAAO,EAAEA,OAAO,CAACpB,EAJD;AAKhBrlI,YALgB;AAMhBynI,gBAAQ,EAAEoK,cAAc,CAACn4H,IAAf,CAAoB4Y,CAAC,IAAIA,CAAC,CAACtrB,IAAF,KAAW,MAApC,EAA4Cq+H;AANtC,OAAlB;AAQD;AACF;;AAED,MAAI8M,YAAY,GAAG,IAAnB;AACAnM,cAAY,CAAC91H,OAAb,CAAqBmhB,CAAC,IAAI;AACxB,QAAI8gH,YAAY,IAAI,IAAhB,IAAwB9gH,CAAC,CAACrxB,IAAF,GAASmyI,YAArC,EAAmD;AACjDA,kBAAY,GAAG9gH,CAAC,CAACrxB,IAAjB;AACD;AACF,GAJD;AAMAgmI,cAAY,CAAC78H,OAAb,CAAqB;AACnBF,UAAM,EAAE,MADW;AAEnB6+H,SAAK,EAAEoC,MAAM,CAACxwH,IAAP,CAAYuJ,CAAC,IAAIA,CAAC,CAACjc,IAAF,KAAW,kBAA5B,EAAgDq+H,EAFpC;AAGnBoB,WAAO,EAAEA,OAAO,CAACpB,EAHE;AAInBrlI,QAAI,EAAEmyI,YAJa;AAKnB1K,YAAQ,EAAE2J,qBAAqB,CAACM,WAAW,CAACpH,UAAb,CALZ;AAMnB8H,yBAAqB,EAAE;AANJ,GAArB;AASA,SAAOtM,6EAAe,CAACW,OAAO,CAACpB,EAAT,EAAaW,YAAb,CAAtB;AACD;;AAED,eAAeqM,YAAf,CAA4BtB,QAA5B,EAAsCtK,OAAtC,EAA+CyD,MAA/C,EAAuDoH,MAAvD,EAA+D;AAC7D,8BAKID,mBAAmB,CAACnH,MAAD,EAASoH,MAAT,CALvB;AAAA,MACEC,WADF,yBACEA,WADF;AAAA,MAEEC,aAFF,yBAEEA,aAFF;AAAA,MAGEE,WAHF,yBAGEA,WAHF;AAAA,MAIEE,iBAJF,yBAIEA,iBAJF;;AAMA,MAAII,eAAe,GAAGd,OAAO,CAAC,EAAD,EAAK,EAAL,CAA7B;AAEA,MAAIlL,YAAY,GAAG,EAAnB;;AACA,OAAK,IAAInpH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGm1H,eAApB,EAAqCn1H,CAAC,EAAtC,EAA0C;AACxC,QAAIirH,KAAJ;;AACA,QAAIr7H,IAAI,CAACqlB,MAAL,KAAgB,IAApB,EAA0B;AACxBg2G,WAAK,GAAGyJ,WAAR;AACD,KAFD,MAEO;AACLzJ,WAAK,GAAGmJ,UAAU,CAACO,aAAD,CAAlB;AACD;;AAED,QAAI/J,QAAJ;;AACA,QAAIK,KAAK,CAAC9gI,IAAN,KAAe,SAAnB,EAA8B;AAC5BygI,cAAQ,GAAGiK,WAAW,CAACpH,UAAZ,CAAuB5wH,IAAvB,CAA4B4Y,CAAC,IAAIA,CAAC,CAACtrB,IAAF,KAAW,QAA5C,CAAX;AACD,KAFD,MAEO;AACLygI,cAAQ,GAAGwJ,UAAU,CAACW,iBAAD,CAArB;AACD;;AAED,QAAI3oI,MAAM,GACR6+H,KAAK,CAAC9gI,IAAN,KAAe,SAAf,GAA2BkqI,OAAO,CAAC,KAAD,EAAQ,KAAR,CAAlC,GAAmDA,OAAO,CAAC,CAAD,EAAI,CAAC,KAAL,CAD5D;AAGAlL,gBAAY,CAACnjI,IAAb,CAAkB;AAChBoG,YADgB;AAEhB6+H,WAAK,EAAEA,KAAK,CAACzC,EAFG;AAGhBoB,aAAO,EAAEA,OAAO,CAACpB,EAHD;AAIhBrlI,UAAI,EAAEiyI,sDAAA,CAAmBA,yDAAA,EAAnB,EAA6Cp1H,CAAC,GAAG,CAAL,GAAU,CAAtD,CAJU;AAKhB4qH,cAAQ,EAAEA,QAAQ,CAACpC;AALH,KAAlB;AAOD;;AAEDW,cAAY,CAAC78H,OAAb,CAAqB;AACnBF,UAAM,EAAEioI,OAAO,CAAC,KAAD,EAAQ,MAAR,CADI;AAEnBpJ,SAAK,EAAEoC,MAAM,CAACxwH,IAAP,CAAYuJ,CAAC,IAAIA,CAAC,CAACjc,IAAF,KAAW,kBAA5B,EAAgDq+H,EAFpC;AAGnBoB,WAAO,EAAEA,OAAO,CAACpB,EAHE;AAInBrlI,QAAI,EAAEgmI,YAAY,CAACA,YAAY,CAAChiI,MAAb,GAAsB,CAAvB,CAAZ,CAAsChE,IAJzB;AAKnBynI,YAAQ,EAAE2J,qBAAqB,CAACM,WAAW,CAACpH,UAAb,CALZ;AAMnB8H,yBAAqB,EAAE;AANJ,GAArB;AASA,QAAMrB,QAAQ,CAAC,2BAAD,CAAR,CAAsC;AAC1CuB,SAAK,EAAEtM,YADmC;AAE1CuM,YAAQ,EAAE;AAFgC,GAAtC,CAAN;AAID;;AAED,eAAeC,cAAf,CAA8BzB,QAA9B,EAAwCtK,OAAxC,EAAiDyD,MAAjD,EAAyDoH,MAAzD,EAAiE;AAC/D,8BAKID,mBAAmB,CAACnH,MAAD,EAASoH,MAAT,CALvB;AAAA,MACEC,WADF,yBACEA,WADF;AAAA,MAEEC,aAFF,yBAEEA,aAFF;AAAA,MAGEE,WAHF,yBAGEA,WAHF;AAAA,MAIEE,iBAJF,yBAIEA,iBAJF;;AAOA,MAAII,eAAe,GAAGd,OAAO,CAAC,EAAD,EAAK,EAAL,CAA7B;AAEA,MAAIlL,YAAY,GAAG,EAAnB;;AACA,OAAK,IAAInpH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGm1H,eAApB,EAAqCn1H,CAAC,EAAtC,EAA0C;AACxC,QAAIirH,KAAK,GAAGyJ,WAAZ;AACA,QAAI9J,QAAQ,GAAGiK,WAAW,CAACpH,UAAZ,CAAuB5wH,IAAvB,CAA4B4Y,CAAC,IAAIA,CAAC,CAACtrB,IAAF,KAAW,QAA5C,CAAf;AAEA,QAAIiC,MAAM,GAAGioI,OAAO,CAAC,KAAD,EAAQ,KAAR,CAApB;AAEAlL,gBAAY,CAACnjI,IAAb,CAAkB;AAChBoG,YADgB;AAEhB6+H,WAAK,EAAEA,KAAK,CAACzC,EAFG;AAGhBoB,aAAO,EAAEA,OAAO,CAACpB,EAHD;AAIhBrlI,UAAI,EAAEiyI,sDAAA,CAAmBA,yDAAA,EAAnB,EAA4Cf,OAAO,CAAC,EAAD,EAAK,GAAL,CAAnD,CAJU;AAKhBzJ,cAAQ,EAAEA,QAAQ,CAACpC;AALH,KAAlB;AAOD;;AAEDW,cAAY,CAAC78H,OAAb,CAAqB;AACnBF,UAAM,EAAEioI,OAAO,CAAC,KAAD,EAAQ,KAAR,CADI;AAEnBpJ,SAAK,EAAEoC,MAAM,CAACxwH,IAAP,CAAYuJ,CAAC,IAAIA,CAAC,CAACjc,IAAF,KAAW,kBAA5B,EAAgDq+H,EAFpC;AAGnBoB,WAAO,EAAEA,OAAO,CAACpB,EAHE;AAInBrlI,QAAI,EAAEmxI,OAAO,CAACnL,YAAD,EAAe,MAAf,CAAP,CAA8BhmI,IAJjB;AAKnBynI,YAAQ,EAAE2J,qBAAqB,CAACM,WAAW,CAACpH,UAAb,CALZ;AAMnB8H,yBAAqB,EAAE;AANJ,GAArB;AASA,QAAMrB,QAAQ,CAAC,2BAAD,CAAR,CAAsC;AAC1CuB,SAAK,EAAEtM,YADmC;AAE1CuM,YAAQ,EAAE;AAFgC,GAAtC,CAAN;AAID;;AAED,eAAeE,WAAf,CAA2B1B,QAA3B,EAAqCtK,OAArC,EAA8CyD,MAA9C,EAAsDoH,MAAtD,EAA8D;AAC5D,8BAKID,mBAAmB,CAACnH,MAAD,EAASoH,MAAT,CALvB;AAAA,MACEC,WADF,yBACEA,WADF;AAAA,MAEEC,aAFF,yBAEEA,aAFF;AAAA,MAGEE,WAHF,yBAGEA,WAHF;AAAA,MAIEE,iBAJF,yBAIEA,iBAJF;;AAOA,MAAII,eAAe,GAAGd,OAAO,CAAC,EAAD,EAAK,EAAL,CAA7B;AAEA,MAAIlL,YAAY,GAAG,EAAnB;;AACA,OAAK,IAAInpH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGm1H,eAApB,EAAqCn1H,CAAC,EAAtC,EAA0C;AACxC,QAAIirH,KAAJ;;AACA,QAAIr7H,IAAI,CAACqlB,MAAL,KAAgB,GAApB,EAAyB;AACvBg2G,WAAK,GAAGyJ,WAAR;AACD,KAFD,MAEO;AACLzJ,WAAK,GAAGmJ,UAAU,CAACO,aAAD,CAAlB;AACD;;AACD,QAAI/J,QAAQ,GACVK,KAAK,KAAKyJ,WAAV,GACIG,WAAW,CAACpH,UAAZ,CAAuB5wH,IAAvB,CAA4B4Y,CAAC,IAAIA,CAAC,CAACtrB,IAAF,KAAW,QAA5C,CADJ,GAEIiqI,UAAU,CAACW,iBAAD,CAHhB;AAIA,QAAI3oI,MAAM,GACR6+H,KAAK,KAAKyJ,WAAV,GAAwBL,OAAO,CAAC,KAAD,EAAQ,KAAR,CAA/B,GAAgDA,OAAO,CAAC,CAAC,KAAF,EAAS,CAAC,IAAV,CADzD;AAGAlL,gBAAY,CAACnjI,IAAb,CAAkB;AAChBoG,YADgB;AAEhB6+H,WAAK,EAAEA,KAAK,CAACzC,EAFG;AAGhBoB,aAAO,EAAEA,OAAO,CAACpB,EAHD;AAIhBrlI,UAAI,EAAEiyI,sDAAA,CAAmBA,yDAAA,EAAnB,EAA6Cp1H,CAAC,GAAG,CAAL,GAAU,CAAtD,CAJU;AAKhB4qH,cAAQ,EAAEA,QAAQ,CAACpC;AALH,KAAlB;AAOD;;AAEDW,cAAY,CAAC78H,OAAb,CAAqB;AACnBF,UAAM,EAAE,KADW;AAEnB6+H,SAAK,EAAEoC,MAAM,CAACxwH,IAAP,CAAYuJ,CAAC,IAAIA,CAAC,CAACjc,IAAF,KAAW,kBAA5B,EAAgDq+H,EAFpC;AAGnBoB,WAAO,EAAEA,OAAO,CAACpB,EAHE;AAInBrlI,QAAI,EAAEgmI,YAAY,CAACA,YAAY,CAAChiI,MAAb,GAAsB,CAAvB,CAAZ,CAAsChE,IAJzB;AAKnBynI,YAAQ,EAAE2J,qBAAqB,CAACM,WAAW,CAACpH,UAAb,CALZ;AAMnB8H,yBAAqB,EAAE;AANJ,GAArB;AASA,QAAMrB,QAAQ,CAAC,2BAAD,CAAR,CAAsC;AAC1CuB,SAAK,EAAEtM,YADmC;AAE1CuM,YAAQ,EAAE;AAFgC,GAAtC,CAAN;AAID;;AAED,eAAeG,YAAf,CAA4B3B,QAA5B,EAAsCtK,OAAtC,EAA+CyD,MAA/C,EAAuDoH,MAAvD,EAA+D;AAC7D,8BAKID,mBAAmB,CAACnH,MAAD,EAASoH,MAAT,CALvB;AAAA,MACEC,WADF,yBACEA,WADF;AAAA,MAEEC,aAFF,yBAEEA,aAFF;AAAA,MAGEE,WAHF,yBAGEA,WAHF;AAAA,MAIEE,iBAJF,yBAIEA,iBAJF;;AAOA,MAAII,eAAe,GAAGd,OAAO,CAAC,CAAD,EAAI,EAAJ,CAA7B;AACA,MAAIjoI,MAAM,GAAGioI,OAAO,CAAC,MAAD,EAAS,MAAT,CAApB;AACA,MAAIzJ,QAAQ,GAAGiK,WAAW,CAACpH,UAAZ,CAAuB5wH,IAAvB,CAA4B4Y,CAAC,IAAIA,CAAC,CAACtrB,IAAF,KAAW,QAA5C,CAAf;AAEA,MAAIg/H,YAAY,GAAG,CACjB;AACE/8H,UAAM,EAAEioI,OAAO,CAAC,CAAC,IAAF,EAAQ,CAAC,IAAT,CAAP,GAAwB,GAAxB,GAA8B,GADxC;AAEEpJ,SAAK,EAAEoC,MAAM,CAACxwH,IAAP,CAAYuJ,CAAC,IAAIA,CAAC,CAACjc,IAAF,KAAW,kBAA5B,EAAgDq+H,EAFzD;AAGEoB,WAAO,EAAEA,OAAO,CAACpB,EAHnB;AAIErlI,QAAI,EACFiyI,wDAAA,CAAqBA,yDAAA,EAArB,EAA8CD,eAA9C,IAAiE,KALrE;AAMEvK,YAAQ,EAAE2J,qBAAqB,CAACM,WAAW,CAACpH,UAAb,CANjC;AAOE8H,yBAAqB,EAAE;AAPzB,GADiB,CAAnB;;AAWA,OAAK,IAAIv1H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGm1H,eAApB,EAAqCn1H,CAAC,EAAtC,EAA0C;AACxC,QAAIirH,KAAK,GAAGyJ,WAAZ;AAEAvL,gBAAY,CAACnjI,IAAb,CAAkB;AAChBoG,YADgB;AAEhB6+H,WAAK,EAAEA,KAAK,CAACzC,EAFG;AAGhBoB,aAAO,EAAEA,OAAO,CAACpB,EAHD;AAIhBrlI,UAAI,EAAEiyI,wDAAA,CAAqBA,yDAAA,EAArB,EAA8Cp1H,CAA9C,IAAmD,KAJzC;AAKhB4qH,cAAQ,EAAEA,QAAQ,CAACpC,EALH;AAMhB+M,2BAAqB,EAAE;AANP,KAAlB;AAQD;;AAED,QAAMrB,QAAQ,CAAC,2BAAD,CAAR,CAAsC;AAC1CuB,SAAK,EAAEtM,YADmC;AAE1CuM,YAAQ,EAAE;AAFgC,GAAtC,CAAN;AAID;;AAED,eAAeI,SAAf,CAAyB5B,QAAzB,EAAmCtK,OAAnC,EAA4CyD,MAA5C,EAAoDoH,MAApD,EAA4D;AAC1D,8BAKID,mBAAmB,CAACnH,MAAD,EAASoH,MAAT,CALvB;AAAA,MACEC,WADF,yBACEA,WADF;AAAA,MAEEC,aAFF,yBAEEA,aAFF;AAAA,MAGEE,WAHF,yBAGEA,WAHF;AAAA,MAIEE,iBAJF,yBAIEA,iBAJF;;AAOA,MAAII,eAAe,GAAGd,OAAO,CAAC,CAAD,EAAI,CAAJ,CAA7B;AACA,MAAIzJ,QAAQ,GAAGiK,WAAW,CAACpH,UAAZ,CAAuB5wH,IAAvB,CAA4B4Y,CAAC,IAAIA,CAAC,CAACtrB,IAAF,KAAW,QAA5C,CAAf;AAEA,MAAIg/H,YAAY,GAAG,CACjB;AACE/8H,UAAM,EAAEioI,OAAO,CAAC,IAAD,EAAO,IAAP,CAAP,GAAsB,GAAtB,GAA4B,GADtC;AAEEpJ,SAAK,EAAEoC,MAAM,CAACxwH,IAAP,CAAYuJ,CAAC,IAAIA,CAAC,CAACjc,IAAF,KAAW,kBAA5B,EAAgDq+H,EAFzD;AAGEoB,WAAO,EAAEA,OAAO,CAACpB,EAHnB;AAIErlI,QAAI,EACFiyI,wDAAA,CAAqBA,yDAAA,EAArB,EAA8CD,eAA9C,IAAiE,KALrE;AAMEvK,YAAQ,EAAE2J,qBAAqB,CAACM,WAAW,CAACpH,UAAb,CANjC;AAOE8H,yBAAqB,EAAE;AAPzB,GADiB,CAAnB;;AAWA,OAAK,IAAIv1H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGm1H,eAApB,EAAqCn1H,CAAC,EAAtC,EAA0C;AACxC,QAAIirH,KAAK,GAAGyJ,WAAZ;AACA,QAAItoI,MAAM,GAAGioI,OAAO,CAAC,CAAD,EAAI,CAAJ,CAAP,GAAgB,GAAhB,GAAsB,GAAnC;AAEAlL,gBAAY,CAACnjI,IAAb,CAAkB;AAChBoG,YADgB;AAEhB6+H,WAAK,EAAEA,KAAK,CAACzC,EAFG;AAGhBoB,aAAO,EAAEA,OAAO,CAACpB,EAHD;AAIhBrlI,UAAI,EAAEiyI,wDAAA,CAAqBA,yDAAA,EAArB,EAA8Cp1H,CAA9C,IAAmD,KAJzC;AAKhB4qH,cAAQ,EAAEA,QAAQ,CAACpC;AALH,KAAlB;AAOD;;AAED,QAAM0L,QAAQ,CAAC,2BAAD,CAAR,CAAsC;AAC1CuB,SAAK,EAAEtM,YADmC;AAE1CuM,YAAQ,EAAE;AAFgC,GAAtC,CAAN;AAID;;AAED,eAAeK,YAAf,CAA4B3J,QAA5B,EAAsCiB,MAAtC,EAA8CoH,MAA9C,EAAsD;AACpD,MAAIuB,cAAc,GAAG5J,QAAQ,CAACvvH,IAAT,CAActV,CAAC,IAAKA,CAAC,CAAC4C,IAAF,GAAS,iBAA7B,CAArB;AACA,MAAImrI,YAAY,GAAG,CAAC,MAAM3C,gDAAA,CACvB;AACL,0EAF4B,CAAP,EAGhBxvI,IAHH;AAIA,MAAI8yI,mBAAmB,GAAG,CAAC,MAAMtD,gDAAA,CAC9B;AACL,uFAFmC,EAG/B,CAACqD,cAAc,CAACxN,EAAhB,CAH+B,CAAP,EAIvBrlI,IAJH;AAMA,MAAI5C,KAAK,GAAG60I,4DAAA,CAAyBzC,uDAAA,CAAgB2C,YAAhB,CAAzB,CAAZ;AACA,MAAIt0I,GAAG,GAAGo0I,2DAAA,EAAV;AACA,MAAI98H,MAAM,GAAG88H,6DAAA,CAA0B70I,KAA1B,EAAiCS,GAAjC,CAAb;;AAEA,WAAS4pI,QAAT,CAAkBzgI,IAAlB,EAAwB;AACtB,SAAK,IAAIogI,KAAT,IAAkBkK,MAAlB,EAA0B;AACxB,UAAIzH,GAAG,GAAGzC,KAAK,CAACkD,UAAN,CAAiB5wH,IAAjB,CAAsB4Y,CAAC,IAAIA,CAAC,CAACtrB,IAAF,KAAWA,IAAtC,CAAV;;AACA,UAAI6iI,GAAJ,EAAS;AACP,eAAOA,GAAP;AACD;AACF;AACF;;AAED,WAASkJ,SAAT,CAAmBxqI,KAAnB,EAA0Bk/H,QAA1B,EAAoCx+H,MAApC,EAA4C;AAC1C,WAAO+pI,gEAAA,CAAwB;AAAEzqI,WAAF;AAASk/H,cAAQ,EAAEA,QAAQ,CAACpC,EAA5B;AAAgCp8H;AAAhC,KAAxB,CAAP;AACD;;AAED,WAASgqI,gBAAT,CAA0B1qI,KAA1B,EAAiCshI,GAAjC,EAAsC;AACpC,QAAIqJ,KAAK,GAAGC,0DAAA,CACVlB,4DAAA,CAAyB1pI,KAAzB,CADU,EAET,cAAashI,GAAG,CAACxE,EAAG,EAFX,CAAZ;;AAKA,QAAI6N,KAAK,GAAG,CAAZ,EAAe;AACbH,eAAS,CAACxqI,KAAD,EAAQshI,GAAR,EAAa,CAACqJ,KAAd,CAAT;AACD;AACF;;AAED,QAAME,mEAAU,CAAC,MACfC,kEAAa,CAAC,YAAY;AACxB,SAAK,IAAI9qI,KAAT,IAAkB4M,MAAlB,EAA0B;AACxB,UACE5M,KAAK,IACL0pI,4DAAA,CAAyBzC,uDAAA,CAAgBsD,mBAAhB,CAAzB,CAFF,EAGE;AACAC,iBAAS,CAACxqI,KAAD,EAAQk/H,QAAQ,CAAC,MAAD,CAAhB,EAA0B,KAA1B,CAAT;AACAsL,iBAAS,CAACxqI,KAAD,EAAQk/H,QAAQ,CAAC,aAAD,CAAhB,EAAiC,KAAjC,CAAT;AACAsL,iBAAS,CAACxqI,KAAD,EAAQk/H,QAAQ,CAAC,eAAD,CAAhB,EAAmC,KAAnC,CAAT;AACAsL,iBAAS,CAACxqI,KAAD,EAAQk/H,QAAQ,CAAC,UAAD,CAAhB,EAA8B,IAA9B,CAAT;AACAsL,iBAAS,CAACxqI,KAAD,EAAQk/H,QAAQ,CAAC,SAAD,CAAhB,EAA6B,KAA7B,CAAT;AACAsL,iBAAS,CAACxqI,KAAD,EAAQk/H,QAAQ,CAAC,MAAD,CAAhB,EAA0B,IAA1B,CAAT;AACAsL,iBAAS,CAACxqI,KAAD,EAAQk/H,QAAQ,CAAC,SAAD,CAAhB,EAA6B,KAA7B,CAAT;AAEAsL,iBAAS,CAACxqI,KAAD,EAAQk/H,QAAQ,CAAC,MAAD,CAAhB,EAA0B,IAA1B,CAAT;AACAsL,iBAAS,CAACxqI,KAAD,EAAQk/H,QAAQ,CAAC,UAAD,CAAhB,EAA8B,IAA9B,CAAT;AACAsL,iBAAS,CAACxqI,KAAD,EAAQk/H,QAAQ,CAAC,UAAD,CAAhB,EAA8B,MAA9B,CAAT;AACAsL,iBAAS,CAACxqI,KAAD,EAAQk/H,QAAQ,CAAC,OAAD,CAAhB,EAA2B,IAA3B,CAAT;AACAsL,iBAAS,CAACxqI,KAAD,EAAQk/H,QAAQ,CAAC,OAAD,CAAhB,EAA2B,KAA3B,CAAT;AACD,OAjBD,MAiBO;AACLwL,wBAAgB,CAAC1qI,KAAD,EAAQk/H,QAAQ,CAAC,MAAD,CAAhB,CAAhB;AACAwL,wBAAgB,CAAC1qI,KAAD,EAAQk/H,QAAQ,CAAC,aAAD,CAAhB,CAAhB;AACAwL,wBAAgB,CAAC1qI,KAAD,EAAQk/H,QAAQ,CAAC,eAAD,CAAhB,CAAhB;AACAwL,wBAAgB,CAAC1qI,KAAD,EAAQk/H,QAAQ,CAAC,UAAD,CAAhB,CAAhB;AACAwL,wBAAgB,CAAC1qI,KAAD,EAAQk/H,QAAQ,CAAC,SAAD,CAAhB,CAAhB;AACAwL,wBAAgB,CAAC1qI,KAAD,EAAQk/H,QAAQ,CAAC,MAAD,CAAhB,CAAhB;AACAwL,wBAAgB,CAAC1qI,KAAD,EAAQk/H,QAAQ,CAAC,SAAD,CAAhB,CAAhB;AAEAwL,wBAAgB,CAAC1qI,KAAD,EAAQk/H,QAAQ,CAAC,MAAD,CAAhB,CAAhB;AACAwL,wBAAgB,CAAC1qI,KAAD,EAAQk/H,QAAQ,CAAC,UAAD,CAAhB,CAAhB;AACAwL,wBAAgB,CAAC1qI,KAAD,EAAQk/H,QAAQ,CAAC,UAAD,CAAhB,CAAhB;AACAwL,wBAAgB,CAAC1qI,KAAD,EAAQk/H,QAAQ,CAAC,OAAD,CAAhB,CAAhB;AACAwL,wBAAgB,CAAC1qI,KAAD,EAAQk/H,QAAQ,CAAC,OAAD,CAAhB,CAAhB;AACD;AACF;AACF,GAnCY,CADC,CAAhB;AAuCA,QAAM0L,+DAAA,EAAN;AAEA,QAAMC,mEAAU,CAAC,MACfC,kEAAa,CAAC,YAAY;AACxB,QAAIC,SAAS,GAAG,CAAhB;;AACA,SAAK,IAAI/qI,KAAT,IAAkB4M,MAAlB,EAA0B;AACxB,UACE5M,KAAK,IACH0pI,4DAAA,CAAyBzC,uDAAA,CAAgBsD,mBAAhB,CAAzB,CADF,IAEAvqI,KAAK,IAAI0pI,2DAAA,EAHX,EAIE;AACA,YAAInC,SAAS,GAAGmC,4DAAA,CAAyB1pI,KAAzB,CAAhB;AACA,YAAIgrI,QAAQ,GAAGJ,0DAAA,CAAmBrD,SAAnB,EAA8B,WAA9B,CAAf;AACA,YAAI0D,SAAS,GAAGD,QAAQ,GAAGD,SAA3B;;AAEA,YAAIE,SAAS,GAAG,MAAZ,GAAqB,CAAzB,EAA4B;AAC1BT,mBAAS,CAACxqI,KAAD,EAAQk/H,QAAQ,CAAC,SAAD,CAAhB,EAA6B+L,SAAS,GAAG,MAAzC,CAAT;AACAR,0EAAA,CAAwBzqI,KAAxB,EAA+B,MAA/B;AAEA+qI,mBAAS,IAAIE,SAAS,GAAG,MAAzB;AACD,SALD,MAKO,IAAIA,SAAS,GAAG,CAAhB,EAAmB;AACxBR,0EAAA,CAAwBzqI,KAAxB,EAA+BirI,SAA/B;AACD;AACF;AACF;AACF,GAtBY,CADC,CAAhB;AA0BA,QAAML,+DAAA,EAAN;AAEA,MAAIrD,SAAS,GAAGmC,4DAAA,CAAyBA,2DAAA,EAAzB,CAAhB;AACA,MAAIsB,QAAQ,GAAGJ,0DAAA,CAAmBrD,SAAnB,EAA8B,WAA9B,CAAf;;AACA,MAAIyD,QAAQ,GAAG,CAAf,EAAkB;AAChB,UAAMzN,6EAAe,CAAC+M,cAAc,CAACxN,EAAhB,EAAoB,CACvC;AACEp8H,YAAM,EAAE,CAACsqI,QADX;AAEE9L,cAAQ,EAAEA,QAAQ,CAAC,QAAD,CAAR,CAAmBpC,EAF/B;AAGErlI,UAAI,EAAEiyI,2DAAA,KAA4B;AAHpC,KADuC,CAApB,CAArB;AAOD,GAvHmD,CAyHpD;AACA;AACA;;;AAEA,QAAMkB,+DAAA,EAAN;AACD;;AAEM,eAAeM,gBAAf,CAAgC1C,QAAhC,EAA0C;AAC/C2C,qEAAc,CAAC,QAAD,CAAd;AAEA,QAAMlE,oDAAA,CAAa,2BAAb,CAAN,CAH+C,CAK/C;AACA;AACA;;AACA,QAAMA,mDAAA,CAAY,yBAAZ,CAAN;AACA,QAAMA,mDAAA,CAAY,6BAAZ,CAAN;AAEA,MAAIvG,QAAQ,GAAG,CACb;AAAEjiI,QAAI,EAAE,iBAAR;AAA2BmT,QAAI,EAAE;AAAjC,GADa,EAEb;AAAEnT,QAAI,EAAE,cAAR;AAAwBmT,QAAI,EAAE;AAA9B,GAFa,EAGb;AAAEnT,QAAI,EAAE,sBAAR;AAAgCmT,QAAI,EAAE;AAAtC,GAHa,EAIb;AAAEnT,QAAI,EAAE,MAAR;AAAgBmT,QAAI,EAAE;AAAtB,GAJa,EAKb;AAAEnT,QAAI,EAAE,eAAR;AAAyBmT,QAAI,EAAE,YAA/B;AAA6Cw5H,aAAS,EAAE;AAAxD,GALa,EAMb;AAAE3sI,QAAI,EAAE,UAAR;AAAoBmT,QAAI,EAAE,UAA1B;AAAsCw5H,aAAS,EAAE;AAAjD,GANa,EAOb;AAAE3sI,QAAI,EAAE,aAAR;AAAuBmT,QAAI,EAAE,OAA7B;AAAsCw5H,aAAS,EAAE;AAAjD,GAPa,EAQb;AAAE3sI,QAAI,EAAE,UAAR;AAAoBmT,QAAI,EAAE,YAA1B;AAAwCw5H,aAAS,EAAE;AAAnD,GARa,CAAf;AAUA,QAAMP,mEAAU,CAAC,MACfC,kEAAa,CAAC,YAAY;AACxB,SAAK,IAAI5M,OAAT,IAAoBwC,QAApB,EAA8B;AAC5BxC,aAAO,CAACpB,EAAR,GAAa,MAAM0L,QAAQ,CAAC,gBAAD,CAAR,CAA2BtK,OAA3B,CAAnB;AACD;AACF,GAJY,CADC,CAAhB;AAQA,MAAIyD,MAAM,GAAG,CACX;AAAEljI,QAAI,EAAE;AAAR,GADW,EAEX;AAAEA,QAAI,EAAE;AAAR,GAFW,EAGX;AAAEA,QAAI,EAAE;AAAR,GAHW,EAIX;AAAEA,QAAI,EAAE;AAAR,GAJW,EAKX;AAAEA,QAAI,EAAE;AAAR,GALW,EAMX;AAAEA,QAAI,EAAE;AAAR,GANW,EAOX;AAAEA,QAAI,EAAE;AAAR,GAPW,EAQX;AAAEA,QAAI,EAAE,gBAAR;AAA0B2qI,QAAI,EAAE;AAAhC,GARW,EASX;AAAE3qI,QAAI,EAAE,cAAR;AAAwB2qI,QAAI,EAAE;AAA9B,GATW,EAUX;AAAE3qI,QAAI,EAAE,aAAR;AAAuB2qI,QAAI,EAAE;AAA7B,GAVW,EAWX;AAAE3qI,QAAI,EAAE,eAAR;AAAyB2qI,QAAI,EAAE;AAA/B,GAXW,EAYX;AAAE3qI,QAAI,EAAE,UAAR;AAAoB2qI,QAAI,EAAE;AAA1B,GAZW,CAAb;AAeA,QAAMyB,mEAAU,CAAC,MACfC,kEAAa,CAAC,YAAY;AACxB,SAAK,IAAIvL,KAAT,IAAkBoC,MAAlB,EAA0B;AACxBpC,WAAK,CAACzC,EAAN,GAAW,MAAM0L,QAAQ,CAAC,cAAD,CAAR,CAAyB;AAAE/pI,YAAI,EAAE8gI,KAAK,CAAC9gI;AAAd,OAAzB,CAAjB;AACD;AACF,GAJY,CADC,CAAhB;AAQA,MAAI4sI,cAAc,GAAG,CACnB;AACE5sI,QAAI,EAAE,gBADR;AAEEsjI,cAAU,EAAE,CACV;AAAEtjI,UAAI,EAAE;AAAR,KADU,EAEV;AAAEA,UAAI,EAAE;AAAR,KAFU,EAGV;AAAEA,UAAI,EAAE;AAAR,KAHU,EAIV;AAAEA,UAAI,EAAE;AAAR,KAJU,EAKV;AAAEA,UAAI,EAAE;AAAR,KALU,EAMV;AAAEA,UAAI,EAAE;AAAR,KANU,EAOV;AAAEA,UAAI,EAAE;AAAR,KAPU,EAQV;AAAEA,UAAI,EAAE;AAAR,KARU;AAFd,GADmB,EAcnB;AACEA,QAAI,EAAE,OADR;AAEEsjI,cAAU,EAAE,CACV;AAAEtjI,UAAI,EAAE;AAAR,KADU,EAEV;AAAEA,UAAI,EAAE;AAAR,KAFU,EAGV;AAAEA,UAAI,EAAE;AAAR,KAHU,EAIV;AAAEA,UAAI,EAAE;AAAR,KAJU,EAKV;AAAEA,UAAI,EAAE;AAAR,KALU;AAFd,GAdmB,EAwBnB;AACEA,QAAI,EAAE,QADR;AAEE8iI,aAAS,EAAE,IAFb;AAGEQ,cAAU,EAAE,CACV;AAAEtjI,UAAI,EAAE,QAAR;AAAkB8iI,eAAS,EAAE;AAA7B,KADU,EAEV;AAAE9iI,UAAI,EAAE,MAAR;AAAgB8iI,eAAS,EAAE;AAA3B,KAFU,EAGV;AAAE9iI,UAAI,EAAE,mBAAR;AAA6B8iI,eAAS,EAAE;AAAxC,KAHU;AAHd,GAxBmB,CAArB;AAmCA,QAAMsJ,mEAAU,CAAC,YAAY;AAC3B,SAAK,IAAIhM,KAAT,IAAkBwM,cAAlB,EAAkC;AAChCxM,WAAK,CAAC/B,EAAN,GAAW,MAAM0L,QAAQ,CAAC,uBAAD,CAAR,CAAkC;AACjD/pI,YAAI,EAAEogI,KAAK,CAACpgI,IADqC;AAEjD6sI,gBAAQ,EAAEzM,KAAK,CAAC0C,SAAN,GAAkB,CAAlB,GAAsB;AAFiB,OAAlC,CAAjB;;AAKA,WAAK,IAAIrC,QAAT,IAAqBL,KAAK,CAACkD,UAA3B,EAAuC;AACrC7C,gBAAQ,CAACpC,EAAT,GAAc,MAAM0L,QAAQ,CAAC,iBAAD,CAAR,iCACftJ,QADe;AAElBoM,kBAAQ,EAAEpM,QAAQ,CAACqC,SAAT,GAAqB,CAArB,GAAyB,CAFjB;AAGlBwE,iBAAO,EAAElH,KAAK,CAAC/B;AAHG,WAApB;AAKD;AACF;AACF,GAfe,CAAhB;AAiBA,MAAIyO,SAAS,GAAG,CAAC,MAAMC,mEAAU,CAAChD,QAAQ,CAAC,gBAAD,CAAT,CAAjB,EAA+C7J,OAA/D;AAEAwM,qEAAc,CAAC,QAAD,CAAd;AAEA,QAAMN,mEAAU,CAAC,MACfC,kEAAa,CAAC,YAAY;AACxB,SAAK,IAAI5M,OAAT,IAAoBwC,QAApB,EAA8B;AAC5B,cAAQxC,OAAO,CAACtsH,IAAhB;AACE,aAAK,UAAL;AACE,cAAIssH,OAAO,CAACz/H,IAAR,KAAiB,iBAArB,EAAwC;AACtC,kBAAM+qI,mBAAmB,CAAChB,QAAD,EAAWtK,OAAX,EAAoByD,MAApB,EAA4B4J,SAA5B,CAAzB;AACD,WAFD,MAEO;AACL,kBAAMzB,YAAY,CAACtB,QAAD,EAAWtK,OAAX,EAAoByD,MAApB,EAA4B4J,SAA5B,CAAlB;AACD;;AACD;;AACF,aAAK,YAAL;AACE,gBAAMtB,cAAc,CAACzB,QAAD,EAAWtK,OAAX,EAAoByD,MAApB,EAA4B4J,SAA5B,CAApB;AACA;;AACF,aAAK,SAAL;AACE,gBAAMrB,WAAW,CAAC1B,QAAD,EAAWtK,OAAX,EAAoByD,MAApB,EAA4B4J,SAA5B,CAAjB;AACA;;AACF,aAAK,UAAL;AACE,gBAAMpB,YAAY,CAAC3B,QAAD,EAAWtK,OAAX,EAAoByD,MAApB,EAA4B4J,SAA5B,CAAlB;AACA;;AACF,aAAK,OAAL;AACE,cAAIrN,OAAO,CAACz/H,IAAR,KAAiB,aAArB,EAAoC;AAClC,kBAAM2rI,SAAS,CAAC5B,QAAD,EAAWtK,OAAX,EAAoByD,MAApB,EAA4B4J,SAA5B,CAAf;AACD,WAFD,MAEO;AACL,kBAAMzB,YAAY,CAACtB,QAAD,EAAWtK,OAAX,EAAoByD,MAApB,EAA4B4J,SAA5B,CAAlB;AACD;;AACD;;AACF;AAxBF;AA0BD;AACF,GA7BY,CADC,CAAhB;AAiCAJ,qEAAc,CAAC,QAAD,CAAd,CA7I+C,CA+I/C;AACA;AACA;AACA;;AACA,MAAIb,cAAc,GAAG5J,QAAQ,CAACvvH,IAAT,CAActV,CAAC,IAAKA,CAAC,CAAC4C,IAAF,GAAS,iBAA7B,CAArB;;AACA,wBAA+B,MAAMgtI,6EAAQ,CAC3CvgG,8DAAC,CAAC,cAAD,CAAD,CACGhvC,MADH,CACU;AAAEgiI,WAAO,EAAEoM,cAAc,CAACxN;AAA1B,GADV,EAEGhB,SAFH,CAEa;AAAE4P,QAAI,EAAE;AAAR,GAFb,EAGGh6H,SAHH,EAD2C,CAA7C;AAAA,MAAYi6H,cAAZ,mBAAM7uI,IAAN;;AAMA,MAAI6uI,cAAc,GAAG,CAArB,EAAwB;AACtB,2BAAwB,MAAMF,6EAAQ,CACpCvgG,8DAAC,CAAC,cAAD,CAAD,CACGhvC,MADH,CACU;AAAEgiI,aAAO,EAAEoM,cAAc,CAACxN,EAA1B;AAA8Bp8H,YAAM,EAAE;AAAEkrI,WAAG,EAAE;AAAP;AAAtC,KADV,EAEGxjG,KAFH,CAES,CAFT,EAGGwzF,MAHH,CAGU,CAAC,IAAD,EAAO,QAAP,CAHV,EAIGlqH,SAJH,EADoC,CAAtC;AAAA,QAAY2C,OAAZ,oBAAMvX,IAAN;;AAOA,QAAI+uI,WAAW,GAAGx3H,OAAO,CAAC,CAAD,CAAzB;AAEA,UAAMm3H,mEAAU,CAAChD,QAAQ,CAAC,oBAAD,CAAT,kCACXqD,WADW;AAEdnrI,YAAM,EAAEmrI,WAAW,CAACnrI,MAAZ,GAAqB,CAACirI,cAAtB,GAAuChD,OAAO,CAAC,KAAD,EAAQ,KAAR;AAFxC,OAAhB;AAID,GAxK8C,CA0K/C;;;AACAwC,qEAAc,CAAC,UAAD,CAAd;AACA,QAAMW,uDAAA,CAAgB;AAAEC,YAAQ,EAAE;AAAZ,GAAhB,CAAN;AACA,QAAMnB,+DAAA,CAAwB3D,uCAAxB,CAAN;AACA,QAAMxD,oEAAA,EAAN;AAEA,QAAMmH,+DAAA,EAAN,CAhL+C,CAkL/C;;AACA,QAAMP,YAAY,CAAC3J,QAAD,EAAWiB,MAAX,EAAmB4J,SAAnB,CAAlB;AACD,C;;;;;;;;;;;;AC3uBD;AAAA;AAAA;AAAO,SAASS,gBAAT,CAA0BC,GAA1B,EAA+B;AACpC97G,SAAO,CAACsrE,GAAR,CAAY,aAAZ,EAA2BwwC,GAA3B;;AACA,MAAIh1G,MAAM,CAACi1G,YAAX,EAAyB;AACvBj1G,UAAM,CAACi1G,YAAP,CAAoBF,gBAApB,CAAqCC,GAArC;AACD;AACF;AAEM,SAASE,iBAAT,CAA2BC,UAA3B,EAAuC;AAC5C,MAAIn1G,MAAM,CAACi1G,YAAX,EAAyB;AACvBj1G,UAAM,CAACi1G,YAAP,CAAoBG,aAApB,CAAkCD,UAAlC;AACD;AACF,C;;;;;;;;;;;ACXD,MAAME,MAAM,GAAGz1H,mBAAO,CAAC,4EAAD,CAAtB;;AACA,MAAMY,EAAE,GAAGZ,mBAAO,CAAC,cAAD,CAAlB;;AACA,iBAAiBA,mBAAO,CAAC,kBAAD,CAAxB;AAAA,MAAQL,IAAR,YAAQA,IAAR;;AAEA,IAAI+1H,YAAY,GAAG,MAAM/1H,IAAI,CAAC81H,MAAM,CAACE,UAAP,EAAD,EAAsB,mBAAtB,CAA7B;;AACA,IAAIC,KAAJ;AACA,IAAIC,SAAS,GAAG,IAAhB;;AAEA,SAASC,IAAT,CAAc;AAAEC,SAAO,GAAG;AAAZ,IAAqB,EAAnC,EAAuC;AACrC,MAAIA,OAAJ,EAAa;AACX,QAAI;AACFH,WAAK,GAAGppI,IAAI,CAAC0G,KAAL,CAAW0N,EAAE,CAACW,YAAH,CAAgBm0H,YAAY,EAA5B,EAAgC,MAAhC,CAAX,CAAR;AACD,KAFD,CAEE,OAAOxtH,CAAP,EAAU;AACV0tH,WAAK,GAAG,EAAR;AACD;AACF,GAND,MAMO;AACLA,SAAK,GAAG,EAAR;AACD;;AAEDC,WAAS,GAAGE,OAAZ;AACD;;AAED,SAASC,UAAT,GAAsB;AACpB,MAAIH,SAAJ,EAAe;AACb,WAAO,IAAIxwH,OAAJ,CAAY,UAASC,OAAT,EAAkBC,MAAlB,EAA0B;AAC3C3E,QAAE,CAACq1H,SAAH,CAAaP,YAAY,EAAzB,EAA6BlpI,IAAI,CAACC,SAAL,CAAempI,KAAf,CAA7B,EAAoD,MAApD,EAA4D,UAC1D7yH,GAD0D,EAE1Drd,CAF0D,EAG1D;AACA,eAAOqd,GAAG,GAAGwC,MAAM,CAACxC,GAAD,CAAT,GAAiBuC,OAAO,EAAlC;AACD,OALD;AAMD,KAPM,CAAP;AAQD;AACF;;AAED,SAAS4wH,OAAT,CAAiBxiI,GAAjB,EAAsB;AACpB,SAAO,IAAI2R,OAAJ,CAAY,UAASC,OAAT,EAAkB;AACnC,WAAOA,OAAO,CAACswH,KAAK,CAACliI,GAAD,CAAN,CAAd;AACD,GAFM,CAAP;AAGD;;AAED,SAASyiI,OAAT,CAAiBziI,GAAjB,EAAsBvV,KAAtB,EAA6B;AAC3By3I,OAAK,CAACliI,GAAD,CAAL,GAAavV,KAAb;AACA,SAAO63I,UAAU,EAAjB;AACD;;AAED,SAASI,UAAT,CAAoB1iI,GAApB,EAAyB;AACvB,SAAOkiI,KAAK,CAACliI,GAAD,CAAZ;AACA,SAAOsiI,UAAU,EAAjB;AACD;;AAED,SAASK,QAAT,CAAkB5iI,IAAlB,EAAwB;AACtB,SAAO,IAAI4R,OAAJ,CAAY,UAASC,OAAT,EAAkB;AACnC,WAAOA,OAAO,CACZ7R,IAAI,CAAC9R,GAAL,CAAS,UAAS+R,GAAT,EAAc;AACrB,aAAO,CAACA,GAAD,EAAMkiI,KAAK,CAACliI,GAAD,CAAX,CAAP;AACD,KAFD,CADY,CAAd;AAKD,GANM,CAAP;AAOD;;AAED,SAAS4iI,QAAT,CAAkBC,SAAlB,EAA6B;AAC3BA,WAAS,CAACzlI,OAAV,CAAkB,UAAS,CAAC4C,GAAD,EAAMvV,KAAN,CAAT,EAAuB;AACvCy3I,SAAK,CAACliI,GAAD,CAAL,GAAavV,KAAb;AACD,GAFD;AAGA,SAAO63I,UAAU,EAAjB;AACD;;AAED,SAASQ,WAAT,CAAqB/iI,IAArB,EAA2B;AACzBA,MAAI,CAAC3C,OAAL,CAAa,UAAS4C,GAAT,EAAc;AACzB,WAAOkiI,KAAK,CAACliI,GAAD,CAAZ;AACD,GAFD;AAGA,SAAOsiI,UAAU,EAAjB;AACD;;AAEDp2H,MAAM,CAACC,OAAP,GAAiB;AACfi2H,MADe;AAEfI,SAFe;AAGfC,SAHe;AAIfC,YAJe;AAKfC,UALe;AAMfC,UANe;AAOfE;AAPe,CAAjB,C;;;;;;;;;;;AC3EA,SAASV,IAAT,GAAgB,CAAE;;AAElB,SAAS9vE,IAAT,CAAcjrD,IAAd,EAAoBrd,IAApB,EAA0B,CACxB;AACD;;AAEDkiB,MAAM,CAACC,OAAP,GAAiB;AAAEi2H,MAAF;AAAQ9vE;AAAR,CAAjB,C;;;;;;;;;;;ACNA,IAAIplD,EAAE,GAAGZ,mBAAO,CAAC,cAAD,CAAhB;;AACA,IAAIy2H,KAAK,GAAGz2H,mBAAO,CAAC,8BAAD,CAAnB;;AAEA,eAAe02H,WAAf,CAA2B7vD,GAA3B,EAAgCriE,QAAhC,EAA0C;AACxC,QAAM6vG,GAAG,GAAG,MAAMoiB,KAAK,CAAC5vD,GAAD,CAAvB;AACA,SAAO,IAAIxhE,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,UAAMoxH,UAAU,GAAG/1H,EAAE,CAACg2H,iBAAH,CAAqBpyH,QAArB,CAAnB;AACA6vG,OAAG,CAACwiB,IAAJ,CAASl4I,IAAT,CAAcg4I,UAAd;AACAtiB,OAAG,CAACwiB,IAAJ,CAAS3lH,EAAT,CAAY,OAAZ,EAAqBnO,GAAG,IAAI;AAC1BwC,YAAM,CAACxC,GAAD,CAAN;AACD,KAFD;AAGA4zH,cAAU,CAACzlH,EAAX,CAAc,QAAd,EAAwB,YAAW;AACjC5L,aAAO;AACR,KAFD;AAGD,GATM,CAAP;AAUD;;AAED1F,MAAM,CAACC,OAAP,GAAiB;AAAE42H,OAAF;AAASC;AAAT,CAAjB,C;;;;;;;;;;;ACjBA,MAAM91H,EAAE,GAAGZ,mBAAO,CAAC,cAAD,CAAlB;;AACA,MAAM4Y,IAAI,GAAG5Y,mBAAO,CAAC,kBAAD,CAApB;;AAEA,IAAI82H,WAAJ;AAEA,IAAIC,QAAQ,GAAGn+G,IAAI,CAACjZ,IAAL,CAAUq3H,SAAV,EAAqB,IAArB,EAA2B,IAA3B,EAAiC,IAAjC,EAAuC,IAAvC,CAAf;;AAEA,IAAIC,UAAU,CAACl5H,KAAX,CAAiB,QAAjB,CAAJ,EAAgC;AAC9B;AACA;AACAg5H,UAAQ,GAAGn+G,IAAI,CAACjZ,IAAL,CAAUq3H,SAAV,EAAqB,IAArB,CAAX;AACD;;AAEDp3H,MAAM,CAACC,OAAP,GAAiB;AACfi2H,MAAI,EAAE,MAAM,CACV;AACD,GAHc;AAIfH,YAAU,EAAE,MAAM;AAChB,QAAI,CAAC37G,OAAO,CAACk9G,GAAR,CAAYC,eAAjB,EAAkC;AAChC,YAAM,IAAI/zI,KAAJ,CAAU,0CAAV,CAAN;AACD;;AACD,WAAO42B,OAAO,CAACk9G,GAAR,CAAYC,eAAnB;AACD,GATc;AAUfC,iBAAe,EAAE77G,GAAG,IAAKu7G,WAAW,GAAGv7G,GAVxB;AAWf87G,gBAAc,EAAE,MAAM;AACpB,QAAI,CAACP,WAAL,EAAkB;AAChB,YAAM,IAAI1zI,KAAJ,CAAU,+BAAV,CAAN;AACD;;AACD,WAAO0zI,WAAP;AACD,GAhBc;AAiBfQ,cAAY,EAAErR,EAAE,IAAI;AAClB,QAAI,CAACA,EAAL,EAAS;AACP,YAAM,IAAI7iI,KAAJ,CAAU,kCAAkC6iI,EAA5C,CAAN;AACD,KAHiB,CAKlB;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,QAAIA,EAAE,CAACloH,KAAH,CAAS,iBAAT,CAAJ,EAAiC;AAC/B,YAAM,IAAI3a,KAAJ,CACH,sBAAqB6iI,EAAG,gFADrB,CAAN;AAGD;;AAED,WAAOrtG,IAAI,CAACjZ,IAAL,CAAUC,MAAM,CAACC,OAAP,CAAew3H,cAAf,EAAV,EAA2CpR,EAA3C,CAAP;AACD,GApCc;AAqCfsR,qBAAmB,EAAE3+G,IAAI,CAACjZ,IAAL,CAAUo3H,QAAV,EAAoB,mBAApB,CArCN;AAsCfS,gBAAc,EAAE5+G,IAAI,CAACjZ,IAAL,CAAUo3H,QAAV,EAAoB,YAApB,CAtCD;AAuCfU,gBAAc,EAAE7+G,IAAI,CAACjZ,IAAL,CAAUo3H,QAAV,EAAoB,aAApB,CAvCD;AAwCfp3H,MAAI,EAAEiZ,IAAI,CAACjZ,IAxCI;AAyCfmH,UAAQ,EAAEtC,QAAQ,IAAIoU,IAAI,CAAC9R,QAAL,CAActC,QAAd,CAzCP;AA0CfkzH,SAAO,EAAElzH,QAAQ,IACf,IAAIa,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AAC/B3E,MAAE,CAAC+2H,OAAH,CAAWnzH,QAAX,EAAqB,CAACzB,GAAD,EAAM2Y,KAAN,KAAgB;AACnC,UAAI3Y,GAAJ,EAAS;AACPwC,cAAM,CAACxC,GAAD,CAAN;AACD,OAFD,MAEO;AACLuC,eAAO,CAACoW,KAAD,CAAP;AACD;AACF,KAND;AAOD,GARD,CA3Ca;AAoDfT,QAAM,EAAEzW,QAAQ,IACd,IAAIa,OAAJ,CAAYC,OAAO,IAAI;AACrB1E,MAAE,CAACg3H,MAAH,CAAUpzH,QAAV,EAAoB5D,EAAE,CAACi3H,SAAH,CAAaC,IAAjC,EAAuC/0H,GAAG,IAAI;AAC5C,aAAOuC,OAAO,CAAC,CAACvC,GAAF,CAAd;AACD,KAFD;AAGD,GAJD,CArDa;AA0Dfg1H,OAAK,EAAEvzH,QAAQ,IACb,IAAIa,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AAC/B3E,MAAE,CAACm3H,KAAH,CAASvzH,QAAT,EAAmBzB,GAAG,IAAI;AACxB,UAAIA,GAAJ,EAAS;AACPwC,cAAM,CAACxC,GAAD,CAAN;AACD,OAFD,MAEO;AACLuC,eAAO;AACR;AACF,KAND;AAOD,GARD,CA3Da;AAoEfiD,MAAI,EAAE/D,QAAQ,IACZ,IAAIa,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AAC/B3E,MAAE,CAACoE,IAAH,CAAQR,QAAR,EAAkB,CAACzB,GAAD,EAAM2B,KAAN,KAAgB;AAChC,UAAI3B,GAAJ,EAAS;AACPwC,cAAM,CAACxC,GAAD,CAAN;AACD,OAFD,MAEO;AACLuC,eAAO,CAACZ,KAAK,CAAC6D,IAAP,CAAP;AACD;AACF,KAND;AAOD,GARD,CArEa;AA8EfyvH,UAAQ,EAAE,CAACC,QAAD,EAAWC,MAAX,KAAsB;AAC9B,WAAO,IAAI7yH,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,YAAM4yH,UAAU,GAAGv3H,EAAE,CAACw3H,gBAAH,CAAoBH,QAApB,CAAnB;AACA,YAAMI,WAAW,GAAGz3H,EAAE,CAACg2H,iBAAH,CAAqBsB,MAArB,CAApB;AAEAC,gBAAU,CAACjnH,EAAX,CAAc,OAAd,EAAuB3L,MAAvB;AACA8yH,iBAAW,CAACnnH,EAAZ,CAAe,OAAf,EAAwB3L,MAAxB;AAEA8yH,iBAAW,CAACnnH,EAAZ,CAAe,MAAf,EAAuB,MAAMinH,UAAU,CAACx5I,IAAX,CAAgB05I,WAAhB,CAA7B;AACAA,iBAAW,CAACp8D,IAAZ,CAAiB,OAAjB,EAA0B32D,OAA1B;AACD,KATM,CAAP;AAUD,GAzFc;AA0FfhD,UAAQ,EAAE,CAACkC,QAAD,EAAW3B,QAAQ,GAAG,MAAtB,KAAiC;AACzC,QAAIA,QAAQ,KAAK,QAAjB,EAA2B;AACzB;AACA;AACAA,cAAQ,GAAG,IAAX;AACD;;AACD,WAAO,IAAIwC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC3E,QAAE,CAAC0B,QAAH,CAAYkC,QAAZ,EAAsB3B,QAAtB,EAAgC,CAACE,GAAD,EAAM9c,IAAN,KAAe;AAC7C,YAAI8c,GAAJ,EAAS;AACPwC,gBAAM,CAACxC,GAAD,CAAN;AACD,SAFD,MAEO;AACLuC,iBAAO,CAACrf,IAAD,CAAP;AACD;AACF,OAND;AAOD,KARM,CAAP;AASD,GAzGc;AA0GfgwI,WAAS,EAAE,CAACzxH,QAAD,EAAW8oH,QAAX,KAAwB;AACjC,WAAO,IAAIjoH,OAAJ,CAAY,UAASC,OAAT,EAAkBC,MAAlB,EAA0B;AAC3C3E,QAAE,CAACq1H,SAAH,CAAazxH,QAAb,EAAuB8oH,QAAvB,EAAiC,MAAjC,EAAyC,UAASvqH,GAAT,EAAcrd,CAAd,EAAiB;AACxD,eAAOqd,GAAG,GAAGwC,MAAM,CAACxC,GAAD,CAAT,GAAiBuC,OAAO,EAAlC;AACD,OAFD;AAGD,KAJM,CAAP;AAKD,GAhHc;AAiHfgzH,YAAU,EAAE9zH,QAAQ,IAAI;AACtB,WAAO,IAAIa,OAAJ,CAAY,UAASC,OAAT,EAAkBC,MAAlB,EAA0B;AAC3C3E,QAAE,CAAC23H,MAAH,CAAU/zH,QAAV,EAAoBzB,GAAG,IAAI;AACzB,eAAOA,GAAG,GAAGwC,MAAM,CAACxC,GAAD,CAAT,GAAiBuC,OAAO,EAAlC;AACD,OAFD;AAGD,KAJM,CAAP;AAKD,GAvHc;AAwHfkzH,WAAS,EAAEC,OAAO,IAAI;AACpB,WAAO,IAAIpzH,OAAJ,CAAY,UAASC,OAAT,EAAkBC,MAAlB,EAA0B;AAC3C3E,QAAE,CAAC83H,KAAH,CAASD,OAAT,EAAkB11H,GAAG,IAAI;AACvB,eAAOA,GAAG,GAAGwC,MAAM,CAACxC,GAAD,CAAT,GAAiBuC,OAAO,EAAlC;AACD,OAFD;AAGD,KAJM,CAAP;AAKD,GA9Hc;AA+HfqzH,sBAAoB,EAAE,MAAMF,OAAN,IAAiB;AACrC,UAAMhtG,CAAC,GAAG7rB,MAAM,CAACC,OAAjB;;AACA,QAAI,MAAM4rB,CAAC,CAACxQ,MAAF,CAASw9G,OAAT,CAAV,EAA6B;AAC3B,WAAK,IAAI1wH,IAAT,IAAiB,MAAM0jB,CAAC,CAACisG,OAAF,CAAUe,OAAV,CAAvB,EAA2C;AACzC,cAAMG,QAAQ,GAAGntG,CAAC,CAAC9rB,IAAF,CAAO84H,OAAP,EAAgB1wH,IAAhB,CAAjB;;AACA,YAAInH,EAAE,CAACmD,QAAH,CAAY60H,QAAZ,EAAsB9yH,WAAtB,EAAJ,EAAyC;AACvC,gBAAM2lB,CAAC,CAACktG,oBAAF,CAAuBC,QAAvB,CAAN;AACD,SAFD,MAEO;AACL,gBAAMntG,CAAC,CAAC6sG,UAAF,CAAaM,QAAb,CAAN;AACD;AACF;;AAED,YAAMntG,CAAC,CAAC+sG,SAAF,CAAYC,OAAZ,CAAN;AACD;AACF,GA7Ic;AA8IfI,iBAAe,EAAEr0H,QAAQ,IAAI;AAC3B,WAAO,IAAIa,OAAJ,CAAY,UAASC,OAAT,EAAkBC,MAAlB,EAA0B;AAC3C3E,QAAE,CAACoE,IAAH,CAAQR,QAAR,EAAkB,CAACzB,GAAD,EAAM2B,KAAN,KAAgB;AAChC,YAAI3B,GAAJ,EAAS;AACPwC,gBAAM,CAACxC,GAAD,CAAN;AACD,SAFD,MAEO;AACLuC,iBAAO,CAAC,IAAIvc,IAAJ,CAAS2b,KAAK,CAACkB,KAAf,CAAD,CAAP;AACD;AACF,OAND;AAOD,KARM,CAAP;AASD;AAxJc,CAAjB,C;;;;;;;;;;;;ACbA;AAAe;AACb4f,MAAI,EAAE,CAAC,GAAG9nC,IAAJ,KAAa;AACjB47B,WAAO,CAACsrE,GAAR,CAAY,GAAGlnG,IAAf;AACD,GAHY;AAIb67B,MAAI,EAAE,CAAC,GAAG77B,IAAJ,KAAa;AACjB47B,WAAO,CAACC,IAAR,CAAa,GAAG77B,IAAhB;AACD;AANY,CAAf,E;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAMo7I,QAAQ,GAAG94H,mBAAO,CAAC,sCAAD,CAAxB;;AAEA,SAAS+4H,gBAAT,CAA0BC,GAA1B,EAA+Bl/E,GAA/B,EAAoC;AAClCA,KAAG,CAAChpD,OAAJ,CAAY8M,GAAG,IAAI;AACjB,QAAI,OAAOA,GAAP,KAAe,QAAf,IAA2B,OAAOA,GAAP,KAAe,QAA1C,IAAsDA,GAAG,KAAK,IAAlE,EAAwE;AACtE0b,aAAO,CAACsrE,GAAR,CAAYo0C,GAAZ,EAAiBl/E,GAAjB;AACA,YAAM,IAAI12D,KAAJ,CAAU,wBAAwBwa,GAAxB,GAA8B,WAA9B,GAA4Co7H,GAAtD,CAAN;AACD;AACF,GALD;AAMD;;AAEM,eAAelD,IAAf,GAAsB,CAAE;AAExB,SAASnkG,OAAT,CAAiBy+F,EAAjB,EAAqB4I,GAArB,EAA0B;AAC/B,SAAO5I,EAAE,CAACz+F,OAAH,CAAWqnG,GAAX,CAAP;AACD;AAEM,SAAS7S,QAAT,CAAkBiK,EAAlB,EAAsB4I,GAAtB,EAA2BC,MAAM,GAAG,EAApC,EAAwCC,QAAxC,EAAkD;AACvD,MAAID,MAAJ,EAAY;AACVF,oBAAgB,CAACC,GAAD,EAAMC,MAAN,CAAhB;AACD;;AAED,MAAIE,IAAJ;;AACA,MAAI;AACFA,QAAI,GAAG,OAAOH,GAAP,KAAe,QAAf,GAA0B5I,EAAE,CAACz+F,OAAH,CAAWqnG,GAAX,CAA1B,GAA4CA,GAAnD;AACD,GAFD,CAEE,OAAO9wH,CAAP,EAAU;AACVoR,WAAO,CAACsrE,GAAR,CAAY,OAAZ,EAAqBo0C,GAArB;AACA,UAAM9wH,CAAN;AACD;;AAED,MAAIgxH,QAAJ,EAAc;AACZ,QAAI;AACF,UAAIvmI,MAAM,GAAGwmI,IAAI,CAACpqE,GAAL,CAAS,GAAGkqE,MAAZ,CAAb;AACA,aAAOtmI,MAAP;AACD,KAHD,CAGE,OAAOuV,CAAP,EAAU;AACVoR,aAAO,CAACsrE,GAAR,CAAY,OAAZ,EAAqBo0C,GAArB;AACA,YAAM9wH,CAAN;AACD;AACF,GARD,MAQO;AACL,QAAI;AACF,UAAIsd,IAAI,GAAG2zG,IAAI,CAAC3kI,GAAL,CAAS,GAAGykI,MAAZ,CAAX;AACA,aAAO;AAAEG,eAAO,EAAE5zG,IAAI,CAAC4zG,OAAhB;AAAyBC,gBAAQ,EAAE7zG,IAAI,CAAC8zG;AAAxC,OAAP;AACD,KAHD,CAGE,OAAOpxH,CAAP,EAAU;AACV;AACA,YAAMA,CAAN;AACD;AACF;AACF;AAEM,SAASqoH,SAAT,CAAmBH,EAAnB,EAAuB4I,GAAvB,EAA4B;AACjC5I,IAAE,CAACt/F,IAAH,CAAQkoG,GAAR;AACD;AAEM,SAASxN,WAAT,CAAqB4E,EAArB,EAAyBhpI,EAAzB,EAA6B;AAClCgpI,IAAE,CAAC5E,WAAH,CAAepkI,EAAf;AACD,C,CAED;AACA;AACA;AACA;AACA;;AACA,IAAImyI,gBAAgB,GAAG,CAAvB;AACO,eAAeC,gBAAf,CAAgCpJ,EAAhC,EAAoChpI,EAApC,EAAwC;AAC7C;AACA;AACA,MAAImyI,gBAAgB,KAAK,CAAzB,EAA4B;AAC1BnJ,MAAE,CAACt/F,IAAH,CAAQ,mBAAR;AACD;;AACDyoG,kBAAgB;;AAEhB,MAAI;AACF,UAAMnyI,EAAE,EAAR;AACD,GAFD,SAEU;AACRmyI,oBAAgB,GADR,CAER;AACA;AACA;AACA;;AACA,QAAIA,gBAAgB,KAAK,CAAzB,EAA4B;AAC1BnJ,QAAE,CAACt/F,IAAH,CAAQ,QAAR;AACD;AACF;AACF;AAEM,SAAS2oG,YAAT,CAAsBC,YAAtB,EAAoC;AACzC,SAAO,IAAIZ,QAAJ,CAAaY,YAAb,CAAP;AACD;AAEM,SAASC,aAAT,CAAuBvJ,EAAvB,EAA2B;AAChC,SAAOA,EAAE,CAAC/0G,KAAH,EAAP;AACD;AAEM,SAASu+G,cAAT,CAAwBxJ,EAAxB,EAA4B;AACjC,SAAOA,EAAE,CAACv1H,SAAH,EAAP;AACD,C;;;;;;;;;;;AC/FD,MAAMgoH,IAAI,GAAG7iH,mBAAO,CAAC,0CAAD,CAApB;;AAEAJ,MAAM,CAACC,OAAP,GAAiB;AACf+iH,IAAE,EAAE,YAAW;AACb,WAAOv9G,OAAO,CAACC,OAAR,CAAgBu9G,IAAI,CAACD,EAAL,EAAhB,CAAP;AACD,GAHc;AAKfiX,QAAM,EAAE,YAAW;AACjB,WAAOhX,IAAI,CAACD,EAAL,EAAP;AACD;AAPc,CAAjB,C;;;;;;;;;;;;ACFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEO,eAAekX,WAAf,CACLlT,YADK,EAELiD,QAFK,EAGL2K,cAHK,EAIL1J,MAJK,EAKL;AACA,QAAMiP,gBAAgB,GAAGlQ,QAAQ,CAAChrI,MAAT,CAAgB,CAACm7I,OAAD,EAAU;AAAE/T,MAAF;AAAMr+H;AAAN,GAAV,KAA2B;AAClEoyI,WAAO,CAAC/T,EAAD,CAAP,GAAcr+H,IAAd;AACA,WAAOoyI,OAAP;AACD,GAHwB,EAGtB,EAHsB,CAAzB;AAKA,QAAMC,iBAAiB,GAAGzF,cAAc,CAAC31I,MAAf,CACxB,CAACm7I,OAAD,EAAU;AAAEpyI,QAAF;AAAQsjI,cAAU,EAAEV;AAApB,GAAV,KAAkD;AAChDA,iBAAa,CAAC15H,OAAd,CACEopI,WAAW,IACRF,OAAO,CAACE,WAAW,CAACjU,EAAb,CAAP,GAA2B,GAAEr+H,IAAK,KAAIsyI,WAAW,CAACtyI,IAAK,EAF5D;AAIA,WAAOoyI,OAAP;AACD,GAPuB,EAQxB,EARwB,CAA1B;AAWA,QAAMG,cAAc,GAAGrP,MAAM,CAACjsI,MAAP,CAAc,CAACm7I,OAAD,EAAU;AAAE/T,MAAF;AAAMr+H;AAAN,GAAV,KAA2B;AAC9DoyI,WAAO,CAAC/T,EAAD,CAAP,GAAcr+H,IAAd;AACA,WAAOoyI,OAAP;AACD,GAHsB,EAGpB,EAHoB,CAAvB;AAKA,QAAMI,qBAAqB,GAAGxT,YAAY,CAACjlI,GAAb,CAC5B,CAAC;AAAE0lI,WAAF;AAAWzmI,QAAX;AAAiB8nI,SAAjB;AAAwBqD,SAAxB;AAA+B1D,YAA/B;AAAyCx+H;AAAzC,GAAD,MAAwD;AACtDwwI,WAAO,EAAEN,gBAAgB,CAAC1S,OAAD,CAD6B;AAEtDt+H,QAAI,EAAEnI,IAFgD;AAGtD05I,SAAK,EAAEH,cAAc,CAACzR,KAAD,CAHiC;AAItD6R,SAAK,EAAExO,KAJ+C;AAKtDyO,YAAQ,EAAEP,iBAAiB,CAAC5R,QAAD,CAL2B;AAMtDoS,UAAM,EAAE5wI,MAAM,IAAI,IAAV,GAAiB,CAAjB,GAAqB4kI,oEAAe,CAAC5kI,MAAD;AANU,GAAxD,CAD4B,CAA9B;AAWA,SAAO6wI,6DAAY,CAACN,qBAAD,EAAwB;AAAEp4H,UAAM,EAAE;AAAV,GAAxB,CAAnB;AACD;AAEM,eAAe24H,gBAAf,CAAgC3V,KAAhC,EAAuC;AAC5C,wBAA6B,MAAM4P,sEAAQ,CACzC5P,KAAK,CACFD,MADH,CACU,CACN;AAAE6V,MAAE,EAAE;AAAN,GADM,EAEN;AAAEP,WAAO,EAAE;AAAX,GAFM,EAGN;AAAEtxI,QAAI,EAAE;AAAR,GAHM,EAIN;AAAEuxI,SAAK,EAAE;AAAT,GAJM,EAKN;AAAEO,YAAQ,EAAE;AAAZ,GALM,EAMN;AAAEC,YAAQ,EAAE;AAAZ,GANM,EAON;AAAEP,SAAK,EAAE;AAAT,GAPM,EAQN;AAAEC,YAAQ,EAAE;AAAZ,GARM,EASN;AAAEC,UAAM,EAAE;AAAV,GATM,CADV,EAYG/6I,OAZH,CAYW;AAAEq7I,UAAM,EAAE;AAAV,GAZX,CADyC,CAA3C;AAAA,MAAYnU,YAAZ,mBAAM3gI,IAAN;;AAgBA,MAAI+0I,aAAa,GAAG,IAAIvoI,GAAJ,EAApB;;AACA,OAAK,IAAIwoI,KAAT,IAAkBrU,YAAlB,EAAgC;AAC9B,QAAIqU,KAAK,CAACH,QAAV,EAAoB;AAClBE,mBAAa,CAAC52I,GAAd,CAAkB62I,KAAK,CAACL,EAAxB,EAA4BK,KAAK,CAACX,KAAlC;AACD;AACF,GAtB2C,CAwB5C;;;AACA,MAAIY,SAAS,GAAGtU,YAAY,CAACvhI,MAAb,CAAoB4sB,CAAC,IAAI,CAACA,CAAC,CAAC6oH,QAA5B,CAAhB,CAzB4C,CA2B5C;;AACA,MAAIV,qBAAqB,GAAGc,SAAS,CAACv5I,GAAV,CAAcs5I,KAAK,IAAI;AACjD,WAAO;AACLZ,aAAO,EAAEY,KAAK,CAACZ,OADV;AAELtxI,UAAI,EAAEkyI,KAAK,CAAClyI,IAFP;AAGLuxI,WAAK,EAAEW,KAAK,CAACJ,QAAN,GAAiBG,aAAa,CAACn6I,GAAd,CAAkBo6I,KAAK,CAACJ,QAAxB,CAAjB,GAAqDI,KAAK,CAACX,KAH7D;AAILC,WAAK,EAAEU,KAAK,CAACV,KAJR;AAKLC,cAAQ,EAAES,KAAK,CAACT,QALX;AAMLC,YAAM,EAAEQ,KAAK,CAACR,MAAN,IAAgB,IAAhB,GAAuB,CAAvB,GAA2BhM,oEAAe,CAACwM,KAAK,CAACR,MAAP;AAN7C,KAAP;AAQD,GAT2B,CAA5B;AAWA,SAAOC,6DAAY,CAACN,qBAAD,EAAwB;AAAEp4H,UAAM,EAAE;AAAV,GAAxB,CAAnB;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtFD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAM6gH,IAAI,GAAG7iH,mBAAO,CAAC,qFAAD,CAApB;;AAEO,eAAem7H,kBAAf,CAAkCC,WAAlC,EAA+CC,WAA/C,EAA4D;AACjE,8BAA4B,MAAMC,oEAAY,CAACjF,QAAb,CAAsB,CACtD,SADsD,EAEtD,UAFsD,CAAtB,CAAlC;AAAA;AAAA;AAAA,MAAQkF,MAAR;AAAA;AAAA,MAAoB7nI,GAApB;;AAKA,MAAI0nI,WAAW,IAAI,IAAf,IAAuB,CAACA,WAAW,CAACI,cAApC,IAAsD,CAACJ,WAAW,CAACxzI,IAAvE,EAA6E;AAC3E,UAAM,IAAIxE,KAAJ,CAAU,4BAAV,CAAN;AACD;;AAED,MAAI6iI,EAAE,GAAGpD,IAAI,CAACgX,MAAL,EAAT,CAViE,CAYjE;AACA;;AACA,QAAM4B,kDAAI,CAACC,gEAAS,GAAGC,YAAZ,GAA2B,uBAA5B,EAAqD;AAC7DJ,UAD6D;AAE7D7nI,OAF6D;AAG7DkoI,WAAO,EAAE3V,EAHoD;AAI7D4V,gBAAY,EAAER;AAJ+C,GAArD,CAAV;AAOA,QAAMrH,4DAAU,CAAC,MACf5D,kDAAA,CAAkB,OAAlB,EAA2B;AACzBnK,MADyB;AAEzB6V,WAAO,EAAEV,WAAW,CAACI,cAFI;AAGzB5zI,QAAI,EAAEwzI,WAAW,CAACxzI;AAHO,GAA3B,CADc,CAAhB;AAQA,SAAOq+H,EAAP;AACD;AAEM,eAAe8V,WAAf,CAA2BC,MAA3B,EAAmCC,UAAnC,EAA+CC,YAAY,GAAG,EAA9D,EAAkE;AACvE,+BAAgC,MAAMZ,oEAAY,CAACjF,QAAb,CAAsB,CAC1D,SAD0D,EAE1D,UAF0D,CAAtB,CAAtC;AAAA;AAAA;AAAA,MAAQkF,MAAR;AAAA;AAAA,MAAoBY,OAApB,6BADuE,CAMvE;;;AACA,MAAItS,QAAQ,GAAG,MAAMuS,iDAAA,CAAqBb,MAArB,EAA6BY,OAA7B,EAAsCH,MAAtC,CAArB,CAPuE,CASvE;;AACAnS,UAAQ,GAAGA,QAAQ,CAACxkI,MAAT,CAAgBkmI,IAAI,IAAI0Q,UAAU,CAAC5lI,QAAX,CAAoBk1H,IAAI,CAACmE,UAAzB,CAAxB,CAAX;AAEA,SAAOrqH,OAAO,CAAC0pD,GAAR,CACL86D,QAAQ,CAACloI,GAAT,CAAa,MAAM4pI,IAAN,IAAc;AACzB,QAAItF,EAAE,GAAG,MAAM+N,4DAAU,CAAC,YAAY;AACpC,UAAI/N,EAAE,GAAG,MAAMmK,iDAAA,CAAiB;AAC9BV,kBAAU,EAAEnE,IAAI,CAACmE,UADa;AAE9B9nI,YAAI,EAAE2jI,IAAI,CAAC3jI,IAFmB;AAG9By0I,qBAAa,EAAE9Q,IAAI,CAAC8Q,aAHU;AAI9BthI,YAAI,EAAEuhI,6EAAoB,CAAC/Q,IAAI,CAACxwH,IAAN,CAJI;AAK9BwhI,uBAAe,EAAElT,oEAAe,CAACkC,IAAI,CAACiR,QAAL,CAAcC,OAAf,CALF;AAM9BC,YAAI,EAAEnR,IAAI,CAACmR,IANmB;AAO9BC,YAAI,EAAEX,MAPwB;AAQ9B/R,iBAAS,EAAEiS,YAAY,CAAC7lI,QAAb,CAAsBk1H,IAAI,CAACmE,UAA3B,IAAyC,CAAzC,GAA6C;AAR1B,OAAjB,CAAf,CADoC,CAYpC;;AACA,YAAMU,+CAAA,CAAe;AACnBxoI,YAAI,EAAE,EADa;AAEnBojI,qBAAa,EAAE/E;AAFI,OAAf,CAAN;AAKA,aAAOA,EAAP;AACD,KAnBwB,CAAzB,CADyB,CAsBzB;;AACA,UAAMmW,iDAAA,CAAqBb,MAArB,EAA6BY,OAA7B,EAAsClW,EAAtC,EAA0CsF,IAAI,CAACmE,UAA/C,EAA2DsM,MAA3D,CAAN;AAEA,WAAO/V,EAAP;AACD,GA1BD,CADK,CAAP;AA6BD,C;;;;;;;;;;;;ACnFD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEO,SAAS2W,SAAT,CAAmBp4H,QAAnB,EAA6B9kB,OAA7B,EAAsC;AAC3C,MAAIm9I,MAAM,GAAG,EAAb;AACA,MAAI/mG,CAAC,GAAGtxB,QAAQ,CAACzG,KAAT,CAAe,UAAf,CAAR;;AAEA,MAAI+3B,CAAJ,EAAO;AACL,QAAIgnG,GAAG,GAAGhnG,CAAC,CAAC,CAAD,CAAX;;AAEA,YAAQgnG,GAAG,CAAC79G,WAAJ,EAAR;AACE,WAAK,MAAL;AACE,eAAO89G,QAAQ,CAACv4H,QAAD,CAAf;;AACF,WAAK,MAAL;AACE,eAAOw4H,QAAQ,CAACx4H,QAAD,EAAW9kB,OAAX,CAAf;;AACF,WAAK,MAAL;AACA,WAAK,MAAL;AACE,eAAOu9I,QAAQ,CAACz4H,QAAD,CAAf;;AACF;AARF;AAUD;;AAEDq4H,QAAM,CAACp5I,IAAP,CAAY;AACVopC,WAAO,EAAE,mBADC;AAEVmgD,YAAQ,EAAE;AAFA,GAAZ;AAIA,SAAO;AAAE6vD;AAAF,GAAP;AACD;;AAED,eAAeG,QAAf,CAAwBx4H,QAAxB,EAAkC9kB,OAAO,GAAG,EAA5C,EAAgD;AAC9C,MAAIm9I,MAAM,GAAG,EAAb;AACA,MAAIvP,QAAQ,GAAG,MAAM1sH,0DAAE,CAAC0B,QAAH,CAAYkC,QAAZ,CAArB;AAEA,MAAIve,IAAJ;;AACA,MAAI;AACFA,QAAI,GAAGi3I,yDAAQ,CAAC5P,QAAD,EAAW;AACxBroG,aAAO,EAAE,IADe;AAExBL,SAAG,EAAE,IAFmB;AAGxBS,eAAS,EAAE3lC,OAAO,CAAC2lC,SAAR,IAAqB,GAHR;AAIxBO,WAAK,EAAE,GAJiB;AAKxBa,UAAI,EAAE,IALkB;AAMxBR,wBAAkB,EAAE;AANI,KAAX,CAAf;AAQD,GATD,CASE,OAAOljB,GAAP,EAAY;AACZ85H,UAAM,CAACp5I,IAAP,CAAY;AACVopC,aAAO,EAAE,qBAAqB9pB,GAAG,CAAC8pB,OADxB;AAEVmgD,cAAQ,EAAEjqE,GAAG,CAAC8pB;AAFJ,KAAZ;AAIA,WAAO;AAAEgwG,YAAF;AAAUjW,kBAAY,EAAE;AAAxB,KAAP;AACD;;AAED,SAAO;AAAEiW,UAAF;AAAUjW,gBAAY,EAAE3gI;AAAxB,GAAP;AACD;;AAED,eAAe82I,QAAf,CAAwBv4H,QAAxB,EAAkC;AAChC,MAAIq4H,MAAM,GAAG,EAAb;AACA,MAAIvP,QAAQ,GAAG,MAAM1sH,0DAAE,CAAC0B,QAAH,CAAYkC,QAAZ,CAArB;AAEA,MAAIve,IAAJ;;AACA,MAAI;AACFA,QAAI,GAAGk3I,yDAAQ,CAAC7P,QAAD,CAAf;AACD,GAFD,CAEE,OAAOvqH,GAAP,EAAY;AACZ85H,UAAM,CAACp5I,IAAP,CAAY;AACVopC,aAAO,EAAE,qDADC;AAEVmgD,cAAQ,EAAEjqE,GAAG,CAACyyC;AAFJ,KAAZ;AAIA,WAAO;AAAEqnF,YAAF;AAAUjW,kBAAY,EAAE;AAAxB,KAAP;AACD;;AAED,SAAO;AACLiW,UADK;AAELjW,gBAAY,EAAE3gI,IAAI,CAAC2gI,YAAL,CAAkBjlI,GAAlB,CAAsBs5I,KAAK,KAAK;AAC5CpxI,YAAM,EAAEoxI,KAAK,CAACpxI,MAAN,IAAgB,IAAhB,GAAuBuzI,uEAAkB,CAACnC,KAAK,CAACpxI,MAAP,CAAzC,GAA0D,IADtB;AAE5CjJ,UAAI,EAAEq6I,KAAK,CAACr6I,IAFgC;AAG5Cy8I,gBAAU,EAAEpC,KAAK,CAACvS,KAH0B;AAI5C4U,oBAAc,EAAErC,KAAK,CAACvS,KAJsB;AAK5CqD,WAAK,EAAEkP,KAAK,CAACjP,IAAN,IAAc;AALuB,KAAL,CAA3B;AAFT,GAAP;AAUD;;AAED,eAAeiR,QAAf,CAAwBz4H,QAAxB,EAAkC;AAChC,sBAAyC,MAAM,4GAA/C;AAAA,MAAM+4H,kBAAN,iBAAMA,kBAAN;AAAA,MAA0BC,UAA1B,iBAA0BA,UAA1B;;AAGA,QAAMA,UAAU,EAAhB;AAEA,MAAIX,MAAM,GAAG,EAAb;AACA,MAAIvP,QAAQ,GAAG,MAAM1sH,0DAAE,CAAC0B,QAAH,CAAYkC,QAAZ,CAArB;AAEA,MAAIve,IAAJ;;AACA,MAAI;AACFA,QAAI,GAAGs3I,kBAAkB,CAACjQ,QAAD,CAAzB;AACD,GAFD,CAEE,OAAOvqH,GAAP,EAAY;AACZ85H,UAAM,CAACp5I,IAAP,CAAY;AACVopC,aAAO,EAAE,uBADC;AAEVmgD,cAAQ,EAAEjqE,GAAG,CAACyyC;AAFJ,KAAZ;AAIA,WAAO;AAAEqnF;AAAF,KAAP;AACD;;AAED,SAAO;AACLA,UADK;AAELjW,gBAAY,EAAE3gI,IAAI,CAACtE,GAAL,CAASs5I,KAAK,KAAK;AAC/BpxI,YAAM,EAAEoxI,KAAK,CAACpxI,MADiB;AAE/B+lI,iBAAW,EAAEqL,KAAK,CAACwC,KAFY;AAG/B78I,UAAI,EAAEq6I,KAAK,CAACr6I,IAAN,GAAa88I,kEAAW,CAACzC,KAAK,CAACr6I,IAAN,GAAa,IAAd,CAAxB,GAA8C,IAHrB;AAI/By8I,gBAAU,EAAEpC,KAAK,CAACrzI,IAJa;AAK/B01I,oBAAc,EAAErC,KAAK,CAACrzI,IALS;AAM/BmkI,WAAK,EAAEkP,KAAK,CAACjP,IAAN,IAAc;AANU,KAAL,CAAd;AAFT,GAAP;AAWD,C;;;;;;;;;;;;ACnHD;AAAA;AAAA;AAAA;AAAA;AAEO,eAAevD,WAAf,CAA2BkV,WAA3B,EAAwC;AAC7C;AACA;AACA,MAAIC,GAAG,GAAG,MAAMxN,yCAAA,CACb,+DADa,EAEd,CAACuN,WAAW,CAAC1+G,WAAZ,EAAD,CAFc,CAAhB;;AAKA,MAAI2+G,GAAJ,EAAS;AACP,WAAOA,GAAG,CAAC3X,EAAX;AACD,GAFD,MAEO;AACL,WAAOmK,+CAAA,CAAe;AAAExoI,UAAI,EAAE+1I;AAAR,KAAf,CAAP;AACD;AACF;AAEM,eAAeE,uBAAf,GAAyC;AAC9C,MAAIxV,QAAQ,GAAG,MAAM+H,yCAAA,CAAU;AACjC;AACA;AACA;AACA;AACA,GALuB,CAArB;;AAMA,MAAI/H,QAAQ,KAAK,IAAjB,EAAuB;AACrBA,YAAQ,GAAG,MAAM+H,yCAAA,CACf,gEADe,CAAjB;AAGD;;AAED,MAAInK,EAAE,GAAG,MAAMwC,WAAW,CAAC,kBAAD,CAA1B;AACA,SAAO;AACLxC,MADK;AAELoC,YAAQ,EAAEA,QAAQ,GAAGA,QAAQ,CAACpC,EAAZ,GAAiB;AAF9B,GAAP;AAID,C;;;;;;;;;;;;ACnCD;AAAA;AAAe,SAAS/yH,KAAT,CAAe4qI,GAAf,EAAoBp+I,OAApB,EAA6B;AAC1C,MAAIqnC,KAAK,GAAG+2G,GAAG,CAAC7+H,KAAJ,CAAU,IAAV,CAAZ;AAAA,MACE8+H,IAAI,GAAGh3G,KAAK,CAACzhC,KAAN,EADT;AAAA,MAEEyV,IAAI,GAAG,iBAAiB+1B,IAAjB,CAAsBitG,IAAI,CAACt3G,IAAL,EAAtB,CAFT;AAAA,MAGExgC,IAAI,GAAG,EAHT;AAAA,MAIE2gI,YAAY,GAAI3gI,IAAI,CAAC2gI,YAAL,GAAoB,EAJtC;AAAA,MAKE4E,WAAW,GAAG,EALhB;AAOA9rI,SAAO,GAAGA,OAAO,IAAI,EAArB;;AAEA,MAAI,CAACqb,IAAD,IAAS,CAACA,IAAI,CAACnW,MAAnB,EAA2B;AACzB,UAAM,IAAIxB,KAAJ,CAAU,kDAAkD26I,IAA5D,CAAN;AACD;;AACD93I,MAAI,CAAC8U,IAAL,GAAYA,IAAI,CAAC,CAAD,CAAhB;AAEA,MAAIijI,QAAQ,GAAG,EAAf;;AAEA,SAAQD,IAAI,GAAGh3G,KAAK,CAACzhC,KAAN,EAAf,EAA+B;AAC7By4I,QAAI,GAAGA,IAAI,CAACt3G,IAAL,EAAP;;AACA,QAAIs3G,IAAI,KAAK,GAAb,EAAkB;AAChBnX,kBAAY,CAACnjI,IAAb,CAAkB+nI,WAAlB;AACAA,iBAAW,GAAG,EAAd;AACA;AACD;;AACD,YAAQuS,IAAI,CAAC,CAAD,CAAZ;AACE,WAAK,GAAL;AACEvS,mBAAW,CAAC5qI,IAAZ,GAAmBm9I,IAAI,CAACj8F,SAAL,CAAe,CAAf,CAAnB;AACA;;AACF,WAAK,GAAL;AACE0pF,mBAAW,CAAC3hI,MAAZ,GAAqBk0I,IAAI,CAACj8F,SAAL,CAAe,CAAf,CAArB;AACA;;AACF,WAAK,GAAL;AACE0pF,mBAAW,CAAC3uH,MAAZ,GAAqBkhI,IAAI,CAACj8F,SAAL,CAAe,CAAf,CAArB;AACA;;AACF,WAAK,GAAL;AACE0pF,mBAAW,CAACQ,IAAZ,GAAmB+R,IAAI,CAACj8F,SAAL,CAAe,CAAf,CAAnB;AACA;;AACF,WAAK,GAAL;AACE0pF,mBAAW,CAACyS,OAAZ,GAAsB,CAACzS,WAAW,CAACyS,OAAZ,IAAuB,EAAxB,EAA4BriH,MAA5B,CACpBmiH,IAAI,CAACj8F,SAAL,CAAe,CAAf,CADoB,CAAtB;AAGA;;AACF,WAAK,GAAL;AACE0pF,mBAAW,CAAC9C,KAAZ,GAAoBqV,IAAI,CAACj8F,SAAL,CAAe,CAAf,EAAkB5jC,OAAlB,CAA0B,QAA1B,EAAoC,GAApC,CAApB;AACA;;AACF,WAAK,GAAL;AACE,YAAIggI,MAAM,GAAGH,IAAI,CAACj8F,SAAL,CAAe,CAAf,EAAkB7iC,KAAlB,CAAwB,GAAxB,CAAb;AACAusH,mBAAW,CAACnD,QAAZ,GAAuB6V,MAAM,CAAC,CAAD,CAA7B;;AACA,YAAIA,MAAM,CAAC,CAAD,CAAN,KAActgJ,SAAlB,EAA6B;AAC3B4tI,qBAAW,CAAC2S,WAAZ,GAA0BD,MAAM,CAAC,CAAD,CAAhC;AACD;;AACD;;AACF,WAAK,GAAL;AACE1S,mBAAW,CAAC4S,aAAZ,GAA4BL,IAAI,CAACj8F,SAAL,CAAe,CAAf,CAA5B;AACA;;AACF,WAAK,GAAL;AACE,YAAIu8F,MAAM,GAAGN,IAAI,CAACj8F,SAAL,CAAe,CAAf,EAAkB7iC,KAAlB,CAAwB,GAAxB,CAAb;AACA++H,gBAAQ,CAAC3V,QAAT,GAAoBgW,MAAM,CAAC,CAAD,CAA1B;;AACA,YAAIA,MAAM,CAAC,CAAD,CAAN,KAAczgJ,SAAlB,EAA6B;AAC3BogJ,kBAAQ,CAACG,WAAT,GAAuBE,MAAM,CAAC,CAAD,CAA7B;AACD;;AACD;;AACF,WAAK,GAAL;AACEL,gBAAQ,CAACL,WAAT,GAAuBI,IAAI,CAACj8F,SAAL,CAAe,CAAf,CAAvB;AACA;;AACF,WAAK,GAAL;AACEk8F,gBAAQ,CAACn0I,MAAT,GAAkB2U,UAAU,CAACu/H,IAAI,CAACj8F,SAAL,CAAe,CAAf,CAAD,CAA5B;;AACA,YAAI,EAAE0pF,WAAW,CAACwS,QAAZ,YAAgCt7I,KAAlC,CAAJ,EAA8C;AAC5C8oI,qBAAW,CAACwS,QAAZ,GAAuB,EAAvB;AACD;;AACDxS,mBAAW,CAACwS,QAAZ,CAAqBv6I,IAArB,CAA0Bu6I,QAA1B;AACAA,gBAAQ,GAAG,EAAX;AAEA;;AAEF;AACE,cAAM,IAAI56I,KAAJ,CAAU,0BAA0B26I,IAAI,CAAC,CAAD,CAAxC,CAAN;AApDJ;AAsDD;;AAED,MAAIv8I,MAAM,CAACiS,IAAP,CAAY+3H,WAAZ,EAAyB5mI,MAA7B,EAAqC;AACnCgiI,gBAAY,CAACnjI,IAAb,CAAkB+nI,WAAlB;AACD;;AAEDvlI,MAAI,CAACq4I,UAAL,GAAkB5+I,OAAO,CAAC4+I,UAA1B;AACA,SAAOr4I,IAAP;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtFD;AACA;AACA;AAUA;AACA;AACA;AACA;;AAEA,SAASs4I,UAAT,CAAoBvgH,CAApB,EAAuB;AACrB,SAAO3xB,KAAK,CAAC2xB,CAAD,CAAL,GAAW,IAAX,GAAkBA,CAAzB;AACD;;AAED,SAASwgH,YAAT,CAAsBxgH,CAAtB,EAAyB;AACvB,SAAOugH,UAAU,CAACv/H,QAAQ,CAACgf,CAAD,CAAT,CAAjB;AACD;;AAED,SAAS40C,MAAT,CAAgBxuD,IAAhB,EAAsBrJ,IAAtB,EAA4B+M,GAA5B,EAAiC;AAC/B,MAAI,CAAC1D,IAAL,EAAW;AACT,UAAM,IAAIq6H,iDAAJ,CAAc1jI,IAAd,EAAoB+M,GAApB,CAAN;AACD;AACF;;AAEM,SAAS42H,cAAT,CAAwBp9G,IAAxB,EAA8B;AACnC,MAAI;AACF,QAAIvtB,KAAK,GAAG4qI,gFAAsB,CAACr9G,IAAD,CAAlC;AAEA,WAAO;AACLvmB,UAAI,EAAE,OADD;AAEL5U,cAAQ,EAAE,IAAIy4I,wDAAJ,CAAc;AAAE/uI,cAAM,EAAEkE;AAAV,OAAd;AAFL,KAAP;AAID,GAPD,CAOE,OAAOmU,CAAP,EAAU;AACV,UAAM,IAAIu2H,iDAAJ,CAAc,kBAAd,EAAkCv2H,CAAC,CAAC2kB,OAApC,CAAN;AACD;AACF;AAEM,SAASgyG,eAAT,CAAyBh9G,GAAzB,EAA8B;AACnC,MAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;AAC3B,WAAO,IAAP;AACD,GAFD,MAEO,IAAIA,GAAG,CAACj9B,MAAJ,KAAe,EAAnB,EAAuB;AAC5B;AACA,QAAI,CAACk6I,gDAAA,CAAgBA,iDAAA,CAAiBj9G,GAAjB,CAAhB,CAAL,EAA6C;AAC3C,aAAO,IAAP;AACD;;AAED,WAAO;AAAE9mB,UAAI,EAAE,MAAR;AAAgBna,UAAI,EAAEihC;AAAtB,KAAP;AACD,GAPM,MAOA,IAAIA,GAAG,CAACj9B,MAAJ,KAAe,CAAnB,EAAsB;AAC3B;AACA,QAAI,CAACk6I,gDAAA,CAAgBA,iDAAA,CAAiBj9G,GAAG,GAAG,KAAvB,CAAhB,CAAL,EAAqD;AACnD,aAAO,IAAP;AACD;;AAED,WAAO;AAAE9mB,UAAI,EAAE,OAAR;AAAiBna,UAAI,EAAEihC;AAAvB,KAAP;AACD,GAPM,MAOA,IAAIA,GAAG,CAACj9B,MAAJ,KAAe,CAAnB,EAAsB;AAC3B;AACA,QAAI,CAACk6I,gDAAA,CAAgBA,iDAAA,CAAiBj9G,GAAG,GAAG,QAAvB,CAAhB,CAAL,EAAwD;AACtD,aAAO,IAAP;AACD;;AAED,WAAO;AAAE9mB,UAAI,EAAE,MAAR;AAAgBna,UAAI,EAAEihC;AAAtB,KAAP;AACD;;AAED,SAAO,IAAP;AACD;AAEM,SAASk9G,kBAAT,CAA4BC,OAA5B,EAAqC;AAC1C,MAAMC,IAAN,GAAqBD,OAArB,CAAMC,IAAN;AAAA,MAAYC,IAAZ,GAAqBF,OAArB,CAAYE,IAAZ;;AACA,MAAI,OAAOD,IAAP,KAAgB,QAAhB,IAA4B,OAAOC,IAAP,KAAgB,QAAhD,EAA0D;AACxD,WAAO,IAAP;AACD;;AACD,SAAO;AAAEnkI,QAAI,EAAE,SAAR;AAAmBkkI,QAAnB;AAAyBC;AAAzB,GAAP;AACD;AAED,IAAIC,eAAe,GAAG;AACpBv+I,MAAI,EAAE;AACJw+I,OAAG,EAAE,CAAC,IAAD,EAAO,UAAP,EAAmB,IAAnB,EAAyB,KAAzB,EAAgC,IAAhC,EAAsC,KAAtC,CADD;AAEJC,YAAQ,EAAE,KAFN;;AAGJnsI,SAAK,CAACosI,EAAD,EAAKnhJ,KAAL,EAAYm6G,SAAZ,EAAuB;AAC1B,UAAIy4B,MAAM,GACR,OAAO5yI,KAAP,KAAiB,QAAjB,GACI0gJ,eAAe,CAAC1gJ,KAAD,CADnB,GAEIA,KAAK,CAAC2W,SAAN,IAAmB,IAAnB,GACA4pI,cAAc,CAACvgJ,KAAD,CADd,GAEA,IALN;AAMAy0E,YAAM,CACJm+D,MADI,EAEJ,aAFI,EAGH,+BAA8Bz4B,SAAU,GAHrC,CAAN,CAP0B,CAa1B;;AACA,UAAIgnC,EAAE,KAAK,UAAX,EAAuB;AACrB1sE,cAAM,CACJm+D,MAAM,CAACh2H,IAAP,KAAgB,MAAhB,IAA0Bg2H,MAAM,CAACh2H,IAAP,KAAgB,OADtC,EAEJ,aAFI,EAGH,6CAA4Cu9F,SAAU,GAHnD,CAAN;AAKD,OAND,CAOA;AAPA,WAQK,IAAIgnC,EAAE,KAAK,IAAP,IAAeA,EAAE,KAAK,KAAtB,IAA+BA,EAAE,KAAK,IAAtC,IAA8CA,EAAE,KAAK,KAAzD,EAAgE;AACnE1sE,cAAM,CACJm+D,MAAM,CAACh2H,IAAP,KAAgB,MADZ,EAEJ,aAFI,EAGH,2BAA0BukI,EAAG,aAAYhnC,SAAU,GAHhD,CAAN;AAKD;;AAED,aAAOy4B,MAAP;AACD;;AAlCG,GADc;AAqCpB9K,IAAE,EAAE;AACFmZ,OAAG,EAAE,CAAC,IAAD,EAAO,UAAP,EAAmB,OAAnB,CADH;AAEFC,YAAQ,EAAE,IAFR;;AAGFnsI,SAAK,CAACosI,EAAD,EAAKnhJ,KAAL,EAAYm6G,SAAZ,EAAuB;AAC1B,UAAIgnC,EAAE,KAAK,OAAX,EAAoB;AAClB1sE,cAAM,CACJlwE,KAAK,CAACwD,OAAN,CAAc/H,KAAd,CADI,EAEJ,gBAFI,EAGH,0CAAyCm6G,SAAU,GAHhD,CAAN;AAKA,eAAOn6G,KAAP;AACD;;AACD,aAAOA,KAAP;AACD;;AAbC,GArCgB;AAoDpB4vC,QAAM,EAAE;AACNqxG,OAAG,EAAE,CAAC,IAAD,EAAO,UAAP,EAAmB,OAAnB,CADC;AAENC,YAAQ,EAAE,KAFJ;;AAGNnsI,SAAK,CAACosI,EAAD,EAAKnhJ,KAAL,EAAYm6G,SAAZ,EAAuB;AAC1B,UAAIgnC,EAAE,KAAK,OAAX,EAAoB;AAClB1sE,cAAM,CACJlwE,KAAK,CAACwD,OAAN,CAAc/H,KAAd,CADI,EAEJ,gBAFI,EAGH,0CAAyCm6G,SAAU,MAAK9rG,IAAI,CAACC,SAAL,CACvDtO,KADuD,CAEvD,EALE,CAAN;AAOA,eAAOA,KAAK,CAACkH,MAAN,CAAaw9C,OAAb,EAAsBlhD,GAAtB,CAA0Bic,GAAG,IAAIA,GAAG,CAACqhB,WAAJ,EAAjC,CAAP;AACD;;AAED,UAAIqgH,EAAE,KAAK,UAAX,EAAuB;AACrB1sE,cAAM,CACJ,OAAOz0E,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,CAACyG,MAAN,GAAe,CADxC,EAEJ,iBAFI,EAGH,+CAA8C0zG,SAAU,GAHrD,CAAN;AAKD;;AAED,aAAOn6G,KAAK,CAAC8gC,WAAN,EAAP;AACD;;AAxBK,GApDY;AA8EpBpiB,QAAM,EAAE;AACNuiI,OAAG,EAAE,CAAC,IAAD,EAAO,UAAP,EAAmB,WAAnB,EAAgC,IAAhC,EAAsC,KAAtC,EAA6C,IAA7C,EAAmD,KAAnD,CADC;AAENC,YAAQ,EAAE,KAFJ;;AAGNnsI,SAAK,CAACosI,EAAD,EAAKnhJ,KAAL,EAAYm6G,SAAZ,EAAuB;AAC1B,UAAIy4B,MAAM,GACR,OAAO5yI,KAAP,KAAiB,QAAjB,GACI;AAAE4c,YAAI,EAAE,SAAR;AAAmB5c;AAAnB,OADJ,GAEI4gJ,kBAAkB,CAAC5gJ,KAAD,CAHxB;AAKAy0E,YAAM,CACJm+D,MAAM,IAAI,IADN,EAEJ,YAFI,EAGH,6CAA4CvkI,IAAI,CAACC,SAAL,CAC3CtO,KAD2C,CAE3C,YAAWm6G,SAAU,GALnB,CAAN;;AAQA,UAAIgnC,EAAE,KAAK,WAAX,EAAwB;AACtB1sE,cAAM,CACJm+D,MAAM,CAACh2H,IAAP,KAAgB,SADZ,EAEJ,eAFI,EAGH,8BAA6BukI,EAAG,aAAYhnC,SAAU,GAHnD,CAAN;AAKD,OAND,MAMO;AACL1lC,cAAM,CACJm+D,MAAM,CAACh2H,IAAP,KAAgB,SADZ,EAEJ,eAFI,EAGH,6BAA4BukI,EAAG,aAAYhnC,SAAU,GAHlD,CAAN;AAKD;;AAED,aAAOy4B,MAAP;AACD;;AAhCK,GA9EY;AAgHpBjjG,SAAO,EAAE;AACPsxG,OAAG,EAAE,CAAC,IAAD,CADE;AAEPC,YAAQ,EAAE,KAFH;;AAGPnsI,SAAK,CAACosI,EAAD,EAAKnhJ,KAAL,EAAYm6G,SAAZ,EAAuB;AAC1B1lC,YAAM,CACJ,OAAOz0E,KAAP,KAAiB,SADb,EAEJ,aAFI,EAGH,4BAA2BA,KAAM,YAAWm6G,SAAU,GAHnD,CAAN;AAMA,aAAOn6G,KAAP;AACD;;AAXM;AAhHW,CAAtB;AA+HO,MAAMohJ,SAAN,CAAgB;AACrB9hJ,aAAW,CAAC6hJ,EAAD,EAAK13G,KAAL,EAAYzpC,KAAZ,EAAmBuB,OAAnB,EAA4B8/I,UAA5B,EAAwC;AACjD,QAAIC,QAAQ,GAAGD,UAAU,CAAC3+I,GAAX,CAAe+mC,KAAf,CAAf;AACAgrC,UAAM,CAAC6sE,QAAD,EAAW,UAAX,EAAuB,8BAA8B73G,KAArD,CAAN;AAEA,QAAI7sB,IAAI,GAAGokI,eAAe,CAACM,QAAD,CAA1B,CAJiD,CAMjD;AACA;;AACA7sE,UAAM,CACJ73D,IADI,EAEJ,UAFI,EAGH,2BAA0B0kI,QAAS,YAAW73G,KAAM,GAHjD,CAAN;AAKAgrC,UAAM,CACJ73D,IAAI,CAACqkI,GAAL,CAAS/oI,QAAT,CAAkBipI,EAAlB,CADI,EAEJ,UAFI,EAGH,+BAA8BA,EAAG,WAAUG,QAAS,YAAW73G,KAAM,GAHlE,CAAN;;AAMA,QAAI7sB,IAAI,CAACskI,QAAL,KAAkB,IAAtB,EAA4B;AAC1BzsE,YAAM,CAACz0E,KAAK,IAAI,IAAV,EAAgB,SAAhB,EAA4B,0BAAyBypC,KAAM,EAA3D,CAAN;AACD,KArBgD,CAuBjD;;;AACA,QAAI63G,QAAQ,KAAK,QAAb,IAAyB1kI,IAAI,CAACskI,QAAL,KAAkB,IAA/C,EAAqD;AACnDzsE,YAAM,CAACz0E,KAAK,KAAK,EAAX,EAAe,SAAf,EAA2B,0BAAyBypC,KAAM,EAA1D,CAAN;AACD;;AAED,SAAK83G,QAAL,GAAgBvhJ,KAAhB;AACA,SAAKwhJ,aAAL,GAAqBxhJ,KAArB;AACA,SAAKmhJ,EAAL,GAAUA,EAAV;AACA,SAAK13G,KAAL,GAAaA,KAAb;AACA,SAAKzpC,KAAL,GAAa4c,IAAI,CAAC7H,KAAL,GAAa6H,IAAI,CAAC7H,KAAL,CAAWosI,EAAX,EAAenhJ,KAAf,EAAsBypC,KAAtB,CAAb,GAA4CzpC,KAAzD;AACA,SAAKuB,OAAL,GAAeA,OAAf;AACA,SAAKqb,IAAL,GAAY0kI,QAAZ;AACD;;AAEDthF,MAAI,CAACz0D,MAAD,EAAS;AACX,QAAIk2I,UAAU,GAAGl2I,MAAM,CAAC,KAAKk+B,KAAN,CAAvB;;AACA,QAAIg4G,UAAU,KAAKhiJ,SAAnB,EAA8B;AAC5B,aAAO,KAAP;AACD;;AAED,QAAI,OAAOgiJ,UAAP,KAAsB,QAA1B,EAAoC;AAClCA,gBAAU,GAAGA,UAAU,CAAC3gH,WAAX,EAAb;AACD;;AAED,QAAIlkB,IAAI,GAAG,KAAKA,IAAhB;;AAEA,QAAIA,IAAI,KAAK,QAAT,IAAqB,KAAKrb,OAA9B,EAAuC;AACrC,UAAI,KAAKA,OAAL,CAAamgJ,OAAjB,EAA0B;AACxB,YAAID,UAAU,GAAG,CAAjB,EAAoB;AAClB,iBAAO,KAAP;AACD;;AAEDA,kBAAU,GAAG,CAACA,UAAd;AACD,OAND,MAMO,IAAI,KAAKlgJ,OAAL,CAAaogJ,MAAjB,EAAyB;AAC9B,YAAIF,UAAU,GAAG,CAAjB,EAAoB;AAClB,iBAAO,KAAP;AACD;AACF;AACF;;AAED,QAAIG,YAAY,GAAGx3G,CAAC,IAAKxtB,IAAI,KAAK,QAAT,GAAoBwtB,CAAC,CAACpqC,KAAtB,GAA8BoqC,CAAvD;;AAEA,YAAQ,KAAK+2G,EAAb;AACE,WAAK,UAAL;AACA,WAAK,IAAL;AACE,YAAIvkI,IAAI,KAAK,MAAb,EAAqB;AACnB,cAAI6kI,UAAU,IAAI,IAAlB,EAAwB;AACtB,mBAAO,KAAP;AACD;;AAED,cAAI,KAAKzhJ,KAAL,CAAW4c,IAAX,KAAoB,OAAxB,EAAiC;AAC/B,gBAAM5U,QAAN,GAAmB,KAAKhI,KAAxB,CAAMgI,QAAN;;AACA,gBAAI,KAAKm5I,EAAL,KAAY,UAAhB,EAA4B;AAC1B,kBAAIU,SAAS,GAAGpuF,gEAAS,CAACguF,UAAD,CAAzB;AACA,qBAAOz5I,QAAQ,CAAC5G,aAAT,CACLu/I,gDAAA,CAAgBkB,SAAhB,EAA2B,CAA3B,CADK,EAELlB,gDAAA,CAAgBkB,SAAhB,EAA2B,CAA3B,CAFK,CAAP;AAID,aAND,MAMO;AACL,qBAAO75I,QAAQ,CAAC/F,QAAT,CAAkB;AAAEQ,oBAAI,EAAEgxD,gEAAS,CAACguF,UAAD;AAAjB,eAAlB,CAAP;AACD;AACF,WAXD,MAWO;AACL,gBAAMh/I,IAAN,GAAe,KAAKzC,KAApB,CAAMyC,IAAN;;AAEA,gBAAI,KAAK0+I,EAAL,KAAY,UAAhB,EAA4B;AAC1B,kBAAIW,QAAQ,GAAGruF,gEAAS,CAAChxD,IAAD,CAAxB;AACA,kBAAIs/I,IAAI,GAAG/lG,8DAAO,CAAC8lG,QAAD,EAAW,CAAX,CAAlB;AACA,kBAAIE,GAAG,GAAGprF,8DAAO,CAACkrF,QAAD,EAAW,CAAX,CAAjB;AAEA,qBAAOL,UAAU,IAAIO,GAAd,IAAqBP,UAAU,IAAIM,IAA1C;AACD,aAND,MAMO;AACL,sBAAQ,KAAK/hJ,KAAL,CAAW4c,IAAnB;AACE,qBAAK,MAAL;AACE,yBAAO6kI,UAAU,KAAKh/I,IAAtB;;AACF,qBAAK,OAAL;AACE,yBAAO6oI,oEAAa,CAACmW,UAAD,CAAb,KAA8Bh/I,IAArC;;AACF,qBAAK,MAAL;AACE,yBAAOw/I,mEAAY,CAACR,UAAD,CAAZ,KAA6Bh/I,IAApC;;AACF;AAPF;AASD;AACF;AACF,SArCD,MAqCO,IAAIma,IAAI,KAAK,QAAb,EAAuB;AAC5B,cAAI8B,MAAM,GAAG,KAAK1e,KAAL,CAAWA,KAAxB;;AACA,cAAI,KAAKmhJ,EAAL,KAAY,UAAhB,EAA4B;AAC1B,gBAAIe,SAAS,GAAGC,8EAAwB,CAACzjI,MAAD,CAAxC;AACA,mBACE+iI,UAAU,IAAI/iI,MAAM,GAAGwjI,SAAvB,IACAT,UAAU,IAAI/iI,MAAM,GAAGwjI,SAFzB;AAID;;AACD,iBAAOT,UAAU,KAAK/iI,MAAtB;AACD;;AAED,eAAO+iI,UAAU,KAAK,KAAKzhJ,KAA3B;;AACF,WAAK,WAAL;AAAkB;AAChB;AACA;AACA,6BAAkBoiJ,iEAAW,CAAC,KAAKpiJ,KAAL,CAAW8gJ,IAAZ,EAAkB,KAAK9gJ,KAAL,CAAW+gJ,IAA7B,CAA7B;AAAA;AAAA,cAAKiB,GAAL;AAAA,cAAUD,IAAV;;AACA,iBAAON,UAAU,IAAIO,GAAd,IAAqBP,UAAU,IAAIM,IAA1C;AACD;;AACD,WAAK,UAAL;AACE,YAAIN,UAAU,KAAK,IAAnB,EAAyB;AACvB,iBAAO,KAAP;AACD;;AACD,eAAOA,UAAU,CAAChzI,OAAX,CAAmB,KAAKzO,KAAxB,MAAmC,CAAC,CAA3C;;AACF,WAAK,OAAL;AACE,YAAIyhJ,UAAU,KAAK,IAAnB,EAAyB;AACvB,iBAAO,KAAP;AACD;;AACD,eAAO,KAAKzhJ,KAAL,CAAWyO,OAAX,CAAmBgzI,UAAnB,MAAmC,CAAC,CAA3C;;AACF,WAAK,IAAL;AACE,YAAIA,UAAU,KAAK,IAAnB,EAAyB;AACvB,iBAAO,KAAP;AACD,SAFD,MAEO,IAAI7kI,IAAI,KAAK,MAAb,EAAqB;AAC1B,iBAAO9Z,8DAAO,CAAC2+I,UAAD,EAAa,KAAKzhJ,KAAL,CAAWyC,IAAxB,CAAd;AACD;;AAED,eAAOg/I,UAAU,GAAGG,YAAY,CAAC,KAAK5hJ,KAAN,CAAhC;;AACF,WAAK,KAAL;AACE,YAAIyhJ,UAAU,KAAK,IAAnB,EAAyB;AACvB,iBAAO,KAAP;AACD,SAFD,MAEO,IAAI7kI,IAAI,KAAK,MAAb,EAAqB;AAC1B,iBACE6kI,UAAU,KAAK,KAAKzhJ,KAAL,CAAWyC,IAA1B,IACAK,8DAAO,CAAC2+I,UAAD,EAAa,KAAKzhJ,KAAL,CAAWyC,IAAxB,CAFT;AAID;;AAED,eAAOg/I,UAAU,IAAIG,YAAY,CAAC,KAAK5hJ,KAAN,CAAjC;;AACF,WAAK,IAAL;AACE,YAAIyhJ,UAAU,KAAK,IAAnB,EAAyB;AACvB,iBAAO,KAAP;AACD,SAFD,MAEO,IAAI7kI,IAAI,KAAK,MAAb,EAAqB;AAC1B,iBAAO7a,+DAAQ,CAAC0/I,UAAD,EAAa,KAAKzhJ,KAAL,CAAWyC,IAAxB,CAAf;AACD;;AACD,eAAOg/I,UAAU,GAAGG,YAAY,CAAC,KAAK5hJ,KAAN,CAAhC;;AACF,WAAK,KAAL;AACE,YAAIyhJ,UAAU,KAAK,IAAnB,EAAyB;AACvB,iBAAO,KAAP;AACD,SAFD,MAEO,IAAI7kI,IAAI,KAAK,MAAb,EAAqB;AAC1B,iBACE6kI,UAAU,KAAK,KAAKzhJ,KAAL,CAAWyC,IAA1B,IACAV,+DAAQ,CAAC0/I,UAAD,EAAa,KAAKzhJ,KAAL,CAAWyC,IAAxB,CAFV;AAID;;AACD,eAAOg/I,UAAU,IAAIG,YAAY,CAAC,KAAK5hJ,KAAN,CAAjC;;AACF;AAzGF;;AA4GA,WAAO,KAAP;AACD;;AAEDkyI,UAAQ,GAAG;AACT,WAAO,KAAKlyI,KAAZ;AACD;;AAED0c,WAAS,GAAG;AACV;AACEykI,QAAE,EAAE,KAAKA,EADX;AAEE13G,WAAK,EAAE,KAAKA,KAFd;AAGEzpC,WAAK,EAAE,KAAKwhJ,aAHd;AAIE5kI,UAAI,EAAE,KAAKA;AAJb,OAKM,KAAKrb,OAAL,GAAe;AAAEA,aAAO,EAAE,KAAKA;AAAhB,KAAf,GAA2C,IALjD;AAOD;;AA7LoB;AAgMvB,IAAI8gJ,UAAU,GAAG,CAAC,KAAD,EAAQ,eAAR,CAAjB;AAEO,MAAMC,MAAN,CAAa;AAClBhjJ,aAAW,CAAC6hJ,EAAD,EAAK13G,KAAL,EAAYzpC,KAAZ,EAAmBuB,OAAnB,EAA4B8/I,UAA5B,EAAwC;AACjD5sE,UAAM,CACJ4tE,UAAU,CAACnqI,QAAX,CAAoBipI,EAApB,CADI,EAEJ,UAFI,EAGH,6BAA4BA,EAAG,EAH5B,CAAN;;AAMA,QAAIA,EAAE,KAAK,KAAX,EAAkB;AAChB,UAAIG,QAAQ,GAAGD,UAAU,CAAC3+I,GAAX,CAAe+mC,KAAf,CAAf;AACAgrC,YAAM,CAAC6sE,QAAD,EAAW,UAAX,EAAwB,6BAA4B73G,KAAM,EAA1D,CAAN;AACA,WAAKA,KAAL,GAAaA,KAAb;AACA,WAAK7sB,IAAL,GAAY0kI,QAAZ;AACD,KALD,MAKO,IAAIH,EAAE,KAAK,eAAX,EAA4B;AACjC,WAAK13G,KAAL,GAAa,IAAb;AACA,WAAK7sB,IAAL,GAAY,IAAZ;AACD;;AAED,SAAKukI,EAAL,GAAUA,EAAV;AACA,SAAKI,QAAL,GAAgBvhJ,KAAhB;AACA,SAAKA,KAAL,GAAaA,KAAb;AACA,SAAKuB,OAAL,GAAeA,OAAf;AACD;;AAEDoxC,MAAI,CAACpnC,MAAD,EAAS;AACX,YAAQ,KAAK41I,EAAb;AACE,WAAK,KAAL;AACE51I,cAAM,CAAC,KAAKk+B,KAAN,CAAN,GAAqB,KAAKzpC,KAA1B;AACA;;AACF,WAAK,eAAL;AACEuL,cAAM,CAACvD,QAAP,GAAkB,KAAKhI,KAAvB;AACA;;AACF;AAPF;AASD;;AAED0c,WAAS,GAAG;AACV;AACEykI,QAAE,EAAE,KAAKA,EADX;AAEE13G,WAAK,EAAE,KAAKA,KAFd;AAGEzpC,WAAK,EAAE,KAAKA,KAHd;AAIE4c,UAAI,EAAE,KAAKA;AAJb,OAKM,KAAKrb,OAAL,GAAe;AAAEA,aAAO,EAAE,KAAKA;AAAhB,KAAf,GAA2C,IALjD;AAOD;;AA5CiB;AA+Cb,MAAMqP,IAAN,CAAW;AAChBtR,aAAW,CAAC;AAAEwoI,MAAF;AAAMya,SAAN;AAAaC,cAAb;AAAyBC,WAAzB;AAAkCpB;AAAlC,GAAD,EAAiD;AAC1D,SAAKvZ,EAAL,GAAUA,EAAV;AACA,SAAKya,KAAL,GAAaA,KAAb;AACA,SAAKC,UAAL,GAAkBA,UAAU,CAACh/I,GAAX,CAChBuxB,CAAC,IAAI,IAAIqsH,SAAJ,CAAcrsH,CAAC,CAACosH,EAAhB,EAAoBpsH,CAAC,CAAC0U,KAAtB,EAA6B1U,CAAC,CAAC/0B,KAA/B,EAAsC+0B,CAAC,CAACxzB,OAAxC,EAAiD8/I,UAAjD,CADW,CAAlB;AAGA,SAAKoB,OAAL,GAAeA,OAAO,CAACj/I,GAAR,CACbqD,CAAC,IAAI,IAAIy7I,MAAJ,CAAWz7I,CAAC,CAACs6I,EAAb,EAAiBt6I,CAAC,CAAC4iC,KAAnB,EAA0B5iC,CAAC,CAAC7G,KAA5B,EAAmC6G,CAAC,CAACtF,OAArC,EAA8C8/I,UAA9C,CADQ,CAAf;AAGD;;AAEDqB,gBAAc,CAACn3I,MAAD,EAAS;AACrB,QAAI,KAAKi3I,UAAL,CAAgB/7I,MAAhB,KAA2B,CAA/B,EAAkC;AAChC,aAAO,KAAP;AACD;;AAED,WAAO,KAAK+7I,UAAL,CAAgB97I,KAAhB,CAAsBi8I,SAAS,IAAI;AACxC,aAAOA,SAAS,CAAC3iF,IAAV,CAAez0D,MAAf,CAAP;AACD,KAFM,CAAP;AAGD;;AAEDq3I,aAAW,CAACr3I,MAAD,EAAS;AAClB,QAAI0vI,OAAO,GAAG,EAAd;AACA,SAAKwH,OAAL,CAAa9vI,OAAb,CAAqBqjF,MAAM,IAAIA,MAAM,CAACrjD,IAAP,CAAYsoG,OAAZ,CAA/B;AACA,WAAOA,OAAP;AACD;;AAEDtoG,MAAI,CAACpnC,MAAD,EAAS;AACX,QAAI,KAAKm3I,cAAL,CAAoBn3I,MAApB,CAAJ,EAAiC;AAC/B,aAAO,KAAKq3I,WAAL,CAAiBr3I,MAAjB,CAAP;AACD;;AACD,WAAO,IAAP;AACD,GAjCe,CAmChB;;;AACA+3B,OAAK,CAAC/3B,MAAD,EAAS;AACZ,QAAI0vI,OAAO,GAAG,KAAKtoG,IAAL,CAAUpnC,MAAV,CAAd;AACA,WAAOlI,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBiI,MAAlB,EAA0B0vI,OAA1B,CAAP;AACD;;AAED4H,OAAK,GAAG;AACN,WAAO,KAAK/a,EAAZ;AACD;;AAEDprH,WAAS,GAAG;AACV,WAAO;AACLorH,QAAE,EAAE,KAAKA,EADJ;AAELya,WAAK,EAAE,KAAKA,KAFP;AAGLC,gBAAU,EAAE,KAAKA,UAAL,CAAgBh/I,GAAhB,CAAoBuxB,CAAC,IAAIA,CAAC,CAACrY,SAAF,EAAzB,CAHP;AAIL+lI,aAAO,EAAE,KAAKA,OAAL,CAAaj/I,GAAb,CAAiBqD,CAAC,IAAIA,CAAC,CAAC6V,SAAF,EAAtB;AAJJ,KAAP;AAMD;;AApDe;AAuDX,MAAMomI,WAAN,CAAkB;AACvBxjJ,aAAW,CAAC;AAAEmqC,SAAF;AAAS1lC;AAAT,GAAD,EAAoB;AAC7B,SAAK0lC,KAAL,GAAaA,KAAb;AACA,SAAK1lC,MAAL,GAAcA,MAAd;AACA,SAAK6R,KAAL,GAAa,IAAItB,GAAJ,EAAb;AACD;;AAEDyuI,UAAQ,CAACxtI,GAAD,EAAM;AACZ,QAAI,CAAC,KAAKK,KAAL,CAAW6C,GAAX,CAAelD,GAAf,CAAL,EAA0B;AACxB,WAAKK,KAAL,CAAW3P,GAAX,CAAesP,GAAf,EAAoB,IAAIuF,GAAJ,EAApB;AACD;;AACD,WAAO,KAAKlF,KAAL,CAAWlT,GAAX,CAAe6S,GAAf,CAAP;AACD;;AAEDytI,kBAAgB,CAAChjJ,KAAD,EAAQ;AACtB,WAAO,KAAK+iJ,QAAL,CAAc,KAAKE,MAAL,CAAYjjJ,KAAZ,KAAsB,GAApC,CAAP;AACD;;AAEDijJ,QAAM,CAACjjJ,KAAD,EAAQ;AACZ,QAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,KAAK,EAA3C,EAA+C;AAC7C,UAAI,KAAK+D,MAAL,KAAgB,WAApB,EAAiC;AAC/B,eAAO/D,KAAK,CAAC,CAAD,CAAL,CAAS8gC,WAAT,EAAP;AACD;;AACD,aAAO9gC,KAAK,CAAC8gC,WAAN,EAAP;AACD;;AACD,WAAO,IAAP;AACD;;AAEDoiH,YAAU,CAACpxI,IAAD,EAAO;AACf,QAAIqxI,IAAI,GAAGrxI,IAAI,CAAC0wI,UAAL,CAAgBrmI,IAAhB,CAAqBgnI,IAAI,IAAIA,IAAI,CAAC15G,KAAL,KAAe,KAAKA,KAAjD,CAAX;AACA,QAAI25G,OAAO,GAAG,EAAd;;AAEA,QAAID,IAAI,KAAKA,IAAI,CAAChC,EAAL,KAAY,OAAZ,IAAuBgC,IAAI,CAAChC,EAAL,KAAY,IAAxC,CAAR,EAAuD;AACrD,UAAIgC,IAAI,CAAChC,EAAL,KAAY,OAAhB,EAAyB;AACvBgC,YAAI,CAACnjJ,KAAL,CAAW2S,OAAX,CAAmB8M,GAAG,IAAI2jI,OAAO,CAAC99I,IAAR,CAAa,KAAK09I,gBAAL,CAAsBvjI,GAAtB,CAAb,CAA1B;AACD,OAFD,MAEO;AACL2jI,eAAO,CAAC99I,IAAR,CAAa,KAAK09I,gBAAL,CAAsBG,IAAI,CAACnjJ,KAA3B,CAAb;AACD;AACF,KAND,MAMO;AACLojJ,aAAO,CAAC99I,IAAR,CAAa,KAAKy9I,QAAL,CAAc,GAAd,CAAb;AACD;;AAED,WAAOK,OAAP;AACD;;AAED59I,OAAK,CAACsM,IAAD,EAAO;AACV,QAAIsxI,OAAO,GAAG,KAAKF,UAAL,CAAgBpxI,IAAhB,CAAd;AACAsxI,WAAO,CAACzwI,OAAR,CAAgBnN,KAAK,IAAI;AACvBA,WAAK,CAAChD,GAAN,CAAUsP,IAAV;AACD,KAFD;AAGD;;AAEDtJ,QAAM,CAACsJ,IAAD,EAAO;AACX,QAAIsxI,OAAO,GAAG,KAAKF,UAAL,CAAgBpxI,IAAhB,CAAd;AACAsxI,WAAO,CAACzwI,OAAR,CAAgBnN,KAAK,IAAI;AACvBA,WAAK,CAACmlB,MAAN,CAAa7Y,IAAb;AACD,KAFD;AAGD;;AAEDuxI,oBAAkB,CAAC93I,MAAD,EAAS;AACzB,QAAI+3I,YAAJ;;AACA,QAAI,KAAK75G,KAAL,IAAcl+B,MAAlB,EAA0B;AACxB,UAAIgK,GAAG,GAAG,KAAK0tI,MAAL,CAAY13I,MAAM,CAAC,KAAKk+B,KAAN,CAAlB,CAAV;;AACA,UAAIl0B,GAAJ,EAAS;AACP+tI,oBAAY,GAAG,KAAK1tI,KAAL,CAAWlT,GAAX,CAAe6S,GAAf,CAAf;AACD;AACF;;AAED,WAAOguI,iEAAY,CACjBD,YAAY,IAAI,IAAIxoI,GAAJ,EADC,EAEjB,KAAKlF,KAAL,CAAWlT,GAAX,CAAe,GAAf,KAAuB,IAAIoY,GAAJ,EAFN,CAAnB;AAID;;AAxEsB;AA2EzB,MAAM0oI,SAAS,GAAG;AAChBhsF,IAAE,EAAE,EADY;AAEhBisF,OAAK,EAAE,CAFS;AAGhBC,UAAQ,EAAE,CAHM;AAIhBC,WAAS,EAAE,CAJK;AAKhBC,IAAE,EAAE,CALY;AAMhBC,KAAG,EAAE,CANW;AAOhBC,IAAE,EAAE,CAPY;AAQhBC,KAAG,EAAE,CARW;AAShBvyE,UAAQ,EAAE;AATM,CAAlB;;AAYA,SAASwyE,YAAT,CAAsBlyI,IAAtB,EAA4B;AAC1B,MAAImyI,YAAY,GAAGnyI,IAAI,CAAC0wI,UAAL,CAAgB9hJ,MAAhB,CAAuB,CAACwjJ,KAAD,EAAQvB,SAAR,KAAsB;AAC9D,QAAIa,SAAS,CAACb,SAAS,CAACxB,EAAX,CAAT,IAA2B,IAA/B,EAAqC;AACnChmH,aAAO,CAACsrE,GAAR,CAAa,0CAAyCk8C,SAAS,CAACxB,EAAG,EAAnE;AACA,aAAO,CAAP;AACD;;AAED,WAAO+C,KAAK,GAAGV,SAAS,CAACb,SAAS,CAACxB,EAAX,CAAxB;AACD,GAPkB,EAOhB,CAPgB,CAAnB;;AASA,MACErvI,IAAI,CAAC0wI,UAAL,CAAgB97I,KAAhB,CACEy8I,IAAI,IAAIA,IAAI,CAAChC,EAAL,KAAY,IAAZ,IAAoBgC,IAAI,CAAChC,EAAL,KAAY,UAAhC,IAA8CgC,IAAI,CAAChC,EAAL,KAAY,OADpE,CADF,EAIE;AACA,WAAO8C,YAAY,GAAG,CAAtB;AACD;;AACD,SAAOA,YAAP;AACD;;AAED,SAASE,UAAT,CAAoBvuI,KAApB,EAA2B;AACzB,MAAIwuI,MAAM,GAAG,IAAI9vI,GAAJ,EAAb;AACAsB,OAAK,CAACjD,OAAN,CAAcb,IAAI,IAAI;AACpBsyI,UAAM,CAACn+I,GAAP,CAAW6L,IAAX,EAAiBkyI,YAAY,CAAClyI,IAAD,CAA7B;AACD,GAFD,EAFyB,CAMzB;AACA;AACA;;AACA,SAAO,CAAC,GAAG8D,KAAJ,EAAW3O,IAAX,CAAgB,CAACo9I,EAAD,EAAKC,EAAL,KAAY;AACjC,QAAIC,MAAM,GAAGH,MAAM,CAAC1hJ,GAAP,CAAW2hJ,EAAX,CAAb;AACA,QAAIG,MAAM,GAAGJ,MAAM,CAAC1hJ,GAAP,CAAW4hJ,EAAX,CAAb;;AACA,QAAIC,MAAM,GAAGC,MAAb,EAAqB;AACnB,aAAO,CAAC,CAAR;AACD,KAFD,MAEO,IAAID,MAAM,GAAGC,MAAb,EAAqB;AAC1B,aAAO,CAAP;AACD,KAFM,MAEA;AACL,UAAIC,GAAG,GAAGJ,EAAE,CAACxB,KAAH,EAAV;AACA,UAAI6B,GAAG,GAAGJ,EAAE,CAACzB,KAAH,EAAV;AACA,aAAO4B,GAAG,GAAGC,GAAN,GAAY,CAAC,CAAb,GAAiBD,GAAG,GAAGC,GAAN,GAAY,CAAZ,GAAgB,CAAxC;AACD;AACF,GAZM,CAAP;AAaD;;AAEM,SAASC,SAAT,CAAmB/uI,KAAnB,EAA0B;AAC/B,MAAIgvI,GAAG,GAAG,EAAV;AACA,MAAIC,MAAM,GAAG,EAAb;AACA,MAAIvH,IAAI,GAAG,EAAX;;AAEA,OAAK,IAAIxrI,IAAT,IAAiB8D,KAAjB,EAAwB;AACtB,YAAQ9D,IAAI,CAACywI,KAAb;AACE,WAAK,KAAL;AACEqC,WAAG,CAACt/I,IAAJ,CAASwM,IAAT;AACA;;AACF,WAAK,MAAL;AACEwrI,YAAI,CAACh4I,IAAL,CAAUwM,IAAV;AACA;;AACF;AACE+yI,cAAM,CAACv/I,IAAP,CAAYwM,IAAZ;AARJ;AAUD;;AAED8yI,KAAG,GAAGT,UAAU,CAACS,GAAD,CAAhB;AACAC,QAAM,GAAGV,UAAU,CAACU,MAAD,CAAnB;AACAvH,MAAI,GAAG6G,UAAU,CAAC7G,IAAD,CAAjB;AAEA,SAAOsH,GAAG,CAACnnH,MAAJ,CAAWonH,MAAX,EAAmBpnH,MAAnB,CAA0B6/G,IAA1B,CAAP;AACD;AAEM,SAASwH,UAAT,CAAoBhzI,IAApB,EAA0BizI,QAA1B,EAAoC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK,IAAIC,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAGlzI,IAAI,CAAC0wI,UAAL,CAAgB/7I,MAAtC,EAA8Cu+I,EAAE,EAAhD,EAAoD;AAClD,QAAI7B,IAAI,GAAGrxI,IAAI,CAAC0wI,UAAL,CAAgBwC,EAAhB,CAAX;;AACA,QAAI7B,IAAI,CAACvmI,IAAL,KAAc,IAAlB,EAAwB;AACtB,cAAQumI,IAAI,CAAChC,EAAb;AACE,aAAK,IAAL;AACEgC,cAAI,CAACnjJ,KAAL,GAAa+kJ,QAAQ,CAACriJ,GAAT,CAAaygJ,IAAI,CAAC5B,QAAlB,KAA+B4B,IAAI,CAAC5B,QAAjD;AACA4B,cAAI,CAAC3B,aAAL,GAAqB2B,IAAI,CAACnjJ,KAA1B;AACA;;AACF,aAAK,OAAL;AACEmjJ,cAAI,CAACnjJ,KAAL,GAAamjJ,IAAI,CAAC5B,QAAL,CAAc/9I,GAAd,CAAkB4mC,CAAC,IAAI26G,QAAQ,CAACriJ,GAAT,CAAa0nC,CAAb,KAAmBA,CAA1C,CAAb;AACA+4G,cAAI,CAAC3B,aAAL,GAAqB,CAAC,GAAG2B,IAAI,CAACnjJ,KAAT,CAArB;AACA;;AACF;AATF;AAWD;AACF;;AAED,OAAK,IAAIilJ,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAGnzI,IAAI,CAAC2wI,OAAL,CAAah8I,MAAnC,EAA2Cw+I,EAAE,EAA7C,EAAiD;AAC/C,QAAIjvD,MAAM,GAAGlkF,IAAI,CAAC2wI,OAAL,CAAawC,EAAb,CAAb;;AACA,QAAIjvD,MAAM,CAACp5E,IAAP,KAAgB,IAApB,EAA0B;AACxB,UAAIo5E,MAAM,CAACmrD,EAAP,KAAc,KAAlB,EAAyB;AACvBnrD,cAAM,CAACh2F,KAAP,GAAe+kJ,QAAQ,CAACriJ,GAAT,CAAaszF,MAAM,CAACurD,QAApB,KAAiCvrD,MAAM,CAACurD,QAAvD;AACD;AACF;AACF;AACF,C,CAED;;AACO,SAAS2D,UAAT,CAAoBtvI,KAApB,EAA2BukG,SAA3B,EAAsCj3E,IAAtC,EAA4C;AACjD,MAAIiiH,MAAM,GAAG,EAAb;AACA,MAAI7lI,CAAJ;;AAEA8lI,UAAQ,EAAE,KAAK9lI,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG1J,KAAK,CAACnP,MAAtB,EAA8B6Y,CAAC,EAA/B,EAAmC;AAC3C,QAAIxN,IAAI,GAAG8D,KAAK,CAAC0J,CAAD,CAAhB;;AACA,SAAK,IAAI0lI,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAGlzI,IAAI,CAAC0wI,UAAL,CAAgB/7I,MAAtC,EAA8Cu+I,EAAE,EAAhD,EAAoD;AAClD,UAAI7B,IAAI,GAAGrxI,IAAI,CAAC0wI,UAAL,CAAgBwC,EAAhB,CAAX;;AACA,UAAI7B,IAAI,CAACvmI,IAAL,KAAc,IAAd,IAAsBumI,IAAI,CAAC15G,KAAL,KAAe0wE,SAAzC,EAAoD;AAClD,gBAAQgpC,IAAI,CAAChC,EAAb;AACE,eAAK,IAAL;AACE,gBAAIj+G,IAAI,CAACpxB,IAAD,EAAOqxI,IAAI,CAACnjJ,KAAZ,CAAR,EAA4B;AAC1B,uBAASolJ,QAAT;AACD;;AACD;;AACF,eAAK,OAAL;AACE,iBAAK,IAAIC,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAGlC,IAAI,CAACnjJ,KAAL,CAAWyG,MAAjC,EAAyC4+I,EAAE,EAA3C,EAA+C;AAC7C,kBAAIniH,IAAI,CAACpxB,IAAD,EAAOqxI,IAAI,CAACnjJ,KAAL,CAAWqlJ,EAAX,CAAP,CAAR,EAAgC;AAC9B,yBAASD,QAAT;AACD;AACF;;AACD;;AACF;AAbF;AAeD;AACF;;AAED,SAAK,IAAIH,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAGnzI,IAAI,CAAC2wI,OAAL,CAAah8I,MAAnC,EAA2Cw+I,EAAE,EAA7C,EAAiD;AAC/C,UAAIjvD,MAAM,GAAGlkF,IAAI,CAAC2wI,OAAL,CAAawC,EAAb,CAAb;;AACA,UAAIjvD,MAAM,CAACp5E,IAAP,KAAgB,IAAhB,IAAwBo5E,MAAM,CAACvsD,KAAP,KAAiB0wE,SAA7C,EAAwD;AACtD;AACA;AACA,YAAInkB,MAAM,CAACmrD,EAAP,KAAc,KAAlB,EAAyB;AACvB,cAAIj+G,IAAI,CAACpxB,IAAD,EAAOkkF,MAAM,CAACh2F,KAAd,CAAR,EAA8B;AAC5B;AACD;AACF;AACF;AACF;AACF;AACF,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxuBD;AACA;AACA;AAOA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM2gJ,OAAO,GAAG9+H,mBAAO,CAAC,sDAAD,CAAvB;;AACA,iBAAiBA,mBAAO,CAAC,wDAAD,CAAxB;AAAA,MAAQy7H,IAAR,YAAQA,IAAR;;AACA,MAAMgI,WAAW,GAAGzjI,mBAAO,CAAC,wEAAD,CAA3B;;AACA,MAAM6iH,IAAI,GAAG7iH,mBAAO,CAAC,qFAAD,CAApB,C,CAEA;AACA;;;AAEA,SAAS0jI,aAAT,CAAuB3oI,IAAvB,EAA6BgK,IAA7B,EAAmC;AACjC,SAAO;AAAEhK,QAAI,EAAE,eAAR;AAAyBstH,YAAQ,EAAEttH,IAAnC;AAAyCgK;AAAzC,GAAP;AACD;;AAED,SAAS4+H,oBAAT,CAA8B1I,KAA9B,EAAqC/O,eAArC,EAAsD;AACpD;AACA,0BAA0C0X,6EAAgB,iCACrD3I,KADqD;AAExD4I,aAAS,EAAE,IAF6C;AAGxD3X,mBAAe,EAAEA,eAAe,CAACvqI,GAAhB,CAAoB,CAAC6pI,WAAD,EAAcsY,GAAd,KACnCC,sEAAoB,CAAC9I,KAAD,kCACfzP,WADe;AAElBwY,gBAAU,EAAE,IAAIF;AAFE,OADL;AAHuC,KAA1D;AAAA,MAAuBnzC,GAAvB,qBAAMu7B,eAAN;AAAA,MAA+B+X,MAA/B;;AAUA,SAAO,CAACA,MAAD,EAAS,GAAGtzC,GAAZ,CAAP;AACD;;AAED,SAASuzC,iBAAT,CAA2B7c,OAA3B,EAAoC;AAClC;AACA,UAAQA,OAAO,CAACtsH,IAAhB;AACE,SAAK,QAAL;AACA,SAAK,MAAL;AACE,aAAO,CAACssH,OAAO,CAACmV,QAAR,CAAiBC,OAAzB;;AACF;AACE,aAAOpV,OAAO,CAACmV,QAAR,CAAiBC,OAAxB;AALJ;AAOD;;AAED,eAAe0H,oBAAf,CAAoCle,EAApC,EAAwCme,OAAxC,EAAiD;AAC/C,QAAMhU,4CAAA,CAAY,sDAAZ,EAAoE,CACxE/G,oEAAe,CAAC+a,OAAD,CADyD,EAExEne,EAFwE,CAApE,CAAN;AAID;;AAEM,eAAekB,WAAf,CAA2BoU,MAA3B,EAAmCY,OAAnC,EAA4ClW,EAA5C,EAAgD;AACrD,MAAI5R,GAAG,GAAG,MAAMonB,IAAI,CAACC,gEAAS,GAAGC,YAAZ,GAA2B,WAA5B,EAAyC;AAC3DJ,UAD2D;AAE3D7nI,OAAG,EAAEyoI,OAFsD;AAG3DP,WAAO,EAAE3V;AAHkD,GAAzC,CAApB;AAMA,MAAM4D,QAAN,GAAmBxV,GAAnB,CAAMwV,QAAN;AAEAA,UAAQ,CAAC/4H,OAAT,CAAiBy6H,IAAI,IAAI;AACvBA,QAAI,CAACiR,QAAL,CAAcC,OAAd,GAAwByH,iBAAiB,CAAC3Y,IAAD,CAAzC;AACD,GAFD;AAIA,SAAO1B,QAAP;AACD;AAEM,SAASwa,SAAT,CAAmBpJ,KAAnB,EAA0B;AAC/B,SAAO;AACLrL,eAAW,EAAEqL,KAAK,CAACqJ,cADd;AAELjH,cAAU,EAAEpC,KAAK,CAACrzI,IAFb;AAGL01I,kBAAc,EAAErC,KAAK,CAACrzI,IAHjB;AAILiC,UAAM,EAAE,CAACw/H,oEAAe,CAAC4R,KAAK,CAACpxI,MAAP,CAJnB;AAKLjJ,QAAI,EAAEq6I,KAAK,CAACr6I;AALP,GAAP;AAOD;;AAED,eAAe2jJ,oBAAf,CACEhJ,MADF,EAEEY,OAFF,EAGE7Q,MAHF,EAIE0Q,MAJF,EAKEwI,KALF,EAMEn+I,KANF,EAOE;AACA,MAAIo+I,eAAe,GAAG,EAAtB;AACA,MAAIC,cAAc,GAAG,IAArB;AACA,MAAIC,QAAQ,GAAG,GAAf;AACA,MAAI/4H,MAAM,GAAG,CAAb;AACA,MAAIg5H,aAAa,GAAG,CAApB;;AAEA,SAAO,CAAP,EAAU;AACR,UAAMzlG,OAAO,GAAG0zF,yDAAA,EAAhB;AAEA,UAAMxe,GAAG,GAAG,MAAMonB,IAAI,CAACC,gEAAS,GAAGC,YAAZ,GAA2B,eAA5B,EAA6C;AACjEJ,YAAM,EAAEA,MADyD;AAEjE7nI,SAAG,EAAEyoI,OAF4D;AAGjEP,aAAO,EAAE,KAAKI,MAHmD;AAIjEtM,gBAAU,EAAEpE,MAJqD;AAKjEuZ,gBAAU,EAAEL,KALqD;AAMjEM,cAAQ,EAAE3lG,OANuD;AAOjE94C,WAAK,EAAEs+I,QAP0D;AAQjE/4H;AARiE,KAA7C,CAAtB;;AAWA,QAAIyoG,GAAG,CAAC0wB,UAAR,EAAoB;AAClB,YAAMrB,aAAa,CAACrvB,GAAG,CAAC2wB,UAAL,EAAiB3wB,GAAG,CAAC0wB,UAArB,CAAnB;AACD;;AAED,QAAI1wB,GAAG,CAACuS,YAAJ,CAAiBhiI,MAAjB,KAA4B,CAAhC,EAAmC;AACjC;AACD;;AAEDggJ,iBAAa,IAAIvwB,GAAG,CAACuS,YAAJ,CAAiBhiI,MAAlC,CAtBQ,CAwBR;AACA;;AACA6/I,mBAAe,GAAGA,eAAe,CAAC7oH,MAAhB,CAChBy4F,GAAG,CAACuS,YAAJ,CAAiBvhI,MAAjB,CAAwB4sB,CAAC,IAAI,CAACA,CAAC,CAACo6C,OAAhC,CADgB,CAAlB;AAGAq4E,kBAAc,GAAGR,iBAAiB,CAAC7vB,GAAG,CAACwV,QAAJ,CAAa,CAAb,CAAD,CAAlC;;AAEA,QACE+a,aAAa,KAAKvwB,GAAG,CAAC4wB,kBAAtB,IACC5+I,KAAK,IAAI,IAAT,IAAiBo+I,eAAe,CAAC7/I,MAAhB,IAA0ByB,KAF9C,EAGE;AACA;AACD;;AAEDulB,UAAM,IAAI+4H,QAAV;AACD;;AAEDF,iBAAe,GACbp+I,KAAK,IAAI,IAAT,GAAgBo+I,eAAe,CAAC79I,KAAhB,CAAsB,CAAtB,EAAyBP,KAAzB,CAAhB,GAAkDo+I,eADpD;AAGA,SAAO;AACL7d,gBAAY,EAAE6d,eAAe,CAAC9iJ,GAAhB,CAAoB0iJ,SAApB,CADT;AAELK;AAFK,GAAP;AAID;;AAED,eAAeQ,YAAf,CAA4BjK,KAA5B,EAAmCkK,SAAnC,EAA8CC,cAA9C,EAA8D;AAC5D,MAAInK,KAAK,CAACvS,KAAN,IAAe,IAAf,IAAuByc,SAA3B,EAAsC;AACpC;AACA;AACA,QAAIzc,KAAK,GAAG0c,cAAc,CAACvkJ,GAAf,CAAmBskJ,SAAS,CAAClmH,WAAV,EAAnB,CAAZ;AACAypG,SAAK,GAAGA,KAAK,KAAK,MAAM0H,kDAAA,CAAkB+U,SAAlB,CAAX,CAAb;;AAEA,QAAIzc,KAAK,IAAI,IAAb,EAAmB;AACjB,aAAOA,KAAK,CAACzC,EAAb;AACD,KAFD,MAEO;AACL;AACA,UAAIof,QAAQ,GAAG;AAAEpf,UAAE,EAAEpD,IAAI,CAACgX,MAAL,EAAN;AAAqBjyI,YAAI,EAAEu9I;AAA3B,OAAf;AACAC,oBAAc,CAAChhJ,GAAf,CAAmB+gJ,SAAS,CAAClmH,WAAV,EAAnB,EAA4ComH,QAA5C;AACA,aAAOA,QAAQ,CAACpf,EAAhB;AACD;AACF;;AAED,SAAOgV,KAAK,CAACvS,KAAb;AACD;;AAED,eAAe4c,qBAAf,CACE1e,YADF,EAEE0E,MAFF,EAGE;AAAEia;AAAF,IAAmB,EAHrB,EAIE;AACA,MAAIH,cAAc,GAAG,IAAI3yI,GAAJ,EAArB;AAEA,MAAI+yI,UAAU,GAAG,EAAjB;;AACA,OAAK,IAAIvK,KAAT,IAAkBrU,YAAlB,EAAgC;AAC9B;AACA;AACA,QAAIqU,KAAK,CAACr6I,IAAN,IAAc,IAAlB,EAAwB;AACtB,YAAM,IAAIwC,KAAJ,CAAU,8CAAV,CAAN;AACD,KAL6B,CAO9B;;;AACA,iBAA+C63I,KAA/C;AAAA,QAAMoC,UAAN,UAAMA,UAAN;AAAA,QAAkBnR,eAAlB,UAAkBA,eAAlB;AAAA,QAAsCziF,IAAtC;;AACAwxF,SAAK,GAAGxxF,IAAR;;AAEA,QAAI4zF,UAAJ,EAAgB;AACd,UAAIoI,OAAO,GAAGpI,UAAU,CAAC52G,IAAX,EAAd;;AACA,UAAIg/G,OAAO,KAAK,EAAhB,EAAoB;AAClBpI,kBAAU,GAAG,IAAb;AACD,OAFD,MAEO;AACLA,kBAAU,GAAGkI,YAAY,GAAGE,OAAH,GAAaC,6CAAK,CAACD,OAAD,CAA3C;AACD;AACF;;AAEDxK,SAAK,CAACqC,cAAN,GAAuBrC,KAAK,CAACqC,cAAN,IAAwBD,UAA/C;;AACA,QAAIpC,KAAK,CAACqC,cAAV,EAA0B;AACxBrC,WAAK,CAACqC,cAAN,GAAuBrC,KAAK,CAACqC,cAAN,CAAqB72G,IAArB,EAAvB;AACD,KAvB6B,CAyB9B;AACA;AACA;;;AACAw0G,SAAK,CAAC5T,OAAN,GAAgBiE,MAAhB;AACA2P,SAAK,CAACvS,KAAN,GAAc,MAAMwc,YAAY,CAACjK,KAAD,EAAQoC,UAAR,EAAoB+H,cAApB,CAAhC;AAEAI,cAAU,CAAC/hJ,IAAX,CAAgB;AACd45I,gBADc;AAEdnR,qBAAe,EAAEA,eAAe,GAC5BA,eAAe,CAACvqI,GAAhB,CAAoBswB,CAAC,oCAAUA,CAAV;AAAao1G,eAAO,EAAEiE;AAAtB,QAArB,CAD4B,GAE5B,IAJU;AAKd2P;AALc,KAAhB;AAOD;;AAED,SAAO;AAAEuK,cAAF;AAAcJ;AAAd,GAAP;AACD;;AAED,eAAeO,eAAf,CAA+BP,cAA/B,EAA+CQ,cAA/C,EAA+D;AAC7D,MAAIC,YAAY,GAAG,IAAI5sI,GAAJ,CAAQ2sI,cAAc,CAACjkJ,GAAf,CAAmBswB,CAAC,IAAIA,CAAC,CAACy2G,KAA1B,CAAR,CAAnB;AAEA,QAAMuL,2DAAa,CAAC,YAAY;AAC9B,SAAK,IAAIvL,KAAT,IAAkB0c,cAAc,CAAC1yI,MAAf,EAAlB,EAA2C;AACzC;AACA,UAAImzI,YAAY,CAACjvI,GAAb,CAAiB8xH,KAAK,CAACzC,EAAvB,CAAJ,EAAgC;AAC9B,cAAMmK,+CAAA,CAAe1H,KAAf,CAAN;AACD;AACF;AACF,GAPkB,CAAnB;AAQD;;AAEM,eAAeod,qBAAf,CAAqCxa,MAArC,EAA6C1E,YAA7C,EAA2D;AAChE,QAAMmf,UAAU,GAAG,IAAI9sI,GAAJ,EAAnB;AACA,QAAM+sI,OAAO,GAAG,EAAhB;AACA,QAAM9S,KAAK,GAAG,EAAd;;AAEA,8BAAqC,MAAMoS,qBAAqB,CAC9D1e,YAD8D,EAE9D0E,MAF8D,CAAhE;AAAA,MAAMka,UAAN,yBAAMA,UAAN;AAAA,MAAkBJ,cAAlB,yBAAkBA,cAAlB,CALgE,CAUhE;;;AACA,MAAIa,iBAAiB,GAAG,EAAxB;;AACA,mBAAmDT,UAAnD,EAA+D;AAAA,QAApDnI,UAAoD,QAApDA,UAAoD;AAAA,QAAxCpC,KAAwC,QAAxCA,KAAwC;AAAA,QAAjC/O,eAAiC,QAAjCA,eAAiC;AAC7D;AACA+O,SAAK,GAAG3mI,oEAAQ,CAAC2mI,KAAD,CAAhB;AAEA,QAAIl9H,KAAK,GAAG,IAAZ;AACA,QAAImoI,YAAY,GAAG,IAAnB,CAL6D,CAO7D;AACA;AACA;;AACA,QAAIjL,KAAK,CAACrL,WAAV,EAAuB;AACrB7xH,WAAK,GAAG,MAAMqyH,yCAAA,CACZ,oEADY,EAEZ,CAAC6K,KAAK,CAACrL,WAAP,EAAoBtE,MAApB,CAFY,CAAd,CADqB,CAMrB;;AAEA,UAAIvtH,KAAJ,EAAW;AACTgoI,kBAAU,CAACplJ,GAAX,CAAeod,KAAK,CAACkoH,EAArB;AACD;AACF,KArB4D,CAuB7D;;;AACA,QAAI,CAACloH,KAAL,EAAY;AACV;AACA;AACA;AACA;AACAmoI,kBAAY,GAAG,MAAM9V,uCAAA,CAClB;AACT,yFAF2B,EAGnB,CACEA,8CAAA,CAAcyC,sDAAA,CAAmBoI,KAAK,CAACr6I,IAAzB,EAA+B,CAA/B,CAAd,CADF,EAEEwvI,8CAAA,CAAcyC,sDAAA,CAAmBoI,KAAK,CAACr6I,IAAzB,EAA+B,CAA/B,CAAd,CAFF,EAGEq6I,KAAK,CAACpxI,MAAN,IAAgB,CAHlB,EAIEyhI,MAJF,CAHmB,CAArB;AAUD;;AAED2a,qBAAiB,CAACxiJ,IAAlB,CAAuB;AACrB45I,gBADqB;AAErBpC,WAFqB;AAGrB/O,qBAHqB;AAIrBnuH,WAJqB;AAKrBmoI;AALqB,KAAvB;AAOD,GA5D+D,CA8DhE;AACA;AACA;AACA;AACA;;;AACA,MAAIC,iBAAiB,GAAGF,iBAAiB,CAACtkJ,GAAlB,CAAsBsE,IAAI,IAAI;AACpD,QAAI,CAACA,IAAI,CAAC8X,KAAN,IAAe9X,IAAI,CAACigJ,YAAxB,EAAsC;AACpC;AACA,UAAInoI,KAAK,GAAG9X,IAAI,CAACigJ,YAAL,CAAkB5rI,IAAlB,CACVsjI,GAAG,IAAI,CAACmI,UAAU,CAACnvI,GAAX,CAAegnI,GAAG,CAAC3X,EAAnB,CAAD,IAA2BhgI,IAAI,CAACg1I,KAAL,CAAWvS,KAAX,KAAqBkV,GAAG,CAAClV,KADjD,CAAZ;;AAIA,UAAI3qH,KAAJ,EAAW;AACTgoI,kBAAU,CAACplJ,GAAX,CAAeod,KAAK,CAACkoH,EAArB;AACA,+CAAYhgI,IAAZ;AAAkB8X;AAAlB;AACD;AACF;;AACD,WAAO9X,IAAP;AACD,GAbuB,CAAxB,CAnEgE,CAkFhE;AACA;AACA;AACA;;AACA,MAAImgJ,iBAAiB,GAAGD,iBAAiB,CAACxkJ,GAAlB,CAAsBsE,IAAI,IAAI;AACpD,QAAI,CAACA,IAAI,CAAC8X,KAAN,IAAe9X,IAAI,CAACigJ,YAAxB,EAAsC;AACpC,UAAInoI,KAAK,GAAG9X,IAAI,CAACigJ,YAAL,CAAkB5rI,IAAlB,CAAuBsjI,GAAG,IAAI,CAACmI,UAAU,CAACnvI,GAAX,CAAegnI,GAAG,CAAC3X,EAAnB,CAA/B,CAAZ;;AACA,UAAIloH,KAAJ,EAAW;AACTgoI,kBAAU,CAACplJ,GAAX,CAAeod,KAAK,CAACkoH,EAArB;AACA,+CAAYhgI,IAAZ;AAAkB8X;AAAlB;AACD;AACF;;AACD,WAAO9X,IAAP;AACD,GATuB,CAAxB,CAtFgE,CAiGhE;;AACA,oBAA0DmgJ,iBAA1D,EAA6E;AAAA,QAAlE/I,UAAkE,SAAlEA,UAAkE;AAAA,QAAtDpC,KAAsD,SAAtDA,KAAsD;AAAA,QAA/C/O,eAA+C,SAA/CA,eAA+C;AAAA,QAA9BnuH,KAA8B,SAA9BA,KAA8B;;AAC3E,QAAIA,KAAJ,EAAW;AACT;AACA,UAAIsoI,QAAQ,mCACPtoI,KADO;AAEV4xH,eAAO,EAAE5xH,KAAK,CAAC4xH,OAAN,KAAkB,CAFjB;AAGV/uI,YAAI,EAAEwvI,gDAAA,CAAgBryH,KAAK,CAACnd,IAAtB;AAHI,QAAZ,CAFS,CAQT;;;AACA,YAAM0lJ,OAAO,GAAG;AACd1lJ,YAAI,EAAEq6I,KAAK,CAACr6I,IADE;AAEdgvI,mBAAW,EAAEqL,KAAK,CAACrL,WAAN,IAAqB,IAFpB;AAGdlH,aAAK,EAAE2d,QAAQ,CAAC3d,KAAT,IAAkBuS,KAAK,CAACvS,KAAxB,IAAiC,IAH1B;AAIdL,gBAAQ,EAAEge,QAAQ,CAAChe,QAAT,IAAqB4S,KAAK,CAAC5S,QAA3B,IAAuC,IAJnC;AAKdiV,sBAAc,EAAErC,KAAK,CAACqC,cAAN,IAAwB,IAL1B;AAMdvR,aAAK,EAAEsa,QAAQ,CAACta,KAAT,IAAkBkP,KAAK,CAAClP,KAAxB,IAAiC,IAN1B;AAOd4D,eAAO,EAAEsL,KAAK,CAACtL,OAAN,IAAiB,IAAjB,GAAwBsL,KAAK,CAACtL,OAA9B,GAAwC;AAPnC,OAAhB;;AAUA,UAAI4W,qEAAgB,CAACF,QAAD,EAAWC,OAAX,EAAoB9kJ,MAAM,CAACiS,IAAP,CAAY6yI,OAAZ,CAApB,CAApB,EAA+D;AAC7DN,eAAO,CAACviJ,IAAR;AAAewiI,YAAE,EAAEogB,QAAQ,CAACpgB;AAA5B,WAAmCqgB,OAAnC;AACD;AACF,KAtBD,MAsBO;AACL;AACA,UAAIE,gBAAgB,mCACfvL,KADe;AAElBhV,UAAE,EAAEpD,IAAI,CAACgX,MAAL,EAFc;AAGlBxR,gBAAQ,EAAE4S,KAAK,CAAC5S,QAAN,IAAkB,IAHV;AAIlBsH,eAAO,EAAEsL,KAAK,CAACtL,OAAN,IAAiB,IAAjB,GAAwBsL,KAAK,CAACtL,OAA9B,GAAwC;AAJ/B,QAApB;;AAOA,UAAIzD,eAAe,IAAIA,eAAe,CAACtnI,MAAhB,GAAyB,CAAhD,EAAmD;AACjDsuI,aAAK,CAACzvI,IAAN,CAAW,GAAGkgJ,oBAAoB,CAAC6C,gBAAD,EAAmBta,eAAnB,CAAlC;AACD,OAFD,MAEO;AACLgH,aAAK,CAACzvI,IAAN,CAAW+iJ,gBAAX;AACD;AACF;AACF;;AAED,QAAMb,eAAe,CAACP,cAAD,EAAiB,CAAC,GAAGlS,KAAJ,EAAW,GAAG8S,OAAd,CAAjB,CAArB;AACA,QAAMS,8EAAuB,CAAC;AAAEvT,SAAF;AAAS8S;AAAT,GAAD,CAA7B;AAEA,SAAO;AACL9S,SAAK,EAAEA,KAAK,CAACvxI,GAAN,CAAUs5I,KAAK,IAAIA,KAAK,CAAChV,EAAzB,CADF;AAEL+f,WAAO,EAAEA,OAAO,CAACrkJ,GAAR,CAAYs5I,KAAK,IAAIA,KAAK,CAAChV,EAA3B;AAFJ,GAAP;AAID,C,CAED;AACA;;AACO,eAAeS,eAAf,CACL4E,MADK,EAEL1E,YAFK,EAGL;AAAE8f,cAAY,GAAG;AAAjB,IAA0B,EAHrB,EAIL;AACA,QAAMxT,KAAK,GAAG,EAAd;;AAEA,+BAAqC,MAAMoS,qBAAqB,CAC9D1e,YAD8D,EAE9D0E,MAF8D,EAG9D;AAAEia,gBAAY,EAAE;AAAhB,GAH8D,CAAhE;AAAA,MAAMC,UAAN,0BAAMA,UAAN;AAAA,MAAkBJ,cAAlB,0BAAkBA,cAAlB;;AAMA,oBAAmDI,UAAnD,EAA+D;AAAA,QAApDnI,UAAoD,SAApDA,UAAoD;AAAA,QAAxCpC,KAAwC,SAAxCA,KAAwC;AAAA,QAAjC/O,eAAiC,SAAjCA,eAAiC;AAC7D;AACA+O,SAAK,GAAG3mI,oEAAQ,CAAC2mI,KAAD,CAAhB;;AAEA,QAAIuL,gBAAgB;AAClBvgB,QAAE,EAAEpD,IAAI,CAACgX,MAAL;AADc,OAEfoB,KAFe;AAGlB5T,aAAO,EAAEiE,MAHS;AAIlBqE,aAAO,EAAEsL,KAAK,CAACtL,OAAN,IAAiB,IAAjB,GAAwBsL,KAAK,CAACtL,OAA9B,GAAwC;AAJ/B,MAApB,CAJ6D,CAW7D;;;AACA,QAAIzD,eAAe,IAAIA,eAAe,CAACtnI,MAAhB,GAAyB,CAAhD,EAAmD;AACjDsuI,WAAK,CAACzvI,IAAN,CAAW,GAAGkgJ,oBAAoB,CAAC6C,gBAAD,EAAmBta,eAAnB,CAAlC;AACD,KAFD,MAEO;AACLgH,WAAK,CAACzvI,IAAN,CAAW+iJ,gBAAX;AACD;AACF;;AAED,QAAMb,eAAe,CAACP,cAAD,EAAiBlS,KAAjB,CAArB;AAEA,MAAIyT,eAAJ;;AACA,MAAID,YAAJ,EAAkB;AAChB,QAAIryB,GAAG,GAAG,MAAMoyB,8EAAuB,CAAC;AAAEvT;AAAF,KAAD,CAAvC;AACAyT,mBAAe,GAAGtyB,GAAG,CAAC6e,KAAJ,CAAUvxI,GAAV,CAAcswB,CAAC,IAAIA,CAAC,CAACg0G,EAArB,CAAlB;AACD,GAHD,MAGO;AACL,UAAMgO,2DAAa,CAAC,YAAY;AAC9B0S,qBAAe,GAAG,MAAMthI,OAAO,CAAC0pD,GAAR,CACtBmkE,KAAK,CAACvxI,GAAN,CAAU,MAAMs5I,KAAN,IAAe7K,qDAAA,CAAqB6K,KAArB,CAAzB,CADsB,CAAxB;AAGD,KAJkB,CAAnB;AAKD;;AACD,SAAO0L,eAAP;AACD;AAEM,eAAeC,WAAf,CAA2BrL,MAA3B,EAAmCY,OAAnC,EAA4ClW,EAA5C,EAAgDqF,MAAhD,EAAwD0Q,MAAxD,EAAgE;AACrE;AACA;AACA,QAAM6K,iBAAiB,GAAG,MAAMzW,yCAAA,CAC9B,2EAD8B,EAE9B,CAACnK,EAAD,CAF8B,CAAhC;;AAKA,MAAI4gB,iBAAJ,EAAuB;AACrB,UAAMC,mBAAmB,GAAG,MAAM1W,yCAAA,CAChC,6EADgC,EAEhC,CAACnK,EAAD,CAFgC,CAAlC;AAIA,UAAM7xH,YAAY,GAAGg8H,gDAAA,CAAgB0W,mBAAmB,CAAClmJ,IAApC,CAArB,CALqB,CAMrB;AAEA;AACA;AACA;AACA;AACA;AACA;;AACA,QAAIA,IAAI,GAAGiyI,sDAAA,CAAmBzC,gDAAA,CAAgByW,iBAAiB,CAACjmJ,IAAlC,CAAnB,EAA4D,EAA5D,CAAX,CAdqB,CAgBrB;AACA;;AACA,QAAIA,IAAI,GAAGwT,YAAX,EAAyB;AACvBxT,UAAI,GAAGwT,YAAP;AACD;;AAED,gCAAuC,MAAMmwI,oBAAoB,CAC/DhJ,MAD+D,EAE/DY,OAF+D,EAG/D7Q,MAH+D,EAI/D0Q,MAJ+D,EAK/Dp7I,IAL+D,CAAjE;AAAA,QAAMgmI,YAAN,yBAAMA,YAAN;AAAA,QAAoB8d,cAApB,yBAAoBA,cAApB;;AAOA,QAAI9d,YAAY,CAAChiI,MAAb,KAAwB,CAA5B,EAA+B;AAC7B,aAAO;AAAEsuI,aAAK,EAAE,EAAT;AAAa8S,eAAO,EAAE;AAAtB,OAAP;AACD;;AAEDpf,gBAAY,GAAGA,YAAY,CAACjlI,GAAb,CAAiBs5I,KAAK,oCAAUA,KAAV;AAAiB5T,aAAO,EAAEpB;AAA1B,MAAtB,CAAf;AAEA,WAAO+N,4DAAU,CAAC,YAAY;AAC5B,YAAMrhI,MAAM,GAAG,MAAMmzI,qBAAqB,CAAC7f,EAAD,EAAKW,YAAL,CAA1C;AACA,YAAMud,oBAAoB,CAACle,EAAD,EAAKye,cAAL,CAA1B;AACA,aAAO/xI,MAAP;AACD,KAJgB,CAAjB;AAKD,GAxCD,MAwCO;AACL,UAAMo0I,OAAO,GAAG,MAAM3W,0CAAA,CAAU,UAAV,EAAsBnK,EAAtB,CAAtB,CADK,CAGL;AACA;;AACA,UAAM+gB,WAAW,GAAGnU,sDAAA,CAClBA,yDAAA,EADkB,EAElBkU,OAAO,CAAC9c,SAAR,KAAsB,CAAtB,GAA0B,CAA1B,GAA8B,EAFZ,CAApB;;AAKA,mCAAyB,MAAMsa,oBAAoB,CACjDhJ,MADiD,EAEjDY,OAFiD,EAGjD7Q,MAHiD,EAIjD0Q,MAJiD,EAKjD8C,OAAO,CAACtiI,MAAR,CAAesiI,OAAO,CAACxtF,QAAR,CAAiB01F,WAAjB,CAAf,EAA8C,YAA9C,CALiD,CAAnD;AAAA,UAAQpgB,YAAR,0BAAQA,YAAR,CAVK,CAkBL;AACA;AACA;AACA;AACA;;;AACA,QAAIqgB,cAAc,GAAGF,OAAO,CAACxK,eAA7B;AAEA,UAAM2K,eAAe,GAAGtgB,YAAY,CAAC/nI,MAAb,CAAoB,CAACoyB,KAAD,EAAQgqH,KAAR,KAAkB;AAC5D,aAAOhqH,KAAK,GAAGgqH,KAAK,CAACpxI,MAArB;AACD,KAFuB,EAErBo9I,cAFqB,CAAxB;AAIA,UAAME,UAAU,GACdvgB,YAAY,CAAChiI,MAAb,GAAsB,CAAtB,GACIgiI,YAAY,CAACA,YAAY,CAAChiI,MAAb,GAAsB,CAAvB,CAAZ,CAAsChE,IAD1C,GAEIiyI,yDAAA,EAHN;AAKA,QAAInK,KAAK,GAAG,MAAMmV,uEAAuB,EAAzC;AAEA,WAAO7J,4DAAU,CAAC,YAAY;AAC5B,UAAIoT,SAAS,GAAG,MAAMhX,qDAAA,CAAqB;AACzC/I,eAAO,EAAEpB,EADgC;AAEzCp8H,cAAM,EAAEq9I,eAFiC;AAGzC7e,gBAAQ,EAAE0e,OAAO,CAAC9c,SAAR,KAAsB,CAAtB,GAA0BvB,KAAK,CAACL,QAAhC,GAA2C,IAHZ;AAIzCK,aAAK,EAAEA,KAAK,CAACzC,EAJ4B;AAKzCrlI,YAAI,EAAEumJ,UALmC;AAMzCxX,eAAO,EAAE,IANgC;AAOzCqD,6BAAqB,EAAE;AAPkB,OAArB,CAAtB;AAUA,UAAIrgI,MAAM,GAAG,MAAMmzI,qBAAqB,CAAC7f,EAAD,EAAKW,YAAL,CAAxC;AACA,6CACKj0H,MADL;AAEEugI,aAAK,EAAE,CAACkU,SAAD,EAAY,GAAGz0I,MAAM,CAACugI,KAAtB;AAFT;AAID,KAhBgB,CAAjB;AAiBD;AACF,C;;;;;;;;;;;AC9hBD;AACA,MAAMmU,SAAS,GAAGrnI,mBAAO,CAAC,kFAAD,CAAzB;;AACA,MAAMsnI,QAAQ,GAAGtnI,mBAAO,CAAC,8EAAD,CAAxB;;AAEA,IAAIunI,SAAS,GACX,4wHADF;AAEA,IAAIlpI,KAAK,GAAG,IAAIC,MAAJ,CACT,yCAAwCipI,SAAU,OAAMA,SAAU,MAAKA,SAAU,SAAQA,SAAU,IAD1F,EAEV,GAFU,CAAZ;;AAKA,IAAIC,eAAe,GAAGF,QAAQ,IAC5BA,QAAQ,CAAC3lJ,GAAT,CAAamD,CAAC,IAAI,CAAC,IAAIwZ,MAAJ,CAAY,MAAKxZ,CAAE,KAAnB,EAAyB,IAAzB,CAAD,EAAiCA,CAAjC,CAAlB,CADF;;AAGA,SAAS2iJ,UAAT,CAAoB1pI,KAApB,EAA2B;AACzB,QAAMgkC,cAAc,GAAGhkC,KAAK,CAAC,CAAD,CAA5B,CADyB,CAGzB;;AACA,MAAI,KAAKqG,IAAL,CAAU29B,cAAV,CAAJ,EAA+B;AAC7B;AACA,WAAOhkC,KAAK,CAACb,MAAN,CAAa,CAAb,CAAP;AACD;;AACD,MAAI,OAAOkH,IAAP,CAAY29B,cAAZ,CAAJ,EAAiC;AAC/B;AACA,WAAO,IAAP;AACD;;AAED,SAAOhkC,KAAP;AACD;;AAED6B,MAAM,CAACC,OAAP,GAAiB,CAACgiB,GAAD,EAAMniC,OAAO,GAAG,EAAhB,KAAuB;AACtCmiC,KAAG,GAAGA,GAAG,CACN5C,WADG,GAEH/gB,OAFG,CAEKG,KAFL,EAEY,CAACy3B,CAAD,EAAI4xG,IAAI,GAAG,EAAX,EAAeC,MAAf,EAAuBC,KAAvB,EAA8Bn+F,IAA9B,KAAuC;AACrD,UAAMo+F,WAAW,GAAGJ,UAAU,CAAC3xG,CAAD,CAA9B;;AACA,QAAI,CAAC+xG,WAAL,EAAkB;AAChB,aAAO/xG,CAAP;AACD;;AACD,QAAI,CAAC6xG,MAAL,EAAa;AACX,YAAMG,SAAS,GAAGF,KAAK,GAAGn+F,IAA1B;;AAEA,UAAI49F,SAAS,CAACzwI,GAAV,CAAckxI,SAAd,CAAJ,EAA8B;AAC5B,eAAOD,WAAP;AACD;AACF;;AAED,WAAOH,IAAI,GAAG,CAACE,KAAK,IAAID,MAAV,EAAkB94H,WAAlB,EAAP,GAAyC46B,IAAhD;AACD,GAhBG,CAAN;AAkBA,QAAMs+F,cAAc,GAAGroJ,OAAO,CAACsoJ,OAAR,IAAmB,EAA1C;AACA,QAAM9pI,OAAO,GAAG,CAAC,GAAGopI,QAAJ,EAAc,GAAGS,cAAjB,CAAhB;AACA,QAAME,aAAa,GAAGT,eAAe,CAACtpI,OAAD,CAArC;AAEA+pI,eAAa,CAACn3I,OAAd,CAAsB,CAAC,CAAC0qB,OAAD,EAAU12B,CAAV,CAAD,KAAkB;AACtC+8B,OAAG,GAAGA,GAAG,CAAC3jB,OAAJ,CAAYsd,OAAZ,EAAqB12B,CAArB,CAAN;AACD,GAFD;AAIA,SAAO+8B,GAAP;AACD,CA5BD,C;;;;;;;;;;;AC9BA,MAAMqmH,YAAY,GAAG,CACnB,KADmB,EAEnB,KAFmB,EAGnB,KAHmB,EAInB,KAJmB,EAKnB,IALmB,EAMnB,KANmB,EAOnB,IAPmB,CAArB;AAUA,MAAMC,QAAQ,GAAG,CACf,GADe,EAEf,IAFe,EAGf,KAHe,CAAjB;AAMA,MAAMC,YAAY,GAAG,CACnB,QADmB,EAEnB,OAFmB,EAGnB,OAHmB,EAInB,QAJmB,EAKnB,OALmB,EAMnB,SANmB,EAOnB,OAPmB,EAQnB,MARmB,EASnB,OATmB,EAUnB,MAVmB,EAWnB,QAXmB,EAYnB,IAZmB,EAanB,IAbmB,EAcnB,QAdmB,EAenB,QAfmB,EAgBnB,OAhBmB,EAiBnB,SAjBmB,EAkBnB,QAlBmB,EAmBnB,SAnBmB,EAoBnB,SApBmB,EAqBnB,QArBmB,EAsBnB,KAtBmB,EAuBnB,IAvBmB,EAwBnB,YAxBmB,EAyBnB,aAzBmB,EA0BnB,SA1BmB,EA2BnB,MA3BmB,EA4BnB,QA5BmB,EA6BnB,QA7BmB,EA8BnB,WA9BmB,EA+BnB,WA/BmB,EAgCnB,WAhCmB,EAiCnB,KAjCmB,EAkCnB,MAlCmB,EAmCnB,IAnCmB,EAoCnB,QApCmB,EAqCnB,MArCmB,EAsCnB,MAtCmB,EAuCnB,OAvCmB,EAwCnB,MAxCmB,EAyCnB,IAzCmB,EA0CnB,KA1CmB,EA2CnB,IA3CmB,EA4CnB,MA5CmB,EA6CnB,UA7CmB,EA8CnB,MA9CmB,EA+CnB,MA/CmB,EAgDnB,KAhDmB,EAiDnB,MAjDmB,EAkDnB,WAlDmB,EAmDnB,OAnDmB,EAoDnB,MApDmB,EAqDnB,OArDmB,EAsDnB,MAtDmB,EAuDnB,SAvDmB,EAwDnB,IAxDmB,EAyDnB,QAzDmB,EA0DnB,SA1DmB,EA2DnB,OA3DmB,EA4DnB,YA5DmB,EA6DnB,QA7DmB,EA8DnB,OA9DmB,EA+DnB,IA/DmB,EAgEnB,MAhEmB,EAiEnB,QAjEmB,EAkEnB,KAlEmB,EAmEnB,MAnEmB,EAoEnB,QApEmB,EAqEnB,SArEmB,CAArB;AAwEAxoI,MAAM,CAACC,OAAP,GAAiB,IAAI5G,GAAJ,CAAQ,CACvB,GAAGivI,YADoB,EAEvB,GAAGC,QAFoB,EAGvB,GAAGC,YAHoB,CAAR,CAAjB,C;;;;;;;;;;;ACxFA,MAAMC,QAAQ,GAAG,CACf,KADe,EAEf,KAFe,EAGf,MAHe,EAIf,OAJe,EAKf,KALe,EAMf,KANe,EAOf,KAPe,EAQf,IARe,EASf,KATe,EAUf,QAVe,EAWf,KAXe,EAYf,IAZe,EAaf,YAbe,EAcf,YAde,EAef,MAfe,EAgBf,WAhBe,EAiBf,YAjBe,EAkBf,SAlBe,EAmBf,SAnBe,CAAjB;AAsBAzoI,MAAM,CAACC,OAAP,GAAiBwoI,QAAjB,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBA;AACA;AASA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMxlB,IAAI,GAAG7iH,mBAAO,CAAC,qFAAD,CAApB,C,CAEA;AACA;AACA;AACA;;;AAEA;AAEA,IAAIsoI,QAAJ;AACA,IAAIC,YAAJ;AACA,IAAIC,gBAAJ;AACA,IAAIC,YAAJ;AAEO,SAASC,UAAT,GAAsB;AAC3BJ,UAAQ,GAAG,IAAI71I,GAAJ,EAAX;AACA+1I,kBAAgB,GAAG,IAAIvH,kDAAJ,CAAgB;AACjCr5G,SAAK,EAAE,gBAD0B;AAEjC1lC,UAAM,EAAE;AAFyB,GAAhB,CAAnB;AAIAumJ,cAAY,GAAG,IAAIxH,kDAAJ,CAAgB;AAAEr5G,SAAK,EAAE;AAAT,GAAhB,CAAf;AACD,C,CAED;;AAEA,SAAS+gH,MAAT,CAAgBh1I,GAAhB,EAAqB;AACnB,SAAOnS,MAAM,CAAConJ,WAAP,CACLpnJ,MAAM,CAAC4kB,OAAP,CAAezS,GAAf,EAAoBhS,GAApB,CAAwBoX,KAAK,IAAI;AAC/B,WAAO,CAACA,KAAK,CAAC,CAAD,CAAN,EAAWA,KAAK,CAAC,CAAD,CAAhB,CAAP;AACD,GAFD,CADK,CAAP;AAKD;;AAED,IAAI8vI,cAAc,GAAGC,yDAAY,CAACC,KAAb,CAAmBniB,YAAnB,CAAgCK,MAArD;AACA,IAAI+hB,YAAY,GAAGL,MAAM,CAACG,yDAAY,CAACC,KAAb,CAAmBniB,YAAnB,CAAgCK,MAAjC,CAAzB;;AAEA,SAASgiB,iBAAT,CAA2Bt1I,GAA3B,EAAgC;AAC9B,yCACKA,GADL;AAEEi0B,SAAK,EAAEohH,YAAY,CAACr1I,GAAG,CAACi0B,KAAL,CAAZ,IAA2Bj0B,GAAG,CAACi0B;AAFxC;AAID;;AAED,SAASshH,eAAT,CAAyBv1I,GAAzB,EAA8B;AAC5B,yCACKA,GADL;AAEEi0B,SAAK,EAAEihH,cAAc,CAACl1I,GAAG,CAACi0B,KAAL,CAAd,IAA6Bj0B,GAAG,CAACi0B;AAF1C;AAID;;AAEM,MAAMuhH,SAAS,GAAG;AACvBx5F,UAAQ,CAAC1/C,IAAD,EAAO;AAAEwV;AAAF,MAAa,EAApB,EAAwB;AAC9B2jI,kEAAc,CAAC,OAAD,EAAUn5I,IAAV,EAAgB,CAAC,YAAD,EAAe,SAAf,CAAhB,EAA2CwV,MAA3C,CAAd;;AAEA,QAAI,CAACA,MAAD,IAAW,WAAWxV,IAA1B,EAAgC;AAC9B,UACEA,IAAI,CAACywI,KAAL,KAAe,KAAf,IACAzwI,IAAI,CAACywI,KAAL,KAAe,MADf,IAEAzwI,IAAI,CAACywI,KAAL,KAAe,IAHjB,EAIE;AACA,cAAM,IAAIt9I,KAAJ,CAAU,yBAAyB6M,IAAI,CAACywI,KAAxC,CAAN;AACD;AACF;;AAED,WAAOzwI,IAAP;AACD,GAfsB;;AAiBvBo5I,MAAI,CAACzL,GAAD,EAAM;AACR,aAAS0L,UAAT,CAAoBznH,GAApB,EAAyB;AACvB,UAAI1jC,KAAJ;;AACA,UAAI;AACFA,aAAK,GAAG,OAAO0jC,GAAP,KAAe,QAAf,GAA0Br1B,IAAI,CAAC0G,KAAL,CAAW2uB,GAAX,CAA1B,GAA4CA,GAApD;AACD,OAFD,CAEE,OAAO3Z,CAAP,EAAU;AACV,cAAM,IAAIu2H,iDAAJ,CAAc,UAAd,EAA0B,wBAA1B,CAAN;AACD;;AAED,UAAI,CAAC/7I,KAAK,CAACwD,OAAN,CAAc/H,KAAd,CAAL,EAA2B;AACzB,cAAM,IAAIsgJ,iDAAJ,CAAc,UAAd,EAA0B,4BAA1B,CAAN;AACD;;AACD,aAAOtgJ,KAAP;AACD;;AAED,QAAI8R,IAAI,qBAAQ2tI,GAAR,CAAR;;AACA3tI,QAAI,CAAC0wI,UAAL,GAAkB1wI,IAAI,CAAC0wI,UAAL,GACd2I,UAAU,CAACr5I,IAAI,CAAC0wI,UAAN,CAAV,CAA4Bh/I,GAA5B,CAAgC2/I,IAAI,IAAI2H,iBAAiB,CAAC3H,IAAD,CAAzD,CADc,GAEd,EAFJ;AAGArxI,QAAI,CAAC2wI,OAAL,GAAe3wI,IAAI,CAAC2wI,OAAL,GACX0I,UAAU,CAACr5I,IAAI,CAAC2wI,OAAN,CAAV,CAAyBj/I,GAAzB,CAA6BwyF,MAAM,IAAI80D,iBAAiB,CAAC90D,MAAD,CAAxD,CADW,GAEX,EAFJ;AAGA,WAAOlkF,IAAP;AACD,GAxCsB;;AA0CvBs5I,QAAM,CAACt5I,IAAD,EAAO;AACX,QAAI2tI,GAAG,qBAAQ3tI,IAAR,CAAP;;AACA,QAAI,gBAAgB2tI,GAApB,EAAyB;AACvB,UAAI+C,UAAU,GAAG/C,GAAG,CAAC+C,UAAJ,CAAeh/I,GAAf,CAAmB2/I,IAAI,IAAI4H,eAAe,CAAC5H,IAAD,CAA1C,CAAjB;AACA1D,SAAG,CAAC+C,UAAJ,GAAiBn0I,IAAI,CAACC,SAAL,CAAek0I,UAAf,CAAjB;AACD;;AACD,QAAI,aAAa/C,GAAjB,EAAsB;AACpB,UAAIgD,OAAO,GAAGhD,GAAG,CAACgD,OAAJ,CAAYj/I,GAAZ,CAAgBwyF,MAAM,IAAI+0D,eAAe,CAAC/0D,MAAD,CAAzC,CAAd;AACAypD,SAAG,CAACgD,OAAJ,GAAcp0I,IAAI,CAACC,SAAL,CAAem0I,OAAf,CAAd;AACD;;AACD,WAAOhD,GAAP;AACD;;AArDsB,CAAlB;AAwDA,SAAS4L,QAAT,CAAkBvjJ,IAAlB,EAAwB;AAC7B,MAAIgK,IAAJ;;AACA,MAAI;AACFA,QAAI,GAAG,IAAIlB,2CAAJ,iCACFo6I,SAAS,CAACE,IAAV,CAAepjJ,IAAf,CADE;AAELu5I,gBAAU,EAAEiK,yDAAWA;AAFlB,OAAP;AAID,GALD,CAKE,OAAOvhI,CAAP,EAAU;AACVoR,WAAO,CAACC,IAAR,CAAa,cAAb,EAA6BrR,CAA7B;;AACA,QAAIA,CAAC,YAAYu2H,iDAAjB,EAA4B;AAC1B,aAAO,IAAP;AACD;;AACD,UAAMv2H,CAAN;AACD,GAb4B,CAe7B;AACA;AACA;;;AACA+6H,2DAAU,CAAChzI,IAAD,EAAOy5I,gEAAW,EAAlB,CAAV;AAEA,SAAOz5I,IAAP;AACD;AAEM,eAAe05I,SAAf,GAA2B;AAChCjB,YAAU;AAEV,MAAI30I,KAAK,GAAG,MAAMq8H,uCAAA,CAAQ;AAC5B;AACA;AACA,GAHoB,CAAlB;;AAKA,OAAK,IAAI3yH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG1J,KAAK,CAACnP,MAA1B,EAAkC6Y,CAAC,EAAnC,EAAuC;AACrC,QAAI6jB,IAAI,GAAGvtB,KAAK,CAAC0J,CAAD,CAAhB,CADqC,CAErC;;AACA,QAAI6jB,IAAI,CAACo/G,KAAL,KAAe,SAAf,IAA4Bp/G,IAAI,CAACo/G,KAAL,KAAe,QAA/C,EAAyD;AACvDp/G,UAAI,CAACo/G,KAAL,GAAa,KAAb;AACD;;AAED,QAAIzwI,IAAI,GAAGu5I,QAAQ,CAACloH,IAAD,CAAnB;;AACA,QAAIrxB,IAAJ,EAAU;AACRq4I,cAAQ,CAAClkJ,GAAT,CAAa6L,IAAI,CAACg2H,EAAlB,EAAsBh2H,IAAtB;AACAu4I,sBAAgB,CAAC7kJ,KAAjB,CAAuBsM,IAAvB;AACAw4I,kBAAY,CAAC9kJ,KAAb,CAAmBsM,IAAnB;AACD;AACF;;AAED,MAAIs4I,YAAJ,EAAkB;AAChBA,gBAAY;AACb;;AACDA,cAAY,GAAGqB,mEAAe,CAACC,WAAD,CAA9B;AACD;AAEM,SAASC,QAAT,GAAoB;AACzB;AACA,SAAO,CAAC,GAAGxB,QAAQ,CAAC51I,MAAT,EAAJ,CAAP;AACD;AAEM,eAAeq3I,UAAf,CAA0B95I,IAA1B,EAAgC;AACrCA,MAAI,GAAGk5I,SAAS,CAACx5F,QAAV,CAAmB1/C,IAAnB,CAAP;AACA,SAAOmgI,kDAAA,CAAkB,OAAlB,EAA2B+Y,SAAS,CAACI,MAAV,CAAiBt5I,IAAjB,CAA3B,CAAP;AACD;AAEM,eAAe+5I,UAAf,CAA0B/5I,IAA1B,EAAgC;AACrCA,MAAI,GAAGk5I,SAAS,CAACx5F,QAAV,CAAmB1/C,IAAnB,EAAyB;AAAEwV,UAAM,EAAE;AAAV,GAAzB,CAAP;AACA,SAAO2qH,0CAAA,CAAU,OAAV,EAAmB+Y,SAAS,CAACI,MAAV,CAAiBt5I,IAAjB,CAAnB,CAAP;AACD;AAEM,eAAeg6I,UAAf,CAA0Bh6I,IAA1B,EAAgC;AACrC,MAAI9J,QAAQ,GAAG,MAAMiqI,yCAAA,CAAS,yCAAT,EAAoD,CACvEngI,IAAI,CAACg2H,EADkE,CAApD,CAArB;;AAIA,MAAI9/H,QAAJ,EAAc;AACZ,WAAO,KAAP;AACD;;AAED,SAAOiqI,2CAAA,CAAW,OAAX,EAAoBngI,IAAI,CAACg2H,EAAzB,CAAP;AACD,C,CAED;;AAEA,SAAS4jB,WAAT,CAAqBK,SAArB,EAAgCC,SAAhC,EAA2C;AACzCA,WAAS,CAACr5I,OAAV,CAAkB,CAACuT,KAAD,EAAQshH,KAAR,KAAkB;AAClC,QAAIA,KAAK,KAAK,OAAd,EAAuB;AACrBthH,WAAK,CAACvT,OAAN,CAAcs5I,QAAQ,IAAI;AACxB,YAAIC,OAAO,GAAG/B,QAAQ,CAACznJ,GAAT,CAAaupJ,QAAQ,CAACnkB,EAAtB,CAAd;;AAEA,YAAImkB,QAAQ,CAACE,SAAT,KAAuB,CAA3B,EAA8B;AAC5B;AACA,cAAIr6I,IAAI,GAAGq4I,QAAQ,CAACznJ,GAAT,CAAaupJ,QAAQ,CAACnkB,EAAtB,CAAX;;AACA,cAAIh2H,IAAJ,EAAU;AACRq4I,oBAAQ,CAACx/H,MAAT,CAAgB7Y,IAAI,CAAC+wI,KAAL,EAAhB;AACAwH,4BAAgB,CAAC7hJ,MAAjB,CAAwBsJ,IAAxB;AACAw4I,wBAAY,CAAC9hJ,MAAb,CAAoBsJ,IAApB;AACD;AACF,SARD,MAQO;AACL;AACA,cAAIA,IAAI,GAAGu5I,QAAQ,CAACY,QAAD,CAAnB;;AACA,cAAIn6I,IAAJ,EAAU;AACR,gBAAIo6I,OAAJ,EAAa;AACX7B,8BAAgB,CAAC7hJ,MAAjB,CAAwB0jJ,OAAxB;AACA5B,0BAAY,CAAC9hJ,MAAb,CAAoB0jJ,OAApB;AACD;;AACD/B,oBAAQ,CAAClkJ,GAAT,CAAagmJ,QAAQ,CAACnkB,EAAtB,EAA0Bh2H,IAA1B;AACAu4I,4BAAgB,CAAC7kJ,KAAjB,CAAuBsM,IAAvB;AACAw4I,wBAAY,CAAC9kJ,KAAb,CAAmBsM,IAAnB;AACD;AACF;AACF,OAxBD;AAyBD;AACF,GA5BD,EADyC,CA+BzC;AACA;;AACA,MAAIs6I,MAAM,GAAG,CAAC,GAAGJ,SAAS,CAAC12I,IAAV,EAAJ,CAAb;;AACA,MAAI82I,MAAM,CAACjwI,IAAP,CAAYqrH,KAAK,IAAIA,KAAK,CAAC/4H,OAAN,CAAc,SAAd,MAA6B,CAAC,CAAnD,CAAJ,EAA2D;AACzDk9I,YAAQ,GAAGh5I,OAAX,CAAmBb,IAAI,IAAI;AACzBgzI,+DAAU,CAAChzI,IAAD,EAAOy5I,gEAAW,EAAlB,CAAV;AACD,KAFD;AAGD;AACF,C,CAED;;;AACO,SAASp1I,QAAT,CAAkB2mI,KAAlB,EAAyB;AAC9B,MAAIuP,UAAU,qBAAQvP,KAAR,CAAd;;AACA,MAAIwP,UAAU,GAAG,EAAjB;AAEA,MAAI12I,KAAK,GAAG+uI,wDAAS,CACnBpB,iEAAY,CACV8G,gBAAgB,CAAChH,kBAAjB,CAAoCvG,KAApC,CADU,EAEVwN,YAAY,CAACjH,kBAAb,CAAgCvG,KAAhC,CAFU,CADO,CAArB;;AAOA,OAAK,IAAIx9H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG1J,KAAK,CAACnP,MAA1B,EAAkC6Y,CAAC,EAAnC,EAAuC;AACrC+sI,cAAU,GAAGz2I,KAAK,CAAC0J,CAAD,CAAL,CAASgkB,KAAT,CAAe+oH,UAAf,CAAb;AACD;;AAED,SAAOA,UAAP;AACD,C,CAED;;AACO,SAASE,eAAT,CAAyB/J,UAAzB,EAAqC;AAAEgK,iBAAe,GAAG;AAApB,IAA4B,EAAjE,EAAqE;AAC1E,MAAI9N,MAAM,GAAG,EAAb;AAEA8D,YAAU,GAAGA,UAAU,CACpBh/I,GADU,CACN2/I,IAAI,IAAI;AACX,QAAIA,IAAI,YAAY/B,gDAApB,EAA+B;AAC7B,aAAO+B,IAAP;AACD;;AAED,QAAI;AACF,aAAO,IAAI/B,gDAAJ,CACL+B,IAAI,CAAChC,EADA,EAELgC,IAAI,CAAC15G,KAFA,EAGL05G,IAAI,CAACnjJ,KAHA,EAILmjJ,IAAI,CAAC5hJ,OAJA,EAKL+pJ,yDALK,CAAP;AAOD,KARD,CAQE,OAAOvhI,CAAP,EAAU;AACV20H,YAAM,CAACp5I,IAAP,CAAYykB,CAAC,CAACnN,IAAF,IAAU,UAAtB;AACAue,aAAO,CAACsrE,GAAR,CAAY,yCAAyC18E,CAAC,CAAC2kB,OAAvD;AACA,aAAO,IAAP;AACD;AACF,GAnBU,EAoBVxnC,MApBU,CAoBHw9C,OApBG,CAAb,CAH0E,CAyB1E;;AACA,MAAI+nG,OAAO,GAAGjK,UAAU,CAACh/I,GAAX,CAAe2/I,IAAI,IAAI;AACnC,QAAMvmI,IAAN,GAA0CumI,IAA1C,CAAMvmI,IAAN;AAAA,QAAY6sB,KAAZ,GAA0C05G,IAA1C,CAAY15G,KAAZ;AAAA,QAAmB03G,EAAnB,GAA0CgC,IAA1C,CAAmBhC,EAAnB;AAAA,QAAuBnhJ,KAAvB,GAA0CmjJ,IAA1C,CAAuBnjJ,KAAvB;AAAA,QAA8BuB,OAA9B,GAA0C4hJ,IAA1C,CAA8B5hJ,OAA9B;;AAEA,QAAI2wI,QAAQ,GAAGlyI,KAAK,IAAI;AACtB,UAAI4c,IAAI,KAAK,QAAb,EAAuB;AACrB,eAAO5c,KAAK,CAACA,KAAb;AACD;;AACD,aAAOA,KAAP;AACD,KALD;;AAOA,QAAIsjC,KAAK,GAAG,CAACmG,KAAD,EAAQ03G,EAAR,EAAYnhJ,KAAZ,KAAsB;AAChC,UAAI4c,IAAI,KAAK,QAAb,EAAuB;AACrB,YAAIrb,OAAJ,EAAa;AACX,cAAIA,OAAO,CAACmgJ,OAAZ,EAAqB;AACnB,mBAAO;AACLgL,kBAAI,EAAE,CACJ;AAAEhhJ,sBAAM,EAAE;AAAEihJ,qBAAG,EAAE;AAAP;AAAV,eADI,EAEJ;AAAE,iBAACljH,KAAD,GAAS;AAAEmjH,4BAAU,EAAE,MAAd;AAAsB,mBAACzL,EAAD,GAAMnhJ;AAA5B;AAAX,eAFI;AADD,aAAP;AAMD,WAPD,MAOO,IAAIuB,OAAO,CAACogJ,MAAZ,EAAoB;AACzB,mBAAO;AACL+K,kBAAI,EAAE,CAAC;AAAEhhJ,sBAAM,EAAE;AAAEkrI,qBAAG,EAAE;AAAP;AAAV,eAAD,EAAyB;AAAE,iBAACntG,KAAD,GAAS;AAAE,mBAAC03G,EAAD,GAAMnhJ;AAAR;AAAX,eAAzB;AADD,aAAP;AAGD;AACF;;AAED,eAAO;AAAE0L,gBAAM,EAAE;AAAE,aAACy1I,EAAD,GAAMnhJ;AAAR;AAAV,SAAP;AACD,OAjBD,MAiBO,IAAI4c,IAAI,KAAK,QAAb,EAAuB;AAC5B,eAAO;AAAE,WAAC6sB,KAAD,GAAS;AAAEmjH,sBAAU,EAAE,QAAd;AAAwB,aAACzL,EAAD,GAAMnhJ;AAA9B;AAAX,SAAP;AACD,OAFM,MAEA,IAAI4c,IAAI,KAAK,MAAb,EAAqB;AAC1B,eAAO;AAAE,WAAC6sB,KAAD,GAAS;AAAE,aAAC03G,EAAD,GAAMnhJ,KAAK,CAACyC;AAAd;AAAX,SAAP;AACD;;AACD,aAAO;AAAE,SAACgnC,KAAD,GAAS;AAAE,WAAC03G,EAAD,GAAMnhJ;AAAR;AAAX,OAAP;AACD,KAxBD;;AA0BA,YAAQmhJ,EAAR;AACE,WAAK,UAAL;AACA,WAAK,IAAL;AACE,YAAIvkI,IAAI,KAAK,MAAb,EAAqB;AACnB,cAAI5c,KAAK,CAAC4c,IAAN,KAAe,OAAnB,EAA4B;AAC1B,gBAAI/X,KAAK,GAAG7E,KAAK,CAACgI,QAAN,CACTlH,WADS,CACG;AAAEwD,kBAAI,EAAEkoJ;AAAR,aADH,EAETnoJ,OAFS,GAGTb,GAHS,CAGLmzC,CAAC,IAAI4oG,kEAAW,CAAC5oG,CAAC,CAACl0C,IAAH,CAHX,CAAZ;;AAKA,gBAAI8mC,OAAO,GAAGoN,CAAC,KAAK;AAAEk2G,iBAAG,EAAEl2G;AAAP,aAAL,CAAf;;AAEA,mBAAO;AACLm2G,iBAAG,EAAEjoJ,KAAK,CAACrB,GAAN,CAAUmzC,CAAC,IAAI;AAClB,oBAAIwqG,EAAE,KAAK,UAAX,EAAuB;AACrB,yBAAO;AACLuL,wBAAI,EAAE,CACJ;AAAEjqJ,0BAAI,EAAE;AAAEsqJ,4BAAI,EAAEn2F,8DAAO,CAACjgB,CAAD,EAAI,CAAJ;AAAf;AAAR,qBADI,EAEJ;AAAEl0C,0BAAI,EAAE;AAAEuqJ,4BAAI,EAAEhxG,8DAAO,CAACrF,CAAD,EAAI,CAAJ;AAAf;AAAR,qBAFI;AADD,mBAAP;AAMD;;AACD,uBAAO;AAAEl0C,sBAAI,EAAEk0C;AAAR,iBAAP;AACD,eAVI;AADA,aAAP;AAaD,WArBD,MAqBO;AACL,gBAAMl0C,IAAN,GAAezC,KAAf,CAAMyC,IAAN;;AAEA,gBAAI0+I,EAAE,KAAK,UAAX,EAAuB;AACrB,kBAAIW,QAAQ,GAAGruF,gEAAS,CAACzzD,KAAK,CAACyC,IAAP,CAAxB;AACA,kBAAIs/I,IAAI,GAAG/lG,8DAAO,CAAC8lG,QAAD,EAAW,CAAX,CAAlB;AACA,kBAAIE,GAAG,GAAGprF,8DAAO,CAACkrF,QAAD,EAAW,CAAX,CAAjB;AAEA,qBAAO;AACL4K,oBAAI,EAAE,CAAC;AAAEjqJ,sBAAI,EAAE;AAAEsqJ,wBAAI,EAAE/K;AAAR;AAAR,iBAAD,EAA0B;AAAEv/I,sBAAI,EAAE;AAAEuqJ,wBAAI,EAAEjL;AAAR;AAAR,iBAA1B;AADD,eAAP;AAGD,aARD,MAQO;AACL,sBAAQ/hJ,KAAK,CAAC4c,IAAd;AACE,qBAAK,MAAL;AACE,yBAAO;AAAEna,wBAAI,EAAEzC,KAAK,CAACyC;AAAd,mBAAP;;AACF,qBAAK,OAAL;AAAc;AACZ,wBAAIu/I,GAAG,GAAGhiJ,KAAK,CAACyC,IAAN,GAAa,KAAvB;AACA,wBAAIs/I,IAAI,GAAG/hJ,KAAK,CAACyC,IAAN,GAAa,KAAxB;AACA,2BAAO;AACLiqJ,0BAAI,EAAE,CAAC;AAAEjqJ,4BAAI,EAAE;AAAEsqJ,8BAAI,EAAE/K;AAAR;AAAR,uBAAD,EAA0B;AAAEv/I,4BAAI,EAAE;AAAEuqJ,8BAAI,EAAEjL;AAAR;AAAR,uBAA1B;AADD,qBAAP;AAGD;;AACD,qBAAK,MAAL;AAAa;AACX,wBAAIC,GAAG,GAAGhiJ,KAAK,CAACyC,IAAN,GAAa,QAAvB;AACA,wBAAIs/I,IAAI,GAAG/hJ,KAAK,CAACyC,IAAN,GAAa,QAAxB;AACA,2BAAO;AACLiqJ,0BAAI,EAAE,CAAC;AAAEjqJ,4BAAI,EAAE;AAAEsqJ,8BAAI,EAAE/K;AAAR;AAAR,uBAAD,EAA0B;AAAEv/I,4BAAI,EAAE;AAAEuqJ,8BAAI,EAAEjL;AAAR;AAAR,uBAA1B;AADD,qBAAP;AAGD;;AACD;AAjBF;AAmBD;AACF;AACF,SAvDD,MAuDO,IAAInlI,IAAI,KAAK,QAAb,EAAuB;AAC5B,cAAI8B,MAAM,GAAG1e,KAAK,CAACA,KAAnB;;AACA,cAAImhJ,EAAE,KAAK,UAAX,EAAuB;AACrB,gBAAIe,SAAS,GAAGC,8EAAwB,CAACzjI,MAAD,CAAxC;AAEA,mBAAO;AACLguI,kBAAI,EAAE,CACJppH,KAAK,CAACmG,KAAD,EAAQ,MAAR,EAAgB/qB,MAAM,GAAGwjI,SAAzB,CADD,EAEJ5+G,KAAK,CAACmG,KAAD,EAAQ,MAAR,EAAgB/qB,MAAM,GAAGwjI,SAAzB,CAFD;AADD,aAAP;AAMD;;AACD,iBAAO5+G,KAAK,CAACmG,KAAD,EAAQ,KAAR,EAAe/qB,MAAf,CAAZ;AACD;;AAED,eAAO4kB,KAAK,CAACmG,KAAD,EAAQ,KAAR,EAAezpC,KAAf,CAAZ;;AAEF,WAAK,WAAL;AACE;AACA;AACA,2BAAkBoiJ,iEAAW,CAACpiJ,KAAK,CAAC8gJ,IAAP,EAAa9gJ,KAAK,CAAC+gJ,IAAnB,CAA7B;AAAA;AAAA,YAAKiB,GAAL;AAAA,YAAUD,IAAV;;AACA,eAAO;AACL,WAACt4G,KAAD,GAAS,CAAC;AAAEsjH,gBAAI,EAAE/K;AAAR,WAAD,EAAgB;AAAEgL,gBAAI,EAAEjL;AAAR,WAAhB;AADJ,SAAP;;AAGF,WAAK,UAAL;AACE;AACA;AACA,eAAOz+G,KAAK,CACV1mB,IAAI,KAAK,IAAT,GAAgB6sB,KAAK,GAAG,OAAxB,GAAkCA,KADxB,EAEV,OAFU,EAGV,MAAMzpC,KAAN,GAAc,GAHJ,CAAZ;;AAKF,WAAK,OAAL;AACE,YAAIuU,MAAM,GAAGvU,KAAb;;AACA,YAAIuU,MAAM,CAAC9N,MAAP,KAAkB,CAAtB,EAAyB;AACvB;AACA,iBAAO;AAAEqhI,cAAE,EAAE;AAAN,WAAP;AACD;;AACD,eAAO;AAAEglB,aAAG,EAAEv4I,MAAM,CAAC/Q,GAAP,CAAW4mC,CAAC,IAAI9G,KAAK,CAACmG,KAAD,EAAQ,KAAR,EAAeW,CAAf,CAArB;AAAP,SAAP;;AACF,WAAK,IAAL;AACE,eAAO9G,KAAK,CAACmG,KAAD,EAAQ,KAAR,EAAeyoG,QAAQ,CAAClyI,KAAD,CAAvB,CAAZ;;AACF,WAAK,KAAL;AACE,eAAOsjC,KAAK,CAACmG,KAAD,EAAQ,MAAR,EAAgByoG,QAAQ,CAAClyI,KAAD,CAAxB,CAAZ;;AACF,WAAK,IAAL;AACE,eAAOsjC,KAAK,CAACmG,KAAD,EAAQ,KAAR,EAAeyoG,QAAQ,CAAClyI,KAAD,CAAvB,CAAZ;;AACF,WAAK,KAAL;AACE,eAAOsjC,KAAK,CAACmG,KAAD,EAAQ,MAAR,EAAgByoG,QAAQ,CAAClyI,KAAD,CAAxB,CAAZ;;AACF,WAAK,MAAL;AACE,eAAOsjC,KAAK,CAACmG,KAAD,EAAQ,KAAR,EAAe,IAAf,CAAZ;;AACF,WAAK,OAAL;AACE,eAAOnG,KAAK,CAACmG,KAAD,EAAQ,KAAR,EAAe,KAAf,CAAZ;;AACF;AACE,cAAM,IAAIxkC,KAAJ,CAAU,yBAAyBk8I,EAAnC,CAAN;AA9GJ;AAgHD,GApJa,CAAd;AAsJA,SAAO;AAAEsL,WAAF;AAAW/N;AAAX,GAAP;AACD;AAEM,SAASuO,YAAT,CAAsBC,cAAtB,EAAsCzK,OAAtC,EAA+CjP,QAA/C,EAAyD;AAC9D,MAAI2Z,aAAa,GAAG1K,OAAO,CACxBj/I,GADiB,CACbwyF,MAAM,IAAI;AACb,QAAIA,MAAM,YAAYssD,6CAAtB,EAA8B;AAC5B,aAAOtsD,MAAP;AACD;;AAED,QAAI;AACF,aAAO,IAAIssD,6CAAJ,CACLtsD,MAAM,CAACmrD,EADF,EAELnrD,MAAM,CAACvsD,KAFF,EAGLusD,MAAM,CAACh2F,KAHF,EAILg2F,MAAM,CAACz0F,OAJF,EAKL+pJ,yDALK,CAAP;AAOD,KARD,CAQE,OAAOvhI,CAAP,EAAU;AACVoR,aAAO,CAACsrE,GAAR,CAAY,cAAZ,EAA4B18E,CAA5B;AACA,aAAO,IAAP;AACD;AACF,GAlBiB,EAmBjB7iB,MAnBiB,CAmBVw9C,OAnBU,CAApB;;AAqBA,MAAIyoG,aAAa,CAAC1mJ,MAAd,KAAyBg8I,OAAO,CAACh8I,MAArC,EAA6C;AAC3C;AACA,WAAO,IAAP;AACD;;AAED,MAAIohJ,OAAO,GAAGqF,cAAc,CAAC1pJ,GAAf,CAAmBskI,EAAE,IAAI;AACrC,QAAIxgH,MAAM,GAAG;AAAEwgH;AAAF,KAAb;;AACA,SAAK,IAAI9xC,MAAT,IAAmBm3D,aAAnB,EAAkC;AAChCn3D,YAAM,CAACrjD,IAAP,CAAYrrB,MAAZ;AACD;;AACD,WAAOA,MAAP;AACD,GANa,CAAd;AAQA,SAAOksH,QAAQ,CAAC,2BAAD,CAAR,CAAsC;AAAEqU;AAAF,GAAtC,CAAP;AACD;AAEM,SAASuF,gBAAT,CAA0BziB,OAA1B,EAAmC;AACxC,MAAI/0H,KAAK,GAAG,IAAIkF,GAAJ,EAAZ;AACAoqI,2DAAU,CAACyG,QAAQ,EAAT,EAAa,OAAb,EAAsB,CAAC75I,IAAD,EAAOg2H,EAAP,KAAc;AAC5C,QAAIA,EAAE,KAAK6C,OAAX,EAAoB;AAClB/0H,WAAK,CAACpT,GAAN,CAAUsP,IAAV;AACD;AACF,GAJS,CAAV;AAMA,SAAO6yI,wDAAS,CAAC,CAAC,GAAG/uI,KAAJ,CAAD,CAAhB;AACD;;AAED,UAAUy3I,gBAAV,CACE9K,KADF,EAEE+K,SAFF,EAGEC,WAHF,EAIE;AAAEC,WAAF;AAAaC;AAAb,CAJF,EAKE;AACA,MAAI73I,KAAK,GAAG+1I,QAAQ,EAApB;;AACA,OAAK,IAAIrsI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG1J,KAAK,CAACnP,MAA1B,EAAkC6Y,CAAC,EAAnC,EAAuC;AACrC,QAAIxN,IAAI,GAAG8D,KAAK,CAAC0J,CAAD,CAAhB;;AAEA,QACExN,IAAI,CAACywI,KAAL,KAAeA,KAAf,IACAzwI,IAAI,CAAC2wI,OAAL,CAAah8I,MAAb,KAAwB,CADxB,IAEAqL,IAAI,CAAC2wI,OAAL,CAAa,CAAb,EAAgBtB,EAAhB,KAAuB,KAFvB,IAGArvI,IAAI,CAAC2wI,OAAL,CAAa,CAAb,EAAgBh5G,KAAhB,KAA0B8jH,WAH1B,KAICE,WAAW,KAAKhuJ,SAAhB,IAA6BqS,IAAI,CAAC2wI,OAAL,CAAa,CAAb,EAAgBziJ,KAAhB,KAA0BytJ,WAJxD,KAKA37I,IAAI,CAAC0wI,UAAL,CAAgB/7I,MAAhB,KAA2B,CAL3B,IAMAqL,IAAI,CAAC0wI,UAAL,CAAgB,CAAhB,EAAmBrB,EAAnB,KAA0B,IAN1B,IAOArvI,IAAI,CAAC0wI,UAAL,CAAgB,CAAhB,EAAmB/4G,KAAnB,KAA6B6jH,SAP7B,KAQCE,SAAS,KAAK/tJ,SAAd,IAA2BqS,IAAI,CAAC0wI,UAAL,CAAgB,CAAhB,EAAmBxiJ,KAAnB,KAA6BwtJ,SARzD,CADF,EAUE;AACA,YAAM17I,IAAI,CAAC4K,SAAL,EAAN;AACD;AACF;;AAED,SAAO,IAAP;AACD;;AAED,UAAUgxI,mBAAV,CACEnL,KADF,EAEE+K,SAFF,EAGEC,WAHF,EAIE;AAAEC,WAAF;AAAaC;AAAb,CAJF,EAKE;AACA,MAAI73I,KAAK,GAAG+1I,QAAQ,EAApB;;AACA,OAAK,IAAIrsI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG1J,KAAK,CAACnP,MAA1B,EAAkC6Y,CAAC,EAAnC,EAAuC;AACrC,QAAIxN,IAAI,GAAG8D,KAAK,CAAC0J,CAAD,CAAhB;;AAEA,QACExN,IAAI,CAACywI,KAAL,KAAeA,KAAf,IACAzwI,IAAI,CAAC2wI,OAAL,CAAah8I,MAAb,KAAwB,CADxB,IAEAqL,IAAI,CAAC2wI,OAAL,CAAa,CAAb,EAAgBtB,EAAhB,KAAuB,KAFvB,IAGArvI,IAAI,CAAC2wI,OAAL,CAAa,CAAb,EAAgBh5G,KAAhB,KAA0B8jH,WAH1B,KAICE,WAAW,IAAI,IAAf,IAAuB37I,IAAI,CAAC2wI,OAAL,CAAa,CAAb,EAAgBziJ,KAAhB,KAA0BytJ,WAJlD,KAKA37I,IAAI,CAAC0wI,UAAL,CAAgB/7I,MAAhB,KAA2B,CAL3B,IAMAqL,IAAI,CAAC0wI,UAAL,CAAgB,CAAhB,EAAmBrB,EAAnB,KAA0B,OAN1B,IAOArvI,IAAI,CAAC0wI,UAAL,CAAgB,CAAhB,EAAmB/4G,KAAnB,KAA6B6jH,SAP7B,KAQCE,SAAS,IAAI,IAAb,IAAqB17I,IAAI,CAAC0wI,UAAL,CAAgB,CAAhB,EAAmBxiJ,KAAnB,CAAyByO,OAAzB,CAAiC++I,SAAjC,MAAgD,CAAC,CARvE,CADF,EAUE;AACA,YAAM17I,IAAI,CAAC4K,SAAL,EAAN;AACD;AACF;;AAED,SAAO,IAAP;AACD;;AAEM,eAAeixI,qBAAf,CAAqCC,SAArC,EAAgDrlH,EAAhD,EAAoD;AACzD,MAAIslH,UAAU,GAAGH,mBAAmB,CAAC,KAAD,EAAQ,gBAAR,EAA0B,OAA1B,EAAmC;AACrED,eAAW,EAAEllH;AADwD,GAAnC,CAAnB,CAEdxoC,IAFc,GAEPC,KAFV,CADyD,CAKzD;AACA;AACA;AACA;AACA;;AAEA,MAAI6tJ,UAAJ,EAAgB;AACd,QAAIlL,SAAS,GAAGkL,UAAU,CAACrL,UAAX,CAAsB,CAAtB,CAAhB;AACA,QAAIyJ,QAAQ,GAAG,CACb,GAAG1I,iEAAY,CACb,IAAIzoI,GAAJ,CAAQ6nI,SAAS,CAAC3iJ,KAAlB,CADa,EAEb,IAAI8a,GAAJ,CAAQ8yI,SAAS,CAAC1mJ,MAAV,CAAiBuC,IAAI,IAAIA,IAAI,KAAK,EAAlC,CAAR,CAFa,CADF,CAAf;;AAMA,QAAIqI,IAAI,mCACH+7I,UADG;AAENrL,gBAAU,EAAE,iCAAMG,SAAN;AAAiB3iJ,aAAK,EAAEisJ;AAAxB;AAFN,MAAR;;AAIA,UAAMJ,UAAU,CAAC/5I,IAAD,CAAhB;AACA,WAAO+7I,UAAU,CAAC/lB,EAAlB;AACD,GAdD,MAcO;AACL,QAAIh2H,IAAI,GAAG,IAAIlB,2CAAJ,CAAS;AAClB2xI,WAAK,EAAE,KADW;AAElBC,gBAAU,EAAE,CAAC;AAAErB,UAAE,EAAE,OAAN;AAAe13G,aAAK,EAAE,gBAAtB;AAAwCzpC,aAAK,EAAE4tJ;AAA/C,OAAD,CAFM;AAGlBnL,aAAO,EAAE,CAAC;AAAEtB,UAAE,EAAE,KAAN;AAAa13G,aAAK,EAAE,OAApB;AAA6BzpC,aAAK,EAAEuoC;AAApC,OAAD,CAHS;AAIlB84G,gBAAU,EAAEiK,yDAAWA;AAJL,KAAT,CAAX;AAMA,WAAOM,UAAU,CAAC95I,IAAI,CAAC4K,SAAL,EAAD,CAAjB;AACD;AACF;AAEM,SAASoxI,mBAAT,CAA6BrlB,YAA7B,EAA2C;AAChD,MAAI2b,MAAM,GAAG,IAAI9vI,GAAJ,EAAb;AAEAm0H,cAAY,CAAC91H,OAAb,CAAqBmqI,KAAK,IAAI;AAC5B,QAAIA,KAAK,CAAC5S,QAAV,EAAoB;AAClBka,YAAM,CAACn+I,GAAP,CAAW62I,KAAK,CAAC5S,QAAjB,EAA2B,CAACka,MAAM,CAAC1hJ,GAAP,CAAWo6I,KAAK,CAAC5S,QAAjB,KAA8B,CAA/B,IAAoC,CAA/D;AACD;AACF,GAJD;AAMA,MAAI6jB,MAAM,GAAGtlB,YAAY,CAAC/nI,MAAb,CAAoB,CAACqtJ,MAAD,EAASjR,KAAT,KAAmB;AAClD,QAAIoH,KAAK,GAAGE,MAAM,CAAC1hJ,GAAP,CAAWo6I,KAAK,CAAC5S,QAAjB,CAAZ;;AACA,QAAI,CAAC6jB,MAAD,IAAW7J,KAAK,GAAG6J,MAAM,CAAC7J,KAA9B,EAAqC;AACnC,aAAO;AAAEA,aAAF;AAASha,gBAAQ,EAAE4S,KAAK,CAAC5S;AAAzB,OAAP;AACD;;AACD,WAAO6jB,MAAP;AACD,GANY,EAMV,IANU,CAAb;AAQA,SAAOA,MAAM,CAAC7J,KAAP,IAAgB,CAAhB,GAAoB6J,MAAM,CAAC7jB,QAA3B,GAAsC,IAA7C;AACD;AAEM,eAAe8jB,mBAAf,CAAmCvlB,YAAnC,EAAiD;AACtD,MAAIA,YAAY,CAAChiI,MAAb,KAAwB,CAA5B,EAA+B;AAC7B;AACD;;AAED,MAAIwnJ,QAAQ,GAAG,IAAInzI,GAAJ,CAAQ2tH,YAAY,CAACjlI,GAAb,CAAiBs5I,KAAK,IAAIA,KAAK,CAACvS,KAAhC,CAAR,CAAf;AACA,MAAI2jB,QAAQ,GAAG,IAAIpzI,GAAJ,CAAQ2tH,YAAY,CAACjlI,GAAb,CAAiBs5I,KAAK,IAAIA,KAAK,CAAChV,EAAhC,CAAR,CAAf,CANsD,CAQtD;AACA;;AACA,MAAIkhB,UAAU,GAAG,IAAjB;;AACA,OAAK,IAAI1pI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmpH,YAAY,CAAChiI,MAAjC,EAAyC6Y,CAAC,EAA1C,EAA8C;AAC5C,QAAI0pI,UAAU,KAAK,IAAf,IAAuBvgB,YAAY,CAACnpH,CAAD,CAAZ,CAAgB7c,IAAhB,GAAuBumJ,UAAlD,EAA8D;AAC5DA,gBAAU,GAAGvgB,YAAY,CAACnpH,CAAD,CAAZ,CAAgB7c,IAA7B;AACD;AACF,GAfqD,CAiBtD;AACA;AACA;AACA;;;AACAumJ,YAAU,GAAGpyF,8DAAO,CAACoyF,UAAD,EAAa,GAAb,CAApB,CArBsD,CAuBtD;AACA;;AACA,MAAImF,QAAQ,GAAG,MAAMlc,uCAAA,CAClB;AACL;AACA,sEAHuB,EAInB,CAACmc,0DAAU,CAACpF,UAAD,CAAX,EAAyBoF,0DAAU,CAACpyG,8DAAO,CAACxhC,iEAAU,EAAX,EAAe,GAAf,CAAR,CAAnC,CAJmB,CAArB;AAOA,MAAI8rI,eAAe,GAAG+H,qEAAgB,CAACF,QAAD,EAAW,OAAX,CAAtC;AACA,MAAIG,eAAe,GAAG,IAAIh6I,GAAJ,EAAtB;;AAEA,OAAK,IAAIq2H,OAAT,IAAoBsjB,QAApB,EAA8B;AAC5B;AACA,QAAItjB,OAAJ,EAAa;AACX,UAAI4jB,WAAW,GAAG,CAACjI,eAAe,CAAC5jJ,GAAhB,CAAoBioI,OAApB,KAAgC,EAAjC,EAAqCliI,KAArC,CAA2C,CAA3C,EAA8C,CAA9C,CAAlB,CADW,CAGX;AACA;;AACA,UAAI8lJ,WAAW,CAACpyI,IAAZ,CAAiB2gI,KAAK,IAAIoR,QAAQ,CAACz1I,GAAT,CAAaqkI,KAAK,CAAChV,EAAnB,CAA1B,CAAJ,EAAuD;AACrD,YAAIoC,QAAQ,GAAG4jB,mBAAmB,CAACS,WAAD,CAAlC;;AACA,YAAIrkB,QAAJ,EAAc;AACZokB,yBAAe,CAACroJ,GAAhB,CAAoB0kI,OAApB,EAA6BT,QAA7B;AACD;AACF;AACF;AACF;;AAED,QAAM4L,iEAAa,CAAC,YAAY;AAC9B,qBAAgCwY,eAAe,CAACrmI,OAAhB,EAAhC,EAA2D;AAAA;;AAAA,UAAjD0iH,OAAiD;AAAA,UAAxCT,QAAwC;AACzD,UAAIskB,WAAW,GAAG,CAChB,GAAGnB,gBAAgB,CAAC,IAAD,EAAO,OAAP,EAAgB,UAAhB,EAA4B;AAC7CG,iBAAS,EAAE7iB;AADkC,OAA5B,CADH,CAAlB;;AAMA,UAAI6jB,WAAW,CAAC/nJ,MAAZ,GAAqB,CAAzB,EAA4B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,aAAK,IAAIqL,IAAT,IAAiB08I,WAAjB,EAA8B;AAC5B,cAAIx4D,MAAM,GAAGlkF,IAAI,CAAC2wI,OAAL,CAAa,CAAb,CAAb;;AACA,cAAIzsD,MAAM,CAACh2F,KAAP,KAAiBkqI,QAArB,EAA+B;AAC7B,kBAAM2hB,UAAU,iCACX/5I,IADW;AAEd2wI,qBAAO,EAAE,iCAAMzsD,MAAN;AAAch2F,qBAAK,EAAEkqI;AAArB;AAFK,eAAhB;AAID;AACF;AACF,OAhBD,MAgBO;AACL;AACA,YAAIukB,OAAO,GAAG,IAAI79I,2CAAJ,CAAS;AACrB2xI,eAAK,EAAE,IADc;AAErBC,oBAAU,EAAE,CAAC;AAAErB,cAAE,EAAE,IAAN;AAAY13G,iBAAK,EAAE,OAAnB;AAA4BzpC,iBAAK,EAAE2qI;AAAnC,WAAD,CAFS;AAGrB8X,iBAAO,EAAE,CAAC;AAAEtB,cAAE,EAAE,KAAN;AAAa13G,iBAAK,EAAE,UAApB;AAAgCzpC,iBAAK,EAAEkqI;AAAvC,WAAD,CAHY;AAIrBmX,oBAAU,EAAEiK,yDAAWA;AAJF,SAAT,CAAd;AAMA,cAAMM,UAAU,CAAC6C,OAAO,CAAC/xI,SAAR,EAAD,CAAhB;AACD;AACF;AACF,GAnCkB,CAAnB;AAoCD,C,CAED;;AACO,eAAegyI,eAAf,GAAiC;AACtC,MAAIC,SAAS,GAAG,MAAM1c,uCAAA,CACnB;AACL;AACA;AACA,oDAJwB,CAAtB;AAMA,MAAIkY,QAAQ,GAAG,MAAMlY,uCAAA,CAClB;AACL;AACA,6BAHuB,CAArB;AAMA,MAAI2c,UAAU,GAAG,IAAIt6I,GAAJ,EAAjB;;AACA,OAAK,IAAIgL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqvI,SAAS,CAACloJ,MAA9B,EAAsC6Y,CAAC,EAAvC,EAA2C;AACzCsvI,cAAU,CAAC3oJ,GAAX,CAAe0oJ,SAAS,CAACrvI,CAAD,CAAT,CAAawoH,EAA5B,EAAgC6mB,SAAS,CAACrvI,CAAD,CAAzC;AACD;;AAED,MAAIuvI,cAAc,GAAG,IAAIv6I,GAAJ,EAArB;;AACA,OAAK,IAAIgL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6qI,QAAQ,CAAC1jJ,MAA7B,EAAqC6Y,CAAC,EAAtC,EAA0C;AACxC,QAAIqE,IAAI,GAAGwmI,QAAQ,CAAC7qI,CAAD,CAAnB;AACA,QAAI1J,KAAK,GAAGi5I,cAAc,CAACnsJ,GAAf,CAAmBihB,IAAI,CAACknH,QAAxB,KAAqC,EAAjD;AACAj1H,SAAK,CAACtQ,IAAN,CAAWqe,IAAX;AACAkrI,kBAAc,CAAC5oJ,GAAf,CAAmB0d,IAAI,CAACknH,QAAxB,EAAkCj1H,KAAlC;AACD;;AAED,MAAIA,KAAK,GAAG,EAAZ,CA1BsC,CA4BtC;;AACA,oBAAkCi5I,cAAc,CAAC5mI,OAAf,EAAlC,EAA4D;AAAA;;AAAA,QAAlD0iH,OAAkD;AAAA,QAAzCmkB,UAAyC;AAC1D,QAAI38E,MAAM,GAAG28E,UAAU,CAAC5nJ,MAAX,CAAkB6nJ,CAAC,IAAI;AAClC,UAAIxkB,KAAK,GAAGqkB,UAAU,CAAClsJ,GAAX,CAAeqsJ,CAAC,CAAClkB,QAAjB,CAAZ;AAEA,aACE,CAACkkB,CAAC,CAACnyI,IAAF,KAAW,QAAX,IAAuBmyI,CAAC,CAACnyI,IAAF,IAAU,IAAlC,MACC,CAAC2tH,KAAD,IAAUwkB,CAAC,CAAC/uJ,KAAF,CAAQ8gC,WAAR,OAA0BypG,KAAK,CAAC9gI,IAAN,CAAWq3B,WAAX,EADrC,CADF;AAID,KAPY,CAAb;AAQA,QAAI0wC,QAAQ,GAAGs9E,UAAU,CAAC5nJ,MAAX,CAAkB6nJ,CAAC,IAAIA,CAAC,CAACnyI,IAAF,KAAW,UAAlC,CAAf;AACA,QAAI6lI,OAAO,GAAG,CAAC;AAAEtB,QAAE,EAAE,KAAN;AAAa13G,WAAK,EAAE,OAApB;AAA6BzpC,WAAK,EAAE2qI;AAApC,KAAD,CAAd;;AAEA,QAAIx4D,MAAM,CAAC1rE,MAAP,GAAgB,CAApB,EAAuB;AACrBmP,WAAK,CAACtQ,IAAN,CAAW;AACTi9I,aAAK,EAAE,IADE;AAETC,kBAAU,EAAE,CACV;AACErB,YAAE,EAAE,OADN;AAEE13G,eAAK,EAAE,gBAFT;AAGEzpC,eAAK,EAAEmyE,MAAM,CAAC3uE,GAAP,CAAWwrJ,SAAS,IAAIA,SAAS,CAAChvJ,KAAlC;AAHT,SADU,CAFH;AASTyiJ;AATS,OAAX;AAWD;;AAED,QAAIjxE,QAAQ,CAAC/qE,MAAT,GAAkB,CAAtB,EAAyB;AACvBmP,WAAK,GAAGA,KAAK,CAAC6nB,MAAN,CACN+zC,QAAQ,CAAChuE,GAAT,CAAawrJ,SAAS,KAAK;AACzBzM,aAAK,EAAE,IADkB;AAEzBC,kBAAU,EAAE,CACV;AACErB,YAAE,EAAE,UADN;AAEE13G,eAAK,EAAE,gBAFT;AAGEzpC,eAAK,EAAEgvJ,SAAS,CAAChvJ;AAHnB,SADU,CAFa;AASzByiJ;AATyB,OAAL,CAAtB,CADM,CAAR;AAaD;AACF,GAtEqC,CAwEtC;;;AACA,MAAIwM,QAAQ,GAAGN,SAAS,CACrBznJ,MADY,CACLwe,CAAC,IAAIA,CAAC,CAACwkH,QADF,EAEZxpI,MAFY,CAEL,CAAC8C,GAAD,EAAM+mI,KAAN,KAAgB;AACtB,QAAI2kB,GAAG,GAAG1rJ,GAAG,CAACd,GAAJ,CAAQ6nI,KAAK,CAACL,QAAd,KAA2B,IAAIpvH,GAAJ,EAArC;AACAo0I,OAAG,CAAC1sJ,GAAJ,CAAQ+nI,KAAK,CAACzC,EAAd;AACAtkI,OAAG,CAACyC,GAAJ,CAAQskI,KAAK,CAACL,QAAd,EAAwBglB,GAAxB;AACA,WAAO1rJ,GAAP;AACD,GAPY,EAOV,IAAI8Q,GAAJ,EAPU,CAAf;;AASA,oBAA8B26I,QAA9B,EAAwC;AAAA;;AAAA,QAA9BpgB,KAA8B;AAAA,QAAvBof,QAAuB;AACtCr4I,SAAK,CAACtQ,IAAN,CAAW;AACTi9I,WAAK,EAAE,IADE;AAETC,gBAAU,EAAE,CACV;AACErB,UAAE,EAAE,OADN;AAEE13G,aAAK,EAAE,OAFT;AAGEzpC,aAAK,EAAE,CAAC,GAAGiuJ,QAAJ;AAHT,OADU,CAFH;AASTxL,aAAO,EAAE,CACP;AACEtB,UAAE,EAAE,KADN;AAEE13G,aAAK,EAAE,UAFT;AAGEzpC,aAAK,EAAE6uI;AAHT,OADO;AATA,KAAX;AAiBD,GApGqC,CAsGtC;AACA;AACA;AACA;;;AACA,MAAIsgB,QAAQ,GAAGhZ,kEAAc,CAAC,UAAD,CAA7B;AACA,QAAML,iEAAa,CAAC,YAAY;AAC9B,SAAK,IAAIhkI,IAAT,IAAiB8D,KAAjB,EAAwB;AACtB,YAAMg2I,UAAU,CAAC;AACfrJ,aAAK,EAAEzwI,IAAI,CAACywI,KADG;AAEfC,kBAAU,EAAE1wI,IAAI,CAAC0wI,UAFF;AAGfC,eAAO,EAAE3wI,IAAI,CAAC2wI;AAHC,OAAD,CAAhB;AAKD;;AAED,UAAMxQ,4CAAA,CAAY,yBAAZ,EAAuC,EAAvC,CAAN;AACD,GAVkB,CAAnB;AAWAkE,oEAAc,CAACgZ,QAAD,CAAd;AACD,C;;;;;;;;;;;;ACtzBD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,UAAU,GAAGvtI,mBAAO,CAAC,0GAAD,CAA1B;;AAEA,eAAewtI,eAAf,CAA+BH,GAA/B,EAAoC;AAClC,MAAII,QAAQ,GAAGC,wDAAO,CAACL,GAAD,EAAM,WAAN,CAAtB;AACA,MAAIM,IAAI,GAAG,MAAMvd,uCAAA,CACd,gDAA+Cqd,QAAS,EAD1C,CAAjB;AAGA,MAAIrpJ,GAAG,GAAG,IAAI6U,GAAJ,CAAQo0I,GAAR,CAAV;;AACA,OAAK,IAAIzP,GAAT,IAAgB+P,IAAhB,EAAsB;AACpBvpJ,OAAG,CAACzD,GAAJ,CAAQi9I,GAAG,CAAC3X,EAAZ;AACD;;AACD,SAAO,CAAC,GAAG7hI,GAAJ,CAAP;AACD;;AAED,eAAewpJ,oBAAf,CAAoCP,GAApC,EAAyC;AACvC;AACA;AACA;AACA,SAAOQ,0DAAS,CACd,CAAC7oB,KAAD,EAAQiU,MAAR,KAAmB7I,oDAAA,CAAoB,cAApB,EAAoCpL,KAApC,EAA2CiU,MAA3C,CADL,EAEdoU,GAFc,EAGdpnB,EAAE,IAAK,SAAQA,EAAG,GAHJ,EAId6nB,KAAK,IAAK,+CAA8CA,KAAM,EAJhD,CAAhB;AAMD;;AAEM,eAAerH,uBAAf,CAAuC;AAC5CvT,OAD4C;AAE5CvE,SAF4C;AAG5CqX,SAH4C;AAI5C+H,iBAAe,GAAG,KAJ0B;AAK5CC,oBAAkB,GAAG;AALuB,CAAvC,EAMJ;AACD;AACA,MAAIC,QAAQ,GAAG,EAAf;AACA,MAAIC,UAAU,GAAGlI,OAAO,GAAGA,OAAO,CAACrkJ,GAAR,CAAYuyC,CAAC,IAAIA,CAAC,CAAC+xF,EAAnB,CAAH,GAA4B,EAApD;AACA,MAAIkoB,UAAU,GAAGxf,OAAO,GAAG,MAAM6e,eAAe,CAAC7e,OAAO,CAAChtI,GAAR,CAAYmzC,CAAC,IAAIA,CAAC,CAACmxF,EAAnB,CAAD,CAAxB,GAAmD,EAA3E;AAEA,MAAImoB,SAAS,GAAG,IAAIn1I,GAAJ,EAAhB;AACA,MAAI4wH,QAAQ,GAAG,MAAMuG,uCAAA,CAAO,4CAAP,CAArB,CAPC,CASD;AACA;;AACA,MAAI4V,OAAJ,EAAa;AACX,QAAIqI,cAAc,GAAGrI,OAAO,CACzB3gJ,MADkB,CACXogB,MAAM,IAAIA,MAAM,CAACijH,KADN,EAElB/mI,GAFkB,CAEd8jB,MAAM,IAAIA,MAAM,CAACwgH,EAFH,CAArB;AAIA,QAAIW,YAAY,GAAG,MAAMgnB,oBAAoB,CAACS,cAAD,CAA7C;;AAEA,SAAK,IAAI5wI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmpH,YAAY,CAAChiI,MAAjC,EAAyC6Y,CAAC,EAA1C,EAA8C;AAC5C2wI,eAAS,CAACztJ,GAAV,CAAcimI,YAAY,CAACnpH,CAAD,CAAZ,CAAgBirH,KAA9B;AACD;AACF,GArBA,CAuBD;AACA;;;AACA,QAAMuL,2DAAa,CAAC,YAAY;AAC9B,QAAIf,KAAJ,EAAW;AACT+a,cAAQ,GAAG,MAAM5oI,OAAO,CAAC0pD,GAAR,CACfmkE,KAAK,CAACvxI,GAAN,CAAU,MAAMswB,CAAN,IAAWm+G,qDAAA,CAAqBn+G,CAArB,CAArB,CADe,CAAjB;AAGD;;AAED,QAAI08G,OAAJ,EAAa;AACX,YAAMtpH,OAAO,CAAC0pD,GAAR,EACJ;AACA;AACA;AACA;AACAo/E,gBAAU,CAACxsJ,GAAX,CAAe,MAAMskI,EAAN,IAAY;AACzB,cAAMmK,qDAAA,CAAqB;AAAEnK;AAAF,SAArB,CAAN;AACD,OAFD,CALI,CAAN;AASD;;AAED,QAAI+f,OAAJ,EAAa;AACX,YAAM3gI,OAAO,CAAC0pD,GAAR,CACJi3E,OAAO,CAACrkJ,GAAR,CAAY,MAAMswB,CAAN,IAAW;AACrB,YAAIA,CAAC,CAACo1G,OAAN,EAAe;AACb;AACA;AACA,cAAIA,OAAO,GAAGwC,QAAQ,CAACvvH,IAAT,CAAcixH,IAAI,IAAIA,IAAI,CAACtF,EAAL,KAAYh0G,CAAC,CAACo1G,OAApC,CAAd;;AACA,cAAIA,OAAO,CAAC4C,SAAR,KAAsB,CAA1B,EAA6B;AAC3Bh4G,aAAC,CAACo2G,QAAF,GAAa,IAAb;AACD;AACF;;AAED,cAAM+H,qDAAA,CAAqBn+G,CAArB,CAAN;AACD,OAXD,CADI,CAAN;AAcD;AACF,GAnCkB,CAAnB,CAzBC,CA8DD;AACA;AACA;AACA;;AACA,MAAIq8H,QAAQ,GAAG,MAAMV,oBAAoB,CAACK,QAAD,CAAzC;AACA,MAAIM,UAAU,GAAG,MAAMX,oBAAoB,CAACM,UAAD,CAA3C;AACA,MAAIM,UAAU,GAAG,MAAMZ,oBAAoB,CAACO,UAAD,CAA3C,CApEC,CAsED;AACA;AACA;AACA;;AACA,MAAIM,WAAW,GAAGH,QAAlB;AACA,MAAII,aAAJ;AAEA,QAAMza,2DAAa,CAAC,YAAY;AAC9B,UAAM5uH,OAAO,CAAC0pD,GAAR,CAAYu/E,QAAQ,CAAC3sJ,GAAT,CAAaswB,CAAC,IAAI08H,kDAAA,CAAkB18H,CAAlB,CAAlB,CAAZ,CAAN,CAD8B,CAG9B;;AACAy8H,iBAAa,GAAG,CAAC,MAAMrpI,OAAO,CAAC0pD,GAAR,CACrBw/E,UAAU,CAAC5sJ,GAAX,CAAeswB,CAAC,IAAI08H,kDAAA,CAAkB18H,CAAlB,CAApB,CADqB,CAAP,EAEb5sB,MAFa,CAENw9C,OAFM,CAAhB;AAIA,UAAMx9B,OAAO,CAAC0pD,GAAR,CAAYy/E,UAAU,CAAC7sJ,GAAX,CAAeswB,CAAC,IAAI08H,kDAAA,CAAkB18H,CAAlB,CAApB,CAAZ,CAAN;AACD,GATkB,CAAnB;;AAWA,MAAI87H,eAAJ,EAAqB;AACnB;AACA;AACA,QAAIV,GAAG,GAAG,IAAIp0I,GAAJ,CAAQ,CAChB,IAAIi6H,KAAK,GAAGA,KAAK,CAAC7tI,MAAN,CAAa1E,GAAG,IAAIA,GAAG,CAAC0nI,QAAxB,EAAkC1mI,GAAlC,CAAsChB,GAAG,IAAIA,GAAG,CAACslI,EAAjD,CAAH,GAA0D,EAAnE,CADgB,EAEhB,IAAI+f,OAAO,GACPA,OAAO,CAAC3gJ,MAAR,CAAeogB,MAAM,IAAIA,MAAM,CAAC4iH,QAAhC,EAA0C1mI,GAA1C,CAA8C8jB,MAAM,IAAIA,MAAM,CAACwgH,EAA/D,CADO,GAEP,EAFJ,CAFgB,CAAR,CAAV;AAMA,UAAMlyH,sEAAA,CACJu6I,QAAQ,CAAC1yH,MAAT,CAAgB2yH,UAAhB,EAA4BlpJ,MAA5B,CAAmC41I,KAAK,IAAIoS,GAAG,CAACz2I,GAAJ,CAAQqkI,KAAK,CAAChV,EAAd,CAA5C,CADI,CAAN;AAGD;;AAED,MAAI+nB,kBAAJ,EAAwB;AACtB;AACA;AAEA,QAAIhI,OAAJ,EAAa;AACX,UAAI4I,WAAW,GAAG5I,OAAO,CAACrkJ,GAAR,CAAYuyC,CAAC,IAAIA,CAAC,CAACw0F,KAAnB,EAA0BrjI,MAA1B,CAAiCw9C,OAAjC,CAAlB;;AACA,UAAI+rG,WAAW,CAAChqJ,MAAZ,GAAqB,CAAzB,EAA4B;AAC1B,YAAIiqJ,WAAW,GAAG,IAAI51I,GAAJ,CAAQ,MAAMm3H,qDAAA,EAAd,CAAlB;AAEA,YAAI0e,WAAW,GAAG,CAAC,GAAGV,SAAJ,EAAe/oJ,MAAf,CAAsB4gI,EAAE,IAAI4oB,WAAW,CAACj4I,GAAZ,CAAgBqvH,EAAhB,CAA5B,CAAlB;;AAEA,YAAI6oB,WAAW,CAAClqJ,MAAZ,GAAqB,CAAzB,EAA4B;AAC1B2oJ,oBAAU,CAACvnF,IAAX,CAAgB,iBAAhB,EAAmC;AACjC8oF,uBADiC;AAEjCC,2BAAe,EAAEH;AAFgB,WAAnC;AAID;AACF;AACF;AACF;;AAED,SAAO;AACL1b,SAAK,EAAEub,WADF;AAELzI,WAAO,EAAE0I;AAFJ,GAAP;AAID,C;;;;;;;;;;;;;;;;;;;;;;;;;;ACrKD;;AAEA,eAAeM,QAAf,CAAwBzjB,IAAxB,EAA8B;AAC5B,SAAO6E,yCAAA,CAAS,8CAAT,EAAyD,CAAC7E,IAAD,CAAzD,CAAP;AACD;;AAED,eAAe0jB,qBAAf,CAAqCzjB,WAArC,EAAkD;AAChD,MAAIA,WAAW,CAAC9C,KAAhB,EAAuB;AACrB,0BAA4B,MAAM0H,yCAAA,CAChC,qDADgC,EAEhC,CAAC5E,WAAW,CAAC9C,KAAb,CAFgC,CAAlC;AAAA,QAAMsC,aAAN,mBAAMA,aAAN;AAAA,QAAqB/E,EAArB,mBAAqBA,EAArB;;AAIA,WAAO+E,aAAP;AACD;;AACD,SAAO,IAAP;AACD;;AAED,eAAekkB,aAAf,CAA6B1jB,WAA7B,EAA0C2jB,YAA1C,EAAwD;AACtD,2BAAqC,MAAM/e,yCAAA,CACzC,6CADyC,EAEzC,CAAC5E,WAAW,CAACnE,OAAb,CAFyC,CAA3C;AAAA,QAAmB+nB,aAAnB,oBAAQnlB,SAAR;;AAIA,2BAAmC,MAAMmG,yCAAA,CACvC,6CADuC,EAEvC,CAAC+e,YAAD,CAFuC,CAAzC;AAAA,QAAmBE,WAAnB,oBAAQplB,SAAR,CALsD,CAUtD;AACA;AACA;;;AACA,MAAImlB,aAAa,KAAKC,WAAtB,EAAmC;AACjC,UAAMjf,qDAAA,CAAqB;AAAEnK,QAAE,EAAEuF,WAAW,CAACvF,EAAlB;AAAsBoC,cAAQ,EAAE;AAAhC,KAArB,CAAN;AACA,WAAO,IAAP;AACD;;AACD,SAAO,KAAP;AACD;;AAEM,eAAeinB,WAAf,CAA2B9jB,WAA3B,EAAwC+jB,kBAAxC,EAA4D;AACjE,yBAAwB,MAAMnf,yCAAA,CAC5B,+CAD4B,EAE5B,CAAC5E,WAAW,CAACnE,OAAb,CAF4B,CAA9B;AAAA,MAAUmoB,SAAV,oBAAMvpB,EAAN,CADiE,CAMjE;;;AACA,MAAIuF,WAAW,CAACikB,SAAhB,EAA2B;AACzB,QAAI7R,GAAG,GAAG,MAAMxN,yCAAA,CACb;AACP;AACA;AACA;AACA,OALoB,EAMd,CAAC5E,WAAW,CAACikB,SAAb,CANc,CAAhB;;AASA,QAAI7R,GAAG,CAAC5S,aAAR,EAAuB;AACrB,UAAI4S,GAAG,CAAC3X,EAAJ,KAAWuF,WAAW,CAAC9C,KAA3B,EAAkC;AAChC;AACA;AACA;AACA;AACA,cAAM0H,qDAAA,CAAqB;AAAEnK,YAAE,EAAEuF,WAAW,CAACvF,EAAlB;AAAsByC,eAAK,EAAE;AAA7B,SAArB,CAAN;AACA,eAAO;AAAEzC,YAAE,EAAEuF,WAAW,CAACvF,EAAlB;AAAsByC,eAAK,EAAE;AAA7B,SAAP;AACD,OARoB,CAUrB;AACA;;;AACA,aAAO,IAAP;AACD;AACF;;AAED,QAAMzC,EAAE,GAAG,MAAMmK,qDAAA,CAAqB;AACpC/I,WAAO,EAAEkoB,kBAD2B;AAEpC1lJ,UAAM,EAAE,CAAC2hI,WAAW,CAAC3hI,MAFe;AAGpC6+H,SAAK,EAAE8mB,SAH6B;AAIpC5uJ,QAAI,EAAE4qI,WAAW,CAAC5qI,IAJkB;AAKpCqrI,eAAW,EAAET,WAAW,CAACvF,EALW;AAMpC8F,SAAK,EAAEP,WAAW,CAACO,KAAZ,IAAqB,IANQ;AAOpC4D,WAAO,EAAE;AAP2B,GAArB,CAAjB;AAUA,QAAMS,qDAAA,CAAqB;AAAEnK,MAAE,EAAEuF,WAAW,CAACvF,EAAlB;AAAsBgG,eAAW,EAAEhG;AAAnC,GAArB,CAAN;AACA,QAAMypB,eAAe,GAAG,MAAMR,aAAa,CAAC1jB,WAAD,EAAc+jB,kBAAd,CAA3C;AAEA;AACEtpB,MAAE,EAAEuF,WAAW,CAACvF,EADlB;AAEEgG,eAAW,EAAEhG;AAFf,KAGMypB,eAAe,GAAG;AAAErnB,YAAQ,EAAE;AAAZ,GAAH,GAAwB,EAH7C;AAKD;AAEM,eAAesnB,cAAf,CAA8BnkB,WAA9B,EAA2C;AAChD,MAAIokB,aAAa,GAAG,MAAMxf,kDAAA,CAAkB5E,WAAW,CAACS,WAA9B,CAA1B;;AACA,MAAI2jB,aAAa,CAACC,QAAlB,EAA4B;AAC1B;AACA;AACA;AACA,UAAMzf,qDAAA,CAAqB;AACzBnK,QAAE,EAAEuF,WAAW,CAACS,WADS;AAEzBA,iBAAW,EAAE,IAFY;AAGzBvD,WAAK,EAAE;AAHkB,KAArB,CAAN;AAKD,GATD,MASO;AACL,UAAM0H,qDAAA,CAAqB;AAAEnK,QAAE,EAAEuF,WAAW,CAACS;AAAlB,KAArB,CAAN;AACD;;AACD,QAAMmE,qDAAA,CAAqB;AAAEnK,MAAE,EAAEuF,WAAW,CAACvF,EAAlB;AAAsBgG,eAAW,EAAE;AAAnC,GAArB,CAAN;AACA,SAAO;AAAEhG,MAAE,EAAEuF,WAAW,CAACvF,EAAlB;AAAsBgG,eAAW,EAAE;AAAnC,GAAP;AACD;AAEM,eAAe6jB,cAAf,CAA8BtkB,WAA9B,EAA2C+jB,kBAA3C,EAA+D;AACpE,MAAI7mB,KAAK,GAAG,MAAMsmB,QAAQ,CAACxjB,WAAW,CAACnE,OAAb,CAA1B;AAEA,QAAM+I,qDAAA,CAAqB;AACzBnK,MAAE,EAAEuF,WAAW,CAACS,WADS;AAEzB5E,WAAO,EAAEkoB,kBAFgB;AAGzB;AACA;AACA7mB,SAAK,EAAEA,KAAK,CAACzC,EALY;AAMzBrlI,QAAI,EAAE4qI,WAAW,CAAC5qI,IANO;AAOzBmrI,SAAK,EAAEP,WAAW,CAACO,KAPM;AAQzBliI,UAAM,EAAE,CAAC2hI,WAAW,CAAC3hI;AARI,GAArB,CAAN;AAWA,QAAM6lJ,eAAe,GAAG,MAAMR,aAAa,CAAC1jB,WAAD,EAAc+jB,kBAAd,CAA3C;;AACA,MAAIG,eAAJ,EAAqB;AACnB,WAAO;AAAEzpB,QAAE,EAAEuF,WAAW,CAACvF,EAAlB;AAAsBoC,cAAQ,EAAE;AAAhC,KAAP;AACD;AACF;AAEM,eAAe0nB,QAAf,CAAwBvkB,WAAxB,EAAqC;AAC1C,MAAI+jB,kBAAkB,GAAG,MAAMN,qBAAqB,CAACzjB,WAAD,CAApD;;AAEA,MAAI+jB,kBAAJ,EAAwB;AACtB,WAAOD,WAAW,CAAC9jB,WAAD,EAAc+jB,kBAAd,CAAlB;AACD;AACF;AAEM,eAAeS,QAAf,CAAwBxkB,WAAxB,EAAqC;AAC1C,MAAIA,WAAW,CAACS,WAAhB,EAA6B;AAC3B,UAAM0jB,cAAc,CAACnkB,WAAD,CAApB;AACD;AACF;AAEM,eAAeykB,QAAf,CAAwBzkB,WAAxB,EAAqC;AAC1C,QAAM+jB,kBAAkB,GAAG,MAAMN,qBAAqB,CAACzjB,WAAD,CAAtD;;AAEA,MAAI+jB,kBAAkB,IAAI,CAAC/jB,WAAW,CAACS,WAAvC,EAAoD;AAClD,WAAOqjB,WAAW,CAAC9jB,WAAD,EAAc+jB,kBAAd,CAAlB;AACD;;AAED,MAAI,CAACA,kBAAD,IAAuB/jB,WAAW,CAACS,WAAvC,EAAoD;AAClD,WAAO0jB,cAAc,CAACnkB,WAAD,CAArB;AACD;;AAED,MAAI+jB,kBAAkB,IAAI/jB,WAAW,CAACS,WAAtC,EAAmD;AACjD,WAAO6jB,cAAc,CAACtkB,WAAD,EAAc+jB,kBAAd,CAArB;AACD;AACF,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5JD;AAEO,MAAMW,gBAAgB,mCACxBC,wDADwB;AAG3BC,YAAU,CAACxpB,YAAD,EAAekd,GAAf,EAAoBhZ,MAApB,EAA4B;AACpC,WAAOlE,YAAP,CADoC,CAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACD,GApC0B;;AAsC3BypB,cAAY,CAAC7kB,WAAD,EAAc;AACxB,QAAI74H,MAAM,GAAG,EAAb;;AACA,QAAI,QAAQ64H,WAAZ,EAAyB;AACvB74H,YAAM,CAACszH,EAAP,GAAYuF,WAAW,CAACvF,EAAxB;AACD;;AACD,QAAI,gBAAgBuF,WAApB,EAAiC;AAC/B74H,YAAM,CAAC44H,IAAP,GAAcC,WAAW,CAACkE,UAA1B;AACD;;AACD,QAAI,YAAYlE,WAAhB,EAA6B;AAC3B74H,YAAM,CAAC9I,MAAP,GAAgB2hI,WAAW,CAAC3hI,MAA5B;AACD;;AACD,QAAI,cAAc2hI,WAAlB,EAA+B;AAC7B74H,YAAM,CAACgrI,WAAP,GAAqBnS,WAAW,CAACxC,QAAjC;AACD;;AACD,QAAI,oBAAoBwC,WAAxB,EAAqC;AACnC74H,YAAM,CAAC29I,oBAAP,GAA8B9kB,WAAW,CAAC8R,cAA1C;AACD;;AACD,QAAI,iBAAiB9R,WAArB,EAAkC;AAChC74H,YAAM,CAAC01H,QAAP,GAAkBmD,WAAW,CAACiE,WAA9B;AACD;;AACD,QAAI,UAAUjE,WAAd,EAA2B;AACzB74H,YAAM,CAAC/R,IAAP,GAAc4qI,WAAW,CAAC5qI,IAA1B;AACD;;AACD,QAAI,WAAW4qI,WAAf,EAA4B;AAC1B74H,YAAM,CAACo5H,KAAP,GAAeP,WAAW,CAACO,KAA3B;AACD;;AACD,QAAI,iBAAiBP,WAArB,EAAkC;AAChC74H,YAAM,CAAC49I,YAAP,GAAsB/kB,WAAW,CAACoE,WAAlC;AACD;;AACD,QAAI,iBAAiBpE,WAArB,EAAkC;AAChC74H,YAAM,CAAC69I,cAAP,GAAwBhlB,WAAW,CAACS,WAApC;AACD;;AACD,QAAI,aAAaT,WAAjB,EAA8B;AAC5B74H,YAAM,CAACg9H,OAAP,GAAiBnE,WAAW,CAACmE,OAA7B;AACD;;AACD,WAAOh9H,MAAP;AACD;;AA1E0B,EAAtB;AA6EA,MAAM89I,YAAY,mCACpBN,oDADoB;AAGvBC,YAAU,CAAC/oB,OAAD,EAAU;AAClB,WAAO;AACLpB,QAAE,EAAEoB,OAAO,CAACpB,EADP;AAELr+H,UAAI,EAAEy/H,OAAO,CAACz/H,IAFT;AAGLmT,UAAI,EAAEssH,OAAO,CAACtsH,IAHT;AAILkvH,eAAS,EAAE5C,OAAO,CAAC4C,SAAR,GAAoB,IAApB,GAA2B,KAJjC;AAKLE,YAAM,EAAE9C,OAAO,CAAC8C,MAAR,GAAiB,IAAjB,GAAwB;AAL3B,KAAP;AAOD,GAXsB;;AAavBkmB,cAAY,CAAChpB,OAAD,EAAU;AACpB,QAAI10H,MAAM,qBAAQ00H,OAAR,CAAV;;AACA,QAAI,eAAeA,OAAnB,EAA4B;AAC1B10H,YAAM,CAACs3H,SAAP,GAAmB5C,OAAO,CAAC4C,SAAR,GAAoB,CAApB,GAAwB,CAA3C;AACD;;AACD,QAAI,YAAY5C,OAAhB,EAAyB;AACvB10H,YAAM,CAACw3H,MAAP,GAAgB9C,OAAO,CAAC8C,MAAR,GAAiB,CAAjB,GAAqB,CAArC;AACD;;AACD,WAAOx3H,MAAP;AACD;;AAtBsB,EAAlB;AAyBA,MAAM+9I,aAAa,mCACrBP,qDADqB;AAGxBC,YAAU,CAAC/nB,QAAD,EAAW;AACnB,WAAO;AACLpC,QAAE,EAAEoC,QAAQ,CAACpC,EADR;AAELr+H,UAAI,EAAEygI,QAAQ,CAACzgI,IAFV;AAGL8iI,eAAS,EAAErC,QAAQ,CAACqC,SAAT,GAAqB,IAArB,GAA4B,KAHlC;AAILC,cAAQ,EAAEtC,QAAQ,CAACsoB;AAJd,KAAP;AAMD,GAVuB;;AAYxBN,cAAY,CAAChoB,QAAD,EAAW;AACrB,QAAgB3iI,CAAhB,GAAiC2iI,QAAjC,CAAMsC,QAAN;AAAA,QAAsBh4H,MAAtB,4BAAiC01H,QAAjC;;AACA,QAAI,eAAeA,QAAnB,EAA6B;AAC3B11H,YAAM,CAAC+3H,SAAP,GAAmBrC,QAAQ,CAACqC,SAAT,GAAqB,CAArB,GAAyB,CAA5C;AACD;;AACD,QAAI,cAAcrC,QAAlB,EAA4B;AAC1B11H,YAAM,CAACg+I,SAAP,GAAmBtoB,QAAQ,CAACsC,QAA5B;AACD;;AACD,WAAOh4H,MAAP;AACD;;AArBuB,EAAnB;AAwBA,MAAMi+I,kBAAkB,mCAC1BT,0DAD0B;AAG7BC,YAAU,CAACpoB,KAAD,EAAQ;AAChB,WAAO;AACL/B,QAAE,EAAE+B,KAAK,CAAC/B,EADL;AAELr+H,UAAI,EAAEogI,KAAK,CAACpgI,IAFP;AAGL8iI,eAAS,EAAE1C,KAAK,CAAC0C,SAAN,GAAkB,IAAlB,GAAyB,KAH/B;AAILQ,gBAAU,EAAElD,KAAK,CAACkD,UAAN,CAAiBvpI,GAAjB,CAAqB+uJ,aAAa,CAACN,UAAnC;AAJP,KAAP;AAMD,GAV4B;;AAY7BC,cAAY,CAACroB,KAAD,EAAQ;AAClB,QAAIr1H,MAAM,qBAAQq1H,KAAR,CAAV;;AACA,QAAI,eAAeA,KAAnB,EAA0B;AACxBr1H,YAAM,CAAC+3H,SAAP,GAAmB1C,KAAK,CAAC0C,SAAN,GAAkB,CAAlB,GAAsB,CAAzC;AACD;;AACD,QAAI,gBAAgB1C,KAApB,EAA2B;AACzBr1H,YAAM,CAACu4H,UAAP,GAAoBlD,KAAK,CAACkD,UAAN,CAAiBvpI,GAAjB,CAAqB+uJ,aAAa,CAACL,YAAnC,CAApB;AACD;;AACD,WAAO19I,MAAP;AACD;;AArB4B,EAAxB;AAwBA,MAAMk+I,UAAU,mCAClBV,kDADkB;AAGrBC,YAAU,CAAC1nB,KAAD,EAAQ;AAChB,WAAO;AACLzC,QAAE,EAAEyC,KAAK,CAACzC,EADL;AAELr+H,UAAI,EAAE8gI,KAAK,CAAC9gI,IAFP;AAGLygI,cAAQ,EAAEK,KAAK,CAACL,QAHX;AAIL2C,mBAAa,EAAEtC,KAAK,CAACsC;AAJhB,KAAP;AAMD,GAVoB;;AAYrBqlB,cAAY,CAAC3nB,KAAD,EAAQ;AAClB;AACA,WAAOA,KAAP;AACD;;AAfoB,EAAhB;AAkBA,MAAMooB,cAAc,mCACtBX,sDADsB;AAGzBC,YAAU,CAACngJ,IAAD,EAAO;AACf,QAAMq6I,SAAN,GAA+Br6I,IAA/B,CAAMq6I,SAAN;AAAA,QAAoB33I,MAApB,4BAA+B1C,IAA/B;;AACA,WAAO0C,MAAP;AACD,GANwB;;AAQzB09I,cAAY,CAACpgJ,IAAD,EAAO;AACjB,WAAOA,IAAP;AACD;;AAVwB,EAApB,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1KP;AACA;AAQA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAwB+P,mBAAO,CAAC,+EAAD,CAA/B;AAAA,MAAQ+wI,WAAR,YAAQA,WAAR;;AACA,MAAMxD,UAAU,GAAGvtI,mBAAO,CAAC,uGAAD,CAA1B;;AAEA,IAAIgxI,WAAW,GAAG,KAAlB,C,CAEA;;AACA,SAASC,QAAT,CAAkBnpI,GAAlB,EAAuBm9D,IAAvB,EAA6B;AAC3B,SAAO;AAAElqE,QAAI,EAAE,UAAR;AAAoB8xB,WAAO,EAAE/kB,GAA7B;AAAkCm9D;AAAlC,GAAP;AACD,C,CAED;AACA;AACA;AACA;;;AACA,SAASisE,YAAT,CAAsBxf,OAAtB,EAA+B;AAC7B,SAAOh0I,IAAI,IAAI;AACb,WAAOs2I,6DAAU,CACf,YAAY;AACV,UAAImd,eAAe,GAAGC,4DAAQ,GAAGpjJ,SAAX,CAAqBwN,QAArB,EAAtB;AACA,UAAI7I,MAAM,GAAG,MAAM++H,OAAO,CAACh0I,IAAD,CAA1B;AAEA,UAAIiwJ,IAAI,GAAG,MAAMvd,uCAAA,CACf,gEADe,EAEf,CAAC+gB,eAAD,CAFe,CAAjB,CAJU,CASV;;AACA,UAAI5D,UAAU,CAAC8D,aAAX,KAA6B,CAAjC,EAAoC;AAClC9D,kBAAU,CAACvnF,IAAX,CAAgB,YAAhB,EAA8B;AAC5BjrD,cAAI,EAAE,SADsB;AAE5BwvI,gBAAM,EAAEoD,IAAI,CAAChsJ,GAAL,CAASi8I,GAAG,IAAIA,GAAG,CAAC0T,OAApB;AAFoB,SAA9B;AAID;;AAED,aAAO3+I,MAAP;AACD,KAnBc,EAoBf;AAAE4+I,kBAAY,EAAE;AAAhB,KApBe,CAAjB;AAsBD,GAvBD;AAwBD;;AAED,IAAI5f,QAAQ,GAAG,EAAf;;AAEA,eAAe6f,aAAf,CAA6BroJ,KAA7B,EAAoC;AAClC,MAAI,CAACA,KAAK,CAAC4U,KAAN,CAAY,eAAZ,CAAL,EAAmC;AACjC,UAAMkzI,QAAQ,CAAC,wCAAwC9nJ,KAAzC,CAAd;AACD;;AAED,MAAI,CAAC6nJ,WAAL,EAAkB;AAChB,+BAAqB,MAAMrf,QAAQ,CAAC,mBAAD,CAAR,EAA3B;AAAA,QAAM3zI,KAAN,wBAAMA,KAAN;AAAA,QAAaS,GAAb,wBAAaA,GAAb;;AACA,QAAI+5E,KAAK,GAAGq6D,oDAAA,CAAiB70I,KAAjB,EAAwBS,GAAxB,CAAZ;;AACA,QAAI,CAAC+5E,KAAK,CAACniE,QAAN,CAAelN,KAAf,CAAL,EAA4B;AAC1B,YAAM8nJ,QAAQ,CAAC,iCAAiC9nJ,KAAlC,CAAd;AACD;AACF;AACF;;AAED,eAAesoJ,uBAAf,CAAuCtgF,KAAvC,EAA8C80D,EAA9C,EAAkD;AAChD,MAAIA,EAAE,IAAI,IAAV,EAAgB;AACd,UAAMgrB,QAAQ,CAAE,GAAE9/E,KAAM,2BAAV,CAAd;AACD;;AAED,MAAIysE,GAAG,GAAG,MAAMxN,yCAAA,CAAS,+CAAT,EAA0D,CACxEnK,EADwE,CAA1D,CAAhB;;AAIA,MAAI,CAAC2X,GAAL,EAAU;AACR,UAAMqT,QAAQ,CAAE,GAAE9/E,KAAM,eAAc80D,EAAG,kBAA3B,CAAd;AACD;;AAED,MAAI2X,GAAG,CAAClT,SAAJ,KAAkB,CAAtB,EAAyB;AACvB,UAAMumB,QAAQ,CAAE,GAAE9/E,KAAM,eAAc80D,EAAG,8BAA3B,CAAd;AACD;AACF;;AAED,IAAIyrB,YAAY,GAAG,IAAnB;;AAEA/f,QAAQ,CAAC,wBAAD,CAAR,GAAqC,kBAAiB;AACpD,MAAI+f,YAAJ,EAAkB;AAChB,UAAMT,QAAQ,CAAC,qDAAD,CAAd;AACD,GAHmD,CAKpD;AACA;AACA;;;AACA,MAAID,WAAJ,EAAiB;AACf5gB,wDAAA,CAAoB,MAAM;AACxB,aAAO,IAAI/qH,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtCmsI,oBAAY,GAAG;AAAEpsI,iBAAF;AAAWC;AAAX,SAAf;AACD,OAFM,CAAP;AAGD,KAJD;AAKD,GAND,MAMO;AACL0uH,+DAAa,CAAC,MAAM;AAClB,aAAO,IAAI5uH,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtCmsI,oBAAY,GAAG;AAAEpsI,iBAAF;AAAWC;AAAX,SAAf;AACD,OAFM,CAAP;AAGD,KAJY,CAAb;AAKD;AACF,CArBD;;AAuBAosH,QAAQ,CAAC,sBAAD,CAAR,GAAmC,kBAAiB;AAClD,MAAI,CAAC+f,YAAL,EAAmB;AACjB,UAAMT,QAAQ,CAAC,8CAAD,CAAd;AACD;;AAEDS,cAAY,CAACpsI,OAAb;AACAosI,cAAY,GAAG,IAAf;AACD,CAPD;;AASA/f,QAAQ,CAAC,iBAAD,CAAR,GAA8B,gBAAe;AAAE1L;AAAF,CAAf,EAAuB;AACnD,aAAwBgP,+CAAA,MAAoB,EAA5C;AAAA,MAAU0c,SAAV,QAAM1rB,EAAN;;AAEA,MAAI0rB,SAAS,KAAK1rB,EAAlB,EAAsB;AACpBsnB,cAAU,CAACvnF,IAAX,CAAgB,YAAhB;;AACA,+BAAgB,MAAM2rE,QAAQ,CAAC,aAAD,CAAR,CAAwB;AAAE1L;AAAF,KAAxB,CAAtB;AAAA,QAAM3+F,KAAN,wBAAMA,KAAN;;AAEA,QAAI,CAACA,KAAL,EAAY;AACVimH,gBAAU,CAACvnF,IAAX,CAAgB,aAAhB;AACD,KAFD,MAEO;AACLunF,gBAAU,CAACvnF,IAAX,CAAgB,cAAhB;;AAEA,UAAI1+B,KAAK,KAAK,wBAAV,IAAsCA,KAAK,KAAK,kBAApD,EAAwE;AACtE,cAAM,IAAIlkC,KAAJ,CACJ,4DADI,CAAN;AAGD,OAJD,MAIO,IAAIkkC,KAAK,KAAK,kBAAd,EAAkC;AACvC,cAAM,IAAIlkC,KAAJ,CACJ,aACE6iI,EADF,GAEE,0FAHE,CAAN;AAKD,OANM,MAMA;AACL,cAAM,IAAI7iI,KAAJ,CAAU,wCAAwC6iI,EAAxC,GAA6C,IAAvD,CAAN;AACD;AACF;AACF;AACF,CA3BD;;AA6BA0L,QAAQ,CAAC,kBAAD,CAAR,GAA+B,gBAAe;AAAE7L;AAAF,CAAf,EAA+B;AAC5D;AACA,QAAM6L,QAAQ,CAAC,cAAD,CAAR,EAAN,CAF4D,CAI5D;;AACA,QAAMA,QAAQ,CAAC,eAAD,CAAR,CAA0B;AAAE7L,cAAF;AAAc8rB,eAAW,EAAE;AAA3B,GAA1B,CAAN,CAL4D,CAO5D;;AACA,QAAMxhB,4CAAA,CAAY,4CAAZ,CAAN;AACA,QAAMA,4CAAA,CAAY,iDAAZ,CAAN,CAT4D,CAW5D;;AACAkE,8DAAc,CAAC,QAAD,CAAd;AAEAiZ,YAAU,CAACvnF,IAAX,CAAgB,cAAhB;AACAgrF,aAAW,GAAG,IAAd;AACD,CAhBD;;AAkBArf,QAAQ,CAAC,mBAAD,CAAR,GAAgC,kBAAiB;AAC/CoC,4CAAA,GAAY8d,cAAZ,GAD+C,CAG/C;AACA;AACA;;AACA,wBAAa5c,+CAAA,EAAb;AAAA,MAAMhP,EAAN,mBAAMA,EAAN;;AACA,QAAM0L,QAAQ,CAAC,cAAD,CAAR,EAAN;AACA,QAAMA,QAAQ,CAAC,aAAD,CAAR,CAAwB;AAAE1L;AAAF,GAAxB,CAAN;AAEA,QAAM0L,QAAQ,CAAC,mBAAD,CAAR,EAAN;AACA,QAAMoC,wDAAA,EAAN;AAEA,QAAM+d,qDAAA,GAAsBC,KAAtB,CAA4BhvI,GAAG,IAAI,CAAE,CAArC,CAAN;AAEAwqI,YAAU,CAACvnF,IAAX,CAAgB,eAAhB;AACAgrF,aAAW,GAAG,KAAd;AACD,CAjBD;;AAmBArf,QAAQ,CAAC,kBAAD,CAAR,GAA+B,kBAAiB;AAC9C,MAAIqf,WAAJ,EAAiB;AACf,2BAAa/b,+CAAA,EAAb;AAAA,QAAMhP,EAAN,oBAAMA,EAAN;;AAEA,UAAM0L,QAAQ,CAAC,cAAD,CAAR,EAAN;AACA,UAAMA,QAAQ,CAAC,eAAD,CAAR,CAA0B;AAAE1L;AAAF,KAA1B,CAAN;AACAsnB,cAAU,CAACvnF,IAAX,CAAgB,cAAhB;AACD;;AAEDgrF,aAAW,GAAG,KAAd;AACD,CAVD;;AAYArf,QAAQ,CAAC,WAAD,CAAR,GAAwB,gBAAe;AAAE3M;AAAF,CAAf,EAA0B;AAChD,SAAO4P,uEAAQ,CAAC5P,KAAD,CAAf;AACD,CAFD;;AAIA2M,QAAQ,CAAC,mBAAD,CAAR,GAAgC,kBAAiB;AAC/C,8BAAqB,MAAMA,QAAQ,CAAC,mBAAD,CAAR,EAA3B;AAAA,MAAM3zI,KAAN,yBAAMA,KAAN;AAAA,MAAaS,GAAb,yBAAaA,GAAb;;AACA,SAAOo0I,oDAAA,CAAiB70I,KAAjB,EAAwBS,GAAxB,CAAP;AACD,CAHD;;AAKAkzI,QAAQ,CAAC,kBAAD,CAAR,GAA+B,gBAAe;AAAExoI;AAAF,CAAf,EAA0B;AACvD,QAAMqoJ,aAAa,CAACroJ,KAAD,CAAnB;AAEA,MAAI+oI,MAAM,GAAG,MAAM9B,wDAAA,EAAnB;AACA,MAAIM,SAAS,GAAGmC,4DAAA,CAAyB1pI,KAAzB,CAAhB;;AAEA,WAAShL,KAAT,CAAeyJ,IAAf,EAAqB;AACnB,QAAI2gC,CAAC,GAAGwrG,0CAAA,GAAYie,YAAZ,CAAyBthB,SAAzB,EAAoC9oI,IAApC,CAAR;AACA,WAAO2gC,CAAC,KAAK,EAAN,GAAW,CAAX,GAAeA,CAAtB;AACD,GATsD,CAWvD;AACA;;;AACA,SAAO;AACLp/B,SADK;AAEL8oJ,mBAAe,EAAE9zJ,KAAK,CAAC,iBAAD,CAFjB;AAGL+zJ,sBAAkB,EAAE/zJ,KAAK,CAAC,sBAAD,CAHpB;AAILg0J,gBAAY,EAAEh0J,KAAK,CAAC,UAAD,CAJd;AAKLi0J,iBAAa,EAAEj0J,KAAK,CAAC,gBAAD,CALf;AAMLg2I,YAAQ,EAAEh2I,KAAK,CAAC,WAAD,CANV;AAQLk0J,iBAAa,EAAEl0J,KAAK,CAAC,iBAAD,CARf;AASLm0J,eAAW,EAAEn0J,KAAK,CAAC,cAAD,CATb;AAULo0J,cAAU,EAAEp0J,KAAK,CAAC,aAAD,CAVZ;AAWLq0J,gBAAY,EAAEr0J,KAAK,CAAC,gBAAD,CAXd;AAaLq2I,kBAAc,EAAEtC,MAAM,CAACvwI,GAAP,CAAWqmI,KAAK,IAAI;AAClC,UAAIA,KAAK,CAAC0C,SAAV,EAAqB;AACnB,+CACKkmB,8DAAkB,CAACR,UAAnB,CAA8BpoB,KAA9B,CADL;AAEEyqB,kBAAQ,EAAEt0J,KAAK,CAAC,cAAD,CAFjB;AAIE+sI,oBAAU,EAAElD,KAAK,CAACkD,UAAN,CAAiBvpI,GAAjB,CAAqB8oI,GAAG,oCAC/BimB,yDAAa,CAACN,UAAd,CAAyB3lB,GAAzB,CAD+B;AAElCgoB,oBAAQ,EAAEt0J,KAAK,CAAE,cAAassI,GAAG,CAACxE,EAAG,EAAtB;AAFmB,YAAxB;AAJd;AASD;;AAED,6CACK2qB,8DAAkB,CAACR,UAAnB,CAA8BpoB,KAA9B,CADL;AAEEuE,gBAAQ,EAAEpuI,KAAK,CAAE,gBAAe6pI,KAAK,CAAC/B,EAAG,EAA1B,CAFjB;AAGE6N,aAAK,EAAE31I,KAAK,CAAE,oBAAmB6pI,KAAK,CAAC/B,EAAG,EAA9B,CAHd;AAIEme,eAAO,EAAEjmJ,KAAK,CAAE,kBAAiB6pI,KAAK,CAAC/B,EAAG,EAA5B,CAJhB;AAMEiF,kBAAU,EAAElD,KAAK,CAACkD,UAAN,CAAiBvpI,GAAjB,CAAqB8oI,GAAG,oCAC/BimB,yDAAa,CAACN,UAAd,CAAyB3lB,GAAzB,CAD+B;AAElC8B,kBAAQ,EAAEpuI,KAAK,CAAE,UAASssI,GAAG,CAACxE,EAAG,EAAlB,CAFmB;AAGlC6N,eAAK,EAAE31I,KAAK,CAAE,cAAassI,GAAG,CAACxE,EAAG,EAAtB,CAHsB;AAIlCme,iBAAO,EAAEjmJ,KAAK,CAAE,YAAWssI,GAAG,CAACxE,EAAG,EAApB,CAJoB;AAKlC0K,mBAAS,EAAExyI,KAAK,CAAE,aAAYssI,GAAG,CAACxE,EAAG,EAArB;AALkB,UAAxB;AANd;AAcD,KA3Be;AAbX,GAAP;AA0CD,CAvDD;;AAyDA0L,QAAQ,CAAC,uBAAD,CAAR,GAAoCuf,YAAY,CAAC,gBAAe;AAC9D/nJ,OAD8D;AAE9Do9H,YAF8D;AAG9D18H;AAH8D,CAAf,EAI9C;AACD,SAAO8nI,QAAQ,CAAC,sBAAD,CAAR,CAAiC;AACtCxoI,SADsC;AAEtCk/H,YAAQ,EAAE9B,UAF4B;AAGtC18H;AAHsC,GAAjC,CAAP;AAKD,CAV+C,CAAhD;AAYA8nI,QAAQ,CAAC,0BAAD,CAAR,GAAuCuf,YAAY,CAAC,gBAAe;AACjE/nJ,OADiE;AAEjEo9H,YAFiE;AAGjEE;AAHiE,CAAf,EAIjD;AACD,QAAM+qB,aAAa,CAACroJ,KAAD,CAAnB;AACA,QAAMsoJ,uBAAuB,CAAC,sBAAD,EAAyBlrB,UAAzB,CAA7B;AACA,SAAOoL,QAAQ,CAAC,sBAAD,CAAR,CAAiC;AACtC+gB,cAAU,EAAEvpJ,KAD0B;AAEtCk/H,YAAQ,EAAE9B,UAF4B;AAGtCE;AAHsC,GAAjC,CAAP;AAKD,CAZkD,CAAnD;;AAcAkL,QAAQ,CAAC,yBAAD,CAAR,GAAsC,gBAAe;AACnD/K,cADmD;AAEnD4N,gBAFmD;AAGnD1J;AAHmD,CAAf,EAInC;AACD,SAAO6G,QAAQ,CAAC,qBAAD,CAAR,CAAgC;AACrC/K,gBADqC;AAErC4N,kBAFqC;AAGrC1J;AAHqC,GAAhC,CAAP;AAKD,CAVD;;AAYA6G,QAAQ,CAAC,yBAAD,CAAR,GAAsCuf,YAAY,CAAC,gBAAe;AAChEvqB,WADgE;AAEhEC;AAFgE,CAAf,EAGhD;AACD,SAAO+K,QAAQ,CAAC,qBAAD,CAAR,CAAgC;AAAEhL,aAAF;AAAaC;AAAb,GAAhC,CAAP;AACD,CALiD,CAAlD;AAOA+K,QAAQ,CAAC,sBAAD,CAAR,GAAmCuf,YAAY,CAAC,gBAAe;AAC7DvqB,WAD6D;AAE7DC;AAF6D,CAAf,EAG7C;AACD,QAAMF,sEAAe,CAACC,SAAD,EAAYC,YAAZ,EAA0B;AAAE8f,gBAAY,EAAE;AAAhB,GAA1B,CAArB;AACA,SAAO,IAAP;AACD,CAN8C,CAA/C;;AAQA/U,QAAQ,CAAC,sBAAD,CAAR,GAAmC,gBAAe;AAChDhL,WADgD;AAEhDrjI,WAFgD;AAGhD67C;AAHgD,CAAf,EAIhC;AACD,wBAAe,MAAMy1F,uEAAQ,CAC3BvgG,8DAAC,CAAC,cAAD,CAAD,CACGhvC,MADH,CACU;AACNwlJ,QAAI,EAAE,CACJlkB,SAAS,IAAI;AAAEU,aAAO,EAAEV;AAAX,KADT,EAEJrjI,SAAS,IAAI;AAAE1C,UAAI,EAAE;AAAEsqJ,YAAI,EAAE5nJ;AAAR;AAAR,KAFT,EAGJ67C,OAAO,IAAI;AAAEv+C,UAAI,EAAE;AAAEuqJ,YAAI,EAAEhsG;AAAR;AAAR,KAHP,EAIJ95C,MAJI,CAIGw9C,OAJH;AADA,GADV,EAQGkiF,MARH,CAQU,GARV,EASGrlI,OATH,CASW;AAAEq7I,UAAM,EAAE;AAAV,GATX,CAD2B,CAA7B;AAAA,MAAM90I,IAAN,mBAAMA,IAAN;;AAYA,SAAOA,IAAP;AACD,CAlBD;;AAoBA0rI,QAAQ,CAAC,yBAAD,CAAR,GAAsC,gBAAe;AAAEj5C,MAAF;AAAQiuC;AAAR,CAAf,EAAoC;AACxE,QAAM,IAAIvjI,KAAJ,CAAU,4DAAV,CAAN;AACD,CAFD;;AAIAuuI,QAAQ,CAAC,wBAAD,CAAR,GAAqCuf,YAAY,CAAC,gBAAe;AAC/DjrB,IAD+D;AAE/DgB;AAF+D,CAAf,EAG/C;AACD,yBAAe,MAAM2N,uEAAQ,CAC3BvgG,8DAAC,CAAC,cAAD,CAAD,CACGhvC,MADH,CACU;AAAE4gI;AAAF,GADV,EAEGlB,MAFH,CAEU,GAFV,EAGGrlI,OAHH,CAGW;AAAEq7I,UAAM,EAAE;AAAV,GAHX,CAD2B,CAA7B;AAAA,MAAM90I,IAAN,oBAAMA,IAAN;;AAMA,MAAI2gI,YAAY,GAAG+rB,gFAAmB,CAAC1sJ,IAAD,CAAtC;;AAEA,MAAI2gI,YAAY,CAAChiI,MAAb,KAAwB,CAA5B,EAA+B;AAC7B,WAAO,EAAP;AACD;;AAED,2BAAeoiI,8EAAiB,CAACJ,YAAD,EAAeK,MAAf,CAAhC;AAAA,MAAM75H,IAAN,sBAAMA,IAAN;;AACA,SAAOukI,QAAQ,CAAC,2BAAD,CAAR,CAAsCvkI,IAAtC,CAAP;AACD,CAlBgD,CAAjD;AAoBAukI,QAAQ,CAAC,wBAAD,CAAR,GAAqCuf,YAAY,CAAC,gBAAe;AAAEjrB;AAAF,CAAf,EAAuB;AACvE,yBAAe,MAAM2O,uEAAQ,CAC3BvgG,8DAAC,CAAC,cAAD,CAAD,CACGhvC,MADH,CACU;AAAE4gI;AAAF,GADV,EAEGlB,MAFH,CAEU,GAFV,EAGGrlI,OAHH,CAGW;AAAEq7I,UAAM,EAAE;AAAV,GAHX,CAD2B,CAA7B;AAAA,MAAM90I,IAAN,oBAAMA,IAAN;;AAMA,MAAI2gI,YAAY,GAAG+rB,gFAAmB,CAAC1sJ,IAAD,CAAtC;;AAEA,MAAI2gI,YAAY,CAAChiI,MAAb,KAAwB,CAA5B,EAA+B;AAC7B,WAAO,EAAP;AACD;;AAED,2BAAesiI,8EAAiB,CAACN,YAAD,EAAeX,EAAf,CAAhC;AAAA,MAAM74H,IAAN,sBAAMA,IAAN;;AACA,SAAOukI,QAAQ,CAAC,2BAAD,CAAR,CAAsCvkI,IAAtC,CAAP;AACD,CAfgD,CAAjD;;AAiBAukI,QAAQ,CAAC,kBAAD,CAAR,GAA+B,kBAAiB;AAC9C,MAAI9H,QAAQ,GAAG,MAAMuG,+CAAA,EAArB;AACA,SAAOvG,QAAQ,CAACloI,GAAT,CAAa0lI,OAAO,IAAIopB,wDAAY,CAACL,UAAb,CAAwB/oB,OAAxB,CAAxB,CAAP;AACD,CAHD;;AAKAsK,QAAQ,CAAC,oBAAD,CAAR,GAAiCuf,YAAY,CAAC,gBAAe;AAC3D7pB,SAD2D;AAE3DC,gBAAc,GAAG;AAF0C,CAAf,EAG3C;AACD,SAAOqK,QAAQ,CAAC,gBAAD,CAAR,CAA2B;AAChC/pI,QAAI,EAAEy/H,OAAO,CAACz/H,IADkB;AAEhCmT,QAAI,EAAEssH,OAAO,CAACtsH,IAFkB;AAGhCw5H,aAAS,EAAElN,OAAO,CAAC4C,SAHa;AAIhCE,UAAM,EAAE9C,OAAO,CAAC8C,MAJgB;AAKhC;AACA;AACAia,WAAO,EAAE9c,cAAc,IAAI,IAAlB,GAAyBmH,qEAAe,CAACnH,cAAD,CAAxC,GAA2D;AAPpC,GAA3B,CAAP;AASD,CAb4C,CAA7C;AAeAqK,QAAQ,CAAC,oBAAD,CAAR,GAAiCuf,YAAY,CAAC,gBAAe;AAAEjrB,IAAF;AAAMgB;AAAN,CAAf,EAA+B;AAC3E,SAAOmJ,iDAAA;AAAmBnK;AAAnB,KAA0BwqB,wDAAY,CAACJ,YAAb,CAA0BppB,MAA1B,CAA1B,EAAP;AACD,CAF4C,CAA7C;AAIA0K,QAAQ,CAAC,mBAAD,CAAR,GAAgCuf,YAAY,CAAC,gBAAe;AAC1DjrB,IAD0D;AAE1DwB,mBAF0D;AAG1DC;AAH0D,CAAf,EAI1C;AACD,SAAOiK,QAAQ,CAAC,eAAD,CAAR,CAA0B;AAC/B1L,MAD+B;AAE/BwB,qBAF+B;AAG/BlB,cAAU,EAAEmB;AAHmB,GAA1B,CAAP;AAKD,CAV2C,CAA5C;AAYAiK,QAAQ,CAAC,oBAAD,CAAR,GAAiCuf,YAAY,CAAC,gBAAe;AAAEjrB;AAAF,CAAf,EAAuB;AACnE,SAAO0L,QAAQ,CAAC,gBAAD,CAAR,CAA2B;AAAE1L;AAAF,GAA3B,CAAP;AACD,CAF4C,CAA7C;AAIA0L,QAAQ,CAAC,oBAAD,CAAR,GAAiCuf,YAAY,CAAC,gBAAe;AAAEjrB;AAAF,CAAf,EAAuB;AACnE,SAAO0L,QAAQ,CAAC,eAAD,CAAR,CAA0B;AAAE1L,MAAF;AAAM0hB,UAAM,EAAE;AAAd,GAA1B,CAAP;AACD,CAF4C,CAA7C;;AAIAhW,QAAQ,CAAC,oBAAD,CAAR,GAAiC,gBAAe;AAAE7J;AAAF,IAAc,EAA7B,EAAiC;AAChE,MAAIn1H,MAAM,GAAG,MAAMg/H,QAAQ,CAAC,gBAAD,CAAR,EAAnB;AACA,SAAO7J,OAAO,GACVn1H,MAAM,CAACm1H,OAAP,CAAenmI,GAAf,CAAmBivJ,8DAAkB,CAACR,UAAtC,CADU,GAEVz9I,MAAM,CAAC2M,IAAP,CAAY3d,GAAZ,CAAgB+uJ,yDAAa,CAACN,UAA9B,CAFJ;AAGD,CALD;;AAOAze,QAAQ,CAAC,2BAAD,CAAR,GAAwCuf,YAAY,CAAC,gBAAe;AAAElpB;AAAF,CAAf,EAA0B;AAC7E,SAAO2J,QAAQ,CAAC,uBAAD,CAAR,CAAkC;AAAE/pI,QAAI,EAAEogI,KAAK,CAACpgI;AAAd,GAAlC,CAAP;AACD,CAFmD,CAApD;AAIA+pI,QAAQ,CAAC,2BAAD,CAAR,GAAwCuf,YAAY,CAAC,gBAAe;AAClEjrB,IADkE;AAElEgB;AAFkE,CAAf,EAGlD;AACD,SAAO0K,QAAQ,CAAC,uBAAD,CAAR;AACL1L;AADK,KAEF2qB,8DAAkB,CAACP,YAAnB,CAAgCppB,MAAhC,CAFE,EAAP;AAID,CARmD,CAApD;AAUA0K,QAAQ,CAAC,2BAAD,CAAR,GAAwCuf,YAAY,CAAC,gBAAe;AAClEjrB,IADkE;AAElEyB;AAFkE,CAAf,EAGlD;AACD,SAAOiK,QAAQ,CAAC,uBAAD,CAAR,CAAkC;AACvC1L,MADuC;AAEvC2F,cAAU,EAAElE;AAF2B,GAAlC,CAAP;AAID,CARmD,CAApD;AAUAiK,QAAQ,CAAC,qBAAD,CAAR,GAAkCuf,YAAY,CAAC,gBAAe;AAAE7oB;AAAF,CAAf,EAA6B;AAC1E,SAAOsJ,QAAQ,CAAC,iBAAD,CAAR,CAA4B;AACjC/pI,QAAI,EAAEygI,QAAQ,CAACzgI,IADkB;AAEjCsnI,WAAO,EAAE7G,QAAQ,CAACsC,QAFe;AAGjC8J,YAAQ,EAAEpM,QAAQ,CAACqC;AAHc,GAA5B,CAAP;AAKD,CAN6C,CAA9C;AAQAiH,QAAQ,CAAC,qBAAD,CAAR,GAAkCuf,YAAY,CAAC,gBAAe;AAAEjrB,IAAF;AAAMgB;AAAN,CAAf,EAA+B;AAC5E,SAAO0K,QAAQ,CAAC,iBAAD,CAAR;AACL1L;AADK,KAEFyqB,yDAAa,CAACL,YAAd,CAA2BppB,MAA3B,CAFE,EAAP;AAID,CAL6C,CAA9C;AAOA0K,QAAQ,CAAC,qBAAD,CAAR,GAAkCuf,YAAY,CAAC,gBAAe;AAC5DjrB,IAD4D;AAE5DyB;AAF4D,CAAf,EAG5C;AACD,SAAOiK,QAAQ,CAAC,iBAAD,CAAR,CAA4B;AACjC1L,MADiC;AAEjC2F,cAAU,EAAElE;AAFqB,GAA5B,CAAP;AAID,CAR6C,CAA9C;;AAUAiK,QAAQ,CAAC,gBAAD,CAAR,GAA6B,kBAAiB;AAC5C,MAAI7G,MAAM,GAAG,MAAM6G,QAAQ,CAAC,YAAD,CAAR,EAAnB;AACA,SAAO7G,MAAM,CAACnpI,GAAP,CAAWkvJ,sDAAU,CAACT,UAAtB,CAAP;AACD,CAHD;;AAKAze,QAAQ,CAAC,kBAAD,CAAR,GAA+Buf,YAAY,CAAC,gBAAe;AAAExoB;AAAF,CAAf,EAA0B;AACpE,SAAOiJ,QAAQ,CAAC,cAAD,CAAR,CAAyB;AAAE/pI,QAAI,EAAE8gI,KAAK,CAAC9gI;AAAd,GAAzB,CAAP;AACD,CAF0C,CAA3C;AAIA+pI,QAAQ,CAAC,kBAAD,CAAR,GAA+Buf,YAAY,CAAC,gBAAe;AAAEjrB,IAAF;AAAMgB;AAAN,CAAf,EAA+B;AACzE,SAAO0K,QAAQ,CAAC,qBAAD,CAAR,CAAgC;AACrCqU,WAAO,EAAE;AAAG/f;AAAH,OAAU4qB,sDAAU,CAACR,YAAX,CAAwBppB,MAAxB,CAAV;AAD4B,GAAhC,CAAP;AAGD,CAJ0C,CAA3C;AAMA0K,QAAQ,CAAC,kBAAD,CAAR,GAA+Buf,YAAY,CAAC,gBAAe;AAAEjrB;AAAF,CAAf,EAAuB;AACjE,SAAO0L,QAAQ,CAAC,qBAAD,CAAR,CAAgC;AAAEhD,WAAO,EAAE,CAAC;AAAE1I;AAAF,KAAD;AAAX,GAAhC,CAAP;AACD,CAF0C,CAA3C;;AAIA0L,QAAQ,CAAC,qBAAD,CAAR,GAAkC,gBAAe;AAAE7I;AAAF,CAAf,EAA4B;AAC5D,MAAI/0H,KAAK,GAAG,MAAM49H,QAAQ,CAAC,kBAAD,CAAR,CAA6B;AAAE1L,MAAE,EAAE6C;AAAN,GAA7B,CAAlB;AACA,SAAO/0H,KAAK,CAACpS,GAAN,CAAUmvJ,0DAAc,CAACV,UAAzB,CAAP;AACD,CAHD;;AAKAze,QAAQ,CAAC,uBAAD,CAAR,GAAoCuf,YAAY,CAAC,gBAAe;AAC9DloB,UAD8D;AAE9D/4H;AAF8D,CAAf,EAG9C;AACD,SAAO0hI,QAAQ,CAAC,iBAAD,CAAR,CAA4B;AACjC3I,YADiC;AAEjCjuH,QAAI,EAAE9K,IAAI,CAAC8K,IAFsB;AAGjC5c,SAAK,EAAE8R,IAAI,CAAC9R,KAAL,IAAc;AAHY,GAA5B,CAAP;AAKD,CAT+C,CAAhD;AAWAwzI,QAAQ,CAAC,uBAAD,CAAR,GAAoCuf,YAAY,CAAC,gBAAe;AAC9DjrB,IAD8D;AAE9DgB;AAF8D,CAAf,EAG9C;AACD,SAAO0K,QAAQ,CAAC,oBAAD,CAAR;AACL1L;AADK,KAEF6qB,0DAAc,CAACT,YAAf,CAA4BppB,MAA5B,CAFE,EAAP;AAID,CAR+C,CAAhD;AAUA0K,QAAQ,CAAC,uBAAD,CAAR,GAAoCuf,YAAY,CAAC,gBAAe;AAAEjrB;AAAF,CAAf,EAAuB;AACtE,SAAO0L,QAAQ,CAAC,oBAAD,CAAR,CAA+B;AAAE1L;AAAF,GAA/B,CAAP;AACD,CAF+C,CAAhD;AAIe,yEAAS2sB,cAAT,EAAyB;AACtCjhB,UAAQ,GAAGnwI,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBmxJ,cAAlB,EAAkCjhB,QAAlC,CAAX;AACA,SAAOA,QAAP;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACniBD;CAGA;AACA;AACA;AACA;;AAEA,MAAMkhB,GAAN,CAAU;AACRp1J,aAAW,GAAG;AACZ,SAAKk0I,QAAL,GAAgB,EAAhB;AACA,SAAKmhB,QAAL,GAAgB,EAAhB;AACA,SAAKC,MAAL,GAAcC,oDAAI,EAAlB;AACA,SAAKC,gBAAL,GAAwB,EAAxB;AACD;;AAED/wJ,QAAM,CAAC0F,IAAD,EAAOy5B,IAAP,EAAa;AACjB,QAAI,KAAKswG,QAAL,CAAc/pI,IAAd,KAAuB,IAA3B,EAAiC;AAC/B,YAAM,IAAIxE,KAAJ,CACJ,6DAA6DwE,IADzD,CAAN;AAGD;;AACD,SAAK+pI,QAAL,CAAc/pI,IAAd,IAAsBy5B,IAAtB;AACD;;AAED6xH,SAAO,CAAC7xH,IAAD,EAAO;AACZ,SAAKyxH,QAAL,CAAcrvJ,IAAd,CAAmB49B,IAAnB;AACD;;AAED8xH,SAAO,CAAC,GAAGC,IAAJ,EAAU;AACf,SAAK,IAAIC,GAAT,IAAgBD,IAAhB,EAAsB;AACpB5xJ,YAAM,CAACiS,IAAP,CAAY4/I,GAAG,CAAC1hB,QAAhB,EAA0B7gI,OAA1B,CAAkClJ,IAAI,IAAI;AACxC,aAAK1F,MAAL,CAAY0F,IAAZ,EAAkByrJ,GAAG,CAAC1hB,QAAJ,CAAa/pI,IAAb,CAAlB;AACD,OAFD;AAIAyrJ,SAAG,CAACP,QAAJ,CAAahiJ,OAAb,CAAqBoiJ,OAAO,IAAI;AAC9B,aAAKA,OAAL,CAAaA,OAAb;AACD,OAFD;;AAIA,uBAA8BG,GAAG,CAACN,MAAJ,CAAWhkF,GAAX,CAAe3oD,OAAf,EAA9B,EAAwD;AAAA;;AAAA,YAA9Cxe,IAA8C;AAAA,YAAxC0rJ,SAAwC;;AACtD,aAAK,IAAIC,QAAT,IAAqBD,SAArB,EAAgC;AAC9B,eAAKP,MAAL,CAAY7hI,EAAZ,CAAetpB,IAAf,EAAqB2rJ,QAArB;AACD;AACF;AACF;AACF;;AAEDC,eAAa,GAAG;AACd,QAAI,KAAKP,gBAAL,CAAsBruJ,MAAtB,GAA+B,CAAnC,EAAsC;AACpCuwI,mFAAgB,CACd,IAAI/xI,KAAJ,CACE,8DADF,CADc,CAAhB;AAKD;;AACD,SAAK6vJ,gBAAL,GAAwB,KAAKH,QAAL,CAAcnxJ,GAAd,CAAkBuxJ,OAAO,IAAIA,OAAO,EAApC,CAAxB;AACD;;AAEDO,cAAY,GAAG;AACb,SAAKR,gBAAL,CAAsBniJ,OAAtB,CAA8B4iJ,QAAQ,IAAI;AACxC,UAAIA,QAAJ,EAAc;AACZA,gBAAQ;AACT;AACF,KAJD;AAKA,SAAKT,gBAAL,GAAwB,EAAxB;AACD;;AAzDO;;AA4DH,SAASU,SAAT,GAAqB;AAC1B,SAAO,IAAId,GAAJ,EAAP;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtED,IAAIe,IAAI,GAAG,CAAX;;AACA,SAASC,QAAT,GAAoB;AAClBD,MAAI,GAAG,CAAP;AACD;;AAED,SAASE,GAAT,CAAaC,SAAb,EAAwB;AACtBH,MAAI;AACJ,SAAOG,SAAS,GAAGH,IAAnB;AACD;;AAED,MAAMI,YAAN,SAA2B5wJ,KAA3B,CAAiC;;AAEjC,SAAS6wJ,eAAT,CAAyBrzJ,IAAzB,EAA+B;AAC7B,MAAIszJ,GAAG,GAAG5nJ,CAAC,IAAI,CAACA,CAAC,GAAG,EAAJ,GAAS,GAAT,GAAe,EAAhB,IAAsBA,CAArC;;AACA,SAAO1L,IAAI,CAAC+a,WAAL,KAAqBu4I,GAAG,CAACtzJ,IAAI,CAACgb,QAAL,KAAkB,CAAnB,CAAxB,GAAgDs4I,GAAG,CAACtzJ,IAAI,CAACib,OAAL,EAAD,CAA1D;AACD;;AAED,SAASs4I,SAAT,CAAmBvzJ,IAAnB,EAAyB;AACvB,SAAOoe,QAAQ,CAACpe,IAAI,CAACsd,OAAL,CAAa,IAAb,EAAmB,EAAnB,CAAD,CAAf;AACD;;AAEM,SAASk2I,YAAT,CAAsBC,MAAtB,EAA8BN,SAA9B,EAAyCO,OAAzC,EAAkDC,QAAlD,EAA4D;AACjE,MAAIC,YAAY,GAAGH,MAAM,CAACN,SAAD,CAAN,CAAkBzJ,SAAlB,IAA+B,IAAlD;AACA,SAAOkK,YAAY,GAAI,GAAED,QAAS,QAAOD,OAAQ,gBAA9B,GAAgDC,QAAnE;AACD;;AAED,SAASE,OAAT,CAAiB77H,IAAjB,EAAuB;AACrB,MAAI5H,KAAK,GAAG4H,IAAI,CAAC3Z,KAAL,CAAW,GAAX,CAAZ;AACA,SAAO;AAAE2Z,QAAI,EAAE5H,KAAK,CAACpqB,KAAN,CAAY,CAAZ,EAAe,CAAC,CAAhB,EAAmB+Y,IAAnB,CAAwB,GAAxB,CAAR;AAAsCioB,SAAK,EAAE5W,KAAK,CAACA,KAAK,CAACpsB,MAAN,GAAe,CAAhB;AAAlD,GAAP;AACD;;AAED,SAAS8vJ,SAAT,CAAmB7yH,GAAnB,EAAwB;AACtB,SAAOA,GAAG,KAAK,OAAf;AACD;;AAEM,SAAS8yH,UAAT,CAAoB90F,KAApB,EAA2B;AAChC,SAAOA,KAAK,CAACjzD,OAAN,CAAc,GAAd,MAAuB,CAAC,CAAxB,IAA6B,CAAC8nJ,SAAS,CAAC70F,KAAD,CAAvC,GAAiDA,KAAjD,GAA0D,IAAGA,KAAM,GAA1E;AACD;;AAED,SAAS+0F,KAAT,CAAez2J,KAAf,EAAsB4c,IAAtB,EAA4B;AAAE85I,SAAO,GAAG;AAAZ,IAAsB,EAAlD,EAAsD;AACpD,SAAO;AAAE12J,SAAF;AAAS4c,QAAT;AAAe85I;AAAf,GAAP;AACD;;AAED,SAASC,mBAAT,CAA6BT,MAA7B,EAAqCN,SAArC,EAAgDnsH,KAAhD,EAAuD;AACrD,MAAIysH,MAAM,CAACN,SAAD,CAAN,IAAqB,IAAzB,EAA+B;AAC7B,UAAM,IAAIC,YAAJ,CAAkB,UAASD,SAAU,gCAArC,CAAN;AACD;;AAED,MAAIgB,SAAS,GAAGV,MAAM,CAACN,SAAD,CAAN,CAAkBnsH,KAAlB,CAAhB;;AACA,MAAImtH,SAAS,IAAI,IAAjB,EAAuB;AACrB,UAAM,IAAIf,YAAJ,CACH,UAASpsH,KAAM,8BAA6BmsH,SAAU,GADnD,CAAN;AAGD;;AACD,SAAOgB,SAAP;AACD;;AAED,SAASC,QAAT,CAAkB/tH,KAAlB,EAAyBrO,IAAzB,EAA+B;AAC7B,MAAMy7H,MAAN,GAAwBptH,KAAxB,CAAMotH,MAAN;AAAA,MAAcpmB,KAAd,GAAwBhnG,KAAxB,CAAcgnG,KAAd;AAEA,MAAIj9G,KAAK,GAAG4H,IAAI,CAAC3Z,KAAL,CAAW,GAAX,CAAZ;;AACA,MAAI+R,KAAK,CAACpsB,MAAN,GAAe,CAAnB,EAAsB;AACpB,UAAM,IAAIovJ,YAAJ,CAAiB,mBAAmBp7H,IAApC,CAAN;AACD;;AAED,MAAIq8H,YAAY,GAAGjkI,KAAK,CAAC,CAAD,CAAxB;AAEA,MAAI+iI,SAAS,GAAG/iI,KAAK,CAACpqB,KAAN,CAAY,CAAZ,EAAe/H,MAAf,CAAsB,CAACk1J,SAAD,EAAYnsH,KAAZ,KAAsB;AAC1D,QAAI+9F,KAAK,GAAG0uB,MAAM,CAACN,SAAD,CAAlB;;AAEA,QAAIpuB,KAAK,IAAI,IAAb,EAAmB;AACjB,YAAM,IAAIquB,YAAJ,CAAkB,eAAcD,SAAU,uBAA1C,CAAN;AACD;;AAED,QAAI,CAACpuB,KAAK,CAAC/9F,KAAD,CAAN,IAAiB+9F,KAAK,CAAC/9F,KAAD,CAAL,CAAastH,GAAb,IAAoB,IAAzC,EAA+C;AAC7C,YAAM,IAAIlB,YAAJ,CACH,+BAA8BD,SAAU,MAAKnsH,KAAM,GADhD,CAAN;AAGD;;AAED,WAAO+9F,KAAK,CAAC/9F,KAAD,CAAL,CAAastH,GAApB;AACD,GAde,EAcbD,YAda,CAAhB;AAgBA,MAAIE,SAAJ;AACA,MAAIC,WAAW,GAAGpkI,KAAK,CAACpqB,KAAN,CAAY,CAAZ,EAAe,CAAC,CAAhB,CAAlB;;AACA,MAAIwuJ,WAAW,CAACxwJ,MAAZ,KAAuB,CAA3B,EAA8B;AAC5BuwJ,aAAS,GAAGC,WAAW,CAAC,CAAD,CAAvB;AACD,GAFD,MAEO;AACL,QAAIC,UAAU,GAAGD,WAAW,CAACz1I,IAAZ,CAAiB,GAAjB,CAAjB;AACA,QAAI21I,UAAU,GAAGrnB,KAAK,CAACptI,GAAN,CAAUw0J,UAAV,CAAjB;;AACA,QAAI,CAACC,UAAL,EAAiB;AACf,YAAM,IAAItB,YAAJ,CAAiB,0BAA0BqB,UAA3C,CAAN;AACD;;AACDF,aAAS,GAAGG,UAAU,CAAChB,OAAvB;AACD;;AAED,SAAO;AACLP,aAAS,EAAEA,SADN;AAELO,WAAO,EAAER,GAAG,CAACC,SAAD,CAFP;AAGLwB,aAAS,EAAEvkI,KAAK,CAACA,KAAK,CAACpsB,MAAN,GAAe,CAAhB,CAHX;AAILuwJ;AAJK,GAAP;AAMD;;AAED,SAASK,WAAT,CAAqBvuH,KAArB,EAA4BrO,IAA5B,EAAkC;AAChC,MAAIq1G,KAAK,GAAGr1G,IAAI,CAAC3Z,KAAL,CAAW,GAAX,CAAZ;AACA,MAAIq1I,OAAJ;AAEArmB,OAAK,GAAGA,KAAK,CAACpvI,MAAN,CACN,CAAC61H,GAAD,EAAM9sH,IAAN,KAAe;AACb,QAAI6tJ,QAAQ,GAAG/gC,GAAG,CAACn3G,OAAJ,GAAc,GAAd,GAAoB3V,IAAnC;AACA,WAAO;AACL2V,aAAO,EAAEk4I,QADJ;AAEL78H,UAAI,EAAE,CAAC,GAAG87F,GAAG,CAAC97F,IAAR,EAAc68H,QAAd;AAFD,KAAP;AAID,GAPK,EAQN;AAAEl4I,WAAO,EAAE0pB,KAAK,CAACyuH,iBAAjB;AAAoC98H,QAAI,EAAE;AAA1C,GARM,EASNA,IATF;AAWAq1G,OAAK,CAACn9H,OAAN,CAAc8nB,IAAI,IAAI;AACpB,QAAI,CAACqO,KAAK,CAACgnG,KAAN,CAAYptI,GAAZ,CAAgB+3B,IAAhB,CAAL,EAA4B;AAC1BqO,WAAK,CAACgnG,KAAN,CAAY7pI,GAAZ,CAAgBw0B,IAAhB,EAAsBo8H,QAAQ,CAAC/tH,KAAD,EAAQrO,IAAR,CAA9B;AACD;AACF,GAJD;AAMA,MAAI+8H,QAAQ,GAAG1uH,KAAK,CAACgnG,KAAN,CAAYptI,GAAZ,CAAgBotI,KAAK,CAACA,KAAK,CAACrpI,MAAN,GAAe,CAAhB,CAArB,CAAf;AACA,SAAO+wJ,QAAP;AACD;;AAED,SAASC,cAAT,CAAwB3uH,KAAxB,EAA+Br/B,IAA/B,EAAqC;AACnC,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5B,UAAM,IAAIosJ,YAAJ,CAAiB,sCAAjB,CAAN;AACD;;AAED,iBAAsBS,OAAO,CAAC7sJ,IAAD,CAA7B;AAAA,MAAMgxB,IAAN,YAAMA,IAAN;AAAA,MAAYgP,KAAZ,YAAYA,KAAZ;;AAEA,MAAI+tH,QAAJ;;AACA,MAAI/8H,IAAI,KAAK,EAAb,EAAiB;AACf+8H,YAAQ,GAAG;AACT5B,eAAS,EAAE9sH,KAAK,CAACyuH,iBADR;AAETpB,aAAO,EAAErtH,KAAK,CAAC4uH;AAFN,KAAX;AAID,GALD,MAKO;AACLF,YAAQ,GAAGH,WAAW,CAACvuH,KAAD,EAAQrO,IAAR,CAAtB;AACD;;AAED,MAAIm8H,SAAS,GAAGD,mBAAmB,CAAC7tH,KAAK,CAACotH,MAAP,EAAesB,QAAQ,CAAC5B,SAAxB,EAAmCnsH,KAAnC,CAAnC,CAjBmC,CAmBnC;AACA;AACA;AACA;AACA;AACA;;AACA,MACEX,KAAK,CAACy9F,YAAN,IACAqwB,SAAS,CAACG,GADV,IAEAH,SAAS,CAACh6I,IAAV,KAAmB,IAFnB,IAGA6sB,KAAK,KAAK,IAJZ,EAKE;AACA,QAAIkuH,OAAO,GAAG7uH,KAAK,CAACyuH,iBAAN,GAA0B,GAA1B,GAAgC9tJ,IAA9C;AACA,QAAImuJ,WAAW,GAAG9uH,KAAK,CAACgnG,KAAN,CAAYptI,GAAZ,CAAgBi1J,OAAhB,CAAlB;;AAEA,QAAI,CAACC,WAAL,EAAkB;AAChBA,iBAAW,GAAGf,QAAQ,CAAC/tH,KAAD,EAAQ6uH,OAAR,CAAtB;AACAC,iBAAW,CAACC,SAAZ,GAAwB,IAAxB;AACA/uH,WAAK,CAACgnG,KAAN,CAAY7pI,GAAZ,CAAgB0xJ,OAAhB,EAAyBC,WAAzB;AACD;;AAEDnuH,SAAK,GAAG,IAAR;AACA+tH,YAAQ,GAAGI,WAAX;AACD;;AAED,MAAIE,QAAQ,GAAGN,QAAQ,CAACrB,OAAT,GAAmB,GAAnB,GAAyB1sH,KAAxC;AACA,SAAOgtH,KAAK,CAACqB,QAAD,EAAWlB,SAAS,CAACh6I,IAArB,CAAZ;AACD;;AAED,SAAS62C,SAAT,CAAmB/vB,GAAnB,EAAwB;AACtB,MAAIiU,CAAC,GAAGjU,GAAG,CAAC9jB,KAAJ,CAAU,uBAAV,CAAR;;AACA,MAAI+3B,CAAJ,EAAO;AACL,WAAO8+G,KAAK,CAACT,SAAS,CAACr+G,CAAC,CAAC,CAAD,CAAF,CAAV,EAAkB,MAAlB,EAA0B;AAAE++G,aAAO,EAAE;AAAX,KAA1B,CAAZ;AACD;;AACD,SAAO,IAAP;AACD;;AAED,SAASqB,UAAT,CAAoBr0H,GAApB,EAAyB;AACvB,MAAIiU,CAAC,GAAGjU,GAAG,CAAC9jB,KAAJ,CAAU,iBAAV,CAAR;;AACA,MAAI+3B,CAAJ,EAAO;AACL,WAAO8+G,KAAK,CAACT,SAAS,CAACr+G,CAAC,CAAC,CAAD,CAAF,CAAV,EAAkB,MAAlB,EAA0B;AAAE++G,aAAO,EAAE;AAAX,KAA1B,CAAZ;AACD;;AACD,SAAO,IAAP;AACD;;AAED,SAASljG,SAAT,CAAmB9vB,GAAnB,EAAwB;AACtB,MAAIiU,CAAC,GAAGjU,GAAG,CAAC9jB,KAAJ,CAAU,WAAV,CAAR;;AACA,MAAI+3B,CAAJ,EAAO;AACL,WAAO8+G,KAAK,CAACT,SAAS,CAACr+G,CAAC,CAAC,CAAD,CAAF,CAAV,EAAkB,MAAlB,EAA0B;AAAE++G,aAAO,EAAE;AAAX,KAA1B,CAAZ;AACD;;AACD,SAAO,IAAP;AACD;;AAED,SAASsB,aAAT,CAAuBt0H,GAAvB,EAA4B9mB,IAA5B,EAAkC;AAChC,QAAM,IAAIi5I,YAAJ,CAAkB,OAAMj5I,IAAK,YAAW8mB,GAAI,EAA5C,CAAN;AACD;;AAED,SAASu0H,UAAT,CAAoBlxE,KAApB,EAA2BnqE,IAA3B,EAAiC;AAC/B,MAAIs7I,YAAY,GAAGnxE,KAAK,CAACoxE,SAAzB;;AACA,MAAID,YAAJ,EAAkB;AAChB,QAAIE,KAAK,GAAG;AACV31J,UAAI,EAAE,CAAC,QAAD,CADI;AAEV,oBAAc,CAAC,MAAD,CAFJ;AAGV,mBAAa,CAAC,MAAD,EAAS,YAAT,CAHH;AAIVqlI,QAAE,EAAE,CAAC,QAAD,CAJM;AAKVuwB,WAAK,EAAE,CAAC,SAAD;AALG,KAAZ;;AAQA,QACEH,YAAY,KAAKt7I,IAAjB,KACC,CAACw7I,KAAK,CAACx7I,IAAD,CAAN,IAAgB,CAACw7I,KAAK,CAACx7I,IAAD,CAAL,CAAY1E,QAAZ,CAAqBggJ,YAArB,CADlB,CADF,EAGE;AACA,YAAM,IAAIjzJ,KAAJ,CACH,cAAawE,IAAK,sBAAqBmT,IAAK,yBAAwBs7I,YAAa,GAD9E,CAAN;AAGD;AACF,GAjBD,MAiBO;AACLnxE,SAAK,CAACoxE,SAAN,GAAkBv7I,IAAlB;AACD;AACF;;AAED,SAAS07I,SAAT,CAAmBxvH,KAAnB,EAA0B09F,IAA1B,EAAgC5pH,IAAhC,EAAsC;AACpC,MAAI4pH,IAAI,CAAC5pH,IAAL,KAAcA,IAAlB,EAAwB;AACtB,WAAO4pH,IAAP;AACD,GAFD,MAEO,IAAIA,IAAI,CAAC5pH,IAAL,KAAc,OAAlB,EAA2B;AAChCq7I,cAAU,CAACzxB,IAAD,EAAO5pH,IAAP,CAAV;AACA,WAAO65I,KAAK,CAACjwB,IAAI,CAACxmI,KAAN,EAAa4c,IAAb,CAAZ;AACD,GAHM,MAGA,IAAI4pH,IAAI,CAAC5pH,IAAL,KAAc,MAAlB,EAA0B;AAC/B,QAAI,CAAC4pH,IAAI,CAACkwB,OAAV,EAAmB;AACjB,YAAM,IAAIb,YAAJ,CAAiB,uCAAjB,CAAN;AACD;;AAED,QAAIj5I,IAAI,KAAK,SAAb,EAAwB;AACtB,aAAO65I,KAAK,CAAC,CAAD,EAAI,SAAJ,EAAe;AAAEC,eAAO,EAAE;AAAX,OAAf,CAAZ;AACD;;AACD,WAAOlwB,IAAP;AACD,GAfmC,CAiBpC;;;AACA,MAAI5pH,IAAI,KAAK,MAAb,EAAqB;AACnB,QAAI4pH,IAAI,CAAC5pH,IAAL,KAAc,QAAlB,EAA4B;AAC1B,UAAI4pH,IAAI,CAACkwB,OAAT,EAAkB;AAChB,eAAOjjG,SAAS,CAAC+yE,IAAI,CAACxmI,KAAN,CAAT,IAAyBg4J,aAAa,CAACxxB,IAAI,CAACxmI,KAAN,EAAa,MAAb,CAA7C;AACD,OAFD,MAEO;AACL,cAAM,IAAI61J,YAAJ,CACJ,iDADI,CAAN;AAGD;AACF;;AAED,UAAM,IAAIA,YAAJ,CAAkB,cAAarvB,IAAI,CAAC5pH,IAAK,UAAzC,CAAN;AACD,GAZD,MAYO,IAAIA,IAAI,KAAK,YAAb,EAA2B;AAChC,QAAI27I,KAAJ;;AACA,QAAI/xB,IAAI,CAAC5pH,IAAL,KAAc,MAAlB,EAA0B;AACxB27I,WAAK,GAAG/xB,IAAR;AACD,KAFD,MAEO,IAAIA,IAAI,CAAC5pH,IAAL,KAAc,QAAd,IAA0B4pH,IAAI,CAAC5pH,IAAL,KAAc,KAA5C,EAAmD;AACxD27I,WAAK,GACHR,UAAU,CAACvxB,IAAI,CAACxmI,KAAN,CAAV,IACAyzD,SAAS,CAAC+yE,IAAI,CAACxmI,KAAN,CADT,IAEAg4J,aAAa,CAACxxB,IAAI,CAACxmI,KAAN,EAAa,YAAb,CAHf;AAID,KALM,MAKA;AACL,YAAM,IAAI61J,YAAJ,CAAkB,cAAarvB,IAAI,CAAC5pH,IAAK,gBAAzC,CAAN;AACD;;AAED,QAAI27I,KAAK,CAAC7B,OAAV,EAAmB;AACjB,aAAOD,KAAK,CACVT,SAAS,CAACuC,KAAK,CAACv4J,KAAN,CAAYqd,QAAZ,GAAuB5U,KAAvB,CAA6B,CAA7B,EAAgC,CAAhC,CAAD,CADC,EAEV,YAFU,EAGV;AAAEiuJ,eAAO,EAAE;AAAX,OAHU,CAAZ;AAKD,KAND,MAMO;AACL,aAAOD,KAAK,CACT,eAAc8B,KAAK,CAACv4J,KAAM,qBADjB,EAEV,YAFU,CAAZ;AAID;AACF,GAzBM,MAyBA,IAAI4c,IAAI,KAAK,WAAb,EAA0B;AAC/B,QAAI27I,KAAJ;;AACA,QAAI/xB,IAAI,CAAC5pH,IAAL,KAAc,MAAd,IAAwB4pH,IAAI,CAAC5pH,IAAL,KAAc,YAA1C,EAAwD;AACtD27I,WAAK,GAAG/xB,IAAR;AACD,KAFD,MAEO,IAAIA,IAAI,CAAC5pH,IAAL,KAAc,QAAlB,EAA4B;AACjC27I,WAAK,GACH/kG,SAAS,CAACgzE,IAAI,CAACxmI,KAAN,CAAT,IACA+3J,UAAU,CAACvxB,IAAI,CAACxmI,KAAN,CADV,IAEAyzD,SAAS,CAAC+yE,IAAI,CAACxmI,KAAN,CAFT,IAGAg4J,aAAa,CAACxxB,IAAI,CAACxmI,KAAN,EAAa,WAAb,CAJf;AAKD,KANM,MAMA;AACL,YAAM,IAAI61J,YAAJ,CAAkB,cAAarvB,IAAI,CAAC5pH,IAAK,eAAzC,CAAN;AACD;;AAED,QAAI27I,KAAK,CAAC7B,OAAV,EAAmB;AACjB,aAAOD,KAAK,CAACT,SAAS,CAACuC,KAAK,CAACv4J,KAAN,CAAYqd,QAAZ,GAAuB5U,KAAvB,CAA6B,CAA7B,EAAgC,CAAhC,CAAD,CAAV,EAAgD,WAAhD,EAA6D;AACvEiuJ,eAAO,EAAE;AAD8D,OAA7D,CAAZ;AAGD,KAJD,MAIO;AACL,aAAOD,KAAK,CACT,eAAc8B,KAAK,CAACv4J,KAAM,qBADjB,EAEV,WAFU,CAAZ;AAID;AACF,GAxBM,MAwBA,IAAI4c,IAAI,KAAK,IAAb,EAAmB;AACxB,QAAI4pH,IAAI,CAAC5pH,IAAL,KAAc,QAAlB,EAA4B;AAC1B,aAAO65I,KAAK,CAACjwB,IAAI,CAACxmI,KAAN,EAAa,IAAb,EAAmB;AAAE02J,eAAO,EAAElwB,IAAI,CAACkwB;AAAhB,OAAnB,CAAZ;AACD;AACF,GAJM,MAIA,IAAI95I,IAAI,KAAK,OAAb,EAAsB;AAC3B,QAAI4pH,IAAI,CAAC5pH,IAAL,KAAc,SAAlB,EAA6B;AAC3B,aAAO65I,KAAK,CAACjwB,IAAI,CAACxmI,KAAN,EAAa,OAAb,EAAsB;AAAE02J,eAAO,EAAElwB,IAAI,CAACkwB;AAAhB,OAAtB,CAAZ;AACD;AACF;;AAED,MAAIlwB,IAAI,CAAC5pH,IAAL,KAAc,KAAlB,EAAyB;AACvB,WAAO65I,KAAK,CAACjwB,IAAI,CAACxmI,KAAN,EAAa4c,IAAb,EAAmB;AAAE85I,aAAO,EAAElwB,IAAI,CAACkwB;AAAhB,KAAnB,CAAZ;AACD;;AAED,QAAM,IAAIb,YAAJ,CAAkB,iBAAgBrvB,IAAI,CAAC5pH,IAAK,OAAMA,IAAK,EAAvD,CAAN;AACD,C,CAED;;;AACA,SAAS6C,GAAT,CAAaqpB,KAAb,EAAoB09F,IAApB,EAA0B5pH,IAA1B,EAAgC;AAC9B,MAAI47I,UAAU,GAAGhyB,IAAjB,CAD8B,CAG9B;;AACA,MAAI5pH,IAAJ,EAAU;AACR47I,cAAU,GAAGF,SAAS,CAACxvH,KAAD,EAAQ09F,IAAR,EAAc5pH,IAAd,CAAtB;AACD;;AAED,MAAI47I,UAAU,CAAC9B,OAAf,EAAwB;AACtB,QAAI8B,UAAU,CAAC57I,IAAX,KAAoB,IAAxB,EAA8B;AAC5B,aAAQ,IAAG47I,UAAU,CAACx4J,KAAM,GAA5B;AACD,KAFD,MAEO,IAAIw4J,UAAU,CAAC57I,IAAX,KAAoB,QAAxB,EAAkC;AACvC;AACA,UAAI5c,KAAK,GAAGw4J,UAAU,CAACx4J,KAAX,CAAiB+f,OAAjB,CAAyB,IAAzB,EAA+B,IAA/B,CAAZ;AACA,aAAQ,IAAG/f,KAAM,GAAjB;AACD;AACF;;AAED,SAAOw4J,UAAU,CAACx4J,KAAlB;AACD;;AAED,SAASy4J,QAAT,CAAkB3vH,KAAlB,EAAyB6yB,GAAzB,EAA8B+8F,KAA9B,EAAqC;AACnC,SAAO/8F,GAAG,CAACn4D,GAAJ,CAAQ,CAACxD,KAAD,EAAQ2lJ,GAAR,KAAgBlmI,GAAG,CAACqpB,KAAD,EAAQ9oC,KAAR,EAAe04J,KAAK,GAAGA,KAAK,CAAC/S,GAAD,CAAR,GAAgB,IAApC,CAA3B,CAAP;AACD;;AAED,SAASgT,iBAAT,CAA2Bh9F,GAA3B,EAAgC1rD,GAAhC,EAAqCid,GAArC,EAA0C;AACxC,MAAIA,GAAG,IAAI,IAAX,EAAiB;AACfA,OAAG,GAAGjd,GAAN;AACD;;AAED,MAAIA,GAAG,IAAI,IAAP,IAAe0rD,GAAG,CAACl1D,MAAJ,GAAawJ,GAAhC,EAAqC;AACnC,UAAM,IAAI4lJ,YAAJ,CAAiB,mBAAjB,CAAN;AACD;;AACD,MAAI3oI,GAAG,IAAI,IAAP,IAAeyuC,GAAG,CAACl1D,MAAJ,GAAaymB,GAAhC,EAAqC;AACnC,UAAM,IAAI2oI,YAAJ,CAAiB,oBAAjB,CAAN;AACD;AACF,C,CAED;;;AAEA,SAAS+C,SAAT,CAAmBh8I,IAAnB,EAAyBsmB,IAAzB,EAA+B;AAC7B,SAAO,CAAC4F,KAAD,EAAQ,GAAGvpC,IAAX,KAAoB;AACzB,QAAIupC,KAAK,IAAI,IAAT,IAAiBA,KAAK,CAAC+vH,YAAN,IAAsB,IAA3C,EAAiD;AAC/C,YAAM,IAAIhD,YAAJ,CACJ,4CACE,8DAFE,CAAN;AAID;;AAED/sH,SAAK,CAAC+vH,YAAN,CAAmBvzJ,IAAnB,CAAwB;AAAEsX,UAAF;AAAQrd;AAAR,KAAxB;AACA,QAAI8rB,GAAG,GAAG6X,IAAI,CAAC4F,KAAD,EAAQ,GAAGvpC,IAAX,CAAd;AACAupC,SAAK,CAAC+vH,YAAN,CAAmBxxJ,GAAnB;AACA,WAAOgkB,GAAP;AACD,GAZD;AAaD;;AAED,SAASytI,WAAT,CAAqB94J,KAArB,EAA4B;AAC1B,MAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAC7B,WAAOA,KAAP;AACD,GAFD,MAEO,IAAIA,KAAK,KAAKP,SAAd,EAAyB;AAC9B,WAAO,WAAP;AACD;;AAED,MAAIikC,GAAG,GAAGr1B,IAAI,CAACC,SAAL,CAAetO,KAAf,CAAV;;AACA,MAAI0jC,GAAG,CAACj9B,MAAJ,GAAa,EAAjB,EAAqB;AACnB,QAAIsyJ,QAAQ,GAAG1qJ,IAAI,CAACC,SAAL,CAAetO,KAAf,EAAsB,IAAtB,EAA4B,CAA5B,CAAf;AACA,WAAO+4J,QAAQ,CAACj4I,KAAT,CAAe,IAAf,EAAqBU,IAArB,CAA0B,MAA1B,CAAP;AACD;;AACD,SAAOkiB,GAAP;AACD;;AAED,SAASs1H,eAAT,CAAyB7vH,KAAzB,EAAgCkuB,KAAhC,EAAuC;AACrC,MAAIA,KAAK,CAAC5wD,MAAN,KAAiB,CAArB,EAAwB;AACtB,WAAO0iC,KAAP;AACD;;AAED,MAAI8vH,QAAQ,GAAG5hG,KAAK,CACjB5uD,KADY,CACN,CADM,EAEZlI,OAFY,GAGZiD,GAHY,CAGRoX,KAAK,IAAI;AACZ,YAAQA,KAAK,CAACgC,IAAd;AACE,WAAK,MAAL;AACA,WAAK,UAAL;AACE,eAAOk8I,WAAW,CAACl+I,KAAK,CAACrb,IAAN,CAAW,CAAX,CAAD,CAAlB;;AACF,WAAK,IAAL;AAAW;AACT,2CAAyBqb,KAAK,CAACrb,IAA/B;AAAA,cAAK25J,QAAL;AAAA,cAAeC,MAAf;;AACA,iBAAOL,WAAW,CAAC;AAAE,aAACI,QAAD,GAAYC;AAAd,WAAD,CAAlB;AACD;;AACD,WAAK,OAAL;AACE,eAAOL,WAAW,CAACl+I,KAAK,CAAC5a,KAAP,CAAlB;;AACF;AACE,eAAO,EAAP;AAXJ;AAaD,GAjBY,EAkBZwD,GAlBY,CAkBRkgC,GAAG,IAAI,SAASA,GAlBR,EAmBZliB,IAnBY,CAmBP,EAnBO,CAAf;AAqBA,QAAM43I,UAAU,GAAG/hG,KAAK,CAAC,CAAD,CAAL,CAASz6C,IAA5B;AACA,QAAMy8I,UAAU,GAAGhiG,KAAK,CAAC,CAAD,CAAL,CAAS93D,IAAT,CAAc,CAAd,CAAnB;AACA05J,UAAQ,IAAK,OAAMG,UAAW,IAAGN,WAAW,CAC1CO,UAAU,CAAC5yJ,MAAX,KAAsB,CAAtB,GAA0B4yJ,UAAU,CAAC,CAAD,CAApC,GAA0CA,UADA,CAE1C,GAFF,CA5BqC,CAgCrC;;AACA,MAAIx9H,KAAJ,EAA2C,EAK1C;;AAEDsN,OAAK,CAACuF,OAAN,GAAiB,GAAEvF,KAAK,CAACuF,OAAQ,uBAAjB,GAA0CuqH,QAA1D;AACA,SAAO9vH,KAAP;AACD,C,CAED;;;AAEA,SAASmwH,cAAT,CAAwBt5J,KAAxB,EAA+B;AAC7B,MAAIA,KAAK,KAAKP,SAAd,EAAyB;AACvB,UAAM,IAAIo2J,YAAJ,CAAiB,wCAAjB,CAAN;AACD,GAFD,MAEO,IAAI71J,KAAK,KAAK,IAAd,EAAoB;AACzB,WAAOy2J,KAAK,CAAC,MAAD,EAAS,MAAT,EAAiB;AAAEC,aAAO,EAAE;AAAX,KAAjB,CAAZ;AACD,GAFM,MAEA,IAAI12J,KAAK,YAAY4K,IAArB,EAA2B;AAChC,WAAO6rJ,KAAK,CAACX,eAAe,CAAC91J,KAAD,CAAhB,EAAyB,MAAzB,EAAiC;AAAE02J,aAAO,EAAE;AAAX,KAAjC,CAAZ;AACD,GAFM,MAEA,IAAI,OAAO12J,KAAP,KAAiB,QAArB,EAA+B;AACpC;AACA;AACAA,SAAK,GAAGA,KAAK,CAAC+f,OAAN,CAAc,OAAd,EAAuB,GAAvB,CAAR;AACA,WAAO02I,KAAK,CAACz2J,KAAD,EAAQ,QAAR,EAAkB;AAAE02J,aAAO,EAAE;AAAX,KAAlB,CAAZ;AACD,GALM,MAKA,IAAI,OAAO12J,KAAP,KAAiB,SAArB,EAAgC;AACrC,WAAOy2J,KAAK,CAACz2J,KAAK,GAAG,CAAH,GAAO,CAAb,EAAgB,SAAhB,EAA2B;AAAE02J,aAAO,EAAE;AAAX,KAA3B,CAAZ;AACD,GAFM,MAEA,IAAI,OAAO12J,KAAP,KAAiB,QAArB,EAA+B;AACpC,WAAOy2J,KAAK,CAACz2J,KAAD,EAAQ,CAACA,KAAK,GAAG,CAAT,MAAgBA,KAAhB,GAAwB,SAAxB,GAAoC,OAA5C,EAAqD;AAC/D02J,aAAO,EAAE;AADsD,KAArD,CAAZ;AAGD,GAJM,MAIA,IAAInyJ,KAAK,CAACwD,OAAN,CAAc/H,KAAd,CAAJ,EAA0B;AAC/B,WAAOy2J,KAAK,CAACz2J,KAAD,EAAQ,OAAR,EAAiB;AAAE02J,aAAO,EAAE;AAAX,KAAjB,CAAZ;AACD,GAFM,MAEA;AACL,UAAM,IAAIb,YAAJ,CACJ,qCAAqCxnJ,IAAI,CAACC,SAAL,CAAetO,KAAf,CADjC,CAAN;AAGD;AACF;;AAED,MAAMu5J,WAAW,GAAGX,SAAS,CAAC,MAAD,EAAS,CAAC9vH,KAAD,EAAQ09F,IAAR,KAAiB;AACrD,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5B;AACA,QAAIA,IAAI,CAAC,CAAD,CAAJ,KAAY,GAAhB,EAAqB;AACnB,UAAI0yB,QAAQ,GAAG1yB,IAAI,KAAK,GAAT,GAAe19F,KAAK,CAAC0wH,aAArB,GAAqChzB,IAAI,CAAC/9H,KAAL,CAAW,CAAX,CAApD;;AAEA,UAAIywJ,QAAQ,IAAI,IAAZ,IAAoBA,QAAQ,KAAK,EAArC,EAAyC;AACvC,cAAM,IAAIrD,YAAJ,CAAiB,8BAA8BrvB,IAA/C,CAAN;AACD;;AAED,aAAOixB,cAAc,CAAC3uH,KAAD,EAAQowH,QAAR,CAArB;AACD,KAV2B,CAY5B;;;AACA,QAAI1yB,IAAI,CAAC,CAAD,CAAJ,KAAY,GAAhB,EAAqB;AACnB,UAAIz/C,KAAK,GAAG;AAAE/mF,aAAK,EAAE,GAAT;AAAc4c,YAAI,EAAE,OAApB;AAA6B68I,iBAAS,EAAEjzB,IAAI,CAAC/9H,KAAL,CAAW,CAAX;AAAxC,OAAZ;AACAqgC,WAAK,CAAC4wH,eAAN,CAAsBp0J,IAAtB,CAA2ByhF,KAA3B;AACA,aAAOA,KAAP;AACD;AACF;;AAED,MAAIy/C,IAAI,KAAK,IAAb,EAAmB;AACjB,QAAIjiI,KAAK,CAACwD,OAAN,CAAcy+H,IAAd,CAAJ,EAAyB;AACvB,aAAO8yB,cAAc,CAAC9yB,IAAD,CAArB;AACD,KAFD,MAEO,IACL,OAAOA,IAAP,KAAgB,QAAhB,IACAnjI,MAAM,CAACiS,IAAP,CAAYkxH,IAAZ,EAAkBrqH,IAAlB,CAAuByY,CAAC,IAAIA,CAAC,CAAC,CAAD,CAAD,KAAS,GAArC,CAFK,EAGL;AACA;AACA,aAAO+kI,eAAe,CAAC7wH,KAAD,EAAQ09F,IAAR,CAAtB;AACD;AACF;;AAED,SAAO8yB,cAAc,CAAC9yB,IAAD,CAArB;AACD,CAlC4B,CAA7B;;AAoCA,SAASozB,UAAT,CAAoBnwJ,IAApB,EAA0B3B,IAA1B,EAAgC+xJ,aAAhC,EAA+C;AAC7C,MAAIA,aAAa,CAACprJ,OAAd,CAAsB3G,IAAI,CAAC8U,IAA3B,MAAqC,CAAC,CAA1C,EAA6C;AAC3C,UAAM,IAAIi5I,YAAJ,CACH,iCAAgCpsJ,IAAK,oBAAmB4E,IAAI,CAACC,SAAL,CACvDurJ,aADuD,CAEvD,KAAIxrJ,IAAI,CAACC,SAAL,CAAexG,IAAI,CAAC9H,KAApB,CAA2B,EAH7B,CAAN;AAKD;AACF;;AAED,SAAS85J,eAAT,CAAyBrwJ,IAAzB,EAA+BlK,IAA/B,EAAqC4yB,GAArC,EAA0C;AACxC,MAAI5yB,IAAI,CAACkH,MAAL,KAAgB0rB,GAApB,EAAyB;AACvB,UAAM,IAAI0jI,YAAJ,CACH,6BAA4BpsJ,IAAK,cAAa0oB,GAAI,iBAAgB5yB,IAAI,CAACkH,MAAO,EAD3E,GAAN;AAGD;AACF;;AAED,MAAMkzJ,eAAe,GAAGf,SAAS,CAAC,UAAD,EAAa,CAAC9vH,KAAD,EAAQ5F,IAAR,KAAiB;AAC7D,qBAAa7/B,MAAM,CAACiS,IAAP,CAAY4tB,IAAZ,CAAb;AAAA;AAAA,MAAKz5B,IAAL;;AACA,MAAIswJ,QAAQ,GAAG72H,IAAI,CAACz5B,IAAD,CAAnB;;AACA,MAAI,CAAClF,KAAK,CAACwD,OAAN,CAAcgyJ,QAAd,CAAL,EAA8B;AAC5BA,YAAQ,GAAG,CAACA,QAAD,CAAX;AACD;;AAED,MAAItwJ,IAAI,CAAC,CAAD,CAAJ,KAAY,GAAhB,EAAqB;AACnB,UAAM,IAAIosJ,YAAJ,CACH,qBAAoBpsJ,IAAK,6DADtB,CAAN;AAGD;;AAED,MAAIlK,IAAI,GAAGw6J,QAAX,CAb6D,CAc7D;;AACA,MAAItwJ,IAAI,KAAK,YAAb,EAA2B;AACzBlK,QAAI,GAAGw6J,QAAQ,CAACv2J,GAAT,CAAaoO,GAAG,IAAI2nJ,WAAW,CAACzwH,KAAD,EAAQl3B,GAAR,CAA/B,CAAP;AACD;;AAED,UAAQnI,IAAR;AACE;AACA,SAAK,MAAL;AAAa;AACXkvJ,yBAAiB,CAACp5J,IAAD,EAAO,CAAP,CAAjB;;AACA,wBAAak5J,QAAQ,CAAC3vH,KAAD,EAAQvpC,IAAR,EAAc,CAAC,OAAD,CAAd,CAArB;AAAA;AAAA,YAAKy6J,IAAL;;AACA,eAAOvD,KAAK,CAAE,OAAMuD,IAAK,GAAb,EAAiBz6J,IAAI,CAAC,CAAD,CAAJ,CAAQqd,IAAzB,CAAZ;AACD;;AAED,SAAK,UAAL;AAAiB;AACf,yBAAa67I,QAAQ,CAAC3vH,KAAD,EAAQvpC,IAAR,EAAc,CAAC,OAAD,CAAd,CAArB;AAAA;AAAA,YAAKy6J,IAAL;;AACA,YAAI1yB,KAAK,GAAGx+F,KAAK,CAACmxH,MAAN,GACR,cAAcC,cAAc,CAACpxH,KAAD,EAAQA,KAAK,CAACmxH,MAAd,CADpB,GAER,EAFJ;AAIA,eAAOxD,KAAK,CACT,QAAOuD,IAAK,WAAU1yB,KAAM,qDADnB,EAEV/nI,IAAI,CAAC,CAAD,CAAJ,CAAQqd,IAFE,CAAZ;AAID;;AAED,SAAK,QAAL;AAAe;AACb+7I,yBAAiB,CAACp5J,IAAD,EAAO,CAAP,CAAjB;;AACA,yBAAak5J,QAAQ,CAAC3vH,KAAD,EAAQvpC,IAAR,CAArB;AAAA;AAAA,YAAKy6J,IAAL;;AACA,eAAOvD,KAAK,CAAE,SAAQuD,IAAK,GAAf,EAAmB,SAAnB,CAAZ;AACD;AAED;;AACA,SAAK,SAAL;AAAgB;AACdrB,yBAAiB,CAACp5J,IAAD,EAAO,CAAP,EAAU,CAAV,CAAjB;;AACA,yBAAyBk5J,QAAQ,CAAC3vH,KAAD,EAAQvpC,IAAR,EAAc,CAC7C,QAD6C,EAE7C,SAF6C,EAG7C,SAH6C,CAAd,CAAjC;AAAA;AAAA,YAAKy6J,IAAL;AAAA,YAAWG,IAAX;AAAA,YAAiBC,IAAjB;;AAKA,eAAO3D,KAAK,CAAE,UAASuD,IAAK,KAAIG,IAAK,KAAIC,IAAK,GAAlC,EAAsC,QAAtC,CAAZ;AACD;;AACD,SAAK,QAAL;AAAe;AACbzB,yBAAiB,CAACp5J,IAAD,EAAO,CAAP,CAAjB;;AACA,yBAAak5J,QAAQ,CAAC3vH,KAAD,EAAQvpC,IAAR,EAAc,CAAC,QAAD,CAAd,CAArB;AAAA;AAAA,YAAKy6J,IAAL;;AACA,eAAOvD,KAAK,CAAE,SAAQuD,IAAK,GAAf,EAAmB,QAAnB,CAAZ;AACD;AAED;;AACA,SAAK,MAAL;AAAa;AACXrB,yBAAiB,CAACp5J,IAAD,EAAO,CAAP,CAAjB;;AACA,0BAAak5J,QAAQ,CAAC3vH,KAAD,EAAQvpC,IAAR,EAAc,CAAC,OAAD,CAAd,CAArB;AAAA;AAAA,YAAKy6J,IAAL;;AACA,eAAOvD,KAAK,CAAE,KAAIh3I,GAAG,CAACqpB,KAAD,EAAQvpC,IAAI,CAAC,CAAD,CAAZ,CAAiB,GAA1B,EAA8BA,IAAI,CAAC,CAAD,CAAJ,CAAQqd,IAAtC,CAAZ;AACD;;AACD,SAAK,MAAL;AAAa;AACX+7I,yBAAiB,CAACp5J,IAAD,EAAO,CAAP,CAAjB;;AACA,0BAAak5J,QAAQ,CAAC3vH,KAAD,EAAQvpC,IAAR,EAAc,CAAC,OAAD,CAAd,CAArB;AAAA;AAAA,YAAKy6J,IAAL;;AACA,eAAOvD,KAAK,CAAE,OAAMh3I,GAAG,CAACqpB,KAAD,EAAQvpC,IAAI,CAAC,CAAD,CAAZ,CAAiB,GAA5B,EAAgCA,IAAI,CAAC,CAAD,CAAJ,CAAQqd,IAAxC,CAAZ;AACD;;AACD,SAAK,OAAL;AAAc;AACZ+7I,yBAAiB,CAACp5J,IAAD,EAAO,CAAP,CAAjB;;AACA,0BAAmBk5J,QAAQ,CAAC3vH,KAAD,EAAQvpC,IAAR,EAAc,CAAC,SAAD,EAAY,SAAZ,CAAd,CAA3B;AAAA;AAAA,YAAKy6J,IAAL;AAAA,YAAWG,IAAX;;AACA,eAAO1D,KAAK,CACT,IAAGh3I,GAAG,CAACqpB,KAAD,EAAQvpC,IAAI,CAAC,CAAD,CAAZ,CAAiB,MAAKkgB,GAAG,CAACqpB,KAAD,EAAQvpC,IAAI,CAAC,CAAD,CAAZ,CAAiB,GADvC,EAEVA,IAAI,CAAC,CAAD,CAAJ,CAAQqd,IAFE,CAAZ;AAID;AAED;;AACA,SAAK,QAAL;AAAe;AACb+7I,yBAAiB,CAACp5J,IAAD,EAAO,CAAP,CAAjB;AACA,eAAO+4J,SAAS,CAACxvH,KAAD,EAAQvpC,IAAI,CAAC,CAAD,CAAZ,EAAiB,YAAjB,CAAhB;AACD;;AACD,SAAK,OAAL;AAAc;AACZo5J,yBAAiB,CAACp5J,IAAD,EAAO,CAAP,CAAjB;AACA,eAAO+4J,SAAS,CAACxvH,KAAD,EAAQvpC,IAAI,CAAC,CAAD,CAAZ,EAAiB,WAAjB,CAAhB;AACD;AAED;;AACA,SAAK,YAAL;AACEo5J,uBAAiB,CAACp5J,IAAD,EAAO,CAAP,CAAjB;AACA,UAAI86J,KAAK,GAAGC,iBAAiB,CAACxxH,KAAD,EAAQvpC,IAAI,CAAC,CAAD,CAAZ,CAA7B;AACA,aAAOk3J,KAAK,CAAC4D,KAAK,CAAC74I,IAAN,CAAW,OAAX,CAAD,EAAsB,SAAtB,CAAZ;;AAEF,SAAK,SAAL;AACEm3I,uBAAiB,CAACp5J,IAAD,EAAO,CAAP,CAAjB;;AACA,wBAAak5J,QAAQ,CAAC3vH,KAAD,EAAQvpC,IAAR,EAAc,CAAC,QAAD,CAAd,CAArB;AAAA;AAAA,UAAKy6J,IAAL;;AACA,aAAOvD,KAAK,CAAE,GAAEuD,IAAK,iBAAT,EAA2Bz6J,IAAI,CAAC,CAAD,CAAJ,CAAQqd,IAAnC,CAAZ;;AAEF,SAAK,UAAL;AAAiB;AACf+7I,yBAAiB,CAACp5J,IAAD,EAAO,CAAP,CAAjB;;AACA,YAAI,CAACA,IAAI,CAAC,CAAD,CAAJ,CAAQm3J,OAAb,EAAsB;AACpB,gBAAM,IAAIb,YAAJ,CAAiB,gCAAjB,CAAN;AACD;;AACD,eAAOt2J,IAAI,CAAC,CAAD,CAAX;AACD;;AACD;AACE,YAAM,IAAIs2J,YAAJ,CAAkB,qBAAoBpsJ,IAAK,EAA3C,CAAN;AA3FJ;AA6FD,CAhHgC,CAAjC;AAkHA,MAAM8wJ,SAAS,GAAG3B,SAAS,CAAC,IAAD,EAAO,CAAC9vH,KAAD,EAAQowH,QAAR,EAAkBC,MAAlB,KAA6B;AAC7D,MAAMvM,UAAN,GAAgCuM,MAAhC,CAAMvM,UAAN;AAAA,MAAqB4N,MAArB,4BAAgCrB,MAAhC;;AACA,sBAAW91J,MAAM,CAACiS,IAAP,CAAYklJ,MAAZ,CAAX;AAAA;AAAA,MAAKrZ,EAAL;;AAEA,MAAIsZ,GAAG,GAAGlB,WAAW,CAACzwH,KAAD,EAAQqwH,MAAM,CAAChY,EAAD,CAAd,CAArB;AAEA,MAAIuZ,GAAJ;;AACA,MAAI9N,UAAJ,EAAgB;AACd8N,OAAG,GAAGf,eAAe,iCACd7wH,KADc;AACP0wH,mBAAa,EAAEN;AADR,QAEnB,OAAOtM,UAAP,KAAsB,QAAtB,GAAiC;AAAE,OAACA,UAAD,GAAc;AAAhB,KAAjC,GAAyDA,UAFtC,CAArB;AAID,GALD,MAKO;AACL8N,OAAG,GAAGnB,WAAW,CAACzwH,KAAD,EAAQ,MAAMowH,QAAd,CAAjB;AACD;;AAED,UAAQ/X,EAAR;AACE,SAAK,MAAL;AAAa;AACX,0BAAoBsX,QAAQ,CAAC3vH,KAAD,EAAQ,CAAC4xH,GAAD,EAAMD,GAAN,CAAR,EAAoB,CAAC,IAAD,EAAOC,GAAG,CAAC99I,IAAX,CAApB,CAA5B;AAAA;AAAA,YAAK+9I,IAAL;AAAA,YAAWC,KAAX;;AACA,eAAQ,GAAED,IAAK,OAAMC,KAAM,EAA3B;AACD;;AACD,SAAK,MAAL;AAAa;AACX,0BAAoBnC,QAAQ,CAAC3vH,KAAD,EAAQ,CAAC4xH,GAAD,EAAMD,GAAN,CAAR,EAAoB,CAAC,IAAD,EAAOC,GAAG,CAAC99I,IAAX,CAApB,CAA5B;AAAA;AAAA,YAAK+9I,IAAL;AAAA,YAAWC,KAAX;;AACA,eAAQ,GAAED,IAAK,OAAMC,KAAM,EAA3B;AACD;;AACD,SAAK,KAAL;AAAY;AACV,0BAAoBnC,QAAQ,CAAC3vH,KAAD,EAAQ,CAAC4xH,GAAD,EAAMD,GAAN,CAAR,EAAoB,CAAC,IAAD,EAAOC,GAAG,CAAC99I,IAAX,CAApB,CAA5B;AAAA;AAAA,YAAK+9I,IAAL;AAAA,YAAWC,KAAX;;AACA,eAAQ,GAAED,IAAK,MAAKC,KAAM,EAA1B;AACD;;AACD,SAAK,KAAL;AAAY;AACV,0BAAoBnC,QAAQ,CAAC3vH,KAAD,EAAQ,CAAC4xH,GAAD,EAAMD,GAAN,CAAR,EAAoB,CAAC,IAAD,EAAOC,GAAG,CAAC99I,IAAX,CAApB,CAA5B;AAAA;AAAA,YAAK+9I,IAAL;AAAA,YAAWC,KAAX;;AACA,eAAQ,GAAED,IAAK,MAAKC,KAAM,EAA1B;AACD;;AACD,SAAK,KAAL;AAAY;AACV,YAAItC,SAAS,CAACxvH,KAAD,EAAQ2xH,GAAR,EAAaC,GAAG,CAAC99I,IAAjB,CAAT,CAAgCA,IAAhC,KAAyC,MAA7C,EAAqD;AACnD,iBAAQ,GAAE6C,GAAG,CAACqpB,KAAD,EAAQ4xH,GAAR,CAAa,UAA1B;AACD;;AAED,0BAAoBjC,QAAQ,CAAC3vH,KAAD,EAAQ,CAAC4xH,GAAD,EAAMD,GAAN,CAAR,EAAoB,CAAC,IAAD,EAAOC,GAAG,CAAC99I,IAAX,CAApB,CAA5B;AAAA;AAAA,YAAK+9I,IAAL;AAAA,YAAWC,KAAX;;AAEA,YAAIH,GAAG,CAAC79I,IAAJ,KAAa,OAAjB,EAA0B;AACxB,cAAIq9I,MAAM,GAAGnxH,KAAK,CAAC4wH,eAAN,CAAsBl2J,GAAtB,CAA0BujF,KAAK,IAAI;AAC9C,mBAAOA,KAAK,KAAK0zE,GAAV,IAAiB1zE,KAAK,KAAK2zE,GAA3B,GAAiC,CAAC3zE,KAAD,oBAAaA,KAAb,EAAjC,GAAyDA,KAAhE;AACD,WAFY,CAAb;AAGAj+C,eAAK,CAAC4wH,eAAN,GAAwB,GAAGj8H,MAAH,CAAU6F,KAAV,CAAgB,EAAhB,EAAoB22H,MAApB,CAAxB;AAEA,iBAAQ;AAChB,iBAAiBU,IAAK,iBAAgBC,KAAM;AAC5C,iBAAiBD,IAAK,MAAKC,KAAM;AACjC,YAHQ;AAID;;AAED,eAAQ,GAAED,IAAK,MAAKC,KAAM,EAA1B;AACD;;AACD,SAAK,QAAL;AAAe;AACb,0BAAoBnC,QAAQ,CAAC3vH,KAAD,EAAQ,CAAC4xH,GAAD,EAAMD,GAAN,CAAR,EAAoB,CAAC,IAAD,EAAO,OAAP,CAApB,CAA5B;AAAA;AAAA,YAAKE,IAAL;AAAA,YAAWC,KAAX,kBADa,CAEb;;;AACA,YAAI1L,GAAG,GAAG,CAAC,GAAG,IAAIp0I,GAAJ,CAAQ8/I,KAAR,CAAJ,CAAV;AACA,eAAQ,GAAED,IAAK,OAAR,GAAiBzL,GAAG,CAAC1rJ,GAAJ,CAAQskI,EAAE,IAAK,IAAGA,EAAG,GAArB,EAAyBtmH,IAAzB,CAA8B,GAA9B,CAAjB,GAAsD,GAA7D;AACD;;AACD,SAAK,OAAL;AAAc;AACZ,0BAAoBi3I,QAAQ,CAAC3vH,KAAD,EAAQ,CAAC4xH,GAAD,EAAMD,GAAN,CAAR,EAAoB,CAAC,QAAD,EAAW,QAAX,CAApB,CAA5B;AAAA;AAAA,YAAKE,IAAL;AAAA,YAAWC,KAAX;;AACA,eAAQ,GAAED,IAAK,SAAQC,KAAM,EAA7B;AACD;;AACD;AACE,YAAM,IAAI/E,YAAJ,CAAkB,qBAAoB1U,EAAG,EAAzC,CAAN;AAjDJ;AAmDD,CAnE0B,CAA3B;;AAqEA,SAASmZ,iBAAT,CAA2BxxH,KAA3B,EAAkCuxH,KAAlC,EAAyC;AACvC,MAAI,CAAC91J,KAAK,CAACwD,OAAN,CAAcsyJ,KAAd,CAAL,EAA2B;AACzB;AACA;AACAA,SAAK,GAAGh3J,MAAM,CAAC4kB,OAAP,CAAeoyI,KAAf,EAAsB72J,GAAtB,CAA0B2/I,IAAI,IAAI;AACxC,aAAO;AAAE,SAACA,IAAI,CAAC,CAAD,CAAL,GAAWA,IAAI,CAAC,CAAD;AAAjB,OAAP;AACD,KAFO,CAAR;AAGD;;AAED,SAAOkX,KAAK,CAACnzJ,MAAN,CAAaw9C,OAAb,EAAsBhkD,MAAtB,CAA6B,CAACw1H,GAAD,EAAM2kC,QAAN,KAAmB;AACrD,QAAIC,QAAQ,GAAGz3J,MAAM,CAAC4kB,OAAP,CAAe4yI,QAAf,EACZr3J,GADY,CACR,CAAC,CAACimC,KAAD,EAAQ05G,IAAR,CAAD,KAAmB;AACtB;AACA;AACA,UAAI15G,KAAK,KAAK,MAAd,EAAsB;AACpB,YAAI,CAAC05G,IAAL,EAAW;AACT,iBAAO,IAAP;AACD;;AACD,eAAO4X,UAAU,CAACjyH,KAAD,EAAQq6G,IAAR,CAAjB;AACD,OALD,MAKO,IAAI15G,KAAK,KAAK,KAAd,EAAqB;AAC1B,YAAI,CAAC05G,IAAL,EAAW;AACT,iBAAO,IAAP;AACD;;AACD,eAAO6X,SAAS,CAAClyH,KAAD,EAAQq6G,IAAR,CAAhB;AACD;;AAED,UACE,OAAOA,IAAP,KAAgB,QAAhB,IACA,OAAOA,IAAP,KAAgB,QADhB,IAEA,OAAOA,IAAP,KAAgB,SAFhB,IAGAA,IAAI,YAAYv4I,IAHhB,IAIAu4I,IAAI,IAAI,IALV,EAME;AACA,eAAOoX,SAAS,CAACzxH,KAAD,EAAQW,KAAR,EAAe;AAAEojH,aAAG,EAAE1J;AAAP,SAAf,CAAhB;AACD;;AAED,UAAI5+I,KAAK,CAACwD,OAAN,CAAco7I,IAAd,CAAJ,EAAyB;AACvB;AACA,eAAOA,IAAI,CAAC3/I,GAAL,CAASuxB,CAAC,IAAIwlI,SAAS,CAACzxH,KAAD,EAAQW,KAAR,EAAe1U,CAAf,CAAvB,EAA0CvT,IAA1C,CAA+C,OAA/C,CAAP;AACD;;AACD,aAAO+4I,SAAS,CAACzxH,KAAD,EAAQW,KAAR,EAAe05G,IAAf,CAAhB;AACD,KA/BY,EAgCZj8I,MAhCY,CAgCLw9C,OAhCK,CAAf;AAkCA,WAAO,CAAC,GAAGwxE,GAAJ,EAAS,GAAG4kC,QAAZ,CAAP;AACD,GApCM,EAoCJ,EApCI,CAAP;AAqCD;;AAED,SAASE,SAAT,CAAmBlyH,KAAnB,EAA0BuxH,KAA1B,EAAiC;AAC/B;AACA,MAAI,CAACA,KAAL,EAAY;AACV,WAAO,GAAP;AACD;;AACD,MAAInkC,GAAG,GAAGokC,iBAAiB,CAACxxH,KAAD,EAAQuxH,KAAR,CAA3B;;AACA,MAAInkC,GAAG,CAACzvH,MAAJ,KAAe,CAAnB,EAAsB;AACpB,WAAO,GAAP;AACD;;AACD,SAAO,MAAMyvH,GAAG,CAAC10G,IAAJ,CAAS,SAAT,CAAN,GAA4B,GAAnC;AACD;;AAED,SAASu5I,UAAT,CAAoBjyH,KAApB,EAA2BuxH,KAA3B,EAAkC;AAChC;AACA,MAAI,CAACA,KAAL,EAAY;AACV,WAAO,GAAP;AACD;;AACD,MAAInkC,GAAG,GAAGokC,iBAAiB,CAACxxH,KAAD,EAAQuxH,KAAR,CAA3B;;AACA,MAAInkC,GAAG,CAACzvH,MAAJ,KAAe,CAAnB,EAAsB;AACpB,WAAO,GAAP;AACD;;AACD,SAAO,MAAMyvH,GAAG,CAAC10G,IAAJ,CAAS,UAAT,CAAN,GAA6B,GAApC;AACD;;AAED,MAAMy5I,YAAY,GAAGrC,SAAS,CAAC,QAAD,EAAW,CAAC9vH,KAAD,EAAQuxH,KAAR,KAAkB;AACzD,SAAOU,UAAU,CAACjyH,KAAD,EAAQuxH,KAAR,CAAjB;AACD,CAF6B,CAA9B;;AAIA,SAASa,YAAT,CAAsBpyH,KAAtB,EAA6BqyH,QAA7B,EAAuCC,oBAAvC,EAA6D;AAC3D,MAAIC,KAAK,GAAG,EAAZ;AACAvyH,OAAK,CAACgnG,KAAN,CAAYn9H,OAAZ,CAAoB,CAACwwB,IAAD,EAAO1I,IAAP,KAAgB;AAClC,2BAMIqO,KAAK,CAACgnG,KAAN,CAAYptI,GAAZ,CAAgB+3B,IAAhB,CANJ;AAAA,QACEm7H,SADF,oBACEA,SADF;AAAA,QAEEO,OAFF,oBAEEA,OAFF;AAAA,QAGEiB,SAHF,oBAGEA,SAHF;AAAA,QAIEJ,SAJF,oBAIEA,SAJF;AAAA,QAKEa,SALF,oBAKEA,SALF;;AAQA,QAAI9kI,EAAE,GAAI,GAAEojI,OAAQ,SAAQgF,QAAQ,CAACnE,SAAD,CAAY,IAAGR,UAAU,CAACY,SAAD,CAAY,EAAzE;AAEA,QAAI3K,OAAO,GAAG2O,oBAAoB,CAACxF,SAAD,CAAlC;;AACA,QAAInJ,OAAO,CAAChmJ,MAAR,GAAiB,CAArB,EAAwB;AACtBssB,QAAE,IACA,UACAgoI,UAAU,iCACHjyH,KADG;AACIyuH,yBAAiB,EAAE3B,SADvB;AACkC8B,uBAAe,EAAEvB;AADnD,UAER1J,OAFQ,CAFZ;AAMD;;AAED4O,SAAK,CAAC/1J,IAAN,CACG,aACCuyJ,SAAS,GAAGjC,SAAH,GAAeuF,QAAQ,CAACvF,SAAD,EAAY,IAAZ,CACjC,IAAGO,OAAQ,OAAMF,YAAY,CAACntH,KAAK,CAACotH,MAAP,EAAeN,SAAf,EAA0BO,OAA1B,EAAmCpjI,EAAnC,CAAuC,EAHvE;;AAMA,QAAI+V,KAAK,CAACwyH,YAAN,CAAmB7sJ,OAAnB,CAA2BmnJ,SAA3B,MAA0C,CAAC,CAA/C,EAAkD;AAChD9sH,WAAK,CAACwyH,YAAN,CAAmBh2J,IAAnB,CAAwBswJ,SAAxB;AACD;AACF,GA9BD;AA+BA,SAAOyF,KAAK,CAAC75I,IAAN,CAAW,IAAX,CAAP;AACD;;AAED,SAAS+5I,UAAT,CAAoBzyH,KAApB,EAA2B09F,IAA3B,EAAiC;AAC/B,MAAI/rG,IAAJ;AACA,MAAI+8H,QAAJ;;AACA,MAAIhxB,IAAI,KAAK,GAAb,EAAkB;AAChBgxB,YAAQ,GAAG;AACT5B,eAAS,EAAE9sH,KAAK,CAACyuH,iBADR;AAETpB,aAAO,EAAErtH,KAAK,CAAC4uH;AAFN,KAAX;AAID,GALD,MAKO,IAAIlxB,IAAI,CAAC5mH,KAAL,CAAW,OAAX,CAAJ,EAAyB;AAC9B,QAAIpL,MAAM,GAAG8hJ,OAAO,CAAC9vB,IAAD,CAApB;AACA/rG,QAAI,GAAGjmB,MAAM,CAACimB,IAAd;AACA+8H,YAAQ,GAAGH,WAAW,CAACvuH,KAAD,EAAQt0B,MAAM,CAACimB,IAAf,CAAtB;AACD;;AAED,MAAI+sG,KAAK,GAAG1+F,KAAK,CAACotH,MAAN,CAAasB,QAAQ,CAAC5B,SAAtB,CAAZ;;AACA,MAAIpuB,KAAK,IAAI,IAAb,EAAmB;AACjB,UAAM,IAAIviI,KAAJ,CAAW,UAASuyJ,QAAQ,CAAC5B,SAAU,kBAAvC,CAAN;AACD;;AAED,SAAOvyJ,MAAM,CAACiS,IAAP,CAAYkyH,KAAZ,EAAmBhkI,GAAnB,CAAuBimC,KAAK,IAAKhP,IAAI,GAAI,GAAEA,IAAK,IAAGgP,KAAM,EAApB,GAAwBA,KAA7D,CAAP;AACD;;AAED,MAAM+xH,aAAa,GAAG5C,SAAS,CAC7B,QAD6B,EAE7B,CAAC9vH,KAAD,EAAQ49F,KAAR,EAAe+0B,WAAf,EAA4BxB,MAA5B,KAAuC;AACrC;AACA,MAAI,CAACwB,WAAD,IAAgB,CAAC/0B,KAAK,CAACxuH,QAAN,CAAe,IAAf,CAAjB,IAAyC,CAACwuH,KAAK,CAACxuH,QAAN,CAAe,GAAf,CAA9C,EAAmE;AACjEwuH,SAAK,GAAGA,KAAK,CAACjpG,MAAN,CAAa,CAAC,IAAD,CAAb,CAAR;AACD;;AAED,MAAImpG,MAAM,GAAGF,KAAK,CAACljI,GAAN,CAAUgjI,IAAI,IAAI;AAC7B,QAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5B,UAAIA,IAAI,CAAC/3H,OAAL,CAAa,GAAb,MAAsB,CAAC,CAA3B,EAA8B;AAC5B,YAAIq6H,MAAM,GAAGyyB,UAAU,CAACzyH,KAAD,EAAQ09F,IAAR,CAAvB;AAEA,eAAOsC,MAAM,CACVtlI,GADI,CACAimC,KAAK,IAAI;AACZ,cAAIqxH,QAAQ,GAAGvB,WAAW,CAACzwH,KAAD,EAAQ,MAAMW,KAAd,CAA1B;AACAX,eAAK,CAAC4yH,WAAN,CAAkBz1J,GAAlB,CAAsBwjC,KAAtB,EAA6BqxH,QAAQ,CAACl+I,IAAtC;AACA,iBAAOk+I,QAAQ,CAAC96J,KAAT,GAAiB,MAAjB,GAA0Bw2J,UAAU,CAAC/sH,KAAD,CAA3C;AACD,SALI,EAMJjoB,IANI,CAMC,IAND,CAAP;AAOD;;AAED,UAAIs5I,QAAQ,GAAGvB,WAAW,CAACzwH,KAAD,EAAQ,MAAM09F,IAAd,CAA1B;AACA19F,WAAK,CAAC4yH,WAAN,CAAkBz1J,GAAlB,CAAsBugI,IAAtB,EAA4Bs0B,QAAQ,CAACl+I,IAArC;AACA,aAAOk+I,QAAQ,CAAC96J,KAAT,GAAiB,MAAjB,GAA0Bw2J,UAAU,CAAChwB,IAAD,CAA3C;AACD;;AAED,0CAAoBnjI,MAAM,CAAC4kB,OAAP,CAAeu+G,IAAf,EAAqB,CAArB,CAApB;AAAA,QAAK/8H,IAAL;AAAA,QAAWzJ,KAAX;;AACA,QAAIyJ,IAAI,CAAC,CAAD,CAAJ,KAAY,GAAhB,EAAqB;AACnBq/B,WAAK,CAAC+vH,YAAN,CAAmBvzJ,IAAnB,CAAwB;AAAEsX,YAAI,EAAE,OAAR;AAAiB5c,aAAK,EAAEwmI;AAAxB,OAAxB;AACA,YAAM,IAAIqvB,YAAJ,CACH,kBAAiBpsJ,IAAK,yEADnB,CAAN;AAGD;;AAED,QAAI,OAAOzJ,KAAP,KAAiB,QAArB,EAA+B;AAC7B,UAAI86J,QAAQ,GAAGvB,WAAW,CAACzwH,KAAD,EAAQ,MAAM9oC,KAAd,CAA1B;AACA8oC,WAAK,CAAC4yH,WAAN,CAAkBz1J,GAAlB,CAAsBwD,IAAtB,EAA4BqxJ,QAAQ,CAACl+I,IAArC;AACA,aAAQ,GAAEk+I,QAAQ,CAAC96J,KAAM,OAAMw2J,UAAU,CAAC/sJ,IAAD,CAAO,EAAhD;AACD;;AAED,QAAIqxJ,QAAQ,GAAGnB,eAAe,iCAAM7wH,KAAN;AAAamxH;AAAb,QAAuBj6J,KAAvB,CAA9B;AACA8oC,SAAK,CAAC4yH,WAAN,CAAkBz1J,GAAlB,CAAsBwD,IAAtB,EAA4BqxJ,QAAQ,CAACl+I,IAArC;AACA,WAAOk+I,QAAQ,CAAC96J,KAAT,GAAkB,OAAMw2J,UAAU,CAAC/sJ,IAAD,CAAO,EAAhD;AACD,GApCY,CAAb;AAsCA,SAAOm9H,MAAM,CAACplH,IAAP,CAAY,IAAZ,CAAP;AACD,CA/C4B,CAA/B;AAkDA,MAAMm6I,cAAc,GAAG/C,SAAS,CAAC,SAAD,EAAY,CAAC9vH,KAAD,EAAQ49F,KAAR,KAAkB;AAC5D,MAAIK,OAAO,GAAGL,KAAK,CAACljI,GAAN,CAAUgjI,IAAI,IAAI;AAC9B,QAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5B,aAAO+yB,WAAW,CAACzwH,KAAD,EAAQ,MAAM09F,IAAd,CAAX,CAA+BxmI,KAAtC;AACD;;AAED,WAAO25J,eAAe,CAAC7wH,KAAD,EAAQ09F,IAAR,CAAf,CAA6BxmI,KAApC;AACD,GANa,CAAd;AAQA,SAAO+mI,OAAO,CAACvlH,IAAR,CAAa,IAAb,CAAP;AACD,CAV+B,CAAhC;AAYA,MAAM04I,cAAc,GAAGtB,SAAS,CAAC,SAAD,EAAY,CAAC9vH,KAAD,EAAQ49F,KAAR,KAAkB;AAC5D,MAAIM,OAAO,GAAGN,KAAK,CAACljI,GAAN,CAAUgjI,IAAI,IAAI;AAC9B,QAAIs0B,QAAJ;AACA,QAAI19H,GAAG,GAAG,IAAV;;AAEA,QAAI,OAAOopG,IAAP,KAAgB,QAApB,EAA8B;AAC5Bs0B,cAAQ,GAAGvB,WAAW,CAACzwH,KAAD,EAAQ,MAAM09F,IAAd,CAAX,CAA+BxmI,KAA1C;AACD,KAFD,MAEO;AACL,UAAIioB,OAAO,GAAG5kB,MAAM,CAAC4kB,OAAP,CAAeu+G,IAAf,CAAd;AACA,UAAI5rH,KAAK,GAAGqN,OAAO,CAAC,CAAD,CAAnB,CAFK,CAIL;;AACA,UAAIA,OAAO,CAACxhB,MAAR,KAAmB,CAAnB,IAAwBmU,KAAK,CAAC,CAAD,CAAL,CAAS,CAAT,MAAgB,GAA5C,EAAiD;AAC/CwiB,WAAG,GAAGxiB,KAAK,CAAC,CAAD,CAAX;AACAkgJ,gBAAQ,GAAGvB,WAAW,CAACzwH,KAAD,EAAQ,MAAMluB,KAAK,CAAC,CAAD,CAAnB,CAAX,CAAmC5a,KAA9C;AACD,OAHD,MAGO;AACL;AACA,YAAM47J,IAAN,GAAwBp1B,IAAxB,CAAMo1B,IAAN;AAAA,YAAe14H,IAAf,4BAAwBsjG,IAAxB;;AACAppG,WAAG,GAAGw+H,IAAN;AACAd,gBAAQ,GAAGnB,eAAe,CAAC7wH,KAAD,EAAQ5F,IAAR,CAAf,CAA6BljC,KAAxC;AACD;AACF;;AAED,QAAIo9B,GAAG,IAAI,IAAX,EAAiB;AACf,UAAIA,GAAG,KAAK,MAAR,IAAkBA,GAAG,KAAK,KAA9B,EAAqC;AACnC,cAAM,IAAIy4H,YAAJ,CAAiB,8BAA8Bz4H,GAA/C,CAAN;AACD;;AACD,aAAQ,GAAE09H,QAAS,IAAG19H,GAAI,EAA1B;AACD;;AACD,WAAO09H,QAAP;AACD,GA7Ba,CAAd;AA+BA,SAAO9zB,OAAO,CAACxlH,IAAR,CAAa,IAAb,CAAP;AACD,CAjC+B,CAAhC;AAmCA,IAAIq6I,mBAAmB,GAAG,CAAC,MAAD,EAAS,QAAT,CAA1B;;AACA,SAASC,mBAAT,CAA6Bt1B,IAA7B,EAAmC;AACjC,MAAI,OAAOA,IAAP,KAAgB,QAAhB,IAA4BjiI,KAAK,CAACwD,OAAN,CAAcy+H,IAAd,CAAhC,EAAqD;AACnD,WAAO,KAAP;AACD;;AAED,yCAAuBnjI,MAAM,CAAC4kB,OAAP,CAAeu+G,IAAf,EAAqB,CAArB,CAAvB;AAAA,MAAK/8H,IAAL;AAAA,MAAWswJ,QAAX;;AACA,MAAI,CAACx1J,KAAK,CAACwD,OAAN,CAAcgyJ,QAAd,CAAL,EAA8B;AAC5BA,YAAQ,GAAG,CAACA,QAAD,CAAX;AACD;;AAED,MAAI8B,mBAAmB,CAACptJ,OAApB,CAA4BhF,IAA5B,MAAsC,CAAC,CAA3C,EAA8C;AAC5C,WAAO,IAAP;AACD;;AAED,SAAOswJ,QAAQ,CAAC59I,IAAT,CAAc4/I,EAAE,IAAID,mBAAmB,CAACC,EAAD,CAAvC,CAAP;AACD;;AAEM,SAASC,gBAAT,CAA0BC,UAA1B,EAAsC;AAC3C;AACA;AACA;AAEA,MAAIA,UAAU,CAAC/1B,gBAAX,CAA4Bz/H,MAA5B,GAAqC,CAAzC,EAA4C;AAC1C,WAAO,IAAP;AACD;;AAED,SAAOw1J,UAAU,CAACh2B,iBAAX,CAA6B9pH,IAA7B,CAAkCqqH,IAAI,IAAI;AAC/C,QAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5B,6CAAoBnjI,MAAM,CAAC4kB,OAAP,CAAeu+G,IAAf,EAAqB,CAArB,CAApB;AAAA,UAAK/8H,IAAL;AAAA,UAAWzJ,KAAX;;AACA,aAAO87J,mBAAmB,CAAC97J,KAAD,CAA1B;AACD;;AACD,WAAO,KAAP;AACD,GANM,CAAP;AAOD;AAEM,SAASk8J,YAAT,CAAsBD,UAAtB,EAAkC/F,MAAlC,EAA0CvL,YAAY,GAAG,EAAzD,EAA6D;AAClE,MAAMrkB,QAAN,GAA+D21B,UAA/D,CAAM31B,QAAN;AAAA,8BAA+D21B,UAA/D,CAAgB11B,YAAhB;AAAA,MAAgBA,YAAhB,sCAA+B,IAA/B;AAAA,MAAqCW,YAArC,GAA+D+0B,UAA/D,CAAqC/0B,YAArC;AAAA,MAAmDb,OAAnD,GAA+D41B,UAA/D,CAAmD51B,OAAnD;AAEA,8BAIIskB,YAJJ,CACEwR,UADF;AAAA,MACEA,UADF,sCACe,EADf;AAAA,8BAIIxR,YAJJ,CAEEyR,YAFF;AAAA,MAEEA,YAFF,sCAEiB3yJ,IAAI,IAAI,EAFzB;AAAA,8BAIIkhJ,YAJJ,CAGE0R,cAHF;AAAA,MAGEA,cAHF,sCAGmBJ,UAAU,IAAIA,UAHjC;;AAMA,MAAIb,oBAAoB,GAAG3xJ,IAAI,IAAI;AACjC,QAAIgjJ,OAAO,GAAG2P,YAAY,CAAC3yJ,IAAD,CAA1B,CADiC,CAEjC;;AACA,SAAK,IAAIvC,MAAT,IAAmBulJ,OAAnB,EAA4B;AAC1B,UAAIloJ,KAAK,CAACwD,OAAN,CAAcb,MAAd,CAAJ,EAA2B;AACzB,cAAM,IAAI2uJ,YAAJ,CACJ,kEADI,CAAN;AAGD;;AACD,UAAIxyJ,MAAM,CAACiS,IAAP,CAAYpO,MAAZ,EAAoB,CAApB,EAAuBuH,OAAvB,CAA+B,GAA/B,MAAwC,CAAC,CAA7C,EAAgD;AAC9C,cAAM,IAAIonJ,YAAJ,CACJ,iEADI,CAAN;AAGD;AACF;;AACD,WAAOpJ,OAAP;AACD,GAhBD;;AAkBA,MAAI0O,QAAQ,GAAG,CAAC1xJ,IAAD,EAAO6yJ,MAAP,KAAkB;AAC/B,QAAIC,IAAI,GACN,OAAOJ,UAAP,KAAsB,UAAtB,GACIA,UAAU,CAAC1yJ,IAAD,EAAO;AAAE68H,cAAF;AAAYg2B,YAAZ;AAAoBp1B;AAApB,KAAP,CADd,GAEIi1B,UAAU,CAAC1yJ,IAAD,CAHhB;AAIA,WAAO8yJ,IAAI,IAAI9yJ,IAAf;AACD,GAND;;AAQA,MAAImsJ,SAAS,GAAGqG,UAAU,CAACz0B,KAA3B;;AAEA,wBAQI60B,cAAc,CAACJ,UAAD,CARlB;AAAA,MACEj2B,iBADF,mBACEA,iBADF;AAAA,MAEEC,iBAFF,mBAEEA,iBAFF;AAAA,MAGEC,gBAHF,mBAGEA,gBAHF;AAAA,MAIEC,gBAJF,mBAIEA,gBAJF;AAAA,MAKE/yF,KALF,mBAKEA,KALF;AAAA,MAME3lB,MANF,mBAMEA,MANF;AAAA,MAOE24G,WAPF,mBAOEA,WAPF;;AAUA,MAAIQ,MAAM,GAAG,EAAb;AACA,MAAI+oB,KAAK,GAAG,EAAZ;AACA,MAAI0L,KAAK,GAAG,EAAZ;AACA,MAAIt0B,OAAO,GAAG,EAAd;AACA,MAAIC,OAAO,GAAG,EAAd;AACA,MAAIw1B,WAAW,GAAG,EAAlB;AACA,MAAI1zH,KAAK,GAAG;AACVotH,UADU;AAEVqB,qBAAiB,EAAE3B,SAFT;AAGV8B,mBAAe,EAAEyD,QAAQ,CAACvF,SAAD,CAHf;AAIV9lB,SAAK,EAAE,IAAIx7H,GAAJ,EAJG;AAKVgnJ,gBAAY,EAAE,CAAC1F,SAAD,CALJ;AAMViD,gBAAY,EAAE,EANJ;AAOV6C,eAAW,EAAE,IAAIpnJ,GAAJ,EAPH;AAQViyH,gBARU;AASVmzB,mBAAe,EAAE;AATP,GAAZ;AAYAhE,UAAQ;;AAER,MAAI;AACF9uB,UAAM,GAAG40B,aAAa,CACpB1yH,KADoB,EAEpBm9F,iBAFoB,EAGpB+1B,gBAAgB,CAACC,UAAD,CAHI,EAIpB91B,gBAJoB,CAAtB;;AAOA,QAAIH,iBAAiB,CAACv/H,MAAlB,GAA2B,CAA/B,EAAkC;AAChC,UAAI+N,MAAM,GAAGymJ,YAAY,CAACnyH,KAAD,EAAQk9F,iBAAR,CAAzB;AACA2pB,WAAK,GAAG,WAAWn7I,MAAnB;AACD,KAHD,MAGO;AACLm7I,WAAK,GAAG,SAAR;AACD;;AAED,QAAI,CAACtpB,OAAL,EAAc;AACZ,UAAIomB,OAAO,GAAG2O,oBAAoB,CAACxF,SAAD,CAAlC;;AACA,UAAInJ,OAAO,CAAChmJ,MAAR,GAAiB,CAArB,EAAwB;AACtBkpJ,aAAK,IAAI,UAAUoL,UAAU,CAACjyH,KAAD,EAAQ2jH,OAAR,CAA7B;AACD;AACF;;AAED,QAAIvmB,gBAAgB,CAACz/H,MAAjB,GAA0B,CAA9B,EAAiC;AAC/B,UAAI+N,MAAM,GAAGmnJ,cAAc,CAAC7yH,KAAD,EAAQo9F,gBAAR,CAA3B;AACAa,aAAO,GAAG,cAAcvyH,MAAxB;AACD,KAzBC,CA2BF;;;AACA,QAAI2xH,gBAAgB,CAAC1/H,MAAjB,GAA0B,CAA9B,EAAiC;AAC/B,UAAI+N,MAAM,GAAG0lJ,cAAc,CAACpxH,KAAD,EAAQq9F,gBAAR,CAA3B;AACAa,aAAO,GAAG,cAAcxyH,MAAxB;AACD;;AAED,QAAIs0B,KAAK,CAACgnG,KAAN,CAAY1lH,IAAZ,GAAmB,CAAvB,EAA0B;AACxBixI,WAAK,GAAGH,YAAY,CAACpyH,KAAD,EAAQqyH,QAAR,EAAkBC,oBAAlB,CAApB;AACD;AACF,GApCD,CAoCE,OAAOrxI,CAAP,EAAU;AACV,QAAIA,CAAC,YAAY8rI,YAAjB,EAA+B;AAC7B,YAAMmD,eAAe,CAACjvI,CAAD,EAAI+e,KAAK,CAAC+vH,YAAV,CAArB;AACD;;AAED,UAAM9uI,CAAN;AACD;;AAED,MAAI0yI,SAAS,GAAG;AACd71B,UADc;AAEdpiI,QAAI,EAAE22J,QAAQ,CAACvF,SAAD,CAFA;AAGdyF,SAHc;AAId1L,SAJc;AAKd5oB,WALc;AAMdC,WANc;AAOd5zF,SAPc;AAQd3lB;AARc,GAAhB;AAWA,SAAO;AACLgvI,aADK;AAEL3zH;AAFK,GAAP;AAID;AAEM,SAAS4zH,qBAAT,CAA+BT,UAA/B,EAA2CnzH,KAA3C,EAAkD2zH,SAAlD,EAA6D;AAClE,MAAI91J,CAAC,GAAG81J,SAAR;AAEA,MAAI9M,KAAK,GAAGsM,UAAU,CAAC31B,QAAX,GACR3/H,CAAC,CAACgpJ,KADM,GAERsG,YAAY,CACVntH,KAAK,CAACotH,MADI,EAEVptH,KAAK,CAACyuH,iBAFI,EAGVzuH,KAAK,CAAC4uH,eAHI,EAIV/wJ,CAAC,CAACgpJ,KAJQ,CAFhB;AASA,SAAQ;AACV,aAAahpJ,CAAC,CAACigI,MAAO,SAAQjgI,CAAC,CAACnC,IAAK;AACrC,MAAMmC,CAAC,CAAC00J,KAAM;AACd,MAAM1L,KAAM;AACZ,MAAMhpJ,CAAC,CAACogI,OAAQ;AAChB,MAAMpgI,CAAC,CAACqgI,OAAQ;AAChB,MAAMrgI,CAAC,CAACysC,KAAF,IAAW,IAAX,GAAmB,SAAQzsC,CAAC,CAACysC,KAAM,EAAnC,GAAuC,EAAG;AAChD,MAAMzsC,CAAC,CAAC8mB,MAAF,IAAY,IAAZ,GAAoB,UAAS9mB,CAAC,CAAC8mB,MAAO,EAAtC,GAA0C,EAAG;AACnD,GARE;AASD;AAEM,SAASkvI,oBAAT,CAA8BV,UAA9B,EAA0C/F,MAA1C,EAAkDvL,YAAlD,EAAgE;AACrE,sBAA2BuR,YAAY,CAACD,UAAD,EAAa/F,MAAb,EAAqBvL,YAArB,CAAvC;AAAA,MAAM8R,SAAN,iBAAMA,SAAN;AAAA,MAAiB3zH,KAAjB,iBAAiBA,KAAjB;;AACA,SAAO;AAAE+xG,OAAG,EAAE6hB,qBAAqB,CAACT,UAAD,EAAanzH,KAAb,EAAoB2zH,SAApB,CAA5B;AAA4D3zH;AAA5D,GAAP;AACD;AAEM,SAAS8zH,WAAT,CAAqBX,UAArB,EAAiC;AACtC,SAAOU,oBAAoB,CAACV,UAAD,CAApB,CAAiCphB,GAAxC;AACD,C;;;;;;;;;;;;AC5mCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;CAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASgiB,UAAT,CAAoB/0J,IAApB,EAA0B4zJ,WAA1B,EAAuC;AACrC,OAAK,IAAIp8I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGxX,IAAI,CAACrB,MAAzB,EAAiC6Y,CAAC,EAAlC,EAAsC;AACpC,QAAIqE,IAAI,GAAG7b,IAAI,CAACwX,CAAD,CAAf;AACAjc,UAAM,CAACiS,IAAP,CAAYqO,IAAZ,EAAkBhR,OAAlB,CAA0BlJ,IAAI,IAAI;AAChCka,UAAI,CAACla,IAAD,CAAJ,GAAaqzJ,yEAAiB,CAACn5I,IAAI,CAACla,IAAD,CAAL,EAAaiyJ,WAAW,CAACh5J,GAAZ,CAAgB+G,IAAhB,CAAb,CAA9B;AACD,KAFD;AAGD;AACF;;AAEM,eAAe2oI,SAAf,CACL6pB,UADK,EAELnzH,KAFK,EAGL2zH,SAHK,EAIL3hB,MAJK,EAKL4gB,WALK,EAML;AACA,MAAI7gB,GAAG,GAAG6hB,uEAAqB,CAACT,UAAD,EAAanzH,KAAb,EAAoB2zH,SAApB,CAA/B;AACA,MAAI30J,IAAI,GAAG,MAAMmqI,uCAAA,CAAO4I,GAAP,EAAYC,MAAZ,CAAjB;AACA+hB,YAAU,CAAC/0J,IAAD,EAAO4zJ,WAAP,CAAV;AACA,SAAO5zJ,IAAP;AACD;AAEM,eAAei1J,gBAAf,CACLl2B,KADK,EAELm2B,MAFK,EAGLl0H,KAHK,EAIL;AAAEgyG,QAAM,GAAG,EAAX;AAAemiB,WAAS,GAAG;AAA3B,IAAkC,EAJ7B,EAKL;AACA,MAAIC,UAAU,GAAGp0H,KAAK,CAAC4wH,eAAN,CAAsBl2J,GAAtB,CAA0BujF,KAAK,IAAI;AAClD,QAAIt9E,IAAI,GAAGs9E,KAAK,CAAC0yE,SAAjB;;AACA,QAAI3e,MAAM,CAACrxI,IAAD,CAAN,KAAiBhK,SAArB,EAAgC;AAC9B,YAAM,IAAIwF,KAAJ,CAAW,aAAYwE,IAAK,wBAA5B,CAAN;AACD;;AACD,WAAO0zJ,wEAAgB,CAACriB,MAAM,CAACrxI,IAAD,CAAP,EAAes9E,KAAK,CAACoxE,SAArB,CAAvB;AACD,GANgB,CAAjB;AAQA,MAAIrwJ,IAAJ;;AACA,MAAIm1J,SAAS,CAACn0H,KAAK,CAACyuH,iBAAP,CAAb,EAAwC;AACtCzvJ,QAAI,GAAG,MAAMm1J,SAAS,CAACn0H,KAAK,CAACyuH,iBAAP,CAAT,CACXzuH,KADW,EAEX+9F,KAFW,EAGXm2B,MAHW,EAIXE,UAJW,EAKXp0H,KAAK,CAAC4yH,WALK,CAAb;AAOD,GARD,MAQO;AACL5zJ,QAAI,GAAG,MAAMsqI,SAAS,CAACvL,KAAD,EAAQ/9F,KAAR,EAAek0H,MAAf,EAAuBE,UAAvB,EAAmCp0H,KAAK,CAAC4yH,WAAzC,CAAtB;AACD;;AAED,MAAI70B,KAAK,CAACT,WAAV,EAAuB;AACrB,QAAIt+H,IAAI,CAACrB,MAAL,GAAc,CAAlB,EAAqB;AACnB,UAAIg5I,GAAG,GAAG33I,IAAI,CAAC,CAAD,CAAd;AACA,UAAI8sB,CAAC,GAAGvxB,MAAM,CAACiS,IAAP,CAAYmqI,GAAZ,EAAiB,CAAjB,CAAR,CAFmB,CAGnB;AACA;;AACA33I,UAAI,GAAG23I,GAAG,CAAC7qH,CAAD,CAAH,IAAU,CAAjB;AACD,KAND,MAMO;AACL9sB,UAAI,GAAG,IAAP;AACD;AACF;;AACD,SAAOA,IAAP;AACD;AAEM,eAAekgI,QAAf,CAAwBkuB,MAAxB,EAAgCvL,YAAhC,EAA8C9jB,KAA9C,EAAqDtlI,OAArD,EAA8D;AACnE,sBAA2B26J,8DAAY,CAACr1B,KAAD,EAAQqvB,MAAR,EAAgBvL,YAAhB,CAAvC;AAAA,MAAM8R,SAAN,iBAAMA,SAAN;AAAA,MAAiB3zH,KAAjB,iBAAiBA,KAAjB;;AACA,MAAIhhC,IAAI,GAAG,MAAMi1J,gBAAgB,CAACl2B,KAAD,EAAQ41B,SAAR,EAAmB3zH,KAAnB,EAA0BvnC,OAA1B,CAAjC;AACA,SAAO;AAAEuG,QAAF;AAAQwzJ,gBAAY,EAAExyH,KAAK,CAACwyH;AAA5B,GAAP;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnFD;AACA;;AAEA,SAAS8B,UAAT,CAAoB3zJ,IAApB,EAA0BmtJ,SAA1B,EAAqC;AACnC,SAAOA,SAAS,CAACyG,QAAV,IAAsB5zJ,IAAI,KAAK,IAAtC;AACD,C,CAED;AACA;;;AACO,SAAS0zJ,gBAAT,CAA0Bn9J,KAA1B,EAAiC4c,IAAjC,EAAuC;AAC5C,MAAI5c,KAAK,KAAKP,SAAd,EAAyB;AACvB,UAAM,IAAIwF,KAAJ,CAAU,iCAAV,CAAN;AACD,GAFD,MAEO,IAAIjF,KAAK,KAAK,IAAd,EAAoB;AACzB,QAAI4c,IAAI,KAAK,SAAb,EAAwB;AACtB,aAAO,CAAP;AACD;;AAED,WAAO,IAAP;AACD;;AAED,UAAQA,IAAR;AACE,SAAK,MAAL;AACE,UAAI5c,KAAK,YAAY4K,IAArB,EAA2B;AACzB,eAAOwjJ,0DAAU,CAAC7O,kEAAW,CAACv/I,KAAD,CAAZ,CAAjB;AACD,OAFD,MAEO,IACLA,KAAK,CAAC4f,KAAN,CAAY,qBAAZ,KAAsC,IAAtC,IACA5f,KAAK,CAACyC,IAAN,GAAa,YAFR,EAGL;AACA,cAAM,IAAIwC,KAAJ,CAAU,mBAAmBjF,KAA7B,CAAN;AACD;;AAED,aAAOouJ,0DAAU,CAACpuJ,KAAD,CAAjB;;AACF,SAAK,YAAL;AACE,aAAOouJ,0DAAU,CAACpuJ,KAAK,CAACyI,KAAN,CAAY,CAAZ,EAAe,CAAf,CAAD,CAAjB;;AACF,SAAK,WAAL;AACE,aAAO2lJ,0DAAU,CAACpuJ,KAAK,CAACyI,KAAN,CAAY,CAAZ,EAAe,CAAf,CAAD,CAAjB;;AACF,SAAK,SAAL;AACE,aAAOzI,KAAK,GAAG,CAAH,GAAO,CAAnB;;AACF,SAAK,IAAL;AACE,UAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,KAAK,IAA3C,EAAiD;AAC/C,cAAM,IAAIiF,KAAJ,CAAU,iCAAiCjF,KAA3C,CAAN;AACD;;AACD,aAAOA,KAAP;;AACF,SAAK,SAAL;AACE,UAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,CAACA,KAAK,GAAG,CAAT,MAAgBA,KAAjD,EAAwD;AACtD,eAAOA,KAAP;AACD,OAFD,MAEO;AACL,cAAM,IAAIiF,KAAJ,CAAU,+BAA+BoJ,IAAI,CAACC,SAAL,CAAetO,KAAf,CAAzC,CAAN;AACD;;AACH,SAAK,MAAL;AACE,aAAOqO,IAAI,CAACC,SAAL,CAAetO,KAAf,CAAP;;AACF;AA/BF;;AAiCA,SAAOA,KAAP;AACD;AAEM,SAAS88J,iBAAT,CAA2B98J,KAA3B,EAAkC4c,IAAlC,EAAwC;AAC7C,MAAI5c,KAAK,KAAK,IAAd,EAAoB;AAClB,QAAI4c,IAAI,KAAK,SAAb,EAAwB;AACtB,aAAO,KAAP;AACD;;AACD,WAAO,IAAP;AACD;;AAED,UAAQA,IAAR;AACE,SAAK,MAAL;AACE,aAAO0gJ,4DAAY,CAACt9J,KAAD,CAAnB;;AACF,SAAK,YAAL;AACE,aAAOs9J,4DAAY,CAACt9J,KAAD,CAAZ,CAAoByI,KAApB,CAA0B,CAA1B,EAA6B,CAA7B,CAAP;;AACF,SAAK,WAAL;AACE,aAAO60J,4DAAY,CAACt9J,KAAD,CAAZ,CAAoByI,KAApB,CAA0B,CAA1B,EAA6B,CAA7B,CAAP;;AACF,SAAK,SAAL;AACE,aAAOzI,KAAK,KAAK,CAAjB;;AACF,SAAK,MAAL;AACA,SAAK,eAAL;AACE,UAAI;AACF,eAAOqO,IAAI,CAAC0G,KAAL,CAAW/U,KAAX,CAAP;AACD,OAFD,CAEE,OAAO+pB,CAAP,EAAU;AACV,eAAOnN,IAAI,KAAK,eAAT,GAA2B5c,KAA3B,GAAmC,IAA1C;AACD;;AACH;AAhBF;;AAmBA,SAAOA,KAAP;AACD;AAEM,SAASu9J,OAAT,CAAiBrH,MAAjB,EAAyBvL,YAAzB,EAAuCnjB,KAAvC,EAA8ChyH,GAA9C,EAAmD;AAAEgoJ;AAAF,IAAe,EAAlE,EAAsE;AAC3E,MAAIC,WAAW,GAAGvH,MAAM,CAAC1uB,KAAD,CAAxB;;AACA,MAAIi2B,WAAW,IAAI,IAAnB,EAAyB;AACvB,UAAM,IAAIx4J,KAAJ,CAAW,UAASuiI,KAAM,kBAA1B,CAAN;AACD;;AAED,MAAIojB,KAAK,GAAGD,YAAY,CAACC,KAAb,IAAsB,EAAlC,CAN2E,CAQ3E;;AACA,MAAIsO,QAAQ,GAAGzvH,KAAK,IAAI;AACtB,QAAImhH,KAAK,CAACpjB,KAAD,CAAL,IAAgBojB,KAAK,CAACpjB,KAAD,CAAL,CAAasB,MAAjC,EAAyC;AACvC,aAAO8hB,KAAK,CAACpjB,KAAD,CAAL,CAAasB,MAAb,CAAoBr/F,KAApB,KAA8BA,KAArC;AACD;;AACD,WAAOA,KAAP;AACD,GALD;;AAOA,SAAOpmC,MAAM,CAAConJ,WAAP,CACLpnJ,MAAM,CAACiS,IAAP,CAAYE,GAAZ,EACGhS,GADH,CACOimC,KAAK,IAAI;AACZ;AACA,QAAIA,KAAK,CAAC,CAAD,CAAL,KAAa,GAAjB,EAAsB;AACpB,aAAO,IAAP;AACD;;AAED,QAAImtH,SAAS,GAAG6G,WAAW,CAACh0H,KAAD,CAA3B;;AACA,QAAImtH,SAAS,IAAI,IAAjB,EAAuB;AACrB,YAAM,IAAI3xJ,KAAJ,CACH,UAASwkC,KAAM,6BAA4B+9F,KAAM,KAAIn5H,IAAI,CAACC,SAAL,CACpDkH,GADoD,CAEpD,EAHE,CAAN;AAKD;;AAED,QAAI4nJ,UAAU,CAAC3zH,KAAD,EAAQmtH,SAAR,CAAV,IAAgCphJ,GAAG,CAACi0B,KAAD,CAAH,IAAc,IAAlD,EAAwD;AACtD,YAAM,IAAIxkC,KAAJ,CACH,IAAGwkC,KAAM,4BAA2B+9F,KAAM,MAAKn5H,IAAI,CAACC,SAAL,CAC9CkH,GAD8C,CAE9C,EAHE,CAAN;AAKD,KArBW,CAuBZ;;;AACA,QAAIgoJ,QAAQ,IAAIhoJ,GAAG,CAACi0B,KAAD,CAAH,IAAc,IAA9B,EAAoC;AAClC,aAAO,IAAP;AACD;;AAED,WAAO,CAACyvH,QAAQ,CAACzvH,KAAD,CAAT,EAAkB0zH,gBAAgB,CAAC3nJ,GAAG,CAACi0B,KAAD,CAAJ,EAAamtH,SAAS,CAACh6I,IAAvB,CAAlC,CAAP;AACD,GA9BH,EA+BG1V,MA/BH,CA+BUw9C,OA/BV,CADK,CAAP;AAkCD;AAEM,SAASg5G,gBAAT,CAA0BxH,MAA1B,EAAkCvL,YAAlC,EAAgDnjB,KAAhD,EAAuDm2B,MAAvD,EAA+D;AACpE,MAAInoJ,GAAG,qBAAQmoJ,MAAR,CAAP;;AAEA,MAAIF,WAAW,GAAGvH,MAAM,CAAC1uB,KAAD,CAAxB;;AACA,MAAIi2B,WAAW,IAAI,IAAnB,EAAyB;AACvB,UAAM,IAAIx4J,KAAJ,CAAW,2BAA0BuiI,KAAM,kBAA3C,CAAN;AACD,GANmE,CAQpE;AACA;;;AACAnkI,QAAM,CAACiS,IAAP,CAAYmoJ,WAAZ,EAAyB9qJ,OAAzB,CAAiC82B,KAAK,IAAI;AACxC,QAAImtH,SAAS,GAAG6G,WAAW,CAACh0H,KAAD,CAA3B;;AAEA,QAAIj0B,GAAG,CAACi0B,KAAD,CAAH,IAAc,IAAlB,EAAwB;AACtB,UAAImtH,SAAS,CAACgH,OAAV,KAAsBn+J,SAA1B,EAAqC;AACnC+V,WAAG,CAACi0B,KAAD,CAAH,GACE,OAAOmtH,SAAS,CAACgH,OAAjB,KAA6B,UAA7B,GACIhH,SAAS,CAACgH,OAAV,EADJ,GAEIhH,SAAS,CAACgH,OAHhB;AAID,OALD,MAKO,IAAIR,UAAU,CAAC3zH,KAAD,EAAQmtH,SAAR,CAAd,EAAkC;AACvC;AACA;AACA;AACA,cAAM,IAAI3xJ,KAAJ,CACH,IAAGwkC,KAAM,4BAA2B+9F,KAAM,MAAKn5H,IAAI,CAACC,SAAL,CAAekH,GAAf,CAAoB,EADhE,CAAN;AAGD;AACF;AACF,GAlBD,EAVoE,CA8BpE;AACA;AACA;;AACA,SAAO+nJ,OAAO,CAACrH,MAAD,EAASvL,YAAT,EAAuBnjB,KAAvB,EAA8BhyH,GAA9B,EAAmC;AAAEgoJ,YAAQ,EAAE;AAAZ,GAAnC,CAAd;AACD;AAEM,SAASK,gBAAT,CAA0B3H,MAA1B,EAAkCvL,YAAlC,EAAgDnjB,KAAhD,EAAuDm2B,MAAvD,EAA+D;AACpE,MAAInoJ,GAAG,qBAAQmoJ,MAAR,CAAP;;AAEA,MAAIF,WAAW,GAAGvH,MAAM,CAAC1uB,KAAD,CAAxB;;AACA,MAAIi2B,WAAW,IAAI,IAAnB,EAAyB;AACvB,UAAM,IAAIx4J,KAAJ,CAAW,0BAAyBuiI,KAAM,kBAA1C,CAAN;AACD;;AAED,SAAO+1B,OAAO,CAACrH,MAAD,EAASvL,YAAT,EAAuBnjB,KAAvB,EAA8BhyH,GAA9B,CAAd;AACD;AAEM,SAASsoJ,iBAAT,CAA2B5H,MAA3B,EAAmCvL,YAAnC,EAAiDnjB,KAAjD,EAAwDhyH,GAAxD,EAA6D;AAClE,MAAIioJ,WAAW,GAAGvH,MAAM,CAAC1uB,KAAD,CAAxB;;AACA,MAAIi2B,WAAW,IAAI,IAAnB,EAAyB;AACvB,UAAM,IAAIx4J,KAAJ,CAAW,UAASuiI,KAAM,kBAA1B,CAAN;AACD;;AAED,MAAIsB,MAAM,GAAGzlI,MAAM,CAACiS,IAAP,CAAYmoJ,WAAZ,CAAb;AACA,MAAIjpJ,MAAM,GAAG,EAAb;;AACA,OAAK,IAAI8K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwpH,MAAM,CAACriI,MAA3B,EAAmC6Y,CAAC,EAApC,EAAwC;AACtC,QAAI66F,SAAS,GAAG2uB,MAAM,CAACxpH,CAAD,CAAtB;AACA,QAAIs3I,SAAS,GAAG6G,WAAW,CAACtjD,SAAD,CAA3B;AAEA3lG,UAAM,CAAC2lG,SAAD,CAAN,GAAoB2iD,iBAAiB,CAACtnJ,GAAG,CAAC2kG,SAAD,CAAJ,EAAiBy8C,SAAS,CAACh6I,IAA3B,CAArC;AACD;;AACD,SAAOpI,MAAP;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxMD;AACA;AACA;AACA;AACA;CAGA;;AAEO,SAASupJ,OAAT,CAAiBC,OAAjB,EAA0Bp1I,QAA1B,EAAoCq1I,MAAM,GAAG9vJ,CAAC,IAAIA,CAAlD,EAAqD;AAC1D,SAAO6vJ,OAAO,CAACt9J,MAAR,CAAe,CAACygB,IAAD,EAAO2kI,MAAP,KAAkB;AACtC,QAAIoY,MAAM,GAAGt1I,QAAQ,CAAClmB,GAAT,CAAaojJ,MAAM,CAAChe,EAApB,KAA2B,EAAxC;AACA3mH,QAAI,CAAC7b,IAAL,iCACK24J,MAAM,CAACnY,MAAD,CADX;AAEE/X,qBAAe,EAAEmwB,MAAM,CAAC16J,GAAP,CAAWy6J,MAAX;AAFnB;AAIA,WAAO98I,IAAP;AACD,GAPM,EAOJ,EAPI,CAAP;AAQD,C,CAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASg9I,gBAAT,CAA0Br1H,KAA1B,EAAiC+9F,KAAjC,EAAwCgU,GAAxC,EAA6CC,MAA7C,EAAqD4gB,WAArD,EAAkE;AAChE,MAAIx0B,YAAY,GAAGL,KAAK,CAACK,YAAN,IAAsB,EAAzC;AACA,MAAIk3B,SAAS,GAAGl3B,YAAY,CAAC0V,MAAb,IAAuB,QAAvC;;AAEA,MAAI,CAAC,KAAD,EAAQ,QAAR,EAAkB,MAAlB,EAA0B,SAA1B,EAAqCnuI,OAArC,CAA6C2vJ,SAA7C,MAA4D,CAAC,CAAjE,EAAoE;AAClE,UAAM,IAAIn5J,KAAJ,CAAW,8CAA6Cm5J,SAAU,GAAlE,CAAN;AACD;;AAED,MAAIA,SAAS,KAAK,KAAd,IAAuBA,SAAS,KAAK,QAArC,IAAiDA,SAAS,KAAK,MAAnE,EAA2E;AACzE,WAAOC,qBAAqB,CAC1Bv1H,KAD0B,EAE1B+9F,KAF0B,EAG1BgU,GAH0B,EAI1BC,MAJ0B,EAK1BsjB,SAL0B,EAM1B1C,WAN0B,CAA5B;AAQD,GATD,MASO,IAAI0C,SAAS,KAAK,SAAlB,EAA6B;AAClC,WAAOE,uBAAuB,CAC5Bx1H,KAD4B,EAE5B+9F,KAF4B,EAG5BgU,GAH4B,EAI5BC,MAJ4B,EAK5BsjB,SAL4B,EAM5B1C,WAN4B,CAA9B;AAQD;AACF;;AAED,SAAS6C,UAAT,CAAoBr3J,MAApB,EAA4B;AAC1B;AACA;AACA,OAAK,IAAIqO,GAAT,IAAgBlS,MAAM,CAACiS,IAAP,CAAYpO,MAAZ,CAAhB,EAAqC;AACnC,QAAIqO,GAAG,KAAK,KAAR,IAAiBA,GAAG,KAAK,MAA7B,EAAqC;AACnC,UAAIrO,MAAM,CAACqO,GAAD,CAAN,IAAegpJ,UAAU,CAACr3J,MAAM,CAACqO,GAAD,CAAP,CAA7B,EAA4C;AAC1C,eAAO,IAAP;AACD;AACF,KAJD,MAIO,IAAI,EAAEA,GAAG,CAAC9G,OAAJ,CAAY,SAAZ,MAA2B,CAA3B,IAAgC8G,GAAG,KAAK,MAA1C,CAAJ,EAAuD;AAC5D,aAAO,IAAP;AACD;AACF;;AACD,SAAO,KAAP;AACD;;AAEM,SAASipJ,gBAAT,CAA0BvC,UAA1B,EAAsC;AAC3C,SAAOA,UAAU,CAACj2B,iBAAX,CAA6B7pH,IAA7B,CAAkCoiJ,UAAlC,KAAiD,IAAxD;AACD;;AAED,eAAeD,uBAAf,CACEx1H,KADF,EAEEmzH,UAFF,EAGEphB,GAHF,EAIEC,MAJF,EAKEsjB,SALF,EAME1C,WANF,EAOE;AACA,MAAa9F,SAAb,GAAqCqG,UAArC,CAAMz0B,KAAN;AAAA,MAAwBlB,QAAxB,GAAqC21B,UAArC,CAAwB31B,QAAxB;AACA,MAAIm4B,SAAS,GAAGn4B,QAAQ,GAAG,EAAH,GAAS,OAAMuU,GAAG,CAACr2I,IAAK,gBAAhD;;AAEA,MAAIw3J,kEAAgB,CAACC,UAAD,CAApB,EAAkC;AAChC,QAAIyC,MAAM,GAAI;AAClB,eAAe7jB,GAAG,CAACjU,MAAO;AAC1B,aAAaiU,GAAG,CAACr2I,IAAK;AACtB,QAAQq2I,GAAG,CAACwgB,KAAM;AAClB,QAAQxgB,GAAG,CAAC8U,KAAM,sBAAqB8O,SAAU;AACjD,QAAQ5jB,GAAG,CAAC9T,OAAQ;AACpB,QAAQ8T,GAAG,CAAC7T,OAAQ;AACpB,QAAQ6T,GAAG,CAACznG,KAAJ,IAAa,IAAb,GAAqB,SAAQynG,GAAG,CAACznG,KAAM,EAAvC,GAA2C,EAAG;AACtD,QAAQynG,GAAG,CAACptH,MAAJ,IAAc,IAAd,GAAsB,UAASotH,GAAG,CAACptH,MAAO,EAA1C,GAA8C,EAAG;AACzD,KATI;AAUA,WAAOwkH,uCAAA,CAAOysB,MAAP,CAAP;AACD;;AAED,MAAIlP,IAAJ;AACA,MAAImP,OAAO,GAAG,IAAd;;AAEA,MAAIH,gBAAgB,CAACvC,UAAD,CAApB,EAAkC;AAChC;AACA;AACA,QAAI2C,MAAM,GAAI;AAClB,eAAe/jB,GAAG,CAACr2I,IAAK;AACxB,aAAaq2I,GAAG,CAACr2I,IAAK;AACtB,QAAQq2I,GAAG,CAACwgB,KAAM;AAClB,QAAQxgB,GAAG,CAAC8U,KAAM,qBAAoB8O,SAAU;AAChD,QAAQ5jB,GAAG,CAAC7T,OAAQ;AACpB,QAAQ6T,GAAG,CAACznG,KAAJ,IAAa,IAAb,GAAqB,SAAQynG,GAAG,CAACznG,KAAM,EAAvC,GAA2C,EAAG;AACtD,QAAQynG,GAAG,CAACptH,MAAJ,IAAc,IAAd,GAAsB,UAASotH,GAAG,CAACptH,MAAO,EAA1C,GAA8C,EAAG;AACzD,KARI;AASA+hI,QAAI,GAAG,MAAMvd,uCAAA,CAAO2sB,MAAP,EAAe9jB,MAAf,CAAb;AACD,GAbD,MAaO;AACL;AACA;AACA;AACA,QAAI8jB,MAAM,GAAI;AAClB;AACA;AACA;AACA;AACA;AACA,qBAAqB/jB,GAAG,CAACr2I,IAAK,eAAcq2I,GAAG,CAACr2I,IAAK,eAAcq2I,GAAG,CAACr2I,IAAK;AAC5E,mBAAmBq2I,GAAG,CAACr2I,IAAK;AAC5B,4CAA4Cq2I,GAAG,CAACr2I,IAAK,8BAA6Bq2I,GAAG,CAACr2I,IAAK;AAC3F,cAAcq2I,GAAG,CAACwgB,KAAM;AACxB,cAAcxgB,GAAG,CAAC8U,KAAM,QAAO9U,GAAG,CAACr2I,IAAK;AACxC;AACA;AACA;AACA,kBAAkBq2I,GAAG,CAACr2I,IAAK,OAAMq2I,GAAG,CAACr2I,IAAK;AAC1C,QAAQq2I,GAAG,CAACwgB,KAAM;AAClB,QAAQxgB,GAAG,CAAC7T,OAAQ;AACpB,QAAQ6T,GAAG,CAACznG,KAAJ,IAAa,IAAb,GAAqB,SAAQynG,GAAG,CAACznG,KAAM,EAAvC,GAA2C,EAAG;AACtD,QAAQynG,GAAG,CAACptH,MAAJ,IAAc,IAAd,GAAsB,UAASotH,GAAG,CAACptH,MAAO,EAA1C,GAA8C,EAAG;AACzD,KAnBI;AAqBA+hI,QAAI,GAAG,MAAMvd,uCAAA,CAAO2sB,MAAP,EAAe9jB,MAAf,CAAb;AACA6jB,WAAO,GAAG,IAAI7jJ,GAAJ,CACR,GAAG2iB,MAAH,CAAU6F,KAAV,CAAgB,EAAhB,EAAoBksH,IAAI,CAAChsJ,GAAL,CAASi8I,GAAG,IAAIA,GAAG,CAACkf,OAAJ,CAAY79I,KAAZ,CAAkB,GAAlB,CAAhB,CAApB,CADQ,CAAV;AAGD;;AAED,MAAI6uI,KAAK,GAAGJ,wDAAO,CACjBC,IAAI,CAAChsJ,GAAL,CAASi8I,GAAG,IAAIA,GAAG,CAACjT,QAApB,CADiB,EAEhB,UAASqO,GAAG,CAACr2I,IAAK,eAAcq2I,GAAG,CAACr2I,IAAK,MAFzB,CAAnB;AAIA,MAAIq6J,QAAQ,GAAI;AAClB,aAAahkB,GAAG,CAACjU,MAAO,kCAAiCiU,GAAG,CAACr2I,IAAK;AAClE,MAAMq2I,GAAG,CAACwgB,KAAM;AAChB,YAAY1L,KAAM,IAAG8O,SAAU;AAC/B,MAAM5jB,GAAG,CAAC7T,OAAQ;AAClB,GALE;AAOA,MAAInnI,KAAK,GAAG+K,IAAI,CAACoE,GAAL,EAAZ;AACA,MAAI8vJ,OAAO,GAAG,MAAM7sB,uCAAA,CAAO4sB,QAAP,CAApB,CA7EA,CA+EA;;AACA,wBAA4BC,OAAO,CAACp+J,MAAR,CAC1B,CAAC61H,GAAD,EAAMumB,KAAN,KAAgB;AACd,QAAIiiB,GAAG,GAAGjiB,KAAK,CAACkiB,UAAhB;AACA,WAAOliB,KAAK,CAACkiB,UAAb;;AAEA,QAAID,GAAG,IAAI,IAAX,EAAiB;AACfxoC,SAAG,CAACynC,OAAJ,CAAY14J,IAAZ,CAAiBw3I,KAAjB;AACD,KAFD,MAEO;AACL,UAAInhF,GAAG,GAAG46D,GAAG,CAAC3tG,QAAJ,CAAalmB,GAAb,CAAiBq8J,GAAjB,KAAyB,EAAnC;AACApjG,SAAG,CAACr2D,IAAJ,CAASw3I,KAAT;AACAvmB,SAAG,CAAC3tG,QAAJ,CAAa3iB,GAAb,CAAiB84J,GAAjB,EAAsBpjG,GAAtB;AACD;;AACD,WAAO46D,GAAP;AACD,GAbyB,EAc1B;AAAEynC,WAAO,EAAE,EAAX;AAAep1I,YAAQ,EAAE,IAAItU,GAAJ;AAAzB,GAd0B,CAA5B;AAAA,MAAM0pJ,OAAN,mBAAMA,OAAN;AAAA,MAAep1I,QAAf,mBAAeA,QAAf;;AAiBA,MAAIq1I,MAAM,GAAGnhB,KAAK,IAAI;AACpBz5I,UAAM,CAACiS,IAAP,CAAYwnI,KAAZ,EAAmBnqI,OAAnB,CAA2BlJ,IAAI,IAAI;AACjCqzI,WAAK,CAACrzI,IAAD,CAAL,GAAcqzJ,yEAAiB,CAAChgB,KAAK,CAACrzI,IAAD,CAAN,EAAciyJ,WAAW,CAACh5J,GAAZ,CAAgB+G,IAAhB,CAAd,CAA/B;AACD,KAFD;;AAIA,QAAIk1J,OAAO,IAAI,CAACA,OAAO,CAAClmJ,GAAR,CAAYqkI,KAAK,CAAChV,EAAlB,CAAhB,EAAuC;AACrCgV,WAAK,CAACmiB,UAAN,GAAmB,IAAnB;AACD;;AACD,WAAOniB,KAAP;AACD,GATD;;AAWA,SAAOihB,OAAO,CAACC,OAAD,EAAUp1I,QAAV,EAAoBq1I,MAApB,CAAd;AACD;;AAED,eAAeI,qBAAf,CACEv1H,KADF,EAEEmzH,UAFF,EAGEphB,GAHF,EAIEC,MAJF,EAKEsjB,SALF,EAME1C,WANF,EAOE;AACA,MAAI/0J,CAAC,qBAAQk0I,GAAR,CAAL;;AAEA,MAAIujB,SAAS,KAAK,KAAlB,EAAyB;AACvB,QAAIA,SAAS,KAAK,MAAlB,EAA0B;AACxBz3J,OAAC,CAACgpJ,KAAF,GAAW,GAAEhpJ,CAAC,CAACgpJ,KAAM,QAAOhpJ,CAAC,CAACnC,IAAK,oBAAnC;AACD,KAFD,MAEO;AACLmC,OAAC,CAACgpJ,KAAF,GAAW,GAAEhpJ,CAAC,CAACgpJ,KAAM,QAAOhpJ,CAAC,CAACnC,IAAK,gBAAnC;AACD;AACF;;AAED,SAAO4tI,uDAAS,CAAC6pB,UAAD,EAAanzH,KAAb,EAAoBniC,CAApB,EAAuBm0I,MAAvB,EAA+B4gB,WAA/B,CAAhB;AACD;;AAEc;AACbjzB,cAAY,EAAE01B;AADD,CAAf,E;;;;;;;;;;;;;;;;;;;;;ACxNA,SAAS7wH,CAAT,CAAW1wB,IAAX,EAAiBD,IAAjB,EAAuB;AACrB;AAASC;AAAT,KAAkBD,IAAlB;AACD,C,CAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEO,MAAMu5I,MAAM,GAAG;AACpBztB,cAAY,EAAE;AACZX,MAAE,EAAEx6F,CAAC,CAAC,IAAD,CADO;AAEZo4G,aAAS,EAAEp4G,CAAC,CAAC,SAAD,CAFA;AAGZokH,YAAQ,EAAEpkH,CAAC,CAAC,SAAD,CAHC;AAIZgkH,aAAS,EAAEhkH,CAAC,CAAC,IAAD,CAJA;AAKZ47F,WAAO,EAAE57F,CAAC,CAAC,IAAD,EAAO;AAAEypH,SAAG,EAAE,UAAP;AAAmBsG,cAAQ,EAAE;AAA7B,KAAP,CALE;AAMZnzB,YAAQ,EAAE58F,CAAC,CAAC,IAAD,EAAO;AAAEypH,SAAG,EAAE;AAAP,KAAP,CANC;AAOZrrJ,UAAM,EAAE4hC,CAAC,CAAC,SAAD,EAAY;AAAEswH,aAAO,EAAE,CAAX;AAAcP,cAAQ,EAAE;AAAxB,KAAZ,CAPG;AAQZ9yB,SAAK,EAAEj9F,CAAC,CAAC,IAAD,EAAO;AAAEypH,SAAG,EAAE;AAAP,KAAP,CARI;AASZnpB,SAAK,EAAEtgG,CAAC,CAAC,QAAD,CATI;AAUZ7qC,QAAI,EAAE6qC,CAAC,CAAC,MAAD,EAAS;AAAE+vH,cAAQ,EAAE;AAAZ,KAAT,CAVK;AAWZ5rB,eAAW,EAAEnkG,CAAC,CAAC,QAAD,CAXF;AAYZnE,SAAK,EAAEmE,CAAC,CAAC,MAAD,CAZI;AAaZ6xG,kBAAc,EAAE7xG,CAAC,CAAC,QAAD,CAbL;AAcZunG,yBAAqB,EAAEvnG,CAAC,CAAC,SAAD,CAdZ;AAeZwgG,eAAW,EAAExgG,CAAC,CAAC,IAAD,CAfF;AAgBZu4G,cAAU,EAAEv4G,CAAC,CAAC,OAAD,EAAU;AAAEswH,aAAO,EAAE,MAAMhzJ,IAAI,CAACoE,GAAL;AAAjB,KAAV,CAhBD;AAiBZwiI,WAAO,EAAElkG,CAAC,CAAC,SAAD,EAAY;AAAEswH,aAAO,EAAE;AAAX,KAAZ,CAjBE;AAkBZzR,aAAS,EAAE7+G,CAAC,CAAC,SAAD,CAlBA;AAmBZtlC,YAAQ,EAAEslC,CAAC,CAAC,IAAD,EAAO;AAAEypH,SAAG,EAAE;AAAP,KAAP,CAnBC,CAoBZ;AACA;;AArBY,GADM;AAwBpBpqB,QAAM,EAAE;AACN7E,MAAE,EAAEx6F,CAAC,CAAC,IAAD,CADC;AAEN7jC,QAAI,EAAE6jC,CAAC,CAAC,QAAD,EAAW;AAAE+vH,cAAQ,EAAE;AAAZ,KAAX,CAFD;AAGNxwB,iBAAa,EAAEv/F,CAAC,CAAC,IAAD,EAAO;AAAEypH,SAAG,EAAE;AAAP,KAAP,CAHV;AAIN5K,aAAS,EAAE7+G,CAAC,CAAC,SAAD;AAJN,GAxBY;AA8BpBo+F,UAAQ,EAAE;AACR5D,MAAE,EAAEx6F,CAAC,CAAC,IAAD,CADG;AAER7jC,QAAI,EAAE6jC,CAAC,CAAC,QAAD,EAAW;AAAE+vH,cAAQ,EAAE;AAAZ,KAAX,CAFC;AAGR;AACAzgJ,QAAI,EAAE0wB,CAAC,CAAC,QAAD,CAJC;AAKRw+F,aAAS,EAAEx+F,CAAC,CAAC,SAAD,CALJ;AAMR0+F,UAAM,EAAE1+F,CAAC,CAAC,SAAD,CAND;AAORu4G,cAAU,EAAEv4G,CAAC,CAAC,OAAD,CAPL;AAQR6+G,aAAS,EAAE7+G,CAAC,CAAC,SAAD;AARJ,GA9BU;AAwCpBy/F,YAAU,EAAE;AACVjF,MAAE,EAAEx6F,CAAC,CAAC,IAAD,CADK;AAEV7jC,QAAI,EAAE6jC,CAAC,CAAC,QAAD,CAFG;AAGVi/F,aAAS,EAAEj/F,CAAC,CAAC,SAAD,CAHF;AAIVu8F,SAAK,EAAEv8F,CAAC,CAAC,IAAD,EAAO;AAAEypH,SAAG,EAAE;AAAP,KAAP,CAJE;AAKVlR,cAAU,EAAEv4G,CAAC,CAAC,OAAD,CALH;AAMV6+G,aAAS,EAAE7+G,CAAC,CAAC,SAAD;AANF,GAxCQ;AAgDpBwjG,iBAAe,EAAE;AACfhJ,MAAE,EAAEx6F,CAAC,CAAC,IAAD,CADU;AAEf7jC,QAAI,EAAE6jC,CAAC,CAAC,QAAD,CAFQ;AAGfi/F,aAAS,EAAEj/F,CAAC,CAAC,SAAD,CAHG;AAIfu4G,cAAU,EAAEv4G,CAAC,CAAC,OAAD,CAJE;AAKf6+G,aAAS,EAAE7+G,CAAC,CAAC,SAAD;AALG,GAhDG;AAuDpBzlC,WAAS,EAAE;AACTigI,MAAE,EAAEx6F,CAAC,CAAC,IAAD,CADI;AAETx7B,QAAI,EAAEw7B,CAAC,CAAC,IAAD,EAAO;AAAEypH,SAAG,EAAE,OAAP;AAAgBsG,cAAQ,EAAE;AAA1B,KAAP,CAFE;AAGT6B,aAAS,EAAE5xH,CAAC,CAAC,MAAD,CAHH;AAIT6xH,aAAS,EAAE7xH,CAAC,CAAC,SAAD,CAJH;AAKT8xH,qBAAiB,EAAE9xH,CAAC,CAAC,SAAD,CALX;AAMT6+G,aAAS,EAAE7+G,CAAC,CAAC,SAAD,CANH;AAQT;AACA;AACA+xH,UAAM,EAAE/xH,CAAC,CAAC,IAAD,EAAO;AAAEypH,SAAG,EAAE;AAAP,KAAP,CAVA;AAWTuI,YAAQ,EAAEhyH,CAAC,CAAC,IAAD,EAAO;AAAEypH,SAAG,EAAE;AAAP,KAAP,CAXF;AAYTwI,WAAO,EAAEjyH,CAAC,CAAC,eAAD,CAZD;AAaTkyH,aAAS,EAAElyH,CAAC,CAAC,QAAD,CAbH;AAcT/jC,SAAK,EAAE+jC,CAAC,CAAC,eAAD,CAdC;AAeTmyH,eAAW,EAAEnyH,CAAC,CAAC,MAAD,CAfL;AAgBToyH,YAAQ,EAAEpyH,CAAC,CAAC,MAAD;AAhBF,GAvDS;AAyEpB13B,OAAK,EAAE;AACLkyH,MAAE,EAAEx6F,CAAC,CAAC,IAAD,CADA;AAELi1G,SAAK,EAAEj1G,CAAC,CAAC,QAAD,CAFH;AAGLk1G,cAAU,EAAEl1G,CAAC,CAAC,MAAD,CAHR;AAILm1G,WAAO,EAAEn1G,CAAC,CAAC,MAAD,CAJL;AAKL6+G,aAAS,EAAE7+G,CAAC,CAAC,SAAD;AALP,GAzEa;AAgFpBsgG,OAAK,EAAE;AACL9F,MAAE,EAAEx6F,CAAC,CAAC,IAAD,CADA;AAELqlG,QAAI,EAAErlG,CAAC,CAAC,QAAD;AAFF;AAhFa,CAAf;AAsFA,MAAMq9G,YAAY,GAAG;AAC1B;AACA;AACA;AACAwR,YAAU,CAAC1yJ,IAAD,EAAO;AAAE6yJ,UAAF;AAAUh2B,YAAV;AAAoBY,gBAAY,GAAG;AAAnC,GAAP,EAAgD;AACxD,YAAQz9H,IAAR;AACE,WAAK,cAAL;AAAqB;AACnB;AACA;AACA,cAAI6yJ,MAAJ,EAAY;AACV,mBAAO,+BAAP;AACD;;AAED,cAAI8B,SAAS,GAAGl3B,YAAY,CAAC0V,MAAb,IAAuB,QAAvC,CAPmB,CAQnB;;AACA,cAAI,CAACtW,QAAD,KAAc83B,SAAS,KAAK,QAAd,IAA0BA,SAAS,KAAK,MAAtD,CAAJ,EAAmE;AACjE,mBAAO,+BAAP;AACD,WAXkB,CAanB;AACA;;;AACA,iBAAO,yBAAP;AACD;;AAED,WAAK,WAAL;AACE,eAAO,aAAP;;AAEF,WAAK,YAAL;AACE,eAAO,cAAP;;AAEF,WAAK,QAAL;AACE,eAAO,UAAP;;AAEF;AA5BF;;AA8BA,WAAO30J,IAAP;AACD,GApCyB;;AAsC1B4yJ,gBAAc,CAACJ,UAAD,EAAa;AACzB,QAAarG,SAAb,GAA8CqG,UAA9C,CAAMz0B,KAAN;AAAA,gCAA8Cy0B,UAA9C,CAAwB/0B,YAAxB;AAAA,QAAwBA,YAAxB,sCAAuC,EAAvC;;AAEA,aAASF,OAAT,CAAiBizB,MAAjB,EAAyB;AACvB;AACA;AACA,UAAIA,MAAM,CAACxzJ,MAAP,GAAgB,CAApB,EAAuB;AACrB,eAAOwzJ,MAAM,CAACx8H,MAAP,CAAc,CAAC,IAAD,CAAd,CAAP;AACD,OALsB,CAOvB;;;AACA,cAAQm4H,SAAR;AACE,aAAK,cAAL;AACE,iBAAO,CACL;AAAEnzJ,gBAAI,EAAE;AAAR,WADK,EAEL,uBAFK,EAGL;AAAEojJ,sBAAU,EAAE;AAAd,WAHK,EAIL,IAJK,CAAP;;AAMF,aAAK,QAAL;AACE,iBAAO,CACL;AAAE8Z,sBAAU,EAAE;AAAE9yB,2BAAa,EAAE;AAAjB,aAAd;AAAuC+uB,gBAAI,EAAE;AAA7C,WADK,EAEL;AAAEgE,mBAAO,EAAE;AAAX,WAFK,CAAP;;AAIF,aAAK,UAAL;AACE,iBAAO,CAAC,YAAD,EAAe,MAAf,CAAP;;AACF,aAAK,WAAL;AACE,iBAAO,CAAC;AAAED,sBAAU,EAAE;AAAER,uBAAS,EAAE;AAAb;AAAd,WAAD,EAAsC,WAAtC,CAAP;;AACF;AAjBF;;AAoBA,aAAO,EAAP;AACD;;AAED,2CACKlD,UADL;AAEE91B,sBAAgB,EAAEa,OAAO,CAACi1B,UAAU,CAAC91B,gBAAZ;AAF3B;AAID,GA5EyB;;AA8E1BykB,OAAK,EAAE;AACLje,UAAM,EAAE;AACNkzB,cAAQ,EAAEnV,cAAc,IAAI;AAC1B,YAAI5hB,MAAM,GAAG4hB,cAAc,CAAC;AAC1BjhJ,cAAI,EAAE;AADoB,SAAD,CAA3B;AAIA,eAAQ;AAChB,mBAAmBq/H,MAAO;AAC1B;AACA;AACA;AACA;AACA,SANQ;AAOD;AAbK,KADH;AAiBLiE,cAAU,EAAE;AACVjE,YAAM,EAAE;AACNe,aAAK,EAAE;AADD,OADE;AAKVi2B,kBAAY,EAAEpV,cAAc,IAAI;AAC9B,YAAI5hB,MAAM,GAAG4hB,cAAc,CAAC;AAAE7gB,eAAK,EAAE;AAAT,SAAD,CAA3B;AACA,eAAQ,UAASf,MAAO,oBAAxB;AACD;AARS,KAjBP;AA4BLjhI,aAAS,EAAE;AACTk4J,iBAAW,EAAErV,cAAc,IAAI;AAC7B,YAAI5hB,MAAM,GAAG4hB,cAAc,CAAC;AAC1BwU,mBAAS,EAAG;AACtB;AACA;AACA;AACA;AACA,WANoC;AAO1BG,gBAAM,EAAG,aAPiB;AAQ1BC,kBAAQ,EAAG,6DARe;AAS1BC,iBAAO,EAAG,4DATgB;AAU1BC,mBAAS,EAAG,yDAVc;AAW1Bj2J,eAAK,EAAG,0DAXkB;AAY1Bk2J,qBAAW,EAAE,mBAZa;AAa1BC,kBAAQ,EAAE;AAbgB,SAAD,CAA3B;AAgBA,eAAQ;AAChB,mBAAmB52B,MAAO;AAC1B;AACA;AACA;AACA;AACA,SANQ;AAOD;AAzBQ,KA5BN;AAwDLL,gBAAY,EAAE;AACZK,YAAM,EAAE;AACN4c,iBAAS,EAAE,UADL;AAENgM,gBAAQ,EAAE,SAFJ;AAGNxoB,eAAO,EAAE,MAHH;AAINuI,mBAAW,EAAE,cAJP;AAKN0N,sBAAc,EAAE,sBALV;AAMNrR,mBAAW,EAAE,gBANP;AAONvD,aAAK,EAAE;AAPD,OADI;AAWZy1B,6BAAuB,EAAEtV,cAAc,IAAI;AACzC;AACA,YAAI5hB,MAAM,GAAG4hB,cAAc,CAAC;AAC1BngB,eAAK,EAAE,aADmB;AAE1BL,kBAAQ,EAAG,2DAFe;AAG1Bx+H,gBAAM,EAAG,qBAHiB;AAI1B4lJ,mBAAS,EAAE;AAJe,SAAD,CAA3B;AAOA,eAAQ;AAChB,mBAAmBxoB,MAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,SARQ;AASD,OA7BW;AA+BZ;AACA;AACA;AACAm3B,mCAA6B,EAAG;AACtC;AACA;AACA;AACA,OAtCkB;AAwCZC,oBAAc,EAAE,CAAC34J,CAAD,EAAIsjJ,YAAJ,KAAqB;AACnC,YAAI/hB,MAAM,GAAG+hB,YAAY,CAAC;AACxBtgB,eAAK,EAAE,MADiB;AAExBL,kBAAQ,EAAE,MAFc;AAGxBhB,iBAAO,EAAE;AAHe,SAAD,CAAzB,CADmC,CAOnC;AACA;AACA;;AACA,eAAQ;AAChB,mBAAmBJ,MAAO;AAC1B;AACA;AACA;AACA;AACA,SANQ;AAOD;AAzDW;AAxDT;AA9EmB,CAArB,C;;;;;;;;;;;;ACpHP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAIA;AAEO,SAASi0B,gBAAT,CAA0Bl2B,KAA1B,EAAiC41B,SAAjC,EAA4C3zH,KAA5C,EAAmDgyG,MAAnD,EAA2D;AAChE,SAAOqlB,8DAAiB,CAACt5B,KAAD,EAAQ41B,SAAR,EAAmB3zH,KAAnB,EAA0B;AAChDgyG,UADgD;AAEhDmiB,aAAS,EAAEmD,kDAAeA;AAFsB,GAA1B,CAAxB;AAID;AAEM,SAASp4B,QAAT,CAAkBnB,KAAlB,EAAyBiU,MAAzB,EAAiC;AACtC,MAAIjU,KAAK,YAAYd,mDAArB,EAA4B;AAC1Bc,SAAK,GAAGA,KAAK,CAACnqH,SAAN,EAAR;AACD;;AAED,SAAO2jJ,sDAAS,CAACnK,6CAAD,EAASvL,mDAAT,EAAuB9jB,KAAvB,EAA8B;AAC5CiU,UAD4C;AAE5CmiB,aAAS,EAAEmD,kDAAeA;AAFkB,GAA9B,CAAhB;AAID,C;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBD;;AAEA,SAASE,YAAT,CAAsBx3B,MAAtB,EAA8B;AAC5B,SAAOzlI,MAAM,CAACiS,IAAP,CAAYwzH,MAAZ,EACJtlI,GADI,CACA+8J,EAAE,IAAI;AACT,QAAI92H,KAAK,GAAGq/F,MAAM,CAACy3B,EAAD,CAAlB;AACA,QAAIC,OAAO,GAAG/2H,KAAK,KAAK82H,EAAxB,CAFS,CAGT;AACA;;AACA,QAAI,CAAC92H,KAAK,CAAC7pB,KAAN,CAAY,MAAZ,CAAL,EAA0B;AACxB6pB,WAAK,GAAI,KAAIA,KAAM,EAAnB;AACD;;AACD,WAAO+2H,OAAO,GAAI,GAAE/2H,KAAM,OAAM+sH,4DAAU,CAAC+J,EAAD,CAAK,EAAjC,GAAsC,GAAE92H,KAAM,EAA5D;AACD,GAVI,EAWJjoB,IAXI,CAWC,IAXD,CAAP;AAYD;;AAEM,SAASi/I,SAAT,CAAmBvK,MAAnB,EAA2BvL,YAA3B,EAAyC;AAC9C,MAAIC,KAAK,GAAGD,YAAY,CAACC,KAAzB;AACA,MAAI8V,QAAQ,GAAG,EAAf;AAEAr9J,QAAM,CAACiS,IAAP,CAAYs1I,KAAZ,EAAmBj4I,OAAnB,CAA2B60H,KAAK,IAAI;AAClC,uBAAoDojB,KAAK,CAACpjB,KAAD,CAAzD;AAAA,2CAAMsB,MAAN;AAAA,QAAc63B,aAAd,oCAA8B,EAA9B;AAAA,QAAqCxE,UAArC;;AAEA,QAAItR,YAAY,GAAGxnJ,MAAM,CAAConJ,WAAP,CACjBpnJ,MAAM,CAACiS,IAAP,CAAY4gJ,MAAM,CAAC1uB,KAAD,CAAlB,EAA2BhkI,GAA3B,CAA+BiG,IAAI,IAAI,CAACA,IAAD,EAAOA,IAAP,CAAvC,CADiB,CAAnB;;AAGA,QAAIihJ,cAAc,mCAAQG,YAAR,GAAyB8V,aAAzB,CAAlB;;AAEAt9J,UAAM,CAACiS,IAAP,CAAY6mJ,UAAZ,EAAwBxpJ,OAAxB,CAAgCiuJ,QAAQ,IAAI;AAC1C,UAAIC,WAAW,GAAGC,SAAS,IAAI;AAC7B,YAAIh4B,MAAM,mCAAQ+hB,YAAR,GAAyBiW,SAAzB,CAAV;;AACA,eAAOR,YAAY,CAACx3B,MAAD,CAAnB;AACD,OAHD;;AAIA,UAAIi4B,aAAa,GAAGD,SAAS,IAAI;AAC/B,YAAIh4B,MAAM,mCAAQ4hB,cAAR,GAA2BoW,SAA3B,CAAV;;AACA,eAAOR,YAAY,CAACx3B,MAAD,CAAnB;AACD,OAHD;;AAKA,UAAI+R,GAAJ;;AACA,UAAI,OAAOshB,UAAU,CAACyE,QAAD,CAAjB,KAAgC,UAApC,EAAgD;AAC9C/lB,WAAG,GAAGshB,UAAU,CAACyE,QAAD,CAAV,CAAqBG,aAArB,EAAoCF,WAApC,CAAN;AACD,OAFD,MAEO;AACLhmB,WAAG,GAAGshB,UAAU,CAACyE,QAAD,CAAhB;AACD;;AACD/lB,SAAG,GAAGA,GAAG,CAACvyG,IAAJ,GAAWvoB,OAAX,CAAmB,IAAnB,EAAyB,EAAzB,CAAN;AAEA2gJ,cAAQ,CAACp7J,IAAT,CAAe;AACrB,8BAA8Bs7J,QAAS;AACvC,sBAAsBA,QAAS,OAAM/lB,GAAI;AACzC,OAHM;AAID,KAtBD;AAuBD,GA/BD;AAiCA,SAAO6lB,QAAQ,CAACl/I,IAAT,CAAc,IAAd,CAAP;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvDD;AACA;AACA;AACA;AACA;;AACA,MAAM4tI,UAAU,GAAGvtI,mBAAO,CAAC,uGAAD,CAA1B;;AACA,MAAM6iH,IAAI,GAAG7iH,mBAAO,CAAC,kFAAD,CAApB;;AACA,MAAM8+H,OAAO,GAAG9+H,mBAAO,CAAC,sDAAD,CAAvB,C,CAEA;AACA;;;AACA,MAAMm/I,sBAAsB,GAAG,kBAA/B;AACA,IAAIC,eAAe,GAAG,IAAtB;AAEO,eAAeC,UAAf,CAA0Bp5B,EAA1B,EAA8B;AACnC,QAAMq5B,SAAS,GAAG1+I,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAlB;AACA,QAAMs5B,SAAS,GAAG3+I,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,SAAnB,CAAlB;AAEA,MAAIrxB,KAAK,GAAG,EAAZ;;AACA,MAAI,MAAMrtH,0DAAE,CAACqa,MAAH,CAAUskI,SAAV,CAAV,EAAgC;AAC9BtxB,SAAK,GAAG,MAAMrtH,0DAAE,CAAC82H,OAAH,CAAW6nB,SAAX,CAAd;AACAtxB,SAAK,GAAGA,KAAK,CAAC5oI,MAAN,CAAa0iB,IAAI,IAAIA,IAAI,CAAChK,KAAL,CAAW,WAAX,CAArB,CAAR;AACD;;AAED,QAAMyhJ,OAAO,GAAG,MAAMn6I,OAAO,CAAC0pD,GAAR,CACpBk/D,KAAK,CAACtsI,GAAN,CAAU,MAAMi3B,IAAN,IAAc;AACtB,UAAMhT,KAAK,GAAG,MAAMhF,0DAAE,CAACi4H,eAAH,CAAmBj4H,0DAAE,CAACjB,IAAH,CAAQ4/I,SAAR,EAAmB3mI,IAAnB,CAAnB,CAApB;AACA,WAAO;AACLqtG,QAAE,EAAErtG,IADC;AAELh4B,UAAI,EAAE,IAAImI,IAAJ,CAAS6c,KAAT;AAFD,KAAP;AAID,GAND,CADoB,CAAtB;AAUA45I,SAAO,CAACp6J,IAAR,CAAa,CAACq6J,EAAD,EAAKC,EAAL,KAAY;AACvB,QAAID,EAAE,CAAC7+J,IAAH,GAAU8+J,EAAE,CAAC9+J,IAAjB,EAAuB;AACrB,aAAO,CAAP;AACD,KAFD,MAEO,IAAI6+J,EAAE,CAAC7+J,IAAH,GAAU8+J,EAAE,CAAC9+J,IAAjB,EAAuB;AAC5B,aAAO,CAAC,CAAR;AACD;;AACD,WAAO,CAAP;AACD,GAPD;AASA,SAAO4+J,OAAP;AACD;AAEM,eAAeG,eAAf,CAA+B15B,EAA/B,EAAmC;AACxC,QAAMq5B,SAAS,GAAG1+I,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAlB;;AACA,MAAI,MAAMrlH,0DAAE,CAACqa,MAAH,CAAUra,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmBH,sBAAnB,CAAV,CAAV,EAAiE;AAC/D,WAAO;AACLl5B,QAAE,EAAEk5B,sBADC;AAELv+J,UAAI,EAAE,IAFD;AAGLg/J,cAAQ,EAAE;AAHL,KAAP;AAKD;;AACD,SAAO,IAAP;AACD;AAEM,eAAeC,mBAAf,CAAmC55B,EAAnC,EAAuC;AAC5C,MAAIu5B,OAAO,GAAG,MAAMH,UAAU,CAACp5B,EAAD,CAA9B;AAEA,MAAI65B,YAAY,GAAG,MAAMH,eAAe,CAAC15B,EAAD,CAAxC;;AACA,MAAI65B,YAAJ,EAAkB;AAChBN,WAAO,CAACz1J,OAAR,CAAgB+1J,YAAhB;AACD;;AAEDN,SAAO,GAAGA,OAAO,CAAC79J,GAAR,CAAYo+J,MAAM,oCACvBA,MADuB;AAE1Bn/J,QAAI,EAAEm/J,MAAM,CAACn/J,IAAP,GAAck+I,OAAO,CAACtiI,MAAR,CAAeujJ,MAAM,CAACn/J,IAAtB,EAA4B,iBAA5B,CAAd,GAA+D;AAF3C,IAAlB,CAAV;AAKA,SAAO4+J,OAAP;AACD;AAEM,eAAeQ,aAAf,CAA6BR,OAA7B,EAAsC;AAC3C,QAAMS,KAAK,GAAGT,OAAO,CAAC3gK,MAAR,CAAe,CAACqzI,MAAD,EAAS6tB,MAAT,KAAoB;AAC/C,UAAM9/J,GAAG,GAAG6+I,OAAO,CAACtiI,MAAR,CAAeujJ,MAAM,CAACn/J,IAAtB,EAA4B,YAA5B,CAAZ;AACAsxI,UAAM,CAACjyI,GAAD,CAAN,GAAciyI,MAAM,CAACjyI,GAAD,CAAN,IAAe,EAA7B;AACAiyI,UAAM,CAACjyI,GAAD,CAAN,CAAYwD,IAAZ,CAAiBs8J,MAAjB;AACA,WAAO7tB,MAAP;AACD,GALa,EAKX,EALW,CAAd;AAOA,QAAMguB,OAAO,GAAG,EAAhB;;AACA,OAAK,IAAIjgK,GAAT,IAAgBuB,MAAM,CAACiS,IAAP,CAAYwsJ,KAAZ,CAAhB,EAAoC;AAClC,UAAME,UAAU,GAAGF,KAAK,CAAChgK,GAAD,CAAxB;AACA,UAAMmgK,OAAO,GAAGngK,GAAG,KAAK4yI,yDAAA,EAAxB,CAFkC,CAGlC;AACA;AACA;;AACA,SAAK,IAAIktB,MAAT,IAAmBI,UAAU,CAACv5J,KAAX,CAAiBw5J,OAAO,GAAG,CAAH,GAAO,CAA/B,CAAnB,EAAsD;AACpDF,aAAO,CAACz8J,IAAR,CAAas8J,MAAM,CAAC95B,EAApB;AACD;AACF,GAlB0C,CAoB3C;;;AACA,QAAMo6B,cAAc,GAAGb,OAAO,CAACn6J,MAAR,CAAe06J,MAAM,IAAI,CAACG,OAAO,CAAC7pJ,QAAR,CAAiB0pJ,MAAM,CAAC95B,EAAxB,CAA1B,CAAvB;AACA,SAAOi6B,OAAO,CAACtkI,MAAR,CAAeykI,cAAc,CAACz5J,KAAf,CAAqB,EAArB,EAAyBjF,GAAzB,CAA6Bo+J,MAAM,IAAIA,MAAM,CAAC95B,EAA9C,CAAf,CAAP;AACD;AAEM,eAAeq6B,UAAf,CAA0Br6B,EAA1B,EAA8B;AACnC,QAAMq5B,SAAS,GAAG1+I,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAlB,CADmC,CAGnC;AACA;AACA;;AACA,MAAI,MAAMrlH,0DAAE,CAACqa,MAAH,CAAUra,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmBH,sBAAnB,CAAV,CAAV,EAAiE;AAC/D,UAAMv+I,0DAAE,CAAC03H,UAAH,CAAc13H,0DAAE,CAACjB,IAAH,CAAQiB,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAR,EAA6Bk5B,sBAA7B,CAAd,CAAN;AACD;;AAED,MAAIoB,QAAQ,GAAI,GAAE19B,IAAI,CAACgX,MAAL,EAAc,SAAhC;AACA,MAAI2mB,UAAU,GAAG5/I,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,SAAnB,EAA8BiB,QAA9B,CAAjB;;AAEA,MAAI,EAAE,MAAM3/I,0DAAE,CAACqa,MAAH,CAAUra,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,SAAnB,CAAV,CAAR,CAAJ,EAAuD;AACrD,UAAM1+I,0DAAE,CAACm3H,KAAH,CAASn3H,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,SAAnB,CAAT,CAAN;AACD;;AAED,QAAM1+I,0DAAE,CAACo3H,QAAH,CAAYp3H,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,WAAnB,CAAZ,EAA6CkB,UAA7C,CAAN,CAjBmC,CAmBnC;;AACA,QAAMpwB,EAAE,GAAGqwB,oEAAA,CAAoBD,UAApB,CAAX;AACA,QAAMC,gEAAA,CAAgBrwB,EAAhB,EAAoB,2BAApB,CAAN;AACA,QAAMqwB,gEAAA,CAAgBrwB,EAAhB,EAAoB,4BAApB,CAAN;AACAqwB,uEAAA,CAAqBrwB,EAArB;AAEA,QAAMswB,QAAQ,GAAG,MAAMV,aAAa,CAAC,MAAMX,UAAU,CAACp5B,EAAD,CAAjB,CAApC;;AACA,OAAK,IAAIA,EAAT,IAAey6B,QAAf,EAAyB;AACvB,UAAM9/I,0DAAE,CAAC03H,UAAH,CAAc13H,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,SAAnB,EAA8Br5B,EAA9B,CAAd,CAAN;AACD;;AAEDsnB,YAAU,CAACvnF,IAAX,CAAgB,iBAAhB,EAAmC,MAAM65F,mBAAmB,CAAC55B,EAAD,CAA5D;AACD;AAEM,eAAe06B,UAAf,CAA0B16B,EAA1B,EAA8Bs6B,QAA9B,EAAwC;AAC7C,QAAMjB,SAAS,GAAG1+I,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAlB;;AAEA,MAAI,EAAE,MAAMrlH,0DAAE,CAACqa,MAAH,CAAUra,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmBH,sBAAnB,CAAV,CAAR,CAAJ,EAAoE;AAClE;AACA;AACA,UAAMv+I,0DAAE,CAACo3H,QAAH,CACJp3H,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,WAAnB,CADI,EAEJ1+I,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmBH,sBAAnB,CAFI,CAAN;AAKA,UAAMv+I,0DAAE,CAACo3H,QAAH,CACJp3H,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,eAAnB,CADI,EAEJ1+I,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,sBAAnB,CAFI,CAAN,CARkE,CAalE;AACA;;AACAsB,qBAAiB;AACjBC,sBAAkB,CAAC56B,EAAD,CAAlB;AAEA,UAAMgP,gDAAA,CAAgBhP,EAAhB,CAAN;AACD;;AAED,MAAIs6B,QAAQ,KAAKpB,sBAAjB,EAAyC;AACvC7lI,WAAO,CAACsrE,GAAR,CAAY,kBAAZ,EADuC,CAGvC;AACA;;AACA,UAAMhkF,0DAAE,CAACo3H,QAAH,CACJp3H,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmBH,sBAAnB,CADI,EAEJv+I,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,WAAnB,CAFI,CAAN;AAIA,UAAM1+I,0DAAE,CAACo3H,QAAH,CACJp3H,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,sBAAnB,CADI,EAEJ1+I,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,eAAnB,CAFI,CAAN;AAIA,UAAM1+I,0DAAE,CAAC03H,UAAH,CAAc13H,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmBH,sBAAnB,CAAd,CAAN;AACA,UAAMv+I,0DAAE,CAAC03H,UAAH,CAAc13H,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,sBAAnB,CAAd,CAAN,CAduC,CAgBvC;;AACA,QAAI;AACF,YAAMxN,qDAAA,EAAN;AACD,KAFD,CAEE,OAAO5pI,CAAP,EAAU,CAAE;;AACd+sH,sDAAA;AACD,GArBD,MAqBO;AACL37G,WAAO,CAACsrE,GAAR,CAAY,gBAAZ,EAA8B27D,QAA9B,EADK,CAGL;AACA;AACA;AACA;;AACA,UAAMtrB,gDAAA,CAAgBhP,EAAhB,CAAN;AACA,UAAMgP,gDAAA,CAAgB;AACpB/F,aAAO,EAAE,IADW;AAEpB4xB,yBAAmB,EAAE,IAFD;AAGpBC,kBAAY,EAAE;AAHM,KAAhB,CAAN,CARK,CAcL;;AACA,QAAI;AACF,YAAMjP,qDAAA,EAAN;AACD,KAFD,CAEE,OAAO5pI,CAAP,EAAU,CAAE;;AAEd+sH,sDAAA;AAEA,UAAMr0H,0DAAE,CAACo3H,QAAH,CACJp3H,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,SAAnB,EAA8BiB,QAA9B,CADI,EAEJ3/I,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,WAAnB,CAFI,CAAN;AAID;AACF;AAEM,SAASuB,kBAAT,CAA4B56B,EAA5B,EAAgC;AACrC,MAAIm5B,eAAJ,EAAqB;AACnB4B,iBAAa,CAAC5B,eAAD,CAAb;AACD,GAHoC,CAKrC;;;AACAA,iBAAe,GAAG6B,WAAW,CAAC,YAAY;AACxC3nI,WAAO,CAACsrE,GAAR,CAAY,eAAZ;AACA,UAAM07D,UAAU,CAACr6B,EAAD,CAAhB;AACD,GAH4B,EAG1B,OAAO,EAAP,GAAY,EAHc,CAA7B;AAID;AAEM,SAAS26B,iBAAT,GAA6B;AAClCI,eAAa,CAAC5B,eAAD,CAAb;AACAA,iBAAe,GAAG,IAAlB;AACD,C;;;;;;;;;;;;AC5ND;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe8B,aAAf,CAA6BxwB,SAA7B,EAAwCywB,IAAxC,EAA8C;AAC5C,QAAM3uI,IAAI,GAAG,MAAMuhH,8CAAA,CAAcrD,SAAd,EAAyBywB,IAAzB,CAAnB;AACA,SAAO,OAAO3uI,IAAI,CAACr0B,KAAZ,KAAsB,QAAtB,GAAiCq0B,IAAI,CAACr0B,KAAtC,GAA8C,CAArD;AACD,C,CAED;AACA;AACA;AACA;;;AACA,SAASijK,kBAAT,CAA4BjtB,QAA5B,EAAsCktB,QAAtC,EAAgDx3J,MAAhD,EAAwD;AACtDA,QAAM,GAAGwD,IAAI,CAACe,GAAL,CAASf,IAAI,CAACge,GAAL,CAASxhB,MAAT,EAAiB,CAACw3J,QAAlB,CAAT,EAAsCh0J,IAAI,CAACge,GAAL,CAAS8oH,QAAT,EAAmB,CAAnB,CAAtC,CAAT;AACA,SAAOktB,QAAQ,GAAGx3J,MAAlB;AACD;;AAED,SAASy3J,cAAT,GAA0B;AACxB,aAAqBrsB,+CAAA,MAAoB,EAAzC;AAAA,MAAMssB,UAAN,QAAMA,UAAN;;AACA,SAAOA,UAAU,KAAK,QAAf,GAA0B,iBAA1B,GAA8C,cAArD;AACD;;AAED,SAASC,eAAT,GAA2B;AACzB,wBAAqBvsB,+CAAA,EAArB;AAAA,MAAMssB,UAAN,mBAAMA,UAAN;;AACA,SAAOA,UAAU,KAAK,QAAtB;AACD;;AAED,SAASE,YAAT,GAAwB;AACtB,yBAAqBxsB,+CAAA,EAArB;AAAA,MAAMssB,UAAN,oBAAMA,UAAN;;AACA,SAAOA,UAAU,KAAK,UAAtB;AACD;;AAED,SAASG,OAAT,CAAiBv4J,KAAjB,EAAwB;AACtB,SAAO6V,QAAQ,CAAC7V,KAAK,CAAC+U,OAAN,CAAc,GAAd,EAAmB,EAAnB,CAAD,CAAf;AACD;;AAED,SAASyjJ,aAAT,CAAuBh8B,KAAvB,EAA8Bx8H,KAA9B,EAAqC;AACnC,SAAOinI,uCAAA,CACJ;AACL;AACA,gBAAgBzK,KAAM;AACtB;AACA,GALS,EAML,CAACx8H,KAAD,CANK,CAAP;AAQD;;AAED,SAASy4J,YAAT,CAAsBlP,UAAtB,EAAkC;AAChC,wBAAwB3e,0CAAA,GAAY9uD,IAAZ,EAAxB;AAAA,MAAM48E,aAAN,mBAAMA,aAAN;;AACA,MAAIC,MAAM,GAAG,IAAb;;AACA,OAAK,IAAI34J,KAAT,IAAkB04J,aAAlB,EAAiC;AAC/B,QAAIC,MAAM,IAAI,IAAV,IAAkB34J,KAAK,GAAG24J,MAA9B,EAAsC;AACpCA,YAAM,GAAG34J,KAAT;AACD;AACF;;AACD,SAAO0pI,6DAAA,CAA0B6f,UAA1B,EAAsCoP,MAAtC,CAAP;AACD,C,CAED;;;AAEO,SAASC,SAAT,CAAmB;AAAE15B,UAAF;AAAYl/H;AAAZ,CAAnB,EAAwC;AAC7C,MAAIw8H,KAAK,GAAG27B,cAAc,EAA1B;AACA,MAAIjb,QAAQ,GAAGjW,6CAAA,CACZ,iBAAgBzK,KAAM,mCADV,EAEb,CAAC+7B,OAAO,CAACv4J,KAAD,CAAR,EAAiBk/H,QAAjB,CAFa,CAAf;AAIA,SAAOge,QAAQ,GAAGA,QAAQ,CAACx8I,MAAT,IAAmB,CAAtB,GAA0B,CAAzC;AACD;AAEM,SAAS8pI,SAAT,CAAmB;AAAEtL,UAAF;AAAYl/H,OAAZ;AAAmBU;AAAnB,CAAnB,EAAgD;AACrD,MAAI,OAAOA,MAAP,KAAkB,QAAtB,EAAgC;AAC9BA,UAAM,GAAG,CAAT;AACD;;AACD,QAAM87H,KAAK,GAAG27B,cAAc,EAA5B;AAEA,MAAIjb,QAAQ,GAAGjW,6CAAA,CACZ,kBAAiBzK,KAAM,mCADX,EAEb,CAAC+7B,OAAO,CAACv4J,KAAD,CAAR,EAAiBk/H,QAAjB,CAFa,CAAf;;AAIA,MAAIge,QAAJ,EAAc;AACZ,WAAOjW,0CAAA,CAAUzK,KAAV,EAAiB;AAAEM,QAAE,EAAEogB,QAAQ,CAACpgB,EAAf;AAAmBp8H;AAAnB,KAAjB,CAAP;AACD;;AACD,SAAOumI,0CAAA,CAAUzK,KAAV,EAAiB;AACtBM,MAAE,EAAG,GAAEy7B,OAAO,CAACv4J,KAAD,CAAQ,IAAGk/H,QAAS,EADZ;AAEtBl/H,SAAK,EAAEu4J,OAAO,CAACv4J,KAAD,CAFQ;AAGtBk/H,YAHsB;AAItBx+H;AAJsB,GAAjB,CAAP;AAMD;AAEM,SAASm4J,SAAT,CAAmB74J,KAAnB,EAA0BU,MAA1B,EAAkC;AACvC,MAAIw8I,QAAQ,GAAGjW,6CAAA,CACZ,gDADY,EAEb,CAACjnI,KAAD,CAFa,CAAf;;AAIA,MAAIk9I,QAAJ,EAAc;AACZ,WAAOjW,0CAAA,CAAU,oBAAV,EAAgC;AACrCnK,QAAE,EAAEogB,QAAQ,CAACpgB,EADwB;AAErCo7B,cAAQ,EAAEx3J;AAF2B,KAAhC,CAAP;AAID;;AACD,SAAOumI,0CAAA,CAAU,oBAAV,EAAgC;AAAEnK,MAAE,EAAE98H,KAAN;AAAak4J,YAAQ,EAAEx3J;AAAvB,GAAhC,CAAP;AACD;;AAED,SAASo4J,YAAT,CAAsBt8B,KAAtB,EAA6B0C,QAA7B,EAAuCl/H,KAAvC,EAA8Cs9H,IAA9C,EAAoD;AAClD,MAAI4f,QAAQ,GAAGjW,6CAAA,CACZ,kBAAiBzK,KAAM,mCADX,EAEb,CAACx8H,KAAD,EAAQk/H,QAAR,CAFa,CAAf;;AAIA,MAAIge,QAAJ,EAAc;AACZ,WAAOjW,0CAAA,CAAUzK,KAAV,EAAiB;AAAEM,QAAE,EAAEogB,QAAQ,CAACpgB,EAAf;AAAmB0K,eAAS,EAAElK,IAAI,GAAG,CAAH,GAAO;AAAzC,KAAjB,CAAP;AACD;;AACD,SAAO2J,0CAAA,CAAUzK,KAAV,EAAiB;AACtBM,MAAE,EAAG,GAAE98H,KAAM,IAAGk/H,QAAS,EADH;AAEtBl/H,SAFsB;AAGtBk/H,YAHsB;AAItBsI,aAAS,EAAElK,IAAI,GAAG,CAAH,GAAO;AAJA,GAAjB,CAAP;AAMD,C,CAED;;;AAEO,eAAey7B,iBAAf,CAAiC;AAAE/4J;AAAF,CAAjC,EAA4C;AACjD,MAAIg5J,SAAS,GAAGT,OAAO,CAAC7uB,wDAAA,CAAqB1pI,KAArB,CAAD,CAAvB;AACA,MAAIw8H,KAAK,GAAG27B,cAAc,EAA1B;AACA,MAAIc,UAAU,GAAG,MAAMT,aAAa,CAACh8B,KAAD,EAAQw8B,SAAR,CAApC;AAEA,QAAMluB,2DAAa,CAAC,MAAM;AACxBmuB,cAAU,CAACtxJ,OAAX,CAAmBuxJ,UAAU,IAAI;AAC/B,UAAIA,UAAU,CAAC33B,SAAX,KAAyB,CAAzB,IAA8B,CAAC82B,eAAe,EAAlD,EAAsD;AACpD;AACD;;AACD7tB,eAAS,CAAC;AACRtL,gBAAQ,EAAEg6B,UAAU,CAACh6B,QADb;AAERl/H,aAFQ;AAGRU,cAAM,EAAEw4J,UAAU,CAACx4J;AAHX,OAAD,CAAT;AAKD,KATD;AAUD,GAXkB,CAAnB;AAYD;AAEM,eAAey4J,OAAf,CAAuB;AAAEn5J;AAAF,CAAvB,EAAkC;AACvC,MAAI+hI,UAAU,GAAG,MAAMkF,uCAAA,CACrB,gDADqB,CAAvB;AAIA,QAAM6D,2DAAa,CAAC,MAAM;AACxB/I,cAAU,CAACp6H,OAAX,CAAmB25H,GAAG,IAAI;AACxB,UAAIA,GAAG,CAACC,SAAJ,KAAkB,CAAlB,IAAuB,CAAC82B,eAAe,EAA3C,EAA+C;AAC7C;AACD;;AACD7tB,eAAS,CAAC;AAAEtL,gBAAQ,EAAEoC,GAAG,CAACxE,EAAhB;AAAoB98H,aAApB;AAA2BU,cAAM,EAAE;AAAnC,OAAD,CAAT;AACD,KALD;AAMD,GAPkB,CAAnB;AAQD;AAEM,eAAe04J,YAAf,CAA4B;AAAEp5J;AAAF,CAA5B,EAAuC;AAC5C,MAAI+hI,UAAU,GAAG,MAAMkF,uCAAA,CACrB,gDADqB,CAAvB;AAIA,MAAIoyB,UAAU,GAAG3vB,wDAAA,CAAqB1pI,KAArB,CAAjB;AACA,MAAIs5J,UAAU,GAAG5vB,wDAAA,CAAqB2vB,UAArB,CAAjB;AACA,MAAIE,UAAU,GAAG7vB,wDAAA,CAAqB4vB,UAArB,CAAjB;AAEA,QAAMxuB,2DAAa,CAAC,YAAY;AAC9B,SAAK,IAAIxJ,GAAT,IAAgBS,UAAhB,EAA4B;AAC1B,UAAIT,GAAG,CAACC,SAAJ,KAAkB,CAAlB,IAAuB,CAAC82B,eAAe,EAA3C,EAA+C;AAC7C;AACD;;AAED,UAAImB,MAAM,GAAG,MAAMzB,aAAa,CAC9BruB,4DAAA,CAAyB2vB,UAAzB,CAD8B,EAE9B,gBAAgB/3B,GAAG,CAACxE,EAFU,CAAhC;AAIA,UAAI28B,MAAM,GAAG,MAAM1B,aAAa,CAC9BruB,4DAAA,CAAyB4vB,UAAzB,CAD8B,EAE9B,gBAAgBh4B,GAAG,CAACxE,EAFU,CAAhC;AAIA,UAAI48B,MAAM,GAAG,MAAM3B,aAAa,CAC9BruB,4DAAA,CAAyB6vB,UAAzB,CAD8B,EAE9B,gBAAgBj4B,GAAG,CAACxE,EAFU,CAAhC;AAKA,YAAM68B,GAAG,GAAI,CAACH,MAAM,GAAGC,MAAT,GAAkBC,MAAnB,IAA6B,CAA9B,GAAmC,CAA/C;AACAlvB,eAAS,CAAC;AAAEtL,gBAAQ,EAAEoC,GAAG,CAACxE,EAAhB;AAAoB98H,aAApB;AAA2BU,cAAM,EAAE,CAACi5J;AAApC,OAAD,CAAT;AACD;AACF,GAtBkB,CAAnB;AAuBD;AAEM,eAAeC,YAAf,CAA4B;AAAErQ;AAAF,CAA5B,EAA4C;AACjD,MAAI,CAAC8O,eAAe,EAApB,EAAwB;AACtB,UAAM,IAAIp+J,KAAJ,CAAU,iDAAV,CAAN;AACD;;AACD,MAAIuiI,KAAK,GAAG27B,cAAc,EAA1B;AACA,MAAIc,UAAU,GAAG,MAAMT,aAAa,CAACh8B,KAAD,EAAQ+7B,OAAO,CAAChP,UAAD,CAAf,CAApC;AACA,MAAI38I,MAAM,GAAG6rJ,YAAY,CAAC/uB,wDAAA,CAAqB6f,UAArB,EAAiC,CAAjC,CAAD,CAAzB;AAEAze,6DAAa,CAAC,MAAM;AAClB,SAAK,IAAI9qI,KAAT,IAAkB4M,MAAlB,EAA0B;AACxBqsJ,gBAAU,CAACtxJ,OAAX,CAAmB87H,MAAM,IAAI;AAC3B,YAAIA,MAAM,CAAClC,SAAP,KAAqB,CAArB,IAA0B,CAAC82B,eAAe,EAA9C,EAAkD;AAChD;AACD;;AACD7tB,iBAAS,CAAC;AAAEtL,kBAAQ,EAAEuE,MAAM,CAACvE,QAAnB;AAA6Bl/H,eAA7B;AAAoCU,gBAAM,EAAE+iI,MAAM,CAAC/iI;AAAnD,SAAD,CAAT;AACD,OALD;AAMD;AACF,GATY,CAAb;AAUD;AAEM,eAAem5J,gBAAf,CAAgC;AAAE75J,OAAF;AAASU;AAAT,CAAhC,EAAmD;AACxD,MAAI+zI,GAAG,GAAG,MAAMxN,yCAAA,CACd,sDADc,EAEd,CAACjnI,KAAD,CAFc,CAAhB;AAKA,MAAIunI,SAAS,GAAGmC,4DAAA,CAAyB1pI,KAAzB,CAAhB;AACA,MAAIgrI,QAAQ,GAAG,MAAM+sB,aAAa,CAACxwB,SAAD,EAAY,WAAZ,CAAlC;;AAEA,MAAIyD,QAAQ,GAAG,CAAf,EAAkB;AAChB,QAAI8uB,cAAc,GAAG7B,kBAAkB,CACrCjtB,QADqC,EAEpCyJ,GAAG,IAAIA,GAAG,CAACyjB,QAAZ,IAAyB,CAFY,EAGrCx3J,MAHqC,CAAvC;AAMA,UAAMm4J,SAAS,CAAC74J,KAAD,EAAQ85J,cAAR,CAAf;AACA,WAAO,IAAP;AACD;;AACD,SAAO,KAAP;AACD;AAEM,eAAeC,mBAAf,CAAmC;AAAExQ,YAAF;AAAc7oJ;AAAd,CAAnC,EAA2D;AAChE,MAAIkM,MAAM,GAAG6rJ,YAAY,CAAClP,UAAD,CAAzB;AAEA,QAAMze,2DAAa,CAAC,YAAY;AAC9B,SAAK,IAAI9qI,KAAT,IAAkB4M,MAAlB,EAA0B;AACxB,UAAI,EAAE,MAAMitJ,gBAAgB,CAAC;AAAE75J,aAAF;AAASU;AAAT,OAAD,CAAxB,CAAJ,EAAkD;AAChD;AACD;AACF;AACF,GANkB,CAAnB;AAOD;AAEM,eAAes5J,SAAf,CAAyB;AAAEh6J;AAAF,CAAzB,EAAoC;AACzC,QAAM64J,SAAS,CAAC74J,KAAD,EAAQ,CAAR,CAAf;AACD;AAEM,eAAei6J,iBAAf,CAAiC;AAAEj6J,OAAF;AAASu9B,IAAT;AAAa/jC;AAAb,CAAjC,EAAsD;AAC3D,MAAI+tI,SAAS,GAAGmC,4DAAA,CAAyB1pI,KAAzB,CAAhB;AACA,MAAIk6J,UAAU,GAAG,MAAMnC,aAAa,CAACxwB,SAAD,EAAY,YAAYhqG,EAAxB,CAApC;AACA,MAAI48H,QAAQ,GAAG,MAAMpC,aAAa,CAACxwB,SAAD,EAAY,cAAchqG,EAA1B,CAAlC;AACA,MAAI68H,YAAY,GAAG,MAAMrC,aAAa,CACpCxwB,SADoC,EAEpC/tI,IAAI,KAAK,gBAAT,GAA4B,WAA5B,GAA0C,cAAcA,IAFpB,CAAtC;;AAKA,MAAI2gK,QAAQ,IAAI,CAAZ,IAAiBC,YAAY,IAAI,CAArC,EAAwC;AACtC;AACD;;AAED,MAAIC,aAAa,GAAGn2J,IAAI,CAACe,GAAL,CAAS,CAACk1J,QAAV,EAAoBC,YAApB,CAApB,CAb2D,CAe3D;;AACA,MAAI5gK,IAAI,KAAK,gBAAb,EAA+B;AAC7B,UAAM8gK,YAAY,GAAG,MAAMvC,aAAa,CAACxwB,SAAD,EAAY,YAAY/tI,IAAxB,CAAxC;AACA,UAAMgxI,SAAS,CAAC;AACdtL,cAAQ,EAAE1lI,IADI;AAEdwG,WAFc;AAGdU,YAAM,EAAE45J,YAAY,GAAGD;AAHT,KAAD,CAAf;AAKD;;AAED,QAAM7vB,SAAS,CAAC;AAAEtL,YAAQ,EAAE3hG,EAAZ;AAAgBv9B,SAAhB;AAAuBU,UAAM,EAAEw5J,UAAU,GAAGG;AAA5C,GAAD,CAAf;AACD;AAEM,eAAeE,iBAAf,CAAiC;AAAEv6J,OAAF;AAASU,QAAT;AAAiBw+H;AAAjB,CAAjC,EAA8D;AACnE,MAAIqI,SAAS,GAAGmC,4DAAA,CAAyB1pI,KAAzB,CAAhB;AACA,MAAIm6J,QAAQ,GAAG,MAAMpC,aAAa,CAACxwB,SAAD,EAAY,WAAZ,CAAlC;AACA7mI,QAAM,GAAGwD,IAAI,CAACge,GAAL,CAAShe,IAAI,CAACe,GAAL,CAASvE,MAAT,EAAiBy5J,QAAjB,CAAT,EAAqC,CAArC,CAAT;AAEA,MAAI/2B,QAAQ,GAAG,MAAM20B,aAAa,CAACxwB,SAAD,EAAY,YAAYrI,QAAxB,CAAlC;AACA,QAAMsL,SAAS,CAAC;AAAEtL,YAAF;AAAYl/H,SAAZ;AAAmBU,UAAM,EAAE0iI,QAAQ,GAAG1iI;AAAtC,GAAD,CAAf;AACD;AAEM,eAAe85J,gBAAf,CAAgC;AAAEx6J,OAAF;AAASU,QAAT;AAAiBlH,MAAjB;AAAuB+jC;AAAvB,CAAhC,EAA6D;AAClE,QAAMgqG,SAAS,GAAGmC,4DAAA,CAAyB1pI,KAAzB,CAAlB;AACA,QAAMs6J,YAAY,GAAG,MAAMvC,aAAa,CAACxwB,SAAD,EAAY,YAAY/tI,IAAxB,CAAxC;AAEA,QAAMgxI,SAAS,CAAC;AAAEtL,YAAQ,EAAE1lI,IAAZ;AAAkBwG,SAAlB;AAAyBU,UAAM,EAAE45J,YAAY,GAAG55J;AAAhD,GAAD,CAAf,CAJkE,CAMlE;AACA;;AACA,MAAI68B,EAAE,KAAK,gBAAX,EAA6B;AAC3B,UAAM28H,UAAU,GAAG,MAAMnC,aAAa,CAACxwB,SAAD,EAAY,YAAYhqG,EAAxB,CAAtC;AACA,UAAMitG,SAAS,CAAC;AAAEtL,cAAQ,EAAE3hG,EAAZ;AAAgBv9B,WAAhB;AAAuBU,YAAM,EAAEw5J,UAAU,GAAGx5J;AAA5C,KAAD,CAAf;AACD;AACF;AAEM,eAAe+5J,oBAAf,CAAoC;AAAElR,YAAF;AAAcrqB,UAAd;AAAwB5B;AAAxB,CAApC,EAAoE;AACzE,MAAId,KAAK,GAAG27B,cAAc,EAA1B;AACA,MAAIvrJ,MAAM,GAAG6rJ,YAAY,CAAClP,UAAD,CAAzB;AAEA,QAAMze,2DAAa,CAAC,MAAM;AACxB,SAAK,IAAI9qI,KAAT,IAAkB4M,MAAlB,EAA0B;AACxBksJ,kBAAY,CAACt8B,KAAD,EAAQ0C,QAAR,EAAkBq5B,OAAO,CAACv4J,KAAD,CAAzB,EAAkCs9H,IAAlC,CAAZ;AACD;AACF,GAJkB,CAAnB;AAKD,C;;;;;;;;;;;;ACxTD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAGA,IAAI4sB,GAAG,GAAGM,sDAAS,EAAnB;AAEAN,GAAG,CAACnxJ,MAAJ,CAAW,sBAAX,EAAmC2hK,yDAAO,CAACC,sDAAQ,CAACljB,kDAAD,CAAT,CAA1C;AACAyS,GAAG,CAACnxJ,MAAJ,CACE,4BADF,EAEE2hK,yDAAO,CAACC,sDAAQ,CAACljB,0DAAD,CAAT,CAFT;AAIAyS,GAAG,CAACnxJ,MAAJ,CAAW,iBAAX,EAA8B2hK,yDAAO,CAACC,sDAAQ,CAACljB,gDAAD,CAAT,CAArC;AACAyS,GAAG,CAACnxJ,MAAJ,CAAW,uBAAX,EAAoC2hK,yDAAO,CAACC,sDAAQ,CAACljB,qDAAD,CAAT,CAA3C;AACAyS,GAAG,CAACnxJ,MAAJ,CAAW,uBAAX,EAAoC2hK,yDAAO,CAACC,sDAAQ,CAACljB,qDAAD,CAAT,CAA3C;AACAyS,GAAG,CAACnxJ,MAAJ,CACE,4BADF,EAEE2hK,yDAAO,CAACC,sDAAQ,CAACljB,yDAAD,CAAT,CAFT;AAIAyS,GAAG,CAACnxJ,MAAJ,CACE,+BADF,EAEE2hK,yDAAO,CAACC,sDAAQ,CAACljB,4DAAD,CAAT,CAFT;AAIAyS,GAAG,CAACnxJ,MAAJ,CAAW,mBAAX,EAAgC2hK,yDAAO,CAACC,sDAAQ,CAACljB,kDAAD,CAAT,CAAvC;AACAyS,GAAG,CAACnxJ,MAAJ,CACE,2BADF,EAEE2hK,yDAAO,CAACC,sDAAQ,CAACljB,0DAAD,CAAT,CAFT;AAIAyS,GAAG,CAACnxJ,MAAJ,CACE,2BADF,EAEE2hK,yDAAO,CAACC,sDAAQ,CAACljB,0DAAD,CAAT,CAFT;AAIAyS,GAAG,CAACnxJ,MAAJ,CACE,0BADF,EAEE2hK,yDAAO,CAACC,sDAAQ,CAACljB,yDAAD,CAAT,CAFT;AAIAyS,GAAG,CAACnxJ,MAAJ,CACE,sBADF,EAEE2hK,yDAAO,CAACC,sDAAQ,CAACljB,6DAAD,CAAT,CAFT;AAKeyS,kEAAf,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS0Q,YAAT,CAAsBzd,OAAtB,EAA+B;AAC7B,QAAM0d,MAAM,GAAG,EAAf;AACA1d,SAAO,CAACx1I,OAAR,CAAgB2U,MAAM,IAAI;AACxBjkB,UAAM,CAACiS,IAAP,CAAYgS,MAAZ,EAAoB3U,OAApB,CAA4BijI,KAAK,IAAI;AACnC,UAAIiwB,MAAM,CAACjwB,KAAD,CAAV,EAAmB;AACjBiwB,cAAM,CAACjwB,KAAD,CAAN,mCAAqBiwB,MAAM,CAACjwB,KAAD,CAA3B,GAAuCtuH,MAAM,CAACsuH,KAAD,CAA7C;AACD,OAFD,MAEO;AACLiwB,cAAM,CAACjwB,KAAD,CAAN,GAAgBtuH,MAAM,CAACsuH,KAAD,CAAtB;AACD;AACF,KAND;AAOD,GARD;AASA,SAAOiwB,MAAP;AACD;;AAEM,SAASC,aAAT,GAAyB;AAC9B,MAAIh/E,IAAI,GAAG8uD,0CAAA,GAAY9uD,IAAZ,EAAX;AACA,SAAOA,IAAI,CAACs8E,UAAL,IAAmB,UAA1B;AACD;AAEM,SAAS2C,cAAT,CAAwBlmK,KAAxB,EAA+BS,GAA/B,EAAoC;AACzCT,OAAK,GAAG60I,uDAAA,CAAoB70I,KAApB,CAAR;AACAS,KAAG,GAAGo0I,uDAAA,CAAoBp0I,GAApB,CAAN,CAFyC,CAIzC;AACA;AACA;;AACA,MAAIT,KAAK,GAAGS,GAAZ,EAAiB;AACfT,SAAK,GAAGS,GAAR;AACD,GATwC,CAWzC;AACA;AACA;AACA;;;AACAT,OAAK,GAAG60I,wDAAA,CAAqB70I,KAArB,EAA4B,CAA5B,CAAR;AACAS,KAAG,GAAGo0I,wDAAA,CAAqBp0I,GAArB,EAA0B,EAA1B,CAAN;AAEA,SAAO;AAAET,SAAF;AAASS,OAAT;AAAc+5E,SAAK,EAAEq6D,6DAAA,CAA0B70I,KAA1B,EAAiCS,GAAjC;AAArB,GAAP;AACD;;AAED,SAAS2pI,cAAT,CAAwBqC,GAAxB,EAA6BiG,SAA7B,EAAwCyzB,aAAxC,EAAuDnmK,KAAvD,EAA8DS,GAA9D,EAAmE;AACjEs1I,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,gBAAgBjG,GAAG,CAACxE,EAAzD,EAA6D;AAC3Do+B,gBAAY,EAAE,CAD6C;AAE3D7vJ,OAAG,EAAE,MAAM;AACT;AACA,UAAIm5I,IAAI,GAAGvd,4CAAA,CACR;AACT;AACA,2BAA2BpyI,KAAM,kBAAiBS,GAAI;AACtD,6BAA6BgsI,GAAG,CAACxE,EAAG,uBAJnB,EAKT,EALS,EAMT,IANS,CAAX;AAQA,UAAI2X,GAAG,GAAG+P,IAAI,CAAC,CAAD,CAAd;AACA,UAAI9jJ,MAAM,GAAG+zI,GAAG,GAAGA,GAAG,CAAC/zI,MAAP,GAAgB,CAAhC;AACA,aAAOA,MAAM,IAAI,CAAjB;AACD;AAf0D,GAA7D;;AAkBA,MAAIo6J,aAAa,OAAO,UAAxB,EAAoC;AAClCK,4DAAA,CAAwB75B,GAAxB,EAA6BiG,SAA7B,EAAwCyzB,aAAxC;AACD,GAFD,MAEO;AACLI,0DAAA,CAAsB95B,GAAtB,EAA2BiG,SAA3B,EAAsCyzB,aAAtC;AACD;AACF;;AAED,SAASp8B,mBAAT,CAA6BC,KAA7B,EAAoC0I,SAApC,EAA+C;AAC7CqD,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,sBAAsB1I,KAAK,CAAC/B,EAAjE,EAAqE;AACnEo+B,gBAAY,EAAE,CADqD;AAEnE5K,gBAAY,EAAEzxB,KAAK,CAACkD,UAAN,CAAiBvpI,GAAjB,CAAqB8oI,GAAG,IAAK,cAAaA,GAAG,CAACxE,EAAG,EAAjD,CAFqD;AAGnEzxH,OAAG,EAAEgwJ,gDAAUA;AAHoD,GAArE;;AAMA,MAAI,CAACx8B,KAAK,CAAC0C,SAAP,IAAoBu5B,aAAa,OAAO,UAA5C,EAAwD;AACtDlwB,8CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,kBAAkB1I,KAAK,CAAC/B,EAA7D,EAAiE;AAC/Do+B,kBAAY,EAAE,CADiD;AAE/D5K,kBAAY,EAAEzxB,KAAK,CAACkD,UAAN,CAAiBvpI,GAAjB,CAAqB8oI,GAAG,IAAK,UAASA,GAAG,CAACxE,EAAG,EAA7C,CAFiD;AAG/DzxH,SAAG,EAAEgwJ,gDAAUA;AAHgD,KAAjE;AAMAzwB,8CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,oBAAoB1I,KAAK,CAAC/B,EAA/D,EAAmE;AACjEo+B,kBAAY,EAAE,CADmD;AAEjE5K,kBAAY,EAAEzxB,KAAK,CAACkD,UAAN,CAAiBvpI,GAAjB,CAAqB8oI,GAAG,IAAK,YAAWA,GAAG,CAACxE,EAAG,EAA/C,CAFmD;AAGjEzxH,SAAG,EAAEgwJ,gDAAUA;AAHkD,KAAnE;AAKD;AACF;;AAED,SAASC,mBAAT,CAA6B1uJ,MAA7B,EAAqC2uJ,QAArC,EAA+Cta,QAA/C,EAAyD;AACvD,MAAI,CAACsa,QAAD,IAAaA,QAAQ,CAACz6B,SAAT,KAAuBmgB,QAAQ,CAACngB,SAAjD,EAA4D;AAC1D,QAAI0jB,IAAI,GAAGvd,4CAAA,CACR;AACP;AACA;AACA,OAJe,EAKT,CAACga,QAAQ,CAACnkB,EAAV,CALS,EAMT,IANS,CAAX;AASAlwH,UAAM,CAACjF,OAAP,CAAe3H,KAAK,IAAI;AACtB,UAAIunI,SAAS,GAAGmC,4DAAA,CAAyB1pI,KAAzB,EAAgC86J,aAAa,EAA7C,CAAhB;AAEAtW,UAAI,CAAC78I,OAAL,CAAa8sI,GAAG,IAAI;AAClB7J,kDAAA,GAEG4wB,SAFH,CAEa5T,qEAAW,CAACrgB,SAAD,EAAY,gBAAgBkN,GAAG,CAACvV,QAAhC,CAFxB;AAGD,OAJD;AAKD,KARD;AASD;AACF;;AAED,SAASu8B,uBAAT,CAAiCp5B,WAAjC,EAA8Cq5B,aAA9C,EAA6D;AAC3D,MACE,CAACA,aAAa,CAACjuJ,GAAd,CAAkB,MAAlB,KACCiuJ,aAAa,CAACjuJ,GAAd,CAAkB,MAAlB,CADD,IAECiuJ,aAAa,CAACjuJ,GAAd,CAAkB,QAAlB,CAFD,IAGCiuJ,aAAa,CAACjuJ,GAAd,CAAkB,UAAlB,CAHD,IAICiuJ,aAAa,CAACjuJ,GAAd,CAAkB,WAAlB,CAJD,IAKCiuJ,aAAa,CAACjuJ,GAAd,CAAkB,UAAlB,CALF,KAMA40H,WAAW,CAAC5qI,IANZ,IAOA4qI,WAAW,CAACnD,QARd,EASE;AACA,QAAIl/H,KAAK,GAAG0pI,4DAAA,CAAyBzC,gDAAA,CAAgB5E,WAAW,CAAC5qI,IAA5B,CAAzB,CAAZ;AACA,QAAI8vI,SAAS,GAAGmC,4DAAA,CAAyB1pI,KAAzB,EAAgC86J,aAAa,EAA7C,CAAhB;AAEAlwB,8CAAA,GAEG4wB,SAFH,CAEa5T,qEAAW,CAACrgB,SAAD,EAAY,gBAAgBlF,WAAW,CAACnD,QAAxC,CAFxB;AAGD;AACF;;AAED,SAASy8B,2BAAT,CAAqC/uJ,MAArC,EAA6C2uJ,QAA7C,EAAuDta,QAAvD,EAAiE;AAC/Dr0I,QAAM,CAACjF,OAAP,CAAe3H,KAAK,IAAI;AACtB,QAAIunI,SAAS,GAAGmC,4DAAA,CAAyB1pI,KAAzB,EAAgC86J,aAAa,EAA7C,CAAhB;;AACA,QAAIS,QAAJ,EAAc;AACZ3wB,gDAAA,GAEG4wB,SAFH,CAEa5T,qEAAW,CAACrgB,SAAD,EAAY,gBAAgBg0B,QAAQ,CAAC94B,UAArC,CAFxB;AAGD;;AACDmI,8CAAA,GAEG4wB,SAFH,CAEa5T,qEAAW,CAACrgB,SAAD,EAAY,gBAAgB0Z,QAAQ,CAACxe,UAArC,CAFxB;AAGD,GAVD;AAWD;;AAED,SAASm5B,oBAAT,CAA8BhvJ,MAA9B,EAAsC2uJ,QAAtC,EAAgDta,QAAhD,EAA0D;AACxD,WAAS4a,OAAT,CAAiBt0B,SAAjB,EAA4BxB,OAA5B,EAAqClC,KAArC,EAA4C;AAC1C+G,8CAAA,GAEGkxB,eAFH,CAEmBv0B,SAFnB,EAE+B,oBAAmBxB,OAAQ,EAF1D,EAE6D,CACxD,cAAalC,KAAM,EADqC,CAF7D;AAKA+G,8CAAA,GAEGkxB,eAFH,CAEmBv0B,SAFnB,EAE+B,gBAAexB,OAAQ,EAFtD,EAEyD,CACpD,UAASlC,KAAM,EADqC,CAFzD;AAKA+G,8CAAA,GAEGkxB,eAFH,CAEmBv0B,SAFnB,EAE+B,kBAAiBxB,OAAQ,EAFxD,EAE2D,CACtD,YAAWlC,KAAM,EADqC,CAF3D;AAKD;;AAED,WAASk4B,UAAT,CAAoBx0B,SAApB,EAA+BxB,OAA/B,EAAwClC,KAAxC,EAA+C;AAC7C+G,8CAAA,GAEGoxB,kBAFH,CAEsBz0B,SAFtB,EAEkC,oBAAmBxB,OAAQ,EAF7D,EAEgE,CAC3D,cAAalC,KAAM,EADwC,CAFhE;AAKA+G,8CAAA,GAEGoxB,kBAFH,CAEsBz0B,SAFtB,EAEkC,gBAAexB,OAAQ,EAFzD,EAE4D,CACvD,UAASlC,KAAM,EADwC,CAF5D;AAKA+G,8CAAA,GAEGoxB,kBAFH,CAEsBz0B,SAFtB,EAEkC,kBAAiBxB,OAAQ,EAF3D,EAE8D,CACzD,YAAWlC,KAAM,EADwC,CAF9D;AAKD;;AAED,MAAIu0B,UAAU,GAAG0C,aAAa,EAA9B;;AAEA,MAAIS,QAAQ,IAAIA,QAAQ,CAACpa,SAAT,KAAuB,CAAnC,IAAwCF,QAAQ,CAACE,SAAT,KAAuB,CAAnE,EAAsE;AACpE,QAAIrkB,EAAE,GAAGmkB,QAAQ,CAACnkB,EAAlB;AACA,QAAIiJ,OAAO,GAAGkb,QAAQ,CAACuG,SAAvB;AAEA56I,UAAM,CAACjF,OAAP,CAAe3H,KAAK,IAAI;AACtB,UAAIunI,SAAS,GAAGmC,4DAAA,CAAyB1pI,KAAzB,CAAhB;AACA+7J,gBAAU,CAACx0B,SAAD,EAAYxB,OAAZ,EAAqBjJ,EAArB,CAAV;AACD,KAHD;AAID,GARD,MAQO,IACLmkB,QAAQ,CAACE,SAAT,KAAuB,CAAvB,KACC,CAACoa,QAAD,IAAaA,QAAQ,CAACpa,SAAT,KAAuB,CADrC,CADK,EAGL;AACA,QAAIiX,UAAU,KAAK,UAAnB,EAA+B;AAC7B+C,mEAAA,CAA6Bla,QAA7B,EAAuCr0I,MAAvC;AACD;;AAEDA,UAAM,CAACjF,OAAP,CAAe3H,KAAK,IAAI;AACtB,UAAIg5J,SAAS,GAAGtvB,wDAAA,CAAqB1pI,KAArB,CAAhB;AACA,UAAIg7J,aAAa,GAAGtxB,4DAAA,CAAyBsvB,SAAzB,EAAoCZ,UAApC,CAApB;AACA,UAAI7wB,SAAS,GAAGmC,4DAAA,CAAyB1pI,KAAzB,EAAgCo4J,UAAhC,CAAhB;;AACA,+BAAqB1uB,qDAAA,CAAkB1pI,KAAlB,CAArB;AAAA,UAAMnL,KAAN,sBAAMA,KAAN;AAAA,UAAaS,GAAb,sBAAaA,GAAb;;AAEA2pI,oBAAc,CAACgiB,QAAD,EAAW1Z,SAAX,EAAsByzB,aAAtB,EAAqCnmK,KAArC,EAA4CS,GAA5C,CAAd;AAEA,UAAIwnI,EAAE,GAAGmkB,QAAQ,CAACnkB,EAAlB;AACA,UAAIiJ,OAAO,GAAGkb,QAAQ,CAACuG,SAAvB;;AAEA,UAAIsT,aAAa,OAAO,UAAxB,EAAoC;AAClClwB,kDAAA,GAEGkxB,eAFH,CAEmBv0B,SAFnB,EAE8B,sBAF9B,EAEsD,CACjD,GAAEyzB,aAAc,aAAYl+B,EAAG,EADkB,EAEjD,GAAEk+B,aAAc,cAAal+B,EAAG,EAFiB,CAFtD;AAMD;;AAED++B,aAAO,CAACt0B,SAAD,EAAYxB,OAAZ,EAAqBjJ,EAArB,CAAP;AACD,KArBD;AAsBD,GA9BM,MA8BA,IAAIy+B,QAAQ,IAAIA,QAAQ,CAAC/T,SAAT,KAAuBvG,QAAQ,CAACuG,SAAhD,EAA2D;AAChE;AACA,QAAI1qB,EAAE,GAAGmkB,QAAQ,CAACnkB,EAAlB;AAEAlwH,UAAM,CAACjF,OAAP,CAAe3H,KAAK,IAAI;AACtB,UAAIunI,SAAS,GAAGmC,4DAAA,CAAyB1pI,KAAzB,EAAgCo4J,UAAhC,CAAhB;AACA2D,gBAAU,CAACx0B,SAAD,EAAYg0B,QAAQ,CAAC/T,SAArB,EAAgC1qB,EAAhC,CAAV;AACA++B,aAAO,CAACt0B,SAAD,EAAY0Z,QAAQ,CAACuG,SAArB,EAAgC1qB,EAAhC,CAAP;AACD,KAJD;AAKD;AACF;;AAED,SAASm/B,yBAAT,CAAmCrvJ,MAAnC,EAA2C2uJ,QAA3C,EAAqDta,QAArD,EAA+D;AAC7D,MAAImX,UAAU,GAAG0C,aAAa,EAA9B;;AAEA,WAASe,OAAT,CAAiBt0B,SAAjB,EAA4BxB,OAA5B,EAAqC;AACnC6E,8CAAA,GAEGkxB,eAFH,CAEmBv0B,SAFnB,EAE8B,gBAF9B,EAEgD,CAC3C,gBAAexB,OAAQ,EADoB,CAFhD;AAKA6E,8CAAA,GAEGkxB,eAFH,CAEmBv0B,SAFnB,EAE8B,aAF9B,EAE6C,CACxC,oBAAmBxB,OAAQ,EADa,CAF7C;AAKA6E,8CAAA,GAEGkxB,eAFH,CAEmBv0B,SAFnB,EAE8B,gBAF9B,EAEgD,CAC3C,kBAAiBxB,OAAQ,EADkB,CAFhD;AAKD;;AAED,WAASg2B,UAAT,CAAoBx0B,SAApB,EAA+BxB,OAA/B,EAAwC;AACtC6E,8CAAA,GAEGoxB,kBAFH,CAEsBz0B,SAFtB,EAEiC,gBAFjC,EAEmD,CAC9C,gBAAexB,OAAQ,EADuB,CAFnD;AAKA6E,8CAAA,GAEGoxB,kBAFH,CAEsBz0B,SAFtB,EAEiC,aAFjC,EAEgD,CAC3C,oBAAmBxB,OAAQ,EADgB,CAFhD;AAKA6E,8CAAA,GAEGoxB,kBAFH,CAEsBz0B,SAFtB,EAEiC,gBAFjC,EAEmD,CAC9C,kBAAiBxB,OAAQ,EADqB,CAFnD;AAKD;;AAED,MAAIkb,QAAQ,CAACE,SAAT,KAAuB,CAAvB,IAA4Boa,QAA5B,IAAwCA,QAAQ,CAACpa,SAAT,KAAuB,CAAnE,EAAsE;AACpE,QAAIrkB,EAAE,GAAGmkB,QAAQ,CAACnkB,EAAlB;AACAlwH,UAAM,CAACjF,OAAP,CAAe3H,KAAK,IAAI;AACtB,UAAIunI,SAAS,GAAGmC,4DAAA,CAAyB1pI,KAAzB,EAAgCo4J,UAAhC,CAAhB;AACA2D,gBAAU,CAACx0B,SAAD,EAAYzK,EAAZ,CAAV;AACD,KAHD;AAID,GAND,MAMO,IACLmkB,QAAQ,CAACE,SAAT,KAAuB,CAAvB,KACC,CAACoa,QAAD,IAAaA,QAAQ,CAACpa,SAAT,KAAuB,CADrC,CADK,EAGL;AACA,QAAItiB,KAAK,GAAGoiB,QAAZ;;AAEA,QAAI,CAACpiB,KAAK,CAAC0C,SAAP,IAAoB62B,UAAU,KAAK,UAAvC,EAAmD;AACjDxrJ,YAAM,CAACjF,OAAP,CAAe3H,KAAK,IAAI;AACtB,YAAIunI,SAAS,GAAGmC,4DAAA,CAAyB1pI,KAAzB,EAAgCo4J,UAAhC,CAAhB,CADsB,CAGtB;AACA;AACA;AACA;;AACA,YAAIr2B,UAAU,GAAGkF,4CAAA,CACf,gEADe,EAEf,CAACpI,KAAK,CAAC/B,EAAP,CAFe,EAGf,IAHe,CAAjB;AAKA8B,2BAAmB,iCAAMC,KAAN;AAAakD;AAAb,YAA2BwF,SAA3B,CAAnB;AAEAs0B,eAAO,CAACt0B,SAAD,EAAY1I,KAAK,CAAC/B,EAAlB,CAAP;AACD,OAfD;AAgBD;AACF;AACF;;AAED,SAASo/B,uBAAT,CAAiCz4B,MAAjC,EAAyC;AACvC,MAAI8D,SAAS,GAAGmC,4DAAA,CAAyBjG,MAAM,CAAC3G,EAAhC,CAAhB;AACA8N,4CAAA,GAAY3vI,GAAZ,CAAiB,GAAEssI,SAAU,WAA7B,EAAyC9D,MAAM,CAACy0B,QAAhD;AACD;;AAED,SAASiE,kBAAT,CAA4B14B,MAA5B,EAAoC;AAClC,MAAIA,MAAM,CAACvE,QAAX,EAAqB;AACnB,QAAIqI,SAAS,GAAGmC,4DAAA,CAAyBjG,MAAM,CAACzjI,KAAP,CAAaqS,QAAb,EAAzB,CAAhB;AACAu4H,8CAAA,GAEG3vI,GAFH,CAEQ,GAAEssI,SAAU,WAAU9D,MAAM,CAACvE,QAAS,EAF9C,EAEiDuE,MAAM,CAAC/iI,MAAP,IAAiB,CAFlE;AAGAkqI,8CAAA,GAEG3vI,GAFH,CAGK,GAAEssI,SAAU,cAAa9D,MAAM,CAACvE,QAAS,EAH9C,EAIIuE,MAAM,CAAC+D,SAAP,KAAqB,CAArB,GAAyB,IAAzB,GAAgC,KAJpC;AAMD;AACF;;AAEM,SAAS40B,oBAAT,CAA8Brb,SAA9B,EAAyCC,SAAzC,EAAoD;AACzD,wBAAoCpW,0CAAA,GAAY9uD,IAAZ,EAApC;AAAA,8CAAM48E,aAAN;AAAA,MAAMA,aAAN,sCAAsB,IAAI5oJ,GAAJ,EAAtB;;AACA86H,yDAAA;;AAEA,MAAI;AACFoW,aAAS,CAACr5I,OAAV,CAAkB,CAACuT,KAAD,EAAQshH,KAAR,KAAkB;AAClC,UAAI6/B,GAAG,GAAGtb,SAAS,CAACrpJ,GAAV,CAAc8kI,KAAd,CAAV;AAEAthH,WAAK,CAACvT,OAAN,CAAcs5I,QAAQ,IAAI;AACxB,YAAIsa,QAAQ,GAAGc,GAAG,IAAIA,GAAG,CAAC3kK,GAAJ,CAAQupJ,QAAQ,CAACnkB,EAAjB,CAAtB;;AAEA,YAAIN,KAAK,KAAK,oBAAd,EAAoC;AAClC0/B,iCAAuB,CAACjb,QAAD,CAAvB;AACD,SAFD,MAEO,IAAIzkB,KAAK,KAAK,cAAV,IAA4BA,KAAK,KAAK,iBAA1C,EAA6D;AAClE2/B,4BAAkB,CAAClb,QAAD,CAAlB;AACD,SAFM,MAEA,IAAIzkB,KAAK,KAAK,cAAd,EAA8B;AACnC,cAAIxnG,OAAO,GAAG,IAAIllB,GAAJ,CACZzX,MAAM,CAACiS,IAAP,CAAYgyJ,qEAAgB,CAACf,QAAQ,IAAI,EAAb,EAAiBta,QAAjB,CAAhB,IAA8C,EAA1D,CADY,CAAd;;AAIA,cAAIsa,QAAJ,EAAc;AACZE,mCAAuB,CAACF,QAAD,EAAWvmI,OAAX,CAAvB;AACD;;AACDymI,iCAAuB,CAACxa,QAAD,EAAWjsH,OAAX,CAAvB;AACD,SATM,MASA,IAAIwnG,KAAK,KAAK,kBAAd,EAAkC;AACvCm/B,qCAA2B,CAACjD,aAAD,EAAgB6C,QAAhB,EAA0Bta,QAA1B,CAA3B;AACD,SAFM,MAEA,IAAIzkB,KAAK,KAAK,YAAd,EAA4B;AACjCo/B,8BAAoB,CAAClD,aAAD,EAAgB6C,QAAhB,EAA0Bta,QAA1B,CAApB;AACD,SAFM,MAEA,IAAIzkB,KAAK,KAAK,iBAAd,EAAiC;AACtCy/B,mCAAyB,CAACvD,aAAD,EAAgB6C,QAAhB,EAA0Bta,QAA1B,CAAzB;AACD,SAFM,MAEA,IAAIzkB,KAAK,KAAK,UAAd,EAA0B;AAC/B8+B,6BAAmB,CAAC5C,aAAD,EAAgB6C,QAAhB,EAA0Bta,QAA1B,CAAnB;AACD;AACF,OAzBD;AA0BD,KA7BD;AA8BD,GA/BD,SA+BU;AACRrW,yDAAA;AACD;AACF;AAEM,eAAe2xB,UAAf,CAA0BC,WAA1B,EAAuC/5B,UAAvC,EAAmD;AACxD,yBAAgCmI,0CAAA,GAAY9uD,IAAZ,EAAhC;AAAA,MAAqBlvE,MAArB,oBAAM8rJ,aAAN;;AAEA,GAAC,GAAG9rJ,MAAJ,EAAYpU,GAAZ,CAAgBwH,KAAK,IAAI;AACvB,QAAIy8J,UAAU,GAAGD,WAAW,CACzBhkK,GADc,CACVskI,EAAE,IAAI;AACT,aAAO2N,yDAAA,CAAwB;AAAEzqI,aAAF;AAASk/H,gBAAQ,EAAEpC;AAAnB,OAAxB,CAAP;AACD,KAHc,EAIdpnI,MAJc,CAIP,CAACoyB,KAAD,EAAQ9yB,KAAR,KAAkB8yB,KAAK,GAAG9yB,KAJnB,EAI0B,CAJ1B,CAAjB;AAMA,QAAI0nK,aAAa,GAAGjyB,yDAAA,CAAwB;AAC1CzqI,WAD0C;AAE1Ck/H,cAAQ,EAAEuD;AAFgC,KAAxB,CAApB;AAKAgI,6DAAA,CAAwB;AACtBzqI,WADsB;AAEtBk/H,cAAQ,EAAEuD,UAFY;AAGtB/hI,YAAM,EAAE+7J,UAAU,GAAGC;AAHC,KAAxB;AAKD,GAjBD;AAkBD;AAEM,eAAeryB,YAAf,CAA4Bz9H,MAA5B,EAAoC;AACzC,QAAMm1H,UAAU,GAAG,MAAMkF,iDAAA,EAAzB;AACA,QAAM8B,MAAM,GAAG,MAAM9B,wDAAA,EAArB;AAEA2D,yDAAA;AACA,MAAI9uD,IAAI,GAAG8uD,0CAAA,GAAY9uD,IAAZ,EAAX;AACAA,MAAI,CAAC48E,aAAL,GAAqB58E,IAAI,CAAC48E,aAAL,IAAsB,IAAI5oJ,GAAJ,EAA3C;AAEA,MAAIsoJ,UAAU,GAAG0C,aAAa,EAA9B;;AAEA,MAAI1C,UAAU,KAAK,UAAnB,EAA+B;AAC7B+C,0DAAA,CAAsBr/E,IAAtB,EAA4BimD,UAA5B,EAAwCn1H,MAAxC;AACD;;AAEDA,QAAM,CAACjF,OAAP,CAAe3H,KAAK,IAAI;AACtB,QAAI,CAAC87E,IAAI,CAAC48E,aAAL,CAAmBjrJ,GAAnB,CAAuBzN,KAAvB,CAAL,EAAoC;AAClC,UAAIg5J,SAAS,GAAGtvB,wDAAA,CAAqB1pI,KAArB,CAAhB;;AACA,gCAAqB0pI,qDAAA,CAAkB1pI,KAAlB,CAArB;AAAA,UAAMnL,KAAN,uBAAMA,KAAN;AAAA,UAAaS,GAAb,uBAAaA,GAAb;;AACA,UAAIiyI,SAAS,GAAGmC,4DAAA,CAAyB1pI,KAAzB,EAAgCo4J,UAAhC,CAAhB;AACA,UAAI4C,aAAa,GAAGtxB,4DAAA,CAAyBsvB,SAAzB,EAAoCZ,UAApC,CAApB;AAEAr2B,gBAAU,CAACp6H,OAAX,CAAmB25H,GAAG,IAAI;AACxBrC,sBAAc,CAACqC,GAAD,EAAMiG,SAAN,EAAiByzB,aAAjB,EAAgCnmK,KAAhC,EAAuCS,GAAvC,CAAd;AACD,OAFD;AAGAyzI,YAAM,CAACphI,OAAP,CAAek3H,KAAK,IAAI;AACtBD,2BAAmB,CAACC,KAAD,EAAQ0I,SAAR,CAAnB;AACD,OAFD;;AAIA,UAAI6wB,UAAU,KAAK,UAAnB,EAA+B;AAC7B+C,+DAAA,CAAuBpyB,MAAvB,EAA+BhH,UAA/B,EAA2Ci5B,aAA3C,EAA0DzzB,SAA1D;AACD,OAFD,MAEO;AACL6zB,6DAAA,CAAqBryB,MAArB,EAA6BhH,UAA7B,EAAyCwF,SAAzC;AACD;;AAEDzrD,UAAI,CAAC48E,aAAL,CAAmBlhK,GAAnB,CAAuBwI,KAAvB;AACD;AACF,GAtBD;AAwBA4qI,4CAAA,GAAY+xB,OAAZ,CAAoB7gF,IAApB;AACA8uD,uDAAA,GAvCyC,CAyCzC;AACA;AACA;;AACA,QAAMA,wDAAA,EAAN;AACD;AAEM,eAAegyB,gBAAf,GAAkC;AACvC,MAAIC,mBAAmB,GAAG,MAAM51B,yCAAA,CAC9B,2FAD8B,CAAhC;AAGA,MAAI2C,YAAY,GACdizB,mBAAmB,IAAI51B,gDAAA,CAAgB41B,mBAAmB,CAACplK,IAApC,CADzB;AAEA,MAAI4Z,YAAY,GAAGq4H,2DAAA,EAAnB,CANuC,CAQvC;AACA;AACA;;AACA,wBAA4BqxB,cAAc,CACxCnxB,YAAY,IAAIv4H,YADwB,EAExCA,YAFwC,CAA1C;AAAA,MAAMxc,KAAN,mBAAMA,KAAN;AAAA,MAAaS,GAAb,mBAAaA,GAAb;AAAA,MAAkB+5E,KAAlB,mBAAkBA,KAAlB;;AAKA,MAAIyM,IAAI,GAAG8uD,0CAAA,GAAY9uD,IAAZ,EAAX;AACA,MAAI48E,aAAa,GAAG58E,IAAI,CAAC48E,aAAL,IAAsB,IAAI5oJ,GAAJ,EAA1C;AACA,MAAIgtJ,SAAS,GAAGztF,KAAK,CAACnzE,MAAN,CAAaywC,CAAC,IAAI,CAAC+rH,aAAa,CAACjrJ,GAAd,CAAkBk/B,CAAlB,CAAnB,CAAhB;;AAEA,MAAImwH,SAAS,CAACrhK,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM4uI,YAAY,CAACh7D,KAAD,CAAlB;AACD;;AAED,SAAO;AAAEx6E,SAAF;AAASS;AAAT,GAAP;AACD;AAEM,eAAeynK,OAAf,CAAuBnrJ,IAAvB,EAA6B;AAClC,MAAIkqE,IAAI,GAAG8uD,0CAAA,GAAY9uD,IAAZ,EAAX;;AACA,MAAIlqE,IAAI,KAAKkqE,IAAI,CAACs8E,UAAlB,EAA8B;AAC5B;AACD;;AAEDt8E,MAAI,CAACs8E,UAAL,GAAkBxmJ,IAAlB;AACAkqE,MAAI,CAAC48E,aAAL,GAAqB,IAAI5oJ,GAAJ,EAArB,CAPkC,CASlC;;AACA,MAAIktJ,KAAK,GAAGpyB,0CAAA,GAAYqyB,QAAZ,EAAZ;AACAh2B,iDAAA,CAAe,MAAM;AACnB,SAAK,IAAIxoI,IAAT,IAAiBu+J,KAAK,CAAC1yJ,IAAN,EAAjB,EAA+B;AAC7B,wBAA4B7L,IAAI,CAACqX,KAAL,CAAW,GAAX,CAA5B;AAAA;AAAA,UAAKyxH,SAAL;AAAA,UAAgB21B,QAAhB;;AACA,UAAI31B,SAAS,CAAC3yH,KAAV,CAAgB,YAAhB,CAAJ,EAAmC;AACjCg2H,kDAAA,GAAYuyB,UAAZ,CAAuB51B,SAAvB,EAAkC21B,QAAlC;AACD;AACF;AACF,GAPD;AASAtyB,4CAAA,GAAYwyB,iBAAZ;AACAxyB,wDAAA,CAAsB3D,gCAAtB;AACA,MAAIo2B,MAAM,GAAG,MAAMT,gBAAgB,EAAnC;AACAhyB,4CAAA,GAAY0yB,eAAZ;AAEA,SAAOD,MAAP;AACD,C;;;;;;;;;;;;ACnfD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;;AACA,iBAAwBxmJ,mBAAO,CAAC,gFAAD,CAA/B;AAAA,MAAQ+wI,WAAR,YAAQA,WAAR;;AAEO,eAAe3oB,cAAf,CAA8BqC,GAA9B,EAAmCiG,SAAnC,EAA8CyzB,aAA9C,EAA6D;AAClEpwB,4CAAA,GAAY2yB,YAAZ,CAAyBh2B,SAAzB,EAAqC,UAASjG,GAAG,CAACxE,EAAG,EAArD,EAAwD,CAAxD,EADkE,CAGlE;AACA;AACA;AACA;AACA;;AACA,MAAI8N,0CAAA,GAAYie,YAAZ,CAAyBthB,SAAzB,EAAqC,UAASjG,GAAG,CAACxE,EAAG,EAArD,KAA2D,IAA/D,EAAqE;AACnE8N,8CAAA,GAAY3vI,GAAZ,CAAgB2sJ,WAAW,CAACrgB,SAAD,EAAa,UAASjG,GAAG,CAACxE,EAAG,EAA7B,CAA3B,EAA4D,CAA5D;AACD;;AAED8N,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAsC,YAAWjG,GAAG,CAACxE,EAAG,EAAxD,EAA2D;AACzDo+B,gBAAY,EAAE,CAD2C;AAEzD5K,gBAAY,EAAE,CACX,UAAShvB,GAAG,CAACxE,EAAG,EADL,EAEX,cAAawE,GAAG,CAACxE,EAAG,EAFT,EAGX,GAAEk+B,aAAc,cAAa15B,GAAG,CAACxE,EAAG,EAHzB,EAIX,GAAEk+B,aAAc,aAAY15B,GAAG,CAACxE,EAAG,EAJxB,CAF2C;AAQzDzxH,OAAG,EAAE,CAAC+3H,QAAD,EAAWo6B,SAAX,EAAsBC,aAAtB,EAAqCC,YAArC,KAAsD;AACzD,UAAIp8B,GAAG,CAACC,SAAR,EAAmB;AACjB,eACE7tH,oDAAM,CAAC0vH,QAAD,CAAN,GACA1vH,oDAAM,CAAC8pJ,SAAD,CADN,IAECC,aAAa,GAAG/pJ,oDAAM,CAACgqJ,YAAD,CAAT,GAA0B,CAFxC,CADF;AAKD;;AAED,aACEhqJ,oDAAM,CAAC0vH,QAAD,CAAN,GACA1vH,oDAAM,CAAC8pJ,SAAD,CADN,IAECC,aAAa,GAAG/pJ,oDAAM,CAACgqJ,YAAD,CAAT,GAA0B,CAFxC,CADF;AAKD;AAtBwD,GAA3D;AAwBA9yB,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAsC,wBAAuBjG,GAAG,CAACxE,EAAG,EAApE,EAAuE;AACrEo+B,gBAAY,EAAE,CADuD;AAErE5K,gBAAY,EAAE,CACX,UAAShvB,GAAG,CAACxE,EAAG,EADL,EAEX,cAAawE,GAAG,CAACxE,EAAG,EAFT,EAGX,aAAYwE,GAAG,CAACxE,EAAG,EAHR,CAFuD;AAOrE;AACA6gC,WAAO,EAAE,IAR4D;AASrEtyJ,OAAG,EAAE,CAAC+3H,QAAD,EAAWo6B,SAAX,EAAsBh2B,SAAtB,KAAoC;AACvC,aAAOA,SAAS,GACZtjI,IAAI,CAACge,GAAL,CAAS,CAAT,EAAYxO,oDAAM,CAAC0vH,QAAD,CAAN,GAAmB1vH,oDAAM,CAAC8pJ,SAAD,CAArC,CADY,GAEZA,SAFJ;AAGD;AAboE,GAAvE;AAgBA5yB,4CAAA,GAAY2yB,YAAZ,CAAyBh2B,SAAzB,EAAqC,aAAYjG,GAAG,CAACxE,EAAG,EAAxD,EAA2D,KAA3D;AACD;AAEM,SAAS8gC,aAAT,CAAuB70B,MAAvB,EAA+BhH,UAA/B,EAA2CwF,SAA3C,EAAsD;AAC3D,MAAI4B,WAAW,GAAGJ,MAAM,CAAC7sI,MAAP,CAAc2iI,KAAK,IAAIA,KAAK,CAAC0C,SAA7B,EAAwC,CAAxC,CAAlB;AACA,MAAI8H,iBAAiB,GAAGtH,UAAU,CAAC7lI,MAAX,CAAkBolI,GAAG,IAAI,CAACA,GAAG,CAACC,SAA9B,CAAxB;AAEAqJ,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,gBAArC,EAAuD;AACrD2zB,gBAAY,EAAE,CADuC;AAErD5K,gBAAY,EAAEvnB,MAAM,CACjB7sI,MADW,CACJ2iI,KAAK,IAAI,CAACA,KAAK,CAAC0C,SADZ,EAEX/oI,GAFW,CAEPqmI,KAAK,IAAK,gBAAeA,KAAK,CAAC/B,EAAG,EAF3B,CAFuC;AAKrDzxH,OAAG,EAAEgwJ,gDAAUA;AALsC,GAAvD;AAQAzwB,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,aAArC,EAAoD;AAClD2zB,gBAAY,EAAE,CADoC;AAElDyC,WAAO,EAAE,IAFyC;AAGlDrN,gBAAY,EAAEjnB,iBAAiB,CAAC7wI,GAAlB,CACZ8oI,GAAG,IAAK,GAAEiG,SAAU,yBAAwBjG,GAAG,CAACxE,EAAG,EADvC,CAHoC;AAMlDzxH,OAAG,EAAEgwJ,gDAAUA;AANmC,GAApD;AASAzwB,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,cAArC,EAAqD;AACnD2zB,gBAAY,EAAE,CADqC;AAEnD5K,gBAAY,EAAE,CAAE,oBAAmBnnB,WAAW,CAACrM,EAAG,EAApC,CAFqC;AAGnDzxH,OAAG,EAAE3K,MAAM,IAAIA;AAHoC,GAArD;AAMAkqI,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,gBAArC,EAAuD;AACrD2zB,gBAAY,EAAE,CADuC;AAErD5K,gBAAY,EAAE,CAAC,gBAAD,EAAmB,aAAnB,CAFuC;AAGrDjlJ,OAAG,EAAEgwJ,gDAAUA;AAHsC,GAAvD;AAMAzwB,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,qBAArC,EAA4D;AAC1D2zB,gBAAY,EAAE,CAD4C;AAE1D5K,gBAAY,EAAE,CAAE,gBAAennB,WAAW,CAACrM,EAAG,EAAhC,CAF4C;AAG1DzxH,OAAG,EAAE3K,MAAM,IAAIA;AAH2C,GAA5D;AAMAkqI,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,aAArC,EAAoD;AAClD2zB,gBAAY,EAAE,CADoC;AAElD5K,gBAAY,EAAE,CAAC,qBAAD,EAAwB,gBAAxB,CAFoC;AAGlDjlJ,OAAG,EAAE,CAACwyJ,MAAD,EAASz6B,QAAT,KAAsB;AACzB,aAAOy6B,MAAM,GAAGz6B,QAAhB;AACD;AALiD,GAApD;AAQAwH,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,YAArC,EAAmD;AACjD2zB,gBAAY,EAAE,CADmC;AAEjD5K,gBAAY,EAAE,CAAC,cAAD,EAAiB,aAAjB,CAFmC;AAGjDjlJ,OAAG,EAAE,CAACwyJ,MAAD,EAASlzB,KAAT,KAAmB;AACtB,aAAOkzB,MAAM,GAAG,CAAClzB,KAAjB;AACD;AALgD,GAAnD;AAOD,C;;;;;;;;;;;;AClHD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;;AACA,iBAAwB9zH,mBAAO,CAAC,gFAAD,CAA/B;AAAA,MAAQ+wI,WAAR,YAAQA,WAAR;;AAEA,SAASkW,aAAT,CAAuBlxJ,MAAvB,EAA+B;AAC7B,MAAImxJ,UAAU,GAAGr0B,wDAAA,CAAqB98H,MAAM,CAAC,CAAD,CAA3B,CAAjB;AACA,SAAO88H,4DAAA,CAAyBq0B,UAAzB,EAAqC,UAArC,CAAP;AACD;;AAEM,SAASC,mBAAT,CAA6B18B,GAA7B,EAAkC10H,MAAlC,EAA0C;AAC/C,MAAIA,MAAM,CAACnR,MAAP,GAAgB,CAApB,EAAuB;AACrB,QAAI8rI,SAAS,GAAGu2B,aAAa,CAAClxJ,MAAD,CAA7B;AACAg+H,8CAAA,GAAY2yB,YAAZ,CAAyBh2B,SAAzB,EAAqC,aAAYjG,GAAG,CAACxE,EAAG,EAAxD,EAA2D,KAA3D;AACA8N,8CAAA,GAAY2yB,YAAZ,CAAyBh2B,SAAzB,EAAqC,YAAWjG,GAAG,CAACxE,EAAG,EAAvD,EAA0D,CAA1D;AACA8N,8CAAA,GAAY2yB,YAAZ,CAAyBh2B,SAAzB,EAAqC,gBAAejG,GAAG,CAACxE,EAAG,EAA3D,EAA8D,CAA9D;AACD;AACF;;AAED,SAASmhC,gBAAT,CAA0Bl8B,UAA1B,EAAsCwF,SAAtC,EAAiD36H,MAAjD,EAAyD;AACvDg+H,4CAAA,GAAY2yB,YAAZ,CAAyBh2B,SAAzB,EAAoC,UAApC,EAAgD,IAAhD;AACAqD,4CAAA,GAAY2yB,YAAZ,CAAyBh2B,SAAzB,EAAoC,WAApC,EAAiD,CAAjD;AACAqD,4CAAA,GAAY2yB,YAAZ,CAAyBh2B,SAAzB,EAAoC,UAApC,EAAgD,CAAhD;AAEAxF,YAAU,CAACp6H,OAAX,CAAmB25H,GAAG,IAAI08B,mBAAmB,CAAC18B,GAAD,EAAM10H,MAAN,CAA7C;AACD;;AAEM,SAASqyH,cAAT,CAAwBqC,GAAxB,EAA6BiG,SAA7B,EAAwCyzB,aAAxC,EAAuD;AAC5D,MAAI,CAAC15B,GAAG,CAACC,SAAT,EAAoB;AAClBqJ,8CAAA,GAAY2yB,YAAZ,CAAyBh2B,SAAzB,EAAqC,UAASjG,GAAG,CAACxE,EAAG,EAArD,EAAwD,CAAxD,EADkB,CAGlB;AACA;AACA;AACA;AACA;;AACA,QAAI8N,0CAAA,GAAYie,YAAZ,CAAyBthB,SAAzB,EAAqC,UAASjG,GAAG,CAACxE,EAAG,EAArD,KAA2D,IAA/D,EAAqE;AACnE8N,gDAAA,GAAY3vI,GAAZ,CAAgB2sJ,WAAW,CAACrgB,SAAD,EAAa,UAASjG,GAAG,CAACxE,EAAG,EAA7B,CAA3B,EAA4D,CAA5D;AACD;;AAED8N,8CAAA,GAAY2yB,YAAZ,CAAyBh2B,SAAzB,EAAqC,aAAYjG,GAAG,CAACxE,EAAG,EAAxD,EAA2D,KAA3D;AAEA8N,8CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAsC,YAAWjG,GAAG,CAACxE,EAAG,EAAxD,EAA2D;AACzDo+B,kBAAY,EAAE,CAD2C;AAEzD5K,kBAAY,EAAE,CACX,UAAShvB,GAAG,CAACxE,EAAG,EADL,EAEX,cAAawE,GAAG,CAACxE,EAAG,EAFT,EAGX,GAAEk+B,aAAc,cAAa15B,GAAG,CAACxE,EAAG,EAHzB,EAIX,GAAEk+B,aAAc,aAAY15B,GAAG,CAACxE,EAAG,EAJxB,EAKX,GAAEk+B,aAAc,iBAAgB15B,GAAG,CAACxE,EAAG,EAL5B,CAF2C;AASzDzxH,SAAG,EAAE,CAAC+3H,QAAD,EAAWuH,KAAX,EAAkB8yB,aAAlB,EAAiCC,YAAjC,EAA+CQ,eAA/C,KAAmE;AACtE,eACExqJ,oDAAM,CAAC0vH,QAAD,CAAN,GACA1vH,oDAAM,CAACi3H,KAAD,CADN,IAEC8yB,aAAa,GAAG/pJ,oDAAM,CAACgqJ,YAAD,CAAT,GAA0BhqJ,oDAAM,CAACwqJ,eAAD,CAF9C,CADF;AAKD;AAfwD,KAA3D;AAkBAtzB,8CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,kBAAkBjG,GAAG,CAACxE,EAA3D,EAA+D;AAC7Do+B,kBAAY,EAAE,CAD+C;AAE7D5K,kBAAY,EAAE,CAAE,YAAWhvB,GAAG,CAACxE,EAAG,EAApB,CAF+C;AAG7DzxH,SAAG,EAAE8uJ,QAAQ,IAAI;AACf,eAAOA,QAAQ,GAAG,CAAX,GAAe,CAAf,GAAmBA,QAA1B;AACD;AAL4D,KAA/D;AAOD;AACF;AAEM,SAASyD,aAAT,CAAuB70B,MAAvB,EAA+BhH,UAA/B,EAA2Ci5B,aAA3C,EAA0DzzB,SAA1D,EAAqE;AAC1E,MAAI4B,WAAW,GAAGJ,MAAM,CAAC7sI,MAAP,CAAc2iI,KAAK,IAAIA,KAAK,CAAC0C,SAA7B,EAAwC,CAAxC,CAAlB;AACA,MAAI8H,iBAAiB,GAAGtH,UAAU,CAAC7lI,MAAX,CAAkBolI,GAAG,IAAI,CAACA,GAAG,CAACC,SAA9B,CAAxB;AAEAqJ,4CAAA,GAAY2yB,YAAZ,CAAyBh2B,SAAzB,EAAoC,UAApC,EAAgD,CAAhD;AAEAqD,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,iBAArC,EAAwD;AACtD2zB,gBAAY,EAAE,CADwC;AAEtD5K,gBAAY,EAAE,CAAE,GAAE0K,aAAc,YAAlB,EAAgC,GAAEA,aAAc,WAAhD,CAFwC;AAGtD3vJ,OAAG,EAAE,CAAC2/H,QAAD,EAAWktB,QAAX,KAAwBxkJ,oDAAM,CAACs3H,QAAD,CAAN,GAAmBt3H,oDAAM,CAACwkJ,QAAD;AAHA,GAAxD,EAN0E,CAY1E;;AACAttB,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,cAArC,EAAqD;AACnD2zB,gBAAY,EAAE,CADqC;AAEnD5K,gBAAY,EAAE,CAAE,oBAAmBnnB,WAAW,CAACrM,EAAG,EAApC,CAFqC;AAGnDzxH,OAAG,EAAE3K,MAAM,IAAIA;AAHoC,GAArD;AAMAkqI,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,iBAArC,EAAwD;AACtD2zB,gBAAY,EAAE,CADwC;AAEtD5K,gBAAY,EAAE,CAAC,cAAD,EAAiB,iBAAjB,CAFwC;AAGtDjlJ,OAAG,EAAE,CAACwyJ,MAAD,EAAS3U,aAAT,KAA2Bx1I,oDAAM,CAACmqJ,MAAD,CAAN,GAAiBnqJ,oDAAM,CAACw1I,aAAD;AAHD,GAAxD;AAMAte,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,sBAArC,EAA6D;AAC3D2zB,gBAAY,EAAE,CAD6C;AAE3D5K,gBAAY,EAAE6N,sDAAQ,CACpB90B,iBAAiB,CAAC7wI,GAAlB,CAAsB8oI,GAAG,IAAI,CAC1B,GAAE05B,aAAc,aAAY15B,GAAG,CAACxE,EAAG,EADT,EAE1B,GAAEk+B,aAAc,cAAa15B,GAAG,CAACxE,EAAG,EAFV,CAA7B,CADoB,CAFqC;AAQ3DzxH,OAAG,EAAE,CAAC,GAAGvO,IAAJ,KAAa;AAChBA,UAAI,GAAGshK,wDAAU,CAACthK,IAAD,CAAjB;AACA,aAAOA,IAAI,CAACpH,MAAL,CAAY,CAACoyB,KAAD,EAAQ,CAACqyI,QAAD,EAAW3yB,SAAX,CAAR,KAAkC;AACnD,YAAIA,SAAJ,EAAe;AACb,iBAAO1/G,KAAP;AACD;;AACD,eAAOA,KAAK,GAAG5jB,IAAI,CAACe,GAAL,CAAS,CAAT,EAAYyO,oDAAM,CAACymJ,QAAD,CAAlB,CAAf;AACD,OALM,EAKJ,CALI,CAAP;AAMD;AAhB0D,GAA7D;AAmBAvvB,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,gBAArC,EAAuD;AACrD2zB,gBAAY,EAAE,CADuC;AAErD5K,gBAAY,EAAEvnB,MAAM,CACjB7sI,MADW,CACJ2iI,KAAK,IAAI,CAACA,KAAK,CAAC0C,SADZ,EAEX/oI,GAFW,CAEPqmI,KAAK,IAAK,gBAAeA,KAAK,CAAC/B,EAAG,EAF3B,CAFuC;AAKrDzxH,OAAG,EAAE,CAAC,GAAGgzJ,OAAJ,KAAgB;AACnB;AACA,aAAO,CAAChD,wDAAU,CAAC,GAAGgD,OAAJ,CAAlB;AACD;AARoD,GAAvD;AAWAzzB,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,UAArC,EAAiD;AAAE2zB,gBAAY,EAAE;AAAhB,GAAjD;AAEAtwB,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,WAArC,EAAkD;AAChD2zB,gBAAY,EAAE,CADkC;AAEhD5K,gBAAY,EAAE,CACZ,iBADY,EAEZ,sBAFY,EAGZ,gBAHY,EAIZ,UAJY,CAFkC;AAQhDjlJ,OAAG,EAAE,CAAC4/H,SAAD,EAAYqzB,aAAZ,EAA2BrV,aAA3B,EAA0CiP,QAA1C,KAAuD;AAC1D,aACExkJ,oDAAM,CAACu3H,SAAD,CAAN,GACAv3H,oDAAM,CAAC4qJ,aAAD,CADN,GAEA5qJ,oDAAM,CAACu1I,aAAD,CAFN,GAGAv1I,oDAAM,CAACwkJ,QAAD,CAJR;AAMD;AAf+C,GAAlD;AAkBAttB,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,aAArC,EAAoD;AAClD2zB,gBAAY,EAAE,CADoC;AAElD5K,gBAAY,EAAEvnB,MAAM,CACjB7sI,MADW,CACJ2iI,KAAK,IAAI,CAACA,KAAK,CAAC0C,SADZ,EAEX/oI,GAFW,CAEPqmI,KAAK,IAAK,oBAAmBA,KAAK,CAAC/B,EAAG,EAF/B,CAFoC;AAKlDzxH,OAAG,EAAEgwJ,gDAAUA;AALmC,GAApD;AAQAzwB,4CAAA,GAAYqwB,aAAZ,CAA0B1zB,SAA1B,EAAqC,gBAArC,EAAuD;AACrD2zB,gBAAY,EAAE,CADuC;AAErD5K,gBAAY,EAAEvnB,MAAM,CACjB7sI,MADW,CACJ2iI,KAAK,IAAI,CAACA,KAAK,CAAC0C,SADZ,EAEX/oI,GAFW,CAEPqmI,KAAK,IAAK,kBAAiBA,KAAK,CAAC/B,EAAG,EAF7B,CAFuC;AAKrDzxH,OAAG,EAAEgwJ,gDAAUA;AALsC,GAAvD;AAOD;AAEM,SAAShxB,YAAT,CAAsBvuD,IAAtB,EAA4BimD,UAA5B,EAAwCn1H,MAAxC,EAAgD;AACrD;AACA;AACA;AACA,MAAI2xJ,UAAU,GAAGT,aAAa,CAAClxJ,MAAD,CAA9B;;AACA,MAAIkvE,IAAI,CAACyiF,UAAL,KAAoBA,UAAxB,EAAoC;AAClC3zB,8CAAA,GAAY4zB,UAAZ,CAAuB1iF,IAAI,CAACyiF,UAA5B;AACAN,oBAAgB,CAACl8B,UAAD,EAAaw8B,UAAb,EAAyB3xJ,MAAzB,CAAhB;AACAkvE,QAAI,CAACyiF,UAAL,GAAkBA,UAAlB;AACD;AACF,C;;;;;;;;;;;;AC5KD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEO,SAASlD,UAAT,CAAoB,GAAGgD,OAAvB,EAAgC;AACrC,SAAOA,OAAO,CAAC3oK,MAAR,CAAe,CAACoyB,KAAD,EAAQpnB,MAAR,KAAmB;AACvC,WAAOonB,KAAK,GAAGpU,mEAAM,CAAChT,MAAD,CAArB;AACD,GAFM,EAEJ,CAFI,CAAP;AAGD;AAEM,SAASy9J,QAAT,CAAkBxtG,GAAlB,EAAuB;AAC5B,SAAOp3D,KAAK,CAACkY,SAAN,CAAgBghB,MAAhB,CAAuB6F,KAAvB,CAA6B,EAA7B,EAAiCq4B,GAAjC,CAAP;AACD;AAEM,SAASytG,UAAT,CAAoBztG,GAApB,EAAyB;AAC9B,MAAIu6D,GAAG,GAAG,EAAV;;AACA,OAAK,IAAI52G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGq8C,GAAG,CAACl1D,MAAxB,EAAgC6Y,CAAC,IAAI,CAArC,EAAwC;AACtC42G,OAAG,CAAC5wH,IAAJ,CAAS,CAACq2D,GAAG,CAACr8C,CAAD,CAAJ,EAASq8C,GAAG,CAACr8C,CAAC,GAAG,CAAL,CAAZ,CAAT;AACD;;AACD,SAAO42G,GAAP;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;;AACA,IAAIwO,IAAI,GAAG7iH,mBAAO,CAAC,kFAAD,CAAlB;;AACA,IAAIopH,MAAM,GAAGppH,mBAAO,CAAC,qEAAD,CAApB;;AAEA,IAAI4nJ,wBAAwB,GAAG,CAA/B;;AAEA,eAAeC,eAAf,CAA+BxzC,GAA/B,EAAoC;AAClC,MAAIA,GAAG,CAACpuD,MAAJ,KAAe,GAAnB,EAAwB;AACtB,WAAOouD,GAAG,CAAC37B,IAAJ,GAAWnvE,IAAX,CAAgBsY,GAAG,IAAI;AAC5B,YAAM,IAAIimI,iDAAJ,CAAczzC,GAAG,CAACpuD,MAAlB,EAA0BpkC,GAA1B,CAAN;AACD,KAFM,CAAP;AAGD,GAJD,MAIO;AACL,WAAOwyF,GAAP;AACD;AACF;;AAED,eAAe0zC,SAAf,CAAyB,GAAGrqK,IAA5B,EAAkC;AAChC,MAAI22H,GAAG,GAAG,MAAMoiB,oEAAK,CAAC,GAAG/4I,IAAJ,CAArB;AACA22H,KAAG,GAAG,MAAMwzC,eAAe,CAACxzC,GAAD,CAA3B;AACA,SAAOA,GAAG,CAACptH,IAAJ,EAAP;AACD;;AAEM,eAAe+gK,QAAf,GAA0B;AAC/B,MAAIC,SAAS,GAAG,MAAM3sB,oEAAY,CAACpF,OAAb,CAAqB,YAArB,CAAtB;;AAEA,wBAAoCjB,+CAAA,EAApC;AAAA,MAAMizB,WAAN,mBAAMA,WAAN;AAAA,MAAmBC,YAAnB,mBAAmBA,YAAnB;;AAEA,MAAI9zC,GAAJ;;AACA,MAAI;AACFA,OAAG,GAAG,MAAMonB,mDAAI,CAACC,gEAAS,GAAG0sB,WAAZ,GAA0B,eAA3B,EAA4C;AAC1Dj1H,WAAK,EAAE80H,SADmD;AAE1DI,YAAM,EAAEH;AAFkD,KAA5C,CAAhB;AAID,GALD,CAKE,OAAOhgJ,CAAP,EAAU;AACVoR,WAAO,CAACsrE,GAAR,CAAY18E,CAAZ;AACA,WAAO;AAAEof,WAAK,EAAE;AAAEghI,cAAM,EAAE;AAAV;AAAT,KAAP;AACD,GAd8B,CAgB/B;AACA;;;AACA,SAAO;AACL/1J,SAAK,EACH8hH,GAAG,CAAC4R,EAAJ,IAAUkiC,YAAV,MAA0B;AACzBA,gBAAY,IAAI,IAAhB,IAAwBI,mDAAU,CAACC,MAAX,CAAkBL,YAAlB,CADzB;AAFG,GAAP;AAKD;AAEM,eAAeM,cAAf,CAA8BC,WAA9B,EAA2C;AAChD,MAAIT,SAAS,GAAG,MAAM3sB,oEAAY,CAACpF,OAAb,CAAqB,YAArB,CAAtB;;AAEA,yBAAsBjB,+CAAA,EAAtB;AAAA,MAAMizB,WAAN,oBAAMA,WAAN;;AAEA,MAAIluI,OAAO,CAACk9G,GAAR,CAAYyxB,OAAhB,EAAyB;AACvB,WAAO;AAAErhI,WAAK,EAAE;AAAEghI,cAAM,EAAE;AAAV;AAAT,KAAP;AACD;;AAED,MAAI;AACF,UAAM7sB,mDAAI,CAACC,gEAAS,GAAG0sB,WAAZ,GAA0B,kBAA3B,EAA+C;AACvDj1H,WAAK,EAAE80H,SADgD;AAEvDI,YAAM,EAAEH;AAF+C,KAA/C,CAAV;AAID,GALD,CAKE,OAAOhgJ,CAAP,EAAU;AACV,QAAIA,CAAC,YAAY0gJ,iDAAjB,EAA4B;AAC1B,aAAO;AACLthI,aAAK,EAAE;AACLghI,gBAAM,EAAEpgJ,CAAC,CAACogJ,MAAF,KAAa,cAAb,GAA8B,cAA9B,GAA+C;AADlD;AADF,OAAP;AAKD;;AACD,WAAO;AAAEhhI,WAAK,EAAE;AAAEghI,cAAM,EAAE;AAAV;AAAT,KAAP;AACD;;AAED,MAAII,WAAJ,EAAiB;AACf,QAAI;AACF,YAAMjtB,mDAAI,CAACC,gEAAS,GAAG0sB,WAAZ,GAA0B,kBAA3B,EAA+C;AACvDj1H,aAAK,EAAE80H,SADgD;AAEvDI,cAAM,EAAEH,WAF+C;AAGvDW,aAAK,EAAEH,WAAW,CAACh1J,GAAZ,CAAgBstI,KAAhB,EAHgD;AAIvD8nB,eAAO,EAAEJ,WAAW,CAACj2I,IAJkC;AAKvDs2I,mBAAW,EAAEL,WAAW,CAACK;AAL8B,OAA/C,CAAV;AAOD,KARD,CAQE,OAAO7gJ,CAAP,EAAU;AACV,UAAIA,CAAC,YAAY0gJ,iDAAjB,EAA4B;AAC1B,eAAO;AAAEthI,eAAK,EAAE;AAAEghI,kBAAM,EAAE;AAAV;AAAT,SAAP;AACD;;AACD,aAAO;AAAEhhI,aAAK,EAAE;AAAEghI,gBAAM,EAAE;AAAV;AAAT,OAAP;AACD;AACF;;AAED,SAAO,EAAP;AACD;AAEM,eAAeU,YAAf,GAA8B;AACnC,yBAAyB/zB,+CAAA,EAAzB;AAAA,MAAMhP,EAAN,oBAAMA,EAAN;AAAA,MAAUH,UAAV,oBAAUA,UAAV;;AACA,MAAI,CAACA,UAAL,EAAiB;AACf,WAAO,IAAP;AACD;;AAED,MAAIw5B,SAAS,GAAG1+I,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAhB,CANmC,CAQnC;;AACA,MAAImH,MAAM,GAAG,IAAIhE,MAAJ,EAAb,CATmC,CAWnC;AACA;AACA;AACA;;AACA,QAAM4K,4DAAU,CAAC,YAAY;AAC3B,QAAIi1B,YAAY,GAAG,MAAMroJ,0DAAE,CAAC0B,QAAH,CACvB1B,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,WAAnB,CADuB,EAEvB,QAFuB,CAAzB,CAD2B,CAM3B;AACA;AACA;;AACA,QAAI4J,KAAK,GAAG,MAAMzI,oEAAA,CAAoBwI,YAApB,CAAlB;AACAxI,qEAAA,CACEyI,KADF,EAEG;AACP;AACA;AACA,OALI;AAQA,QAAIC,SAAS,GAAG1I,sEAAA,CAAsByI,KAAtB,CAAhB;AACAzI,yEAAA,CAAqByI,KAArB,EAnB2B,CAqB3B;AACA;;AACA,QAAIjkF,IAAI,GAAGz4E,IAAI,CAAC0G,KAAL,CACT,MAAM0N,0DAAE,CAAC0B,QAAH,CAAY1B,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,eAAnB,CAAZ,CADG,CAAX;AAIAr6E,QAAI,CAACmkF,UAAL,GAAkB,IAAlB;AACA,QAAIC,WAAW,GAAGroJ,MAAM,CAACre,IAAP,CAAY6J,IAAI,CAACC,SAAL,CAAew4E,IAAf,CAAZ,EAAkC,MAAlC,CAAlB;AAEAmoD,UAAM,CAACppH,OAAP,CAAe,WAAf,EAA4BmlJ,SAA5B;AACA/7B,UAAM,CAACppH,OAAP,CAAe,eAAf,EAAgCqlJ,WAAhC;AACD,GAhCe,CAAhB;AAkCA,SAAOroJ,MAAM,CAACre,IAAP,CAAYyqI,MAAM,CAAC1jH,QAAP,EAAZ,CAAP;AACD;AAEM,eAAewkH,YAAf,CAA4Bo7B,QAA5B,EAAsChtI,MAAtC,EAA8C;AACnD,MAAI8wG,MAAM,GAAG,IAAIhE,MAAJ,CAAW9sG,MAAX,CAAb;AACA,MAAIlW,OAAO,GAAGgnH,MAAM,CAACjnH,UAAP,EAAd;AACA,MAAIojJ,OAAO,GAAGnjJ,OAAO,CAAC9L,IAAR,CAAa4N,CAAC,IAAIA,CAAC,CAACnG,SAAF,CAAY1L,QAAZ,CAAqB,WAArB,CAAlB,CAAd;AACA,MAAImzJ,SAAS,GAAGpjJ,OAAO,CAAC9L,IAAR,CAAa4N,CAAC,IAAIA,CAAC,CAACnG,SAAF,CAAY1L,QAAZ,CAAqB,eAArB,CAAlB,CAAhB;;AAEA,MAAI,CAACkzJ,OAAD,IAAY,CAACC,SAAjB,EAA4B;AAC1B,UAAMC,iEAAiB,CAAC,kBAAD,CAAvB;AACD;;AAED,MAAIN,SAAS,GAAG/7B,MAAM,CAAC9qH,QAAP,CAAgBinJ,OAAhB,CAAhB;AACA,MAAIF,WAAW,GAAGj8B,MAAM,CAAC9qH,QAAP,CAAgBknJ,SAAhB,CAAlB;AAEA,MAAIvkF,IAAJ;;AACA,MAAI;AACFA,QAAI,GAAGz4E,IAAI,CAAC0G,KAAL,CAAWm2J,WAAW,CAAC7tJ,QAAZ,CAAqB,MAArB,CAAX,CAAP;AACD,GAFD,CAEE,OAAOuH,GAAP,EAAY;AACZ,UAAM0mJ,iEAAiB,CAAC,mBAAD,CAAvB;AACD,GAlBkD,CAoBnD;AACA;;;AACAxkF,MAAI,mCACCA,IADD;AAEFijF,eAAW,EAAEoB,QAAQ,CAACjB,MAFpB;AAGFn5B,WAAO,EAAEo6B,QAAQ,CAACp6B,OAHhB;AAIF6xB,gBAAY,EAAEluB,yDAAA,EAJZ;AAKFs1B,gBAAY,EAAEmB,QAAQ,CAACI,WAAT,GAAuBJ,QAAQ,CAACI,WAAT,CAAqBb,KAA5C,GAAoD;AALhE,IAAJ;AAQA,MAAIvJ,SAAS,GAAG1+I,0DAAE,CAAC02H,YAAH,CAAgBryD,IAAI,CAACghD,EAArB,CAAhB;;AAEA,MAAI,MAAMrlH,0DAAE,CAACqa,MAAH,CAAUqkI,SAAV,CAAV,EAAgC;AAC9B;AACA,QAAIqK,MAAM,GAAG/oJ,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,WAAnB,CAAb;AACA,QAAIsK,QAAQ,GAAGhpJ,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,eAAnB,CAAf;;AAEA,QAAI,MAAM1+I,0DAAE,CAACqa,MAAH,CAAU0uI,MAAV,CAAV,EAA6B;AAC3B,YAAM/oJ,0DAAE,CAAC03H,UAAH,CAAcqxB,MAAd,CAAN;AACD;;AACD,QAAI,MAAM/oJ,0DAAE,CAACqa,MAAH,CAAU2uI,QAAV,CAAV,EAA+B;AAC7B,YAAMhpJ,0DAAE,CAAC03H,UAAH,CAAcsxB,QAAd,CAAN;AACD;AACF,GAXD,MAWO;AACL,UAAMhpJ,0DAAE,CAACm3H,KAAH,CAASunB,SAAT,CAAN;AACD;;AAED,QAAM1+I,0DAAE,CAACq1H,SAAH,CAAar1H,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,WAAnB,CAAb,EAA8C6J,SAA9C,CAAN;AACA,QAAMvoJ,0DAAE,CAACq1H,SAAH,CAAar1H,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,eAAnB,CAAb,EAAkD9yJ,IAAI,CAACC,SAAL,CAAew4E,IAAf,CAAlD,CAAN;AAEA,SAAO;AAAEghD,MAAE,EAAEhhD,IAAI,CAACghD;AAAX,GAAP;AACD;AAEM,eAAe4jC,MAAf,GAAwB;AAC7B,MAAI5B,SAAS,GAAG,MAAM3sB,oEAAY,CAACpF,OAAb,CAAqB,YAArB,CAAtB;;AACA,MAAI,CAAC+xB,SAAL,EAAgB;AACd,UAAM6B,+DAAe,CAAC,cAAD,CAArB;AACD,GAJ4B,CAM7B;;;AACA,MAAI9vI,OAAO,CAACk9G,GAAR,CAAYyxB,OAAhB,EAAyB;AACvB,UAAMmB,+DAAe,CAAC,cAAD,CAArB;AACD;;AAED,MAAIC,UAAU,GAAG,MAAMf,YAAY,EAAnC;;AACA,MAAIe,UAAU,IAAI,IAAlB,EAAwB;AACtB;AACD;;AAED,yBAA6D90B,+CAAA,EAA7D;AAAA,MAAMhP,EAAN,oBAAMA,EAAN;AAAA,MAAUiJ,OAAV,oBAAUA,OAAV;AAAA,MAAmBpJ,UAAnB,oBAAmBA,UAAnB;AAAA,MAA+BoiC,WAA/B,oBAA+BA,WAA/B;AAAA,MAA4CC,YAA5C,oBAA4CA,YAA5C;;AACA,MAAI6B,aAAa,GAAGD,UAApB;AACA,MAAIE,UAAU,GAAG,IAAjB,CAlB6B,CAoB7B;AACA;AACA;;AACA,MAAI9B,YAAJ,EAAkB;AAChB,QAAI+B,SAAJ;;AACA,QAAI;AACFA,eAAS,GAAG,MAAM3B,mDAAU,CAACh1I,OAAX,CAAmBw2I,UAAnB,EAA+B5B,YAA/B,CAAlB;AACD,KAFD,CAEE,OAAOjgJ,CAAP,EAAU;AACV,YAAM4hJ,+DAAe,CAAC,iBAAD,EAAoB;AACvCK,oBAAY,EAAEjiJ,CAAC,CAAC2kB,OAAF,KAAc;AADW,OAApB,CAArB;AAGD;;AACDm9H,iBAAa,GAAGE,SAAS,CAAC/rK,KAA1B;AACA8rK,cAAU,GAAGC,SAAS,CAACjlF,IAAvB;AACD;;AAED,MAAI,CAACijF,WAAL,EAAkB;AAChBA,eAAW,GAAGrlC,IAAI,CAACgX,MAAL,EAAd;AACD;;AAED,MAAIxlB,GAAJ;;AACA,MAAI;AACFA,OAAG,GAAG,MAAM0zC,SAAS,CAACrsB,gEAAS,GAAG0sB,WAAZ,GAA0B,mBAA3B,EAAgD;AACnElmK,YAAM,EAAE,MAD2D;AAEnEmpC,aAAO;AACL,0BAAkB2+H,aAAa,CAACplK,MAD3B;AAEL,wBAAgB,4BAFX;AAGL,0BAAkBqjK,SAHb;AAIL,4BAAoBC,WAJf;AAKL,yBAAiBlmI,kBAAkB,CAAC8jG,UAAD,CAL9B;AAML,2BAAmB;AANd,SAODmkC,UAAU,GACV;AAAE,iCAAyBz9J,IAAI,CAACC,SAAL,CAAew9J,UAAf;AAA3B,OADU,GAEV,IATC,GAUD/6B,OAAO,GAAG;AAAE,6BAAqBA;AAAvB,OAAH,GAAsC,IAV5C,CAF4D;AAcnE2H,UAAI,EAAEmzB;AAd6D,KAAhD,CAArB;AAgBD,GAjBD,CAiBE,OAAOjnJ,GAAP,EAAY;AACZuW,WAAO,CAACsrE,GAAR,CAAY,gBAAZ,EAA8B7hF,GAA9B;AAEA,QAAIulJ,MAAM,GAAGvlJ,GAAG,YAAY6lJ,iDAAf,GAA2B7lJ,GAAG,CAACulJ,MAA/B,GAAwC,SAArD;;AAEA,QAAIvlJ,GAAG,YAAY6lJ,iDAAnB,EAA8B;AAC5B,YAAM,IAAIkB,uDAAJ,CACJ/mJ,GAAG,CAACulJ,MAAJ,KAAe,cAAf,GAAgC,cAAhC,GAAiDvlJ,GAAG,CAACulJ,MAAJ,IAAc,SAD3D,CAAN;AAGD;;AAED,UAAMwB,+DAAe,CAAC,UAAD,CAArB;AACD;;AAED,MAAIz1C,GAAG,CAACpuD,MAAJ,KAAe,IAAnB,EAAyB;AACvB;AACA,QAAIgvE,+CAAA,MAAoBA,+CAAA,GAAiBhP,EAAjB,KAAwBA,EAAhD,EAAoD;AAClD,YAAMgP,gDAAA,CAAgB;AACpB8rB,oBAAY,EAAEluB,yDAAA,EADM;AAEpBq1B,mBAFoB;AAGpBh5B,eAAO,EAAE7a,GAAG,CAAC6a;AAHO,OAAhB,CAAN;AAKD;AACF,GATD,MASO;AACL,UAAM46B,+DAAe,CAAC,UAAD,CAArB;AACD;AACF;AAEM,eAAeM,cAAf,GAAgC;AACrC,yBAAiDn1B,+CAAA,EAAjD;AAAA,MAAMizB,WAAN,oBAAMA,WAAN;AAAA,MAAmBh5B,OAAnB,oBAAmBA,OAAnB;AAAA,MAA4B6xB,YAA5B,oBAA4BA,YAA5B;AAAA,MAA0C96B,EAA1C,oBAA0CA,EAA1C;;AAEA,MAAIoa,SAAS,GACX0gB,YAAY,IAAIluB,sDAAA,CAAmBkuB,YAAnB,EAAiC6G,wBAAjC,CADlB;AAEA,MAAIjvJ,UAAU,GAAGk6H,yDAAA,EAAjB,CALqC,CAOrC;;AACA,MAAIkuB,YAAY,IAAIpoJ,UAAU,GAAG0nI,SAAjC,EAA4C;AAC1C;AACD,GAVoC,CAYrC;AACA;;;AACA,MAAI,CAAC6nB,WAAD,IAAgB,CAACh5B,OAArB,EAA8B;AAC5B;AACD,GAhBoC,CAkBrC;;;AACA26B,QAAM,GAAG9X,KAAT,CAAehvI,GAAG,IAAI,CAAE,CAAxB;AACD;AAEM,eAAeu1H,UAAf,CAA0B+vB,MAA1B,EAAkC;AACvC,gCAAwB,MAAM/sB,oEAAY,CAACjF,QAAb,CAAsB,CAAC,YAAD,CAAtB,CAA9B;AAAA;AAAA;AAAA,QAAU4xB,SAAV;;AAEA,QAAMxsB,mDAAI,CAACC,gEAAS,GAAG0sB,WAAZ,GAA0B,mBAA3B,EAAgD;AACxDj1H,SAAK,EAAE80H,SADiD;AAExDI;AAFwD,GAAhD,CAAV;AAID;AAEM,eAAegC,eAAf,GAAiC;AACtC,MAAIpC,SAAS,GAAG,MAAM3sB,oEAAY,CAACpF,OAAb,CAAqB,YAArB,CAAtB;;AACA,MAAI,CAAC+xB,SAAL,EAAgB;AACd,WAAO,IAAP;AACD;;AAED,MAAI5zC,GAAJ;;AACA,MAAI;AACFA,OAAG,GAAG,MAAM0zC,SAAS,CAACrsB,gEAAS,GAAG0sB,WAAZ,GAA0B,kBAA3B,EAA+C;AAClE/8H,aAAO,EAAE;AACP,0BAAkB48H;AADX;AADyD,KAA/C,CAArB;AAKD,GAND,CAME,OAAO//I,CAAP,EAAU;AACVoR,WAAO,CAACsrE,GAAR,CAAY,OAAZ,EAAqB18E,CAArB;AACA,WAAO,IAAP;AACD;;AAED,MAAImsG,GAAG,CAACpuD,MAAJ,KAAe,OAAnB,EAA4B;AAC1B,WAAO,IAAP;AACD;;AAED,SAAOouD,GAAG,CAACpuH,IAAJ,CAAStE,GAAT,CAAaomB,IAAI,oCACnBA,IADmB;AAEtBygJ,UAAM,EAAED,mDAAU,CAACC,MAAX,CAAkBzgJ,IAAI,CAACogJ,YAAvB;AAFc,IAAjB,CAAP;AAID;AAEM,eAAemC,QAAf,CAAwBjC,MAAxB,EAAgCnqJ,OAAhC,EAAyC;AAC9C,MAAI+pJ,SAAS,GAAG,MAAM3sB,oEAAY,CAACpF,OAAb,CAAqB,YAArB,CAAtB;AAEA,MAAI55G,MAAJ;;AACA,MAAI;AACFA,UAAM,GAAG,MAAMm6G,oEAAK,CAACiF,gEAAS,GAAG0sB,WAAZ,GAA0B,qBAA3B,EAAkD;AACpE/8H,aAAO,EAAE;AACP,0BAAkB48H,SADX;AAEP,4BAAoBI;AAFb;AAD2D,KAAlD,CAAL,CAMZ9+I,IANY,CAMPs+I,eANO,EAOZt+I,IAPY,CAOP8qG,GAAG,IAAI;AACX,UAAIA,GAAG,CAACk2C,WAAR,EAAqB;AACnB,eAAOl2C,GAAG,CAACk2C,WAAJ,GAAkBhhJ,IAAlB,CAAuBihJ,EAAE,IAAIxpJ,MAAM,CAACre,IAAP,CAAY6nK,EAAZ,CAA7B,CAAP;AACD;;AACD,aAAOn2C,GAAG,CAAC/3F,MAAJ,EAAP;AACD,KAZY,CAAf;AAaD,GAdD,CAcE,OAAOvZ,GAAP,EAAY;AACZuW,WAAO,CAACsrE,GAAR,CAAY,kBAAZ,EAAgC7hF,GAAhC;AACA,UAAM0mJ,iEAAiB,CAAC,kBAAD,CAAvB;AACD;;AAED,MAAIp1C,GAAJ;;AACA,MAAI;AACFA,OAAG,GAAG,MAAM0zC,SAAS,CAACrsB,gEAAS,GAAG0sB,WAAZ,GAA0B,qBAA3B,EAAkD;AACrE/8H,aAAO,EAAE;AACP,0BAAkB48H,SADX;AAEP,4BAAoBI;AAFb;AAD4D,KAAlD,CAArB;AAMD,GAPD,CAOE,OAAOtlJ,GAAP,EAAY;AACZ,UAAM0mJ,iEAAiB,CAAC,UAAD,EAAa;AAAEpB;AAAF,KAAb,CAAvB;AACD;;AAED,MAAIh0C,GAAG,CAACpuD,MAAJ,KAAe,IAAnB,EAAyB;AACvB,UAAMwjG,iEAAiB,CAAC,UAAD,EAAa;AAAEpB;AAAF,KAAb,CAAvB;AACD;;AACD,MAAIiB,QAAQ,GAAGj1C,GAAG,CAACpuH,IAAnB,CAtC8C,CAwC9C;AACA;AACA;;AACA,MAAIqjK,QAAQ,CAACI,WAAb,EAA0B;AACxB,QAAI;AACFptI,YAAM,GAAG,MAAMisI,mDAAU,CAACn1I,OAAX,CAAmBkJ,MAAnB,EAA2BgtI,QAAQ,CAACI,WAApC,CAAf;AACD,KAFD,CAEE,OAAOxhJ,CAAP,EAAU;AACV,YAAMuhJ,iEAAiB,CAAC,iBAAD,EAAoB;AACzCU,oBAAY,EAAEjiJ,CAAC,CAAC2kB,OAAF,KAAc;AADa,OAApB,CAAvB;AAGD;AACF;;AAED,SAAOqhG,YAAY,CAACo7B,QAAD,EAAWhtI,MAAX,EAAmBpe,OAAnB,CAAnB;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3ZD;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AAOA;AAKA;AAEA;;AAEA,MAAM2kH,IAAI,GAAG7iH,mBAAO,CAAC,qFAAD,CAApB;;AAEA,IAAIyqJ,MAAJ;AACA,IAAIr6B,EAAJ,C,CAEA;;AAEO,SAASs6B,eAAT,GAA2B;AAChC,SAAOD,MAAP;AACD;AAEM,eAAehxB,YAAf,CAA4BxT,EAA5B,EAAgC;AACrC,MAAImK,EAAJ,EAAQ;AACN,UAAMqwB,qEAAA,CAAqBrwB,EAArB,CAAN;AACD;;AAEDq6B,QAAM,GAAG7pJ,0DAAE,CAACjB,IAAH,CAAQiB,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAR,EAA6B,WAA7B,CAAT;AACA0kC,aAAW,CAAC,MAAMlK,oEAAA,CAAoBgK,MAApB,CAAP,CAAX,CANqC,CAQrC;AACD;AAEM,eAAeG,cAAf,GAAgC;AACrC,QAAMnK,qEAAA,CAAqBrwB,EAArB,CAAN;AACAu6B,aAAW,CAAC,MAAMlK,oEAAA,CAAoBgK,MAApB,CAAP,CAAX;AACD;AAEM,eAAe9wB,aAAf,GAA+B;AACpC,MAAIvJ,EAAJ,EAAQ;AACN,UAAMqwB,qEAAA,CAAqBrwB,EAArB,CAAN;AACAu6B,eAAW,CAAC,IAAD,CAAX;AACD;AACF;AAEM,SAASA,WAAT,CAAqBE,GAArB,EAA0B;AAC/Bz6B,IAAE,GAAGy6B,GAAL;AACAC,iBAAe;AAChB;AAEM,SAASC,WAAT,GAAuB;AAC5B,SAAO36B,EAAP;AACD;AAEM,eAAe46B,SAAf,GAA2B;AAChC,MAAIptB,GAAG,GAAG,MAAMloI,KAAK,CAAC,8BAAD,CAArB;;AACA,MAAIkoI,GAAJ,EAAS;AACP,QAAIqtB,KAAK,GAAGC,mEAAgB,CAACttB,GAAG,CAACqtB,KAAL,CAA5B;AACAE,+DAAQ,CAACF,KAAD,CAAR;AACD,GAHD,MAGO;AACL;AACA;AACA,QAAIj9J,SAAS,GAAG,IAAIo9J,kDAAJ,CAAc,CAAd,EAAiB,CAAjB,EAAoBC,+DAAY,EAAhC,CAAhB;AACA,QAAIJ,KAAK,GAAGK,4DAAS,CAACt9J,SAAD,CAArB;AACAm9J,+DAAQ,CAACF,KAAD,CAAR;AAEA,UAAM9kC,QAAQ,CAAC,sDAAD,EAAyD,CACrE,CADqE,EAErEolC,iEAAc,CAACN,KAAD,CAFuD,CAAzD,CAAd;AAID;AACF,C,CAED;;AAEO,SAAS9kC,QAAT,CAAkB6S,GAAlB,EAAuBC,MAAvB,EAA+BC,QAA/B,EAAyC;AAC9C;AACA,QAAMvmI,MAAM,GAAG8tJ,gEAAA,CAAgBrwB,EAAhB,EAAoB4I,GAApB,EAAyBC,MAAzB,EAAiCC,QAAjC,CAAf,CAF8C,CAG9C;;AACA,SAAOvmI,MAAP;AACD;AAEM,SAAS49H,SAAT,CAAmByI,GAAnB,EAAwB;AAC7BynB,mEAAA,CAAiBrwB,EAAjB,EAAqB4I,GAArB;AACD,C,CAED;AACA;;AACA,IAAIwyB,WAAW,GAAG,IAAIC,gDAAJ,CAAQ;AAAEpgJ,KAAG,EAAE;AAAP,CAAR,CAAlB;;AACO,SAASozE,KAAT,CAAeu6C,GAAf,EAAoB;AACzB,MAAI0yB,MAAM,GAAGF,WAAW,CAAC3qK,GAAZ,CAAgBm4I,GAAhB,CAAb;;AACA,MAAI0yB,MAAJ,EAAY;AACV,WAAOA,MAAP;AACD;;AAED,MAAIC,QAAQ,GAAGlL,+DAAA,CAAerwB,EAAf,EAAmB4I,GAAnB,CAAf;;AACAwyB,aAAW,CAACpnK,GAAZ,CAAgB40I,GAAhB,EAAqB2yB,QAArB;;AACA,SAAOA,QAAP;AACD;;AAED,SAASb,eAAT,GAA2B;AACzBU,aAAW,GAAG,IAAIC,gDAAJ,CAAQ;AAAEpgJ,OAAG,EAAE;AAAP,GAAR,CAAd;AACD;;AAEM,SAASmgH,WAAT,CAAqBpkI,EAArB,EAAyB;AAC9B,SAAOq5J,mEAAA,CAAmBrwB,EAAnB,EAAuBhpI,EAAvB,CAAP;AACD;AAEM,SAASoyI,gBAAT,CAA0BpyI,EAA1B,EAA8B;AACnC,SAAOq5J,wEAAA,CAAwBrwB,EAAxB,EAA4BhpI,EAA5B,CAAP;AACD,C,CAED;AACA;AACA;;AACO,eAAe2nE,GAAf,CAAmBiqE,GAAnB,EAAwBC,MAAxB,EAAgC;AACrC,SAAO9S,QAAQ,CAAC6S,GAAD,EAAMC,MAAN,EAAc,IAAd,CAAf;AACD;AAEM,eAAevjI,KAAf,CAAqBsjI,GAArB,EAA0BC,MAA1B,EAAkC;AACvC,QAAMn/E,GAAG,GAAG,MAAMqsE,QAAQ,CAAC6S,GAAD,EAAMC,MAAN,EAAc,IAAd,CAA1B;AACA,SAAOn/E,GAAG,CAACl1D,MAAJ,KAAe,CAAf,GAAmB,IAAnB,GAA0Bk1D,GAAG,CAAC,CAAD,CAApC;AACD,C,CAED;AACA;;AACO,SAAS8xG,SAAT,CAAmB5yB,GAAnB,EAAwBC,MAAxB,EAAgC;AACrC,QAAMn/E,GAAG,GAAGqsE,QAAQ,CAAC6S,GAAD,EAAMC,MAAN,EAAc,IAAd,CAApB;AACA,SAAOn/E,GAAG,CAACl1D,MAAJ,KAAe,CAAf,GAAmB,IAAnB,GAA0Bk1D,GAAG,CAAC,CAAD,CAApC;AACD,C,CAED;AACA;AACA;;AACO,eAAetlD,GAAf,CAAmBwkI,GAAnB,EAAwBC,MAAxB,EAAgC;AACrC,SAAO9S,QAAQ,CAAC6S,GAAD,EAAMC,MAAN,CAAf;AACD;AAEM,eAAelU,MAAf,CAAsBY,KAAtB,EAA6BM,EAA7B,EAAiC;AACtC,QAAM0nB,IAAI,GAAG,MAAMxnB,QAAQ,CACzB,mBAAmBR,KAAnB,GAA2B,eADF,EAEzB,CAACM,EAAD,CAFyB,EAGzB,IAHyB,CAA3B;AAKA,SAAO0nB,IAAI,CAAC,CAAD,CAAX;AACD;AAEM,eAAeloI,MAAf,CAAsBkgH,KAAtB,EAA6BsT,MAA7B,EAAqC;AAC1C,MAAIhS,MAAM,GAAGzlI,MAAM,CAACiS,IAAP,CAAYwlI,MAAZ,EAAoB5zI,MAApB,CAA2B0tB,CAAC,IAAIA,CAAC,KAAK,IAAtC,CAAb;;AAEA,MAAIkmH,MAAM,CAAChT,EAAP,IAAa,IAAjB,EAAuB;AACrB,UAAM,IAAI7iI,KAAJ,CAAU,wBAAV,CAAN;AACD;;AAED,QAAMyoK,0DAAY,CAChB5kC,MAAM,CAACtlI,GAAP,CAAWoxB,CAAC,IAAI;AACd,WAAO;AACLu+H,aAAO,EAAE3rB,KADJ;AAELiY,SAAG,EAAE3E,MAAM,CAAChT,EAFP;AAGLz5F,YAAM,EAAEzZ,CAHH;AAIL50B,WAAK,EAAE86I,MAAM,CAAClmH,CAAD,CAJR;AAKL/kB,eAAS,EAAEo9J,kDAAS,CAACplG,IAAV;AALN,KAAP;AAOD,GARD,CADgB,CAAlB;AAWD;AAEM,eAAe8lG,cAAf,CAA8BnmC,KAA9B,EAAqCiY,GAArC,EAA0C;AAC/C,MAAI,CAACA,GAAG,CAAC3X,EAAT,EAAa;AACX2X,OAAG,mCAAQA,GAAR;AAAa3X,QAAE,EAAEpD,IAAI,CAACgX,MAAL;AAAjB,MAAH;AACD;;AAED,QAAM5iE,MAAM,CAAC0uD,KAAD,EAAQiY,GAAR,CAAZ,CAL+C,CAO/C;AACA;AACA;;AACA,SAAOA,GAAG,CAAC3X,EAAX;AACD;AAEM,eAAehvD,MAAf,CAAsB0uD,KAAtB,EAA6BiY,GAA7B,EAAkC;AACvC,MAAI3W,MAAM,GAAGzlI,MAAM,CAACiS,IAAP,CAAYmqI,GAAZ,EAAiBv4I,MAAjB,CAAwB0tB,CAAC,IAAIA,CAAC,KAAK,IAAnC,CAAb;;AAEA,MAAI6qH,GAAG,CAAC3X,EAAJ,IAAU,IAAd,EAAoB;AAClB,UAAM,IAAI7iI,KAAJ,CAAU,wBAAV,CAAN;AACD;;AAED,QAAMyoK,0DAAY,CAChB5kC,MAAM,CAACtlI,GAAP,CAAWoxB,CAAC,IAAI;AACd,WAAO;AACLu+H,aAAO,EAAE3rB,KADJ;AAELiY,SAAG,EAAEA,GAAG,CAAC3X,EAFJ;AAGLz5F,YAAM,EAAEzZ,CAHH;AAIL50B,WAAK,EAAEy/I,GAAG,CAAC7qH,CAAD,CAJL;AAKL/kB,eAAS,EAAEo9J,kDAAS,CAACplG,IAAV;AALN,KAAP;AAOD,GARD,CADgB,CAAlB;AAWD;AAEM,eAAe+lG,OAAf,CAAuBpmC,KAAvB,EAA8BM,EAA9B,EAAkC;AACvC,QAAM4lC,0DAAY,CAAC,CACjB;AACEva,WAAO,EAAE3rB,KADX;AAEEiY,OAAG,EAAE3X,EAFP;AAGEz5F,UAAM,EAAE,WAHV;AAIEruC,SAAK,EAAE,CAJT;AAKE6P,aAAS,EAAEo9J,kDAAS,CAACplG,IAAV;AALb,GADiB,CAAD,CAAlB;AASD;AAEM,eAAegmG,gBAAf,CAAgCrmC,KAAhC,EAAuCqT,GAAvC,EAA4CC,MAA5C,EAAoD;AACzD,MAAI0U,IAAI,GAAG,MAAMxnB,QAAQ,CAAC6S,GAAD,EAAMC,MAAN,EAAc,IAAd,CAAzB;AACA,SAAO0U,IAAI,CACRhsJ,GADI,CACAi8I,GAAG,IAAIqe,6EAAiB,CAAC5H,kDAAD,EAASvL,wDAAT,EAAuBnjB,KAAvB,EAA8BiY,GAA9B,CADxB,EAEJv4I,MAFI,CAEGw9C,OAFH,CAAP;AAGD;AAEM,eAAeopH,qBAAf,CAAqCtmC,KAArC,EAA4CqT,GAA5C,EAAiDC,MAAjD,EAAyD;AAC9D,MAAI0U,IAAI,GAAG,MAAMqe,gBAAgB,CAACrmC,KAAD,EAAQqT,GAAR,EAAaC,MAAb,CAAjC;AACA,SAAO0U,IAAI,CAAC/oJ,MAAL,GAAc,CAAd,GAAkB+oJ,IAAI,CAAC,CAAD,CAAtB,GAA4B,IAAnC;AACD;AAEM,SAASue,gBAAT,CAA0BvmC,KAA1B,EAAiCiY,GAAjC,EAAsC;AAC3C;AACA;AACA,MAAI,CAACA,GAAG,CAAC3X,EAAT,EAAa;AACX2X,OAAG,mCAAQA,GAAR;AAAa3X,QAAE,EAAEpD,IAAI,CAACgX,MAAL;AAAjB,MAAH;AACD;;AAED,SAAOiyB,cAAc,CACnBnmC,KADmB,EAEnBk2B,4EAAgB,CAACxH,kDAAD,EAASvL,wDAAT,EAAuBnjB,KAAvB,EAA8BiY,GAA9B,CAFG,CAArB;AAID;AAEM,SAASuuB,gBAAT,CAA0BxmC,KAA1B,EAAiCsB,MAAjC,EAAyC;AAC9C,SAAOxhH,MAAM,CAACkgH,KAAD,EAAQq2B,4EAAgB,CAAC3H,kDAAD,EAASvL,wDAAT,EAAuBnjB,KAAvB,EAA8BsB,MAA9B,CAAxB,CAAb;AACD,C,CAED;AACA;;AAEO,eAAekB,aAAf,GAA+B;AACpC,SAAOp5D,GAAG,CAAE;AACd;AACA;AACA;AACA;AACA,GALY,CAAV;AAMD;AAEM,eAAeq9F,oBAAf,GAAsC;AAC3C,QAAMl6B,MAAM,GAAG,MAAMnjE,GAAG,CACtB,sFADsB,CAAxB;AAGA,QAAM4+E,IAAI,GAAG,MAAM5+E,GAAG,CAAE;AAC1B;AACA;AACA,GAHwB,CAAtB;AAKA,SAAOmjE,MAAM,CAACvwI,GAAP,CAAWqmI,KAAK,IAAI;AACzB,2CACKA,KADL;AAEEkD,gBAAU,EAAEyiB,IAAI,CAACtoJ,MAAL,CAAYu4I,GAAG,IAAIA,GAAG,CAAC+S,SAAJ,KAAkB3oB,KAAK,CAAC/B,EAA3C;AAFd;AAID,GALM,CAAP;AAMD;AAEM,eAAeomC,mBAAf,CAAmCrkC,KAAnC,EAA0C;AAC/C,QAAMskC,SAAS,GAAG,MAAM52J,KAAK,CAAE;AACjC;AACA,GAF+B,CAA7B;AAGA,QAAMsuI,UAAU,GAAG,CAACsoB,SAAS,GAAGA,SAAS,CAACtoB,UAAb,GAA0B,CAApC,IAAyCuoB,oDAA5D;AAEAvkC,OAAK,mCACA4oB,0DAAkB,CAACjhG,QAAnB,CAA4Bq4E,KAA5B,CADA;AAEHgc,cAAU,EAAEA;AAFT,IAAL;AAIA,SAAO8nB,cAAc,CAAC,iBAAD,EAAoB9jC,KAApB,CAArB;AACD;AAEM,SAASC,mBAAT,CAA6BD,KAA7B,EAAoC;AACzCA,OAAK,GAAG4oB,0DAAkB,CAACjhG,QAAnB,CAA4Bq4E,KAA5B,EAAmC;AAAEviH,UAAM,EAAE;AAAV,GAAnC,CAAR;AACA,SAAOA,MAAM,CAAC,iBAAD,EAAoBuiH,KAApB,CAAb;AACD;AAEM,eAAewkC,iBAAf,CAAiCvmC,EAAjC,EAAqCwmC,QAArC,EAA+C;AACpD,QAAMv6B,MAAM,GAAG,MAAMnjE,GAAG,CACrB,wFADqB,CAAxB;;AAIA,2BAAgC29F,6DAAe,CAACx6B,MAAD,EAASu6B,QAAT,CAA/C;AAAA,QAAQnmB,OAAR,oBAAQA,OAAR;AAAA,QAAiBtC,UAAjB,oBAAiBA,UAAjB;;AACA,OAAK,IAAIx+G,IAAT,IAAiB8gH,OAAjB,EAA0B;AACxB,UAAM7gI,MAAM,CAAC,iBAAD,EAAoB+f,IAApB,CAAZ;AACD;;AACD,QAAM/f,MAAM,CAAC,iBAAD,EAAoB;AAAEwgH,MAAF;AAAM+d;AAAN,GAApB,CAAZ;AACD;AAEM,eAAe9b,mBAAf,CAAmCF,KAAnC,EAA0C4D,UAA1C,EAAsD;AAC3D,QAAMV,UAAU,GAAG,MAAMn8D,GAAG,CAAC,8CAAD,EAAiD,CAC3Ei5D,KAAK,CAAC/B,EADqE,CAAjD,CAA5B,CAD2D,CAK3D;;AACA,QAAM5gH,OAAO,CAAC0pD,GAAR,CAAYm8D,UAAU,CAACvpI,GAAX,CAAe8oI,GAAG,IAAIlC,cAAc,CAACkC,GAAD,EAAMmB,UAAN,CAApC,CAAZ,CAAN;AACA,QAAMmgC,OAAO,CAAC,iBAAD,EAAoB/jC,KAAK,CAAC/B,EAA1B,CAAb;AACD;AAEM,eAAe0mC,cAAf,CAA8BtkC,QAA9B,EAAwC;AAAErgC;AAAF,IAAY,EAApD,EAAwD;AAC7D,MAAIg8C,UAAJ;AAEA,MAAI4oB,GAAJ;AACA,QAAM34B,2DAAa,CAAC,YAAY;AAC9B,QAAIjsC,KAAJ,EAAW;AACT,YAAM6kE,OAAO,GAAG,MAAMn3J,KAAK,CAAE;AACnC;AACA,OAFiC,CAA3B;AAGAsuI,gBAAU,GAAG,CAAC6oB,OAAO,GAAGA,OAAO,CAAC7oB,UAAX,GAAwB,CAAhC,IAAqCuoB,oDAAlD;AACD,KALD,MAKO;AACL;AACA;AACA,YAAMrhC,UAAU,GAAG,MAAMn8D,GAAG,CACzB,qGADyB,EAE1B,CAACs5D,QAAQ,CAACsoB,SAAV,CAF0B,CAA5B;;AAKA,gCAAuC+b,6DAAe,CACpDxhC,UADoD,EAEpDA,UAAU,CAACtmI,MAAX,GAAoB,CAApB,GAAwBsmI,UAAU,CAAC,CAAD,CAAV,CAAcjF,EAAtC,GAA2C,IAFS,CAAtD;AAAA,YAAQqgB,OAAR,qBAAQA,OAAR;AAAA,YAA6B7gB,KAA7B,qBAAiBue,UAAjB;;AAIA,WAAK,IAAIx+G,IAAT,IAAiB8gH,OAAjB,EAA0B;AACxB,cAAM7gI,MAAM,CAAC,YAAD,EAAe+f,IAAf,CAAZ;AACD;;AACDw+G,gBAAU,GAAGve,KAAb;AACD;;AAED4C,YAAQ,mCACHqoB,qDAAa,CAAC/gG,QAAd,CAAuB04E,QAAvB,CADG;AAEN2b,gBAAU,EAAEA;AAFN,MAAR;AAKA,UAAM/d,EAAE,GAAG,MAAM6lC,cAAc,CAAC,YAAD,EAAezjC,QAAf,CAA/B,CA7B8B,CA8B9B;;AACA,UAAMpxD,MAAM,CAAC,kBAAD,EAAqB;AAAEgvD,QAAF;AAAM2F,gBAAU,EAAE3F;AAAlB,KAArB,CAAZ;AACA2mC,OAAG,GAAG3mC,EAAN;AACD,GAjCkB,CAAnB;AAkCA,SAAO2mC,GAAP;AACD;AAEM,SAAStkC,cAAT,CAAwBD,QAAxB,EAAkC;AACvCA,UAAQ,GAAGqoB,qDAAa,CAAC/gG,QAAd,CAAuB04E,QAAvB,EAAiC;AAAE5iH,UAAM,EAAE;AAAV,GAAjC,CAAX;AACA,SAAOA,MAAM,CAAC,YAAD,EAAe4iH,QAAf,CAAb;AACD;AAEM,eAAeykC,YAAf,CAA4B7mC,EAA5B,EAAgCiJ,OAAhC,EAAyCu9B,QAAzC,EAAmD;AACxD,MAAI,CAACv9B,OAAL,EAAc;AACZ,UAAM,IAAI9rI,KAAJ,CAAU,mCAAV,CAAN;AACD;;AAED,QAAM8nI,UAAU,GAAG,MAAMn8D,GAAG,CACzB,qGADyB,EAE1B,CAACmgE,OAAD,CAF0B,CAA5B;;AAKA,4BAAgCw9B,6DAAe,CAACxhC,UAAD,EAAauhC,QAAb,CAA/C;AAAA,QAAQnmB,OAAR,qBAAQA,OAAR;AAAA,QAAiBtC,UAAjB,qBAAiBA,UAAjB;;AACA,OAAK,IAAIx+G,IAAT,IAAiB8gH,OAAjB,EAA0B;AACxB,UAAM7gI,MAAM,CAAC,YAAD,EAAe+f,IAAf,CAAZ;AACD;;AACD,QAAM/f,MAAM,CAAC,YAAD,EAAe;AAAEwgH,MAAF;AAAM+d,cAAN;AAAkB2M,aAAS,EAAEzhB;AAA7B,GAAf,CAAZ;AACD;AAEM,eAAe3G,cAAf,CAA8BF,QAA9B,EAAwCuD,UAAxC,EAAoD;AACzD,MAAIA,UAAJ,EAAgB;AACd;AACA;AACA;AACA,UAAMmhC,iBAAiB,GAAG,MAAMh+F,GAAG,CACjC,qDADiC,EAEjC,CAACs5D,QAAQ,CAACpC,EAAV,CAFiC,CAAnC;;AAIA,SAAK,IAAI+mC,OAAT,IAAoBD,iBAApB,EAAuC;AACrC,YAAMtnJ,MAAM,CAAC,kBAAD,EAAqB;AAAEwgH,UAAE,EAAE+mC,OAAO,CAAC/mC,EAAd;AAAkB2F;AAAlB,OAArB,CAAZ;AACD,KAVa,CAYd;;;AACA,UAAMnmH,MAAM,CAAC,kBAAD,EAAqB;AAAEwgH,QAAE,EAAEoC,QAAQ,CAACpC,EAAf;AAAmB2F;AAAnB,KAArB,CAAZ;AACD;;AAED,SAAOmgC,OAAO,CAAC,YAAD,EAAe1jC,QAAQ,CAACpC,EAAxB,CAAd;AACD;AAEM,eAAe+oB,QAAf,CAAwB/oB,EAAxB,EAA4B;AACjC,SAAOvwH,KAAK,CAAE,mCAAF,EAAsC,CAACuwH,EAAD,CAAtC,CAAZ;AACD;AAEM,eAAegnC,WAAf,CAA2BvkC,KAA3B,EAAkC;AACvCA,OAAK,GAAGmoB,kDAAU,CAAClhG,QAAX,CAAoB+4E,KAApB,CAAR;AACA,MAAIzC,EAAJ;AACA,QAAMgO,2DAAa,CAAC,YAAY;AAC9BhO,MAAE,GAAG,MAAM6lC,cAAc,CAAC,QAAD,EAAWpjC,KAAX,CAAzB;AACA,UAAMzxD,MAAM,CAAC,eAAD,EAAkB;AAAEgvD,QAAF;AAAMwmC,cAAQ,EAAExmC;AAAhB,KAAlB,CAAZ;AACD,GAHkB,CAAnB;AAIA,SAAOA,EAAP;AACD;AAEM,eAAe2C,WAAf,CAA2BF,KAA3B,EAAkC;AACvC,qBAAwB,MAAMhzH,KAAK,CAAC,mCAAD,EAAsC,CACvEgzH,KAAK,CAACzC,EADiE,CAAtC,CAAnC;AAAA,MAAM+E,aAAN,gBAAMA,aAAN;;AAGA,MAAIA,aAAJ,EAAmB;AACjB;AACA;AACD,GAPsC,CASvC;AACA;AACA;AACA;AACA;AACA;;;AAEA,MAAIj3H,KAAK,GAAG,MAAMg7D,GAAG,CAAC,8CAAD,EAAiD,CACpE25D,KAAK,CAACzC,EAD8D,CAAjD,CAArB;AAGA,QAAM5gH,OAAO,CAAC0pD,GAAR,CAAYh7D,KAAK,CAACpS,GAAN,CAAUsO,IAAI,IAAIi5H,eAAe,CAAC;AAAEjD,MAAE,EAAEh2H,IAAI,CAACg2H;AAAX,GAAD,CAAjC,CAAZ,CAAN;AACA,SAAO8lC,OAAO,CAAC,QAAD,EAAWrjC,KAAK,CAACzC,EAAjB,CAAd;AACD;AAEM,eAAeinC,mBAAf,CAAmCxkC,KAAnC,EAA0C;AAC/C;AACA,SAAOqjC,OAAO,CAAC,QAAD,EAAWrjC,KAAK,CAACzC,EAAjB,CAAd;AACD;AAEM,SAAS0C,WAAT,CAAqBD,KAArB,EAA4B;AACjCA,OAAK,GAAGmoB,kDAAU,CAAClhG,QAAX,CAAoB+4E,KAApB,EAA2B;AAAEjjH,UAAM,EAAE;AAAV,GAA3B,CAAR;AACA,SAAOA,MAAM,CAAC,QAAD,EAAWijH,KAAX,CAAb;AACD;AAEM,eAAeykC,WAAf,CAA2BtmJ,MAA3B,EAAmCwmI,GAAnC,EAAwC;AAC7C;AACA,MAAIviB,MAAM,GAAGsiC,8DAAS,CAAC,MAAMr+F,GAAG,CAAC,sBAAD,CAAV,CAAtB,CAF6C,CAI7C;;AACA,MAAI+7D,MAAM,CAACjkH,MAAD,CAAN,CAAemkH,aAAf,IAAgC,IAApC,EAA0C;AACxC;AACD;;AACDqiB,KAAG,GAAGA,GAAG,CAAChoJ,MAAJ,CAAW4gI,EAAE,IAAI6E,MAAM,CAAC7E,EAAD,CAAN,CAAW+E,aAAX,IAA4B,IAA7C,CAAN;AAEA,QAAMiJ,2DAAa,CAAC,YAAY;AAC9B,UAAM5uH,OAAO,CAAC0pD,GAAR,CACJs+E,GAAG,CAAC1rJ,GAAJ,CAAQ,MAAMskI,EAAN,IAAY;AAClB,UAAIid,QAAQ,GAAG,MAAMn0E,GAAG,CACtB,iDADsB,EAEtB,CAACk3D,EAAD,CAFsB,CAAxB;AAIA,YAAM5gH,OAAO,CAAC0pD,GAAR,CACJm0E,QAAQ,CAACvhJ,GAAT,CAAam0C,CAAC,IACZrwB,MAAM,CAAC,eAAD,EAAkB;AAAEwgH,UAAE,EAAEnwF,CAAC,CAACmwF,EAAR;AAAYwmC,gBAAQ,EAAE5lJ;AAAtB,OAAlB,CADR,CADI,CAAN;AAKD,KAVD,CADI,CAAN;AAcA,WAAOxB,OAAO,CAAC0pD,GAAR,CACLs+E,GAAG,CAAC1rJ,GAAJ,CAAQskI,EAAE,IACR5gH,OAAO,CAAC0pD,GAAR,CAAY,CACVtpD,MAAM,CAAC,eAAD,EAAkB;AAAEwgH,QAAF;AAAMwmC,cAAQ,EAAE5lJ;AAAhB,KAAlB,CADI,EAEVklJ,OAAO,CAAC,QAAD,EAAW9lC,EAAX,CAFG,CAAZ,CADF,CADK,CAAP;AAQD,GAvBkB,CAAnB;AAwBD;AAEM,SAASuC,SAAT,GAAqB;AAC1B,SAAOz5D,GAAG,CAAE;AACd;AACA;AACA;AACA;AACA,GALY,CAAV;AAMD;AAEM,eAAes+F,iBAAf,GAAmC;AACxC,MAAI1f,IAAI,GAAG,MAAM5+E,GAAG,CAAE;AACxB;AACA;AACA;AACA;AACA,GALsB,CAApB;AAMA,SAAO4+E,IAAI,CAAChsJ,GAAL,CAASi8I,GAAG,IAAIA,GAAG,CAAC3X,EAApB,CAAP;AACD;AAEM,eAAeqnC,cAAf,CAA8B1lK,IAA9B,EAAoC;AACzC,SAAO8N,KAAK,CAAE,8DAAF,EAAiE,CAC3E9N,IAAI,CAACq3B,WAAL,EAD2E,CAAjE,CAAZ;AAGD;AAEM,SAASsuI,eAAT,CAAyBt9J,IAAzB,EAA+B;AACpCA,MAAI,GAAG6gJ,sDAAc,CAACnhG,QAAf,CAAwB1/C,IAAxB,CAAP;AACA,SAAO67J,cAAc,CAAC,aAAD,EAAgB77J,IAAhB,CAArB;AACD;AAEM,SAASi5H,eAAT,CAAyBj5H,IAAzB,EAA+B;AACpC,SAAO87J,OAAO,CAAC,aAAD,EAAgB97J,IAAI,CAACg2H,EAArB,CAAd;AACD;AAEM,SAASgD,eAAT,CAAyBh5H,IAAzB,EAA+B;AACpCA,MAAI,GAAG4gJ,kDAAU,CAAClhG,QAAX,CAAoB1/C,IAApB,EAA0B;AAAEwV,UAAM,EAAE;AAAV,GAA1B,CAAP;AACA,SAAOA,MAAM,CAAC,aAAD,EAAgBxV,IAAhB,CAAb;AACD;AAEM,SAAS44H,aAAT,CAAuB5C,EAAvB,EAA2B;AAChC,SAAOl3D,GAAG,CACP;AACL;AACA,gDAHY,EAIR,CAACk3D,EAAD,CAJQ,CAAV;AAMD;AAEM,SAASkB,WAAT,GAAuB;AAC5B,SAAOp4D,GAAG,CACP;AACL;AACA;AACA,iCAJY,CAAV;AAMD;AAEM,eAAey+F,aAAf,CAA6BnmC,OAA7B,EAAsC;AAC3C;AACA;AACA,MAAIA,OAAO,CAACtsH,IAAR,KAAiBnd,SAArB,EAAgC;AAC9BypI,WAAO,mCAAQA,OAAR;AAAiBtsH,UAAI,EAAE;AAAvB,MAAP;AACD;;AAED,QAAM8uH,QAAQ,GAAG,MAAM96D,GAAG,CACxB,sEADwB,EAExB,CAACs4D,OAAO,CAAC4C,SAAR,IAAqB,IAArB,GAA4B5C,OAAO,CAAC4C,SAApC,GAAgD,CAAjD,CAFwB,CAA1B,CAP2C,CAY3C;;AACA,0BAAqByiC,6DAAe,CAAC7iC,QAAD,CAApC;AAAA,MAAMma,UAAN,qBAAMA,UAAN;;AAEA3c,SAAO,GAAGopB,oDAAY,CAAC9gG,QAAb,iCAA2B03E,OAA3B;AAAoC2c;AAApC,KAAV;AACA,SAAO8nB,cAAc,CAAC,UAAD,EAAazkC,OAAb,CAArB;AACD;AAEM,SAASE,aAAT,CAAuBF,OAAvB,EAAgC;AACrCA,SAAO,GAAGopB,oDAAY,CAAC9gG,QAAb,CAAsB03E,OAAtB,EAA+B;AAAE5hH,UAAM,EAAE;AAAV,GAA/B,CAAV;AACA,SAAOA,MAAM,CAAC,UAAD,EAAa4hH,OAAb,CAAb;AACD;AAEM,SAASO,aAAT,CAAuBP,OAAvB,EAAgC;AACrC,SAAO0kC,OAAO,CAAC,UAAD,EAAa1kC,OAAO,CAACpB,EAArB,CAAd;AACD;AAEM,eAAewnC,WAAf,CAA2BxnC,EAA3B,EAA+BwmC,QAA/B,EAAyC;AAC9C,MAAIplC,OAAO,GAAG,MAAM3xH,KAAK,CAAC,qCAAD,EAAwC,CAACuwH,EAAD,CAAxC,CAAzB;AACA,MAAI4D,QAAJ;;AACA,MAAIxC,OAAO,CAAC8C,MAAZ,EAAoB;AAClBN,YAAQ,GAAG,MAAM96D,GAAG,CACjB,gFADiB,CAApB;AAGD,GAJD,MAIO;AACL86D,YAAQ,GAAG,MAAM96D,GAAG,CACjB,qGADiB,EAElB,CAACs4D,OAAO,CAAC4C,SAAT,CAFkB,CAApB;AAID;;AAED,4BAAgCyiC,6DAAe,CAAC7iC,QAAD,EAAW4iC,QAAX,CAA/C;AAAA,QAAQnmB,OAAR,qBAAQA,OAAR;AAAA,QAAiBtC,UAAjB,qBAAiBA,UAAjB;;AACA,QAAM/P,2DAAa,CAAC,MAAM;AACxB,SAAK,IAAIzuG,IAAT,IAAiB8gH,OAAjB,EAA0B;AACxB7gI,YAAM,CAAC,UAAD,EAAa+f,IAAb,CAAN;AACD;;AACD/f,UAAM,CAAC,UAAD,EAAa;AAAEwgH,QAAF;AAAM+d;AAAN,KAAb,CAAN;AACD,GALkB,CAAnB;AAMD;AAEM,eAAe0pB,cAAf,CAA8BznC,EAA9B,EAAkC;AACvC,MAAI0nB,IAAI,GAAG,MAAMqe,gBAAgB,CAC/B,cAD+B,EAE/B,2CAF+B,EAG/B,CAAC/lC,EAAD,CAH+B,CAAjC;AAKA,SAAO0nB,IAAI,CAAC,CAAD,CAAX;AACD;;AAED,SAASggB,sBAAT,CAAgChnC,SAAhC,EAA2CinC,QAA3C,EAAqDluK,OAAO,GAAG,EAA/D,EAAmE;AACjE,4BAAmDA,OAAnD,CAAMmuK,UAAN;AAAA,MAAMA,UAAN,oCAAmB,KAAnB;AAAA,8BAAmDnuK,OAAnD,CAA0BouK,aAA1B;AAAA,MAA0BA,aAA1B,sCAA0C,IAA1C;AAEA,MAAIC,QAAQ,GAAGH,QAAQ,GAAG,UAAH,GAAgB,OAAvC;AACA,MAAI30B,MAAM,GAAG,EAAb;;AAEA,MAAItS,SAAJ,EAAe;AACb,QAAIA,SAAS,KAAK,WAAlB,EAA+B;AAC7BonC,cAAQ,IAAI,mCAAZ;AACD,KAFD,MAEO,IAAIpnC,SAAS,KAAK,UAAlB,EAA8B;AACnConC,cAAQ,IAAI,mCAAZ;AACD,KAFM,MAEA,IAAIpnC,SAAS,KAAK,eAAlB,EAAmC;AACxConC,cAAQ,IAAK;AACnB;AACA;AACA;AACA,SAJM;AAKD,KANM,MAMA;AACLA,cAAQ,IAAI,WAAZ;AACA90B,YAAM,CAACx1I,IAAP,CAAYkjI,SAAZ;AACD;AACF,GAfD,MAeO;AACLonC,YAAQ,IAAIF,UAAU,GAAG,GAAH,GAAS,cAA/B;;AAEA,QAAI,CAACC,aAAL,EAAoB;AAClBC,cAAQ,IAAI,sBAAZ;AACD;AACF;;AAED,SAAO;AAAEA,YAAF;AAAY90B;AAAZ,GAAP;AACD;;AAEM,eAAe+0B,qBAAf,CACLrnC,SADK,EAELrjI,SAFK,EAGL67C,OAHK,EAILz/C,OAAO,GAAG,EAJL,EAKL;AACA,QAAM,IAAI0D,KAAJ,CAAU,uCAAV,CAAN;AACD;AAEM,eAAe0jI,eAAf,CAA+BH,SAA/B,EAA0C2xB,IAA1C,EAAgD;AACrD,MAAIA,IAAI,KAAK16J,SAAb,EAAwB;AACtB,UAAM,IAAIwF,KAAJ,CACJ,gGADI,CAAN;AAGD;;AAED,SAAO4oK,gBAAgB,CACrB,cADqB,EAErB,gDAFqB,EAGrB,CAACrlC,SAAD,CAHqB,CAAvB;AAKD;AAEM,SAASsnC,iBAAT,CAA2BziC,WAA3B,EAAwC;AAC7C,SAAO0gC,gBAAgB,CAAC,cAAD,EAAiB1gC,WAAjB,CAAvB;AACD;AAEM,SAASxE,iBAAT,CAA2BwE,WAA3B,EAAwC;AAC7C,SAAO2gC,gBAAgB,CAAC,cAAD,EAAiB3gC,WAAjB,CAAvB;AACD;AAEM,eAAetE,iBAAf,CAAiCsE,WAAjC,EAA8C;AACnD,SAAOugC,OAAO,CAAC,cAAD,EAAiBvgC,WAAW,CAACvF,EAA7B,CAAd;AACD,C;;;;;;;;;;;;ACpqBD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;CAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAIioC,WAAJ;AACA,IAAI3lB,YAAJ;AAEO,eAAe4lB,YAAf,GAA8B;AACnC;AACA;AACA,MAAIjjC,UAAU,GAAG,CAAC,MAAMkF,0CAAA,CAAO,gCAAP,CAAP,EAAiDzuI,GAAjD,CAAqDurJ,CAAC,IAAI,CACzEA,CAAC,CAACjnB,EADuE,EAEzEinB,CAAC,CAACthB,UAFuE,CAA1D,CAAjB;AAIA,MAAId,MAAM,GAAG,CAAC,MAAMsF,0CAAA,CAAO,6BAAP,CAAP,EAA8CzuI,GAA9C,CAAkDurJ,CAAC,IAAI,CAClEA,CAAC,CAACjnB,EADgE,EAElEinB,CAAC,CAACuf,QAFgE,CAAvD,CAAb,CAPmC,CAYnC;;AACAyB,aAAW,GAAG,IAAIz7J,GAAJ,CAAQy4H,UAAU,CAACtvG,MAAX,CAAkBkvG,MAAlB,CAAR,CAAd;;AAEA,MAAIyd,YAAJ,EAAkB;AAChBA,gBAAY;AACb;;AACDA,cAAY,GAAGqB,mEAAe,CAACC,WAAD,CAA9B;AACD;;AAED,SAASA,WAAT,CAAqBK,SAArB,EAAgCC,SAAhC,EAA2C;AACzCA,WAAS,CAACr5I,OAAV,CAAkB,CAACuT,KAAD,EAAQshH,KAAR,KAAkB;AAClC,QAAIA,KAAK,CAAC/4H,OAAN,CAAc,SAAd,MAA6B,CAAC,CAAlC,EAAqC;AACnC,UAAIg7B,KAAK,GAAG+9F,KAAK,KAAK,kBAAV,GAA+B,YAA/B,GAA8C,UAA1D;AAEAthH,WAAK,CAACvT,OAAN,CAAcs5I,QAAQ,IAAI;AACxB8jB,mBAAW,CAAC9pK,GAAZ,CAAgBgmJ,QAAQ,CAACnkB,EAAzB,EAA6BmkB,QAAQ,CAACxiH,KAAD,CAArC;AACD,OAFD;AAGD;AACF,GARD;AASD;;AAEM,SAAS8hH,WAAT,GAAuB;AAC5B,SAAOwkB,WAAP;AACD;AAEM,SAASE,UAAT,CAAoBnoC,EAApB,EAAwB;AAC7B,SAAOioC,WAAW,CAACrtK,GAAZ,CAAgBolI,EAAhB,KAAuB,IAA9B;AACD,C;;;;;;;;;;;;AC1DD;AAAA;AAAA;AAAO,MAAMsmC,cAAc,GAAG,KAAvB;;AAEP,SAAS8B,QAAT,CAAkBhqJ,KAAlB,EAAyBqiB,EAAzB,EAA6B;AAC3B,QAAM4nI,KAAK,GAAGjqJ,KAAK,CAACqiB,EAAE,GAAG,CAAN,CAAnB;AACA,QAAM6nI,KAAK,GAAGlqJ,KAAK,CAACqiB,EAAD,CAAnB;;AAEA,MAAI,CAAC4nI,KAAL,EAAY;AACV,WAAOC,KAAK,CAACvqB,UAAN,GAAmB,CAA1B;AACD,GAFD,MAEO,IAAI,CAACuqB,KAAL,EAAY;AACjB,WAAOD,KAAK,CAACtqB,UAAN,GAAmBuoB,cAA1B;AACD,GAFM,MAEA;AACL,WAAO,CAAC+B,KAAK,CAACtqB,UAAN,GAAmBuqB,KAAK,CAACvqB,UAA1B,IAAwC,CAA/C;AACD;AACF;;AAEM,SAAS0oB,eAAT,CAAyBroJ,KAAzB,EAAgCooJ,QAAhC,EAA0C;AAC/C,QAAM/lI,EAAE,GAAGriB,KAAK,CAACxd,SAAN,CAAgBib,IAAI,IAAIA,IAAI,CAACmkH,EAAL,KAAYwmC,QAApC,CAAX;AACA,QAAM5lJ,MAAM,GAAGxC,KAAK,CAACqiB,EAAD,CAApB;AACA,QAAMlmC,MAAM,GAAG6jB,KAAK,CAACqiB,EAAE,GAAG,CAAN,CAApB;AACA,MAAI4/G,OAAO,GAAG,EAAd,CAJ+C,CAM/C;;AACA,MAAI,CAACmmB,QAAD,IAAa/lI,EAAE,KAAK,CAAC,CAAzB,EAA4B;AAC1B,QAAI++F,KAAJ;;AACA,QAAIphH,KAAK,CAACzf,MAAN,GAAe,CAAnB,EAAsB;AACpB;AACA6gI,WAAK,GAAGphH,KAAK,CAACA,KAAK,CAACzf,MAAN,GAAe,CAAhB,CAAL,CAAwBo/I,UAAxB,GAAqCuoB,cAA7C;AACD,KAHD,MAGO;AACL;AACA9mC,WAAK,GAAG8mC,cAAR;AACD;;AAED,WAAO;AAAEjmB,aAAF;AAAWtC,gBAAU,EAAEve;AAAvB,KAAP;AACD,GAXD,MAWO;AACL,QAAI5+G,MAAM,CAACm9H,UAAP,IAAqBxjJ,MAAM,GAAGA,MAAM,CAACwjJ,UAAV,GAAuB,CAAlD,KAAwD,CAA5D,EAA+D;AAC7D,UAAI9lJ,IAAI,GAAGwoC,EAAX;AACA,UAAI++F,KAAK,GAAG,CAACphH,KAAK,CAACnmB,IAAD,CAAL,CAAY8lJ,UAAZ,GAAyB,CAA1B,IAA+BuoB,cAA3C;;AACA,aAAOruK,IAAI,GAAGmmB,KAAK,CAACzf,MAApB,EAA4B;AAC1B;AACA;AACA;AACA,YAAI6gI,KAAK,IAAIphH,KAAK,CAACnmB,IAAD,CAAL,CAAY8lJ,UAAzB,EAAqC;AACnC;AACD;;AAEDsC,eAAO,CAAC7iJ,IAAR,CAAa;AAAEwiI,YAAE,EAAE5hH,KAAK,CAACnmB,IAAD,CAAL,CAAY+nI,EAAlB;AAAsB+d,oBAAU,EAAEve;AAAlC,SAAb;AAEAvnI,YAAI;AACJunI,aAAK,IAAI8mC,cAAT;AACD;AACF;;AAED,WAAO;AAAEjmB,aAAF;AAAWtC,gBAAU,EAAEqqB,QAAQ,CAAChqJ,KAAD,EAAQqiB,EAAR;AAA/B,KAAP;AACD;AACF,C;;;;;;;;;;;;ACtDD;AAAA;AAAA;AAAO,eAAemnH,SAAf,CACL1nB,QADK,EAELqoC,KAFK,EAGL9mI,OAHK,EAIL+mI,SAJK,EAKLx1B,MAAM,GAAG,EALJ,EAML;AACA,MAAIy1B,SAAS,GAAG,GAAhB;AACA,MAAIlxJ,OAAO,GAAG,EAAd;AAEA,MAAImxJ,UAAU,GAAG,IAAI11J,GAAJ,EAAjB;;AAEA,OAAK,IAAIwE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+wJ,KAAK,CAAC5pK,MAA1B,EAAkC6Y,CAAC,IAAIixJ,SAAvC,EAAkD;AAChD,QAAI9nK,KAAK,GAAG4nK,KAAK,CAAC5nK,KAAN,CAAY6W,CAAZ,EAAeA,CAAC,GAAGixJ,SAAnB,EAA8BrpK,MAA9B,CAAqC4gI,EAAE,IAAI,CAAC0oC,UAAU,CAAC/3J,GAAX,CAAeqvH,EAAf,CAA5C,CAAZ;;AACA,QAAIr/H,KAAK,CAAChC,MAAN,GAAe,CAAnB,EAAsB;AACpB,UAAIS,MAAM,GAAGuB,KAAK,CAACjF,GAAN,CAAUskI,EAAE,IAAIv+F,OAAO,CAACu+F,EAAD,CAAvB,EAA6BtmH,IAA7B,CAAkC,MAAlC,CAAb;AACA,UAAIqlH,KAAK,GAAGypC,SAAS,CAAC,MAAMppK,MAAN,GAAe,GAAhB,CAArB;AAEA,UAAIsoJ,IAAI,GAAG,MAAMxnB,QAAQ,CAACnB,KAAD,EAAQiU,MAAR,EAAgB,IAAhB,CAAzB;AACA01B,gBAAU,GAAG,IAAI11J,GAAJ,CAAQ,CAAC,GAAG01J,UAAJ,EAAgB,GAAG/nK,KAAnB,CAAR,CAAb;AACA4W,aAAO,GAAGA,OAAO,CAACoe,MAAR,CAAe+xH,IAAf,CAAV;AACD;AACF;;AAED,SAAOnwI,OAAP;AACD;AAEM,SAASkwI,OAAT,CAAiBL,GAAjB,EAAsBzlH,KAAtB,EAA6B;AAClC,MAAIgnI,IAAI,GAAG,CAAC,GAAG,IAAI31J,GAAJ,CAAQo0I,GAAR,CAAJ,CAAX;AACA,MAAIhoJ,MAAM,GAAI,GAAEuiC,KAAM,OAAT,GAAkBgnI,IAAI,CAACjtK,GAAL,CAASskI,EAAE,IAAK,IAAGA,EAAG,GAAtB,EAA0BtmH,IAA1B,CAA+B,GAA/B,CAAlB,GAAwD,GAArE;AACA,SAAOta,MAAP;AACD,C;;;;;;;;;;;;AC/BD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAI49H,MAAM,GAAGjjH,mBAAO,CAAC,sBAAD,CAApB;;AAEA,IAAI6uJ,oBAAoB,GAAG,aAA3B;AAEO,eAAeC,YAAf,CAA4BjtI,GAA5B,EAAiC;AACtC,SAAOohG,MAAM,CACV8rC,UADI,CACO,QADP,EAEJtpJ,MAFI,CAEGoc,GAFH,EAGJmtI,MAHI,CAGG,QAHH,CAAP;AAID;AAEM,SAASrsI,WAAT,CAAqB3E,CAArB,EAAwB;AAC7B,SAAOilG,MAAM,CAACtgG,WAAP,CAAmB3E,CAAnB,CAAP;AACD;AAEM,SAASzK,OAAT,CAAiB07I,SAAjB,EAA4B9wK,KAA5B,EAAmC;AACxC,MAAI+wK,eAAe,GAAGD,SAAS,CAAC5+B,QAAV,GAAqBxqG,GAA3C,CADwC,CAExC;;AACA,MAAIspI,EAAE,GAAGlsC,MAAM,CAACtgG,WAAP,CAAmB,EAAnB,CAAT;AACA,MAAIysI,MAAM,GAAGnsC,MAAM,CAACosC,cAAP,CAAsBR,oBAAtB,EAA4CK,eAA5C,EAA6DC,EAA7D,CAAb;AACA,MAAIjF,SAAS,GAAGkF,MAAM,CAAC3pJ,MAAP,CAActnB,KAAd,CAAhB;AACA+rK,WAAS,GAAGlpJ,MAAM,CAAC4a,MAAP,CAAc,CAACsuI,SAAD,EAAYkF,MAAM,CAACE,KAAP,EAAZ,CAAd,CAAZ;AAEA,MAAIC,OAAO,GAAGH,MAAM,CAACI,UAAP,EAAd;AAEA,SAAO;AACLrxK,SAAK,EAAE+rK,SADF;AAELjlF,QAAI,EAAE;AACJ4jF,WAAK,EAAEoG,SAAS,CAACjuB,KAAV,EADH;AAEJyuB,eAAS,EAAEZ,oBAFP;AAGJM,QAAE,EAAEA,EAAE,CAAC3zJ,QAAH,CAAY,QAAZ,CAHA;AAIJ+zJ,aAAO,EAAEA,OAAO,CAAC/zJ,QAAR,CAAiB,QAAjB;AAJL;AAFD,GAAP;AASD;AAEM,SAAS4X,OAAT,CAAiB67I,SAAjB,EAA4B/E,SAA5B,EAAuCjlF,IAAvC,EAA6C;AAClD,MAAIiqF,eAAe,GAAGD,SAAS,CAAC5+B,QAAV,GAAqBxqG,GAA3C;AACA,MAAM4pI,SAAN,GAAiCxqF,IAAjC,CAAMwqF,SAAN;AAAA,MAAiBN,EAAjB,GAAiClqF,IAAjC,CAAiBkqF,EAAjB;AAAA,MAAqBI,OAArB,GAAiCtqF,IAAjC,CAAqBsqF,OAArB;AACAJ,IAAE,GAAGnuJ,MAAM,CAACre,IAAP,CAAYwsK,EAAZ,EAAgB,QAAhB,CAAL;AAEAI,SAAO,GAAGvuJ,MAAM,CAACre,IAAP,CAAY4sK,OAAZ,EAAqB,QAArB,CAAV;AAEA,MAAIG,QAAQ,GAAGzsC,MAAM,CAAC0sC,gBAAP,CAAwBF,SAAxB,EAAmCP,eAAnC,EAAoDC,EAApD,CAAf;AACAO,UAAQ,CAACE,UAAT,CAAoBL,OAApB;AAEA,MAAIM,SAAS,GAAGH,QAAQ,CAACjqJ,MAAT,CAAgBykJ,SAAhB,CAAhB;AACA2F,WAAS,GAAG7uJ,MAAM,CAAC4a,MAAP,CAAc,CAACi0I,SAAD,EAAYH,QAAQ,CAACJ,KAAT,EAAZ,CAAd,CAAZ;AACA,SAAOO,SAAP;AACD;AAEM,SAASC,SAAT,CAAmB;AAAEC,QAAF;AAAUt9I;AAAV,CAAnB,EAAqC;AAC1C,MAAI6J,MAAM,GAAG0zI,eAAe,CAAC;AAAED,UAAF;AAAUt9I;AAAV,GAAD,CAA5B;AACA,SAAO;AACLoT,OAAG,EAAEvJ,MADA;AAEL6G,UAAM,EAAE7G,MAAM,CAAC9gB,QAAP,CAAgB,QAAhB;AAFH,GAAP;AAID;AAEM,SAASy0J,SAAT,CAAmBpuI,GAAnB,EAAwB;AAC7B,SAAO;AACLgE,OAAG,EAAE7kB,MAAM,CAACre,IAAP,CAAYk/B,GAAZ,EAAiB,QAAjB,CADA;AAELsB,UAAM,EAAEtB;AAFH,GAAP;AAID;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASmuI,eAAT,CAAyB;AAAEE,UAAF;AAAYH,QAAZ;AAAoBt9I;AAApB,CAAzB,EAAqD;AACnD,SAAOwwG,MAAM,CAACktC,UAAP,CACLJ,MAAM,IAAI9sC,MAAM,CAACtgG,WAAP,CAAmB,GAAnB,EAAwBnnB,QAAxB,CAAiC,QAAjC,CADL,EAELiX,IAAI,IAAIwwG,MAAM,CAACtgG,WAAP,CAAmB,EAAnB,EAAuBnnB,QAAvB,CAAgC,QAAhC,CAFH,EAGL,KAHK,EAIL00J,QAAQ,IAAI,EAJP,EAKL,QALK,CAAP;AAOD,C;;;;;;;;;;;;AClFD;AAAA;AAAA;;AACA,IAAIrtC,IAAI,GAAG7iH,mBAAO,CAAC,oGAAD,CAAlB,C,CAEA;AACA;;;AACA,IAAIvM,IAAI,GAAG,EAAX;;AAEA,MAAM28J,GAAN,CAAU;AACR3yK,aAAW,CAAC;AAAEwoI,MAAF;AAAM9nI;AAAN,GAAD,EAAgB;AACzB,SAAK8nI,EAAL,GAAUA,EAAE,IAAIpD,IAAI,CAACgX,MAAL,EAAhB;AACD;;AAEuB,QAAlBw2B,kBAAkB,CAAC;AAAEC,YAAF;AAAY79I;AAAZ,GAAD,EAAqB;AAC3C,SAAKt0B,KAAL,GAAa,MAAMoyK,+DAAA,CAAoB;AAAER,YAAM,EAAEO,QAAV;AAAoB79I;AAApB,KAApB,CAAnB;AACD;;AAEqB,QAAhB+9I,gBAAgB,CAAC3uI,GAAD,EAAM;AAC1B,SAAK1jC,KAAL,GAAa,MAAMoyK,+DAAA,CAAoB1uI,GAApB,CAAnB;AACD;;AAEDm/G,OAAK,GAAG;AACN,WAAO,KAAK/a,EAAZ;AACD;;AAEDoK,UAAQ,GAAG;AACT,WAAO,KAAKlyI,KAAZ;AACD;;AAED0c,WAAS,GAAG;AACV,WAAO;AACLorH,QAAE,EAAE,KAAKA,EADJ;AAEL9iG,YAAM,EAAE,KAAKhlC,KAAL,CAAWglC;AAFd,KAAP;AAID;;AA1BO;;AA6BV,SAASi+G,MAAT,CAAgBynB,KAAhB,EAAuB;AACrB,MAAIA,KAAK,IAAI,IAAT,IAAiBp1J,IAAI,CAACo1J,KAAD,CAAJ,IAAe,IAApC,EAA0C;AACxC,UAAM,IAAIzlK,KAAJ,CAAU,aAAV,CAAN;AACD;;AACD,SAAOqQ,IAAI,CAACo1J,KAAD,CAAX;AACD;;AAED,SAASL,MAAT,CAAgBK,KAAhB,EAAuB;AACrB,SAAOA,KAAK,IAAIp1J,IAAhB;AACD;;AAED,SAAS8f,OAAT,CAAiBp1B,KAAjB,EAAwB0qK,KAAxB,EAA+B;AAC7B,SAAO0H,6DAAA,CAAkBnvB,MAAM,CAACynB,KAAD,CAAxB,EAAiC1qK,KAAjC,CAAP;AACD;;AAED,SAASi1B,OAAT,CAAiB82I,SAAjB,EAA4BjlF,IAA5B,EAAkC;AAChC,SAAOsrF,6DAAA,CAAkBnvB,MAAM,CAACn8D,IAAI,CAAC4jF,KAAN,CAAxB,EAAsCqB,SAAtC,EAAiDjlF,IAAjD,CAAP;AACD;;AAED,SAAStiD,WAAT,CAAqB3E,CAArB,EAAwB;AACtB,SAAOuyI,iEAAA,CAAsBvyI,CAAtB,CAAP;AACD;;AAED,eAAeyyI,OAAf,CAAuB/8J,GAAvB,EAA4B;AAC1B,MAAIg9J,WAAJ;;AACA,MAAI,EAAEh9J,GAAG,YAAY08J,GAAjB,CAAJ,EAA2B;AACzBM,eAAW,GAAG,IAAIN,GAAJ,CAAQ;AAAEnqC,QAAE,EAAEvyH,GAAG,CAACuyH;AAAV,KAAR,CAAd;AACA,UAAMyqC,WAAW,CAACF,gBAAZ,CAA6B98J,GAAG,CAACyvB,MAAjC,CAAN;AACD,GAHD,MAGO;AACLutI,eAAW,GAAGh9J,GAAd;AACD;;AAEDD,MAAI,CAACi9J,WAAW,CAAC1vB,KAAZ,EAAD,CAAJ,GAA4B0vB,WAA5B;AACD;;AAED,SAASC,SAAT,CAAmBj9J,GAAnB,EAAwB;AACtB,SAAOD,IAAI,CAACC,GAAG,CAACstI,KAAJ,EAAD,CAAX;AACD;;AAED,SAAS4vB,aAAT,GAAyB;AACvBn9J,MAAI,GAAG,EAAP;AACD;;AAED,eAAeq8J,SAAf,CAAyB;AAAE7pC,IAAF;AAAMqqC,UAAN;AAAgB79I;AAAhB,CAAzB,EAAiD;AAC/C,MAAI/e,GAAG,GAAG,IAAI08J,GAAJ,CAAQ;AAAEnqC;AAAF,GAAR,CAAV;AACA,QAAMvyH,GAAG,CAAC28J,kBAAJ,CAAuB;AAAEC,YAAF;AAAY79I;AAAZ,GAAvB,CAAN;AACA,SAAO/e,GAAP;AACD;;AAEc;AACb0f,SADa;AAEbG,SAFa;AAGboP,aAHa;AAIbmtI,WAJa;AAKbW,SALa;AAMbrvB,QANa;AAObonB,QAPa;AAQbmI,WARa;AASbC;AATa,CAAf,E;;;;;;;;;;;;ACrFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACO,MAAMhI,SAAN,SAAwBxlK,KAAxB,CAA8B;AACnC3F,aAAW,CAAC6qK,MAAD,EAASrjF,IAAT,EAAe;AACxB,UAAM,gBAAgBqjF,MAAtB;AACA,SAAKvtJ,IAAL,GAAY,WAAZ;AACA,SAAKutJ,MAAL,GAAcA,MAAd;AACA,SAAKrjF,IAAL,GAAYA,IAAZ;AACD;;AANkC;AAS9B,MAAM6iF,SAAN,SAAwB1kK,KAAxB,CAA8B;AACnC3F,aAAW,CAACsnB,IAAD,EAAO8xH,IAAP,EAAa;AACtB,UAAO,wCAAuC9xH,IAAK,MAAK8xH,IAAK,EAA7D;AACA,SAAKg6B,UAAL,GAAkB9rJ,IAAlB;AACA,SAAK+rJ,YAAL,GAAoBj6B,IAApB;AACD;;AALkC;AAQ9B,MAAMk6B,SAAN,SAAwB3tK,KAAxB,CAA8B;AACnC3F,aAAW,CAAC6qK,MAAD,EAASrjF,IAAT,EAAe;AACxB,UAAM,gBAAgBqjF,MAAtB;AACA,SAAKA,MAAL,GAAcA,MAAd;AACA,SAAKrjF,IAAL,GAAYA,IAAZ;AACD;;AALkC;AAQ9B,MAAM+rF,gBAAN,SAA+B5tK,KAA/B,CAAqC;AAC1C;AACA3F,aAAW,CAACovC,OAAD,EAAU;AACnB,UAAMA,OAAN;AACD;;AAJyC;AAOrC,MAAM4xG,SAAN,SAAwBr7I,KAAxB,CAA8B;AACnC3F,aAAW,CAACsd,IAAD,EAAO8xB,OAAP,EAAgB;AACzB,UAAM,gBAAgBA,OAAtB;AACA,SAAK9xB,IAAL,GAAYA,IAAZ;AACD;;AAJkC;AAO9B,SAASk2I,QAAT,CAAkBnpI,GAAlB,EAAuBm9D,IAAvB,EAA6B;AAClC,SAAO;AAAElqE,QAAI,EAAE,UAAR;AAAoB8xB,WAAO,EAAE/kB,GAA7B;AAAkCm9D;AAAlC,GAAP;AACD;AAEM,SAASwkF,iBAAT,CAA2BnB,MAA3B,EAAmCrjF,IAAnC,EAAyC;AAC9C,SAAO;AAAElqE,QAAI,EAAE,mBAAR;AAA6ButJ,UAA7B;AAAqCrjF;AAArC,GAAP;AACD;AAEM,SAAS6kF,eAAT,CAAyBxB,MAAzB,EAAiCrjF,IAAjC,EAAuC;AAC5C,SAAO;AAAElqE,QAAI,EAAE,iBAAR;AAA2ButJ,UAA3B;AAAmCrjF;AAAnC,GAAP;AACD;AAEM,SAASgsF,WAAT,CAAqBluJ,GAArB,EAA0B;AAC/B,SAAOA,GAAG,YAAY87C,cAAf,IAAiC97C,GAAG,YAAY65C,WAAvD;AACD,C;;;;;;;;;;;;ACtDD;AAAA;AAAA;;AACA,MAAM2wF,UAAU,GAAGvtI,mBAAO,CAAC,uGAAD,CAA1B,C,CAEA;;;AACA,MAAMqzI,GAAG,GAAGM,sDAAS,EAArB;AAEAN,GAAG,CAACN,MAAJ,CAAW7hI,EAAX,CAAc,MAAd,EAAsBsU,IAAI,IAAI;AAC5B+nH,YAAU,CAACvnF,IAAX,CAAgB,YAAhB,EAA8BxgC,IAA9B;AACD,CAFD;AAIe6tH,kEAAf,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CAGA;;AACA;AACA;AACA;AACA;;AAEA,MAAM6d,KAAK,GAAGlxJ,mBAAO,CAAC,8EAAD,CAArB;;AACA,MAAMmxJ,KAAK,GAAGnxJ,mBAAO,CAAC,8EAAD,CAArB;;AACA,MAAM6iH,IAAI,GAAG7iH,mBAAO,CAAC,kFAAD,CAApB;;AACA,MAAMutI,UAAU,GAAGvtI,mBAAO,CAAC,uGAAD,CAA1B;;AACA,iBAAuCA,mBAAO,CAAC,+EAAD,CAA9C;AAAA,MAAQ+wI,WAAR,YAAQA,WAAR;AAAA,MAAqBqgB,aAArB,YAAqBA,aAArB;;AACA,MAAMC,MAAM,GAAGrxJ,mBAAO,CAAC,mFAAD,CAAtB,C,CAEA;;;AAEA,IAAI6hF,OAAJ;AACA,IAAIyvE,cAAc,GAAG,cAArB;AACA,IAAIC,cAAc,GAAG,cAArB;AACA,IAAIC,mBAAmB,GAAG,yBAA1B,C,CAEA;;AAEA,SAASC,aAAT,CAAuB;AAAEC;AAAF,CAAvB,EAAkC;AAChC,QAAMvL,KAAK,GAAGuL,KAAK,CAAC/vK,GAAN,CAAUiG,IAAI,IAAI;AAC9B,QAAI4qB,IAAI,GAAGuhH,2CAAA,GAAY49B,QAAZ,CAAqB/pK,IAArB,CAAX;;AACA,WAAO;AAAEA,UAAI,EAAE4qB,IAAI,CAAC5qB,IAAb;AAAmBzJ,WAAK,EAAEq0B,IAAI,CAACr0B;AAA/B,KAAP;AACD,GAHa,CAAd;AAIAovJ,YAAU,CAACvnF,IAAX,CAAgB,eAAhB,EAAiCmgG,KAAjC;AACD,C,CAED;;;AAEO,IAAIx0B,QAAQ,GAAG,EAAf;AAEPA,QAAQ,CAAC,MAAD,CAAR,GAAmBkyB,0DAAO,CAAC,kBAAiB;AAC1C,SAAO+N,mDAAI,EAAX;AACD,CAFyB,CAA1B;AAIAjgC,QAAQ,CAAC,MAAD,CAAR,GAAmBkyB,0DAAO,CAAC,YAAW;AACpC,SAAOgO,mDAAI,EAAX;AACD,CAFyB,CAA1B;AAIAlgC,QAAQ,CAAC,2BAAD,CAAR,GAAwCkyB,0DAAO,CAAC,gBAAe;AAC7D3wB,OAD6D;AAE7DvE,SAF6D;AAG7DqX,SAH6D;AAI7D+H;AAJ6D,CAAf,EAK7C;AACD,SAAO+jB,uDAAQ,CAAC,YAAY;AAC1B,QAAIn/J,MAAM,GAAG,MAAM8zI,uFAAuB,CAAC;AACzCvT,WADyC;AAEzC8S,aAFyC;AAGzCrX,aAHyC;AAIzCof;AAJyC,KAAD,CAA1C,CAD0B,CAQ1B;;AACA,WAAOp7I,MAAM,CAACqzI,OAAd;AACD,GAVc,CAAf;AAWD,CAjB8C,CAA/C;AAmBArU,QAAQ,CAAC,iBAAD,CAAR,GAA8BkyB,0DAAO,CAAC,gBAAer4B,WAAf,EAA4B;AAChE,QAAMmG,QAAQ,CAAC,2BAAD,CAAR,CAAsC;AAAEuB,SAAK,EAAE,CAAC1H,WAAD;AAAT,GAAtC,CAAN;AACA,SAAO,EAAP;AACD,CAHoC,CAArC;AAKAmG,QAAQ,CAAC,oBAAD,CAAR,GAAiCkyB,0DAAO,CAAC,gBAAer4B,WAAf,EAA4B;AACnE,QAAMmG,QAAQ,CAAC,2BAAD,CAAR,CAAsC;AAAEqU,WAAO,EAAE,CAACxa,WAAD;AAAX,GAAtC,CAAN;AACA,SAAO,EAAP;AACD,CAHuC,CAAxC;AAKAmG,QAAQ,CAAC,oBAAD,CAAR,GAAiCkyB,0DAAO,CAAC,gBAAer4B,WAAf,EAA4B;AACnE,QAAMmG,QAAQ,CAAC,2BAAD,CAAR,CAAsC;AAAEhD,WAAO,EAAE,CAACnD,WAAD;AAAX,GAAtC,CAAN;AACA,SAAO,EAAP;AACD,CAHuC,CAAxC;;AAKAmG,QAAQ,CAAC,qBAAD,CAAR,GAAkC,gBAAe;AAC/CogC,MAD+C;AAE/CprC,WAF+C;AAG/CqrC,YAH+C;AAI/C3rK,OAJ+C;AAK/C4rK,UAL+C;AAM/CvyK,SAAO,GAAG;AANqC,CAAf,EAO/B;AACD,SAAO0wI,mDAAA,CACL2hC,IADK,EAELprC,SAFK,EAGLqrC,UAHK,EAILC,QAAQ,GAAG,IAAH,GAAU5rK,KAAK,IAAI,IAAT,GAAgBzI,SAAhB,GAA4ByI,KAJzC,EAKL3G,OALK,CAAP;AAOD,CAfD;;AAiBAiyI,QAAQ,CAAC,yBAAD,CAAR,GAAsC,gBAAe;AAAEntH,UAAF;AAAY9kB;AAAZ,CAAf,EAAsC;AAC1E,SAAOk9I,uEAAS,CAACp4H,QAAD,EAAW9kB,OAAX,CAAhB;AACD,CAFD;;AAIAiyI,QAAQ,CAAC,qBAAD,CAAR,GAAkC,gBAAe;AAC/C/K,cAD+C;AAE/CiD,UAF+C;AAG/C2K,gBAH+C;AAI/C1J;AAJ+C,CAAf,EAK/B;AACD,SAAOgP,4EAAW,CAAClT,YAAD,EAAeiD,QAAf,EAAyB2K,cAAzB,EAAyC1J,MAAzC,CAAlB;AACD,CAPD;;AASA6G,QAAQ,CAAC,2BAAD,CAAR,GAAwC,gBAAe;AAAE3M,OAAK,EAAEo1B;AAAT,CAAf,EAAsC;AAC5E,SAAOzf,iFAAgB,CAAC,IAAIzW,oDAAJ,CAAUk2B,UAAV,CAAD,CAAvB;AACD,CAFD;;AAIAzoB,QAAQ,CAAC,gBAAD,CAAR,GAA6B,kBAAiB;AAC5C,SAAO;AACL7J,WAAO,EAAE,MAAMsI,wDAAA,EADV;AAEL9wH,QAAI,EAAE,MAAM8wH,iDAAA;AAFP,GAAP;AAID,CALD;;AAOAuB,QAAQ,CAAC,0BAAD,CAAR,GAAuC,kBAAiB;AACtD,wBAAe,MAAMiD,uEAAQ,CAC3BvgG,8DAAC,CAAC,cAAD,CAAD,CACG30C,OADH,CACW;AAAEq7I,UAAM,EAAE;AAAV,GADX,EAEG5V,OAFH,CAEW;AAAEvkI,QAAI,EAAE;AAAR,GAFX,EAGGmkI,MAHH,CAGU,GAHV,EAIGxzF,KAJH,CAIS,CAJT,CAD2B,CAA7B;AAAA,MAAMtrC,IAAN,mBAAMA,IAAN;;AAOA,SAAOA,IAAI,CAAC,CAAD,CAAJ,IAAW,IAAlB;AACD,CATD;;AAWA0rI,QAAQ,CAAC,mBAAD,CAAR,GAAgC,kBAAiB;AAC/C,SAAO/E,8DAAA,EAAP;AACD,CAFD;;AAIA+E,QAAQ,CAAC,uBAAD,CAAR,GAAoC,gBAAe;AAAExoI;AAAF,CAAf,EAA0B;AAC5D,MAAI+oI,MAAM,GAAG,MAAM9B,wDAAA,EAAnB;AACA,MAAIM,SAAS,GAAGmC,6DAAA,CAAyB1pI,KAAzB,CAAhB;;AAEA,WAAShL,KAAT,CAAeyJ,IAAf,EAAqB;AACnB,QAAI2gC,CAAC,GAAGwrG,oDAAA,CAAmBrD,SAAnB,EAA8B9oI,IAA9B,CAAR;AACA,WAAO;AAAEzJ,WAAK,EAAEoqC,CAAC,KAAK,EAAN,GAAW,CAAX,GAAeA,CAAxB;AAA2B3gC,UAAI,EAAEmpJ,WAAW,CAACrgB,SAAD,EAAY9oI,IAAZ;AAA5C,KAAP;AACD;;AAED,MAAI8K,MAAM,GAAG,CACXvU,KAAK,CAAC,iBAAD,CADM,EAEXA,KAAK,CAAC,sBAAD,CAFM,EAGXA,KAAK,CAAC,UAAD,CAHM,EAIXA,KAAK,CAAC,gBAAD,CAJM,EAKXA,KAAK,CAAC,WAAD,CALM,EAOXA,KAAK,CAAC,iBAAD,CAPM,EAQXA,KAAK,CAAC,cAAD,CARM,EASXA,KAAK,CAAC,aAAD,CATM,EAUXA,KAAK,CAAC,gBAAD,CAVM,CAAb;;AAaA,OAAK,IAAI6pI,KAAT,IAAkBkK,MAAlB,EAA0B;AACxB,QAAIlK,KAAK,CAAC0C,SAAV,EAAqB;AACnBh4H,YAAM,CAACjP,IAAP,CAAYtF,KAAK,CAAC,cAAD,CAAjB;;AAEA,WAAK,IAAIssI,GAAT,IAAgBzC,KAAK,CAACkD,UAAtB,EAAkC;AAChCx4H,cAAM,CAACjP,IAAP,CAAYtF,KAAK,CAAE,cAAassI,GAAG,CAACxE,EAAG,EAAtB,CAAjB;AACD;AACF,KAND,MAMO;AACLvzH,YAAM,GAAGA,MAAM,CAACkpB,MAAP,CAAc,CACrBz9B,KAAK,CAAE,gBAAe6pI,KAAK,CAAC/B,EAAG,EAA1B,CADgB,EAErB9nI,KAAK,CAAE,oBAAmB6pI,KAAK,CAAC/B,EAAG,EAA9B,CAFgB,EAGrB9nI,KAAK,CAAE,kBAAiB6pI,KAAK,CAAC/B,EAAG,EAA5B,CAHgB,CAAd,CAAT;;AAMA,WAAK,IAAIwE,GAAT,IAAgBzC,KAAK,CAACkD,UAAtB,EAAkC;AAChCx4H,cAAM,GAAGA,MAAM,CAACkpB,MAAP,CAAc,CACrBz9B,KAAK,CAAE,UAASssI,GAAG,CAACxE,EAAG,EAAlB,CADgB,EAErB9nI,KAAK,CAAE,cAAassI,GAAG,CAACxE,EAAG,EAAtB,CAFgB,EAGrB9nI,KAAK,CAAE,YAAWssI,GAAG,CAACxE,EAAG,EAApB,CAHgB,EAIrB9nI,KAAK,CAAE,aAAYssI,GAAG,CAACxE,EAAG,EAArB,CAJgB,CAAd,CAAT;AAMD;AACF;AACF;;AAED,SAAOvzH,MAAP;AACD,CAhDD;;AAkDAi/H,QAAQ,CAAC,qBAAD,CAAR,GAAkC,gBAAe;AAAExoI;AAAF,CAAf,EAA0B;AAC1D,MAAI+oI,MAAM,GAAG,MAAM9B,wDAAA,EAAnB;AACA,MAAIM,SAAS,GAAGmC,6DAAA,CAAyB1pI,KAAzB,CAAhB;;AAEA,WAAShL,KAAT,CAAeyJ,IAAf,EAAqB;AACnB,QAAI2gC,CAAC,GAAGwrG,oDAAA,CAAmBrD,SAAnB,EAA8B9oI,IAA9B,CAAR;AACA,WAAO;AAAEzJ,WAAK,EAAEoqC,CAAC,KAAK,EAAN,GAAW,CAAX,GAAeA,CAAxB;AAA2B3gC,UAAI,EAAEmpJ,WAAW,CAACrgB,SAAD,EAAY9oI,IAAZ;AAA5C,KAAP;AACD;;AAED,MAAI8K,MAAM,GAAG,CACXvU,KAAK,CAAC,gBAAD,CADM,EAEXA,KAAK,CAAC,qBAAD,CAFM,EAGXA,KAAK,CAAC,aAAD,CAHM,EAIXA,KAAK,CAAC,cAAD,CAJM,EAKXA,KAAK,CAAC,aAAD,CALM,EAMXA,KAAK,CAAC,YAAD,CANM,EAOXA,KAAK,CAAC,gBAAD,CAPM,CAAb;;AAUA,OAAK,IAAI6pI,KAAT,IAAkBkK,MAAlB,EAA0B;AACxBx/H,UAAM,GAAGA,MAAM,CAACkpB,MAAP,CAAc,CACrBz9B,KAAK,CAAE,gBAAe6pI,KAAK,CAAC/B,EAAG,EAA1B,CADgB,EAErB9nI,KAAK,CAAE,oBAAmB6pI,KAAK,CAAC/B,EAAG,EAA9B,CAFgB,EAGrB9nI,KAAK,CAAE,kBAAiB6pI,KAAK,CAAC/B,EAAG,EAA5B,CAHgB,CAAd,CAAT;;AAMA,SAAK,IAAIwE,GAAT,IAAgBzC,KAAK,CAACkD,UAAtB,EAAkC;AAChCx4H,YAAM,GAAGA,MAAM,CAACkpB,MAAP,CAAc,CACrBz9B,KAAK,CAAE,UAASssI,GAAG,CAACxE,EAAG,EAAlB,CADgB,EAErB9nI,KAAK,CAAE,cAAassI,GAAG,CAACxE,EAAG,EAAtB,CAFgB,EAGrB9nI,KAAK,CAAE,YAAWssI,GAAG,CAACxE,EAAG,EAApB,CAHgB,CAAd,CAAT;;AAMA,UAAI,CAAC+B,KAAK,CAAC0C,SAAX,EAAsB;AACpBh4H,cAAM,CAACjP,IAAP,CAAYtF,KAAK,CAAE,aAAYssI,GAAG,CAACxE,EAAG,EAArB,CAAjB;AACD;AACF;AACF;;AAED,SAAOvzH,MAAP;AACD,CAxCD;;AA0CAi/H,QAAQ,CAAC,iBAAD,CAAR,GAA8B,gBAAe;AAAE52H;AAAF,CAAf,EAAyB;AACrD,MAAIA,IAAI,KAAK,UAAT,IAAuBA,IAAI,KAAK,QAApC,EAA8C;AAC5C,UAAM,IAAI3X,KAAJ,CAAU,0BAA0B2X,IAApC,CAAN;AACD,GAHoD,CAKrD;;;AACA,MAAIA,IAAI,KAAKk6H,+CAAA,GAAiBssB,UAA9B,EAA0C;AACxC;AACD,GARoD,CAUrD;;;AACA,SAAOtsB,gDAAA,CAAgB;AAAEssB,cAAU,EAAExmJ;AAAd,GAAhB,CAAP;AACD,CAZD;;AAcA42H,QAAQ,CAAC,iBAAD,CAAR,GAA8BkyB,0DAAO,CAAC,gBAAe;AACnDj8J,MADmD;AAEnDsnI,SAFmD;AAGnDuF;AAHmD,CAAf,EAInC;AACD,SAAOq9B,uDAAQ,CAAC,YAAY;AAC1B,QAAI,CAAC5iC,OAAL,EAAc;AACZ,YAAM+hB,yDAAQ,CAAC,0CAAD,CAAd;AACD;;AAED,WAAO7gB,kDAAA,CAAkB;AACvBxoI,UADuB;AAEvB+oJ,eAAS,EAAEzhB,OAFY;AAGvBxE,eAAS,EAAE+J,QAAQ,GAAG,CAAH,GAAO;AAHH,KAAlB,CAAP;AAKD,GAVc,CAAf;AAWD,CAhBoC,CAArC;AAkBA9C,QAAQ,CAAC,iBAAD,CAAR,GAA8BkyB,0DAAO,CAAC,gBAAex7B,QAAf,EAAyB;AAC7D,SAAOypC,uDAAQ,CAAC,YAAY;AAC1B,QAAI;AACF,YAAM1hC,kDAAA,CAAkB/H,QAAlB,CAAN;AACD,KAFD,CAEE,OAAOngH,CAAP,EAAU;AACV,UAAIA,CAAC,CAAC2kB,OAAF,CAAU5N,WAAV,GAAwB5oB,QAAxB,CAAiC,mBAAjC,CAAJ,EAA2D;AACzD,eAAO;AAAEixB,eAAK,EAAE;AAAEvsB,gBAAI,EAAE;AAAR;AAAT,SAAP;AACD;;AACD,YAAMmN,CAAN;AACD;;AACD,WAAO,EAAP;AACD,GAVc,CAAf;AAWD,CAZoC,CAArC;AAcAypH,QAAQ,CAAC,eAAD,CAAR,GAA4BkyB,0DAAO,CAAC,gBAAe;AAAE59B,IAAF;AAAMiJ,SAAN;AAAeu9B;AAAf,CAAf,EAA0C;AAC5E,SAAOqF,uDAAQ,CAAC,YAAY;AAC1B,UAAM79B,4DAAa,CAAC,YAAY;AAC9B,YAAM7D,gDAAA,CAAgBnK,EAAhB,EAAoBiJ,OAApB,EAA6Bu9B,QAA7B,CAAN;AACD,KAFkB,CAAnB;AAGA,WAAO,IAAP;AACD,GALc,CAAf;AAMD,CAPkC,CAAnC;AASA96B,QAAQ,CAAC,iBAAD,CAAR,GAA8BkyB,0DAAO,CAAC,gBAAe;AAAE59B,IAAF;AAAM2F;AAAN,CAAf,EAAmC;AACvE,SAAOkmC,uDAAQ,CAAC,YAAY;AAC1B,QAAIn/J,MAAM,GAAG,EAAb;AACA,UAAMshI,4DAAa,CAAC,YAAY;AAC9B,UAAI2J,GAAG,GAAG,MAAMxN,yCAAA,CACd,+CADc,EAEd,CAACnK,EAAD,CAFc,CAAhB;;AAIA,UAAI,CAAC2X,GAAL,EAAU;AACRjrI,cAAM,GAAG;AAAE20B,eAAK,EAAE;AAAT,SAAT;AACA;AACD;;AAED,UAAIqnH,QAAQ,GACV/iB,UAAU,KACT,MAAMwE,yCAAA,CAAS,+CAAT,EAA0D,CAC/DxE,UAD+D,CAA1D,CADG,CADZ;;AAMA,UAAI,CAACgS,GAAD,IAAShS,UAAU,IAAI,CAAC+iB,QAA5B,EAAuC;AACrCh8I,cAAM,GAAG;AAAE20B,eAAK,EAAE;AAAT,SAAT;AACA;AACD,OAHD,MAGO,IAAIskG,UAAU,IAAIgS,GAAG,CAAClT,SAAJ,KAAkBikB,QAAQ,CAACjkB,SAA7C,EAAwD;AAC7D/3H,cAAM,GAAG;AAAE20B,eAAK,EAAE;AAAT,SAAT;AACA;AACD,OAtB6B,CAwB9B;AACA;;;AACA,UAAIs2G,GAAG,CAAClT,SAAJ,KAAkB,CAAtB,EAAyB;AACvB,YAAIkB,UAAJ,EAAgB;AACd,gBAAMgB,wDAAA,CAAkB,CAAC3G,EAAD,CAAlB,EAAwB2F,UAAxB,CAAN;AACD;AACF;;AAED,YAAMwE,kDAAA,CAAkB;AAAEnK;AAAF,OAAlB,EAA0B2F,UAA1B,CAAN;AACD,KAjCkB,CAAnB;AAmCA,WAAOj5H,MAAP;AACD,GAtCc,CAAf;AAuCD,CAxCoC,CAArC;AA0CAg/H,QAAQ,CAAC,uBAAD,CAAR,GAAoCkyB,0DAAO,CAAC,gBAAe;AAAEj8J,MAAF;AAAQ6sI;AAAR,CAAf,EAAmC;AAC7E,SAAOq9B,uDAAQ,CAAC,YAAY;AAC1B,WAAO1hC,uDAAA,CAAuB;AAC5BxoI,UAD4B;AAE5B8iI,eAAS,EAAE+J,QAAQ,GAAG,CAAH,GAAO;AAFE,KAAvB,CAAP;AAID,GALc,CAAf;AAMD,CAP0C,CAA3C;AASA9C,QAAQ,CAAC,uBAAD,CAAR,GAAoCkyB,0DAAO,CAAC,gBAAe77B,KAAf,EAAsB;AAChE,SAAO8pC,uDAAQ,CAAC,YAAY;AAC1B,WAAO1hC,uDAAA,CAAuBpI,KAAvB,CAAP;AACD,GAFc,CAAf;AAGD,CAJ0C,CAA3C;AAMA2J,QAAQ,CAAC,qBAAD,CAAR,GAAkCkyB,0DAAO,CAAC,gBAAe;AAAE59B,IAAF;AAAMwmC;AAAN,CAAf,EAAiC;AACzE,SAAOqF,uDAAQ,CAAC,YAAY;AAC1B,UAAM79B,4DAAa,CAAC,YAAY;AAC9B,YAAM7D,qDAAA,CAAqBnK,EAArB,EAAyBwmC,QAAzB,CAAN;AACD,KAFkB,CAAnB;AAGA,WAAO,IAAP;AACD,GALc,CAAf;AAMD,CAPwC,CAAzC;AASA96B,QAAQ,CAAC,uBAAD,CAAR,GAAoCkyB,0DAAO,CAAC,gBAAe;AAAE59B,IAAF;AAAM2F;AAAN,CAAf,EAAmC;AAC7E,SAAOkmC,uDAAQ,CAAC,YAAY;AAC1B,UAAMI,eAAe,GAAG,MAAM9hC,uCAAA,CAC5B,iEAD4B,EAE5B,CAACnK,EAAD,CAF4B,CAA9B;AAKA,WAAOgO,4DAAa,CAAC,YAAY;AAC/B,UAAIrI,UAAJ,EAAgB;AACd,cAAMgB,wDAAA,CAAkBslC,eAAe,CAACvwK,GAAhB,CAAoBuxB,CAAC,IAAIA,CAAC,CAAC+yG,EAA3B,CAAlB,EAAkD2F,UAAlD,CAAN;AACD;;AACD,YAAMwE,uDAAA,CAAuB;AAAEnK;AAAF,OAAvB,EAA+B2F,UAA/B,CAAN;AACD,KALmB,CAApB;AAMD,GAZc,CAAf;AAaD,CAd0C,CAA3C;;AAgBA+F,QAAQ,CAAC,wBAAD,CAAR,GAAqC,gBAAe;AAAE1L;AAAF,CAAf,EAAuB;AAC1D,QAAM5R,GAAG,GAAG,MAAM+b,4CAAA,CACf;AACL;AACA,mDAHoB,EAIhB,CAACnK,EAAD,CAJgB,EAKhB,IALgB,CAAlB,CAD0D,CAS1D;AACA;;AACA,MAAI5R,GAAG,CAAC,CAAD,CAAH,CAAOhuH,KAAP,KAAiB,CAArB,EAAwB;AACtB,WAAO,IAAP;AACD,GAbyD,CAe1D;AACA;;;AACA,SAAO,CAAC,GAAG0tI,2CAAA,GAAY9uD,IAAZ,GAAmB48E,aAAvB,EAAsCh8J,IAAtC,CAA2CsD,KAAK,IAAI;AACzD,UAAMunI,SAAS,GAAGmC,6DAAA,CAAyB1pI,KAAzB,CAAlB;AACA,UAAMhL,KAAK,GAAG41I,2CAAA,GAAYie,YAAZ,CAAyBthB,SAAzB,EAAoC,YAAYzK,EAAhD,CAAd;AAEA,WAAO9nI,KAAK,KAAK,CAAjB;AACD,GALM,CAAP;AAMD,CAvBD;;AAyBAwzI,QAAQ,CAAC,cAAD,CAAR,GAA2BkyB,0DAAO,CAAC,gBAAe;AAAEj8J;AAAF,CAAf,EAAyB;AAC1D,SAAOkqK,uDAAQ,CAAC,YAAY;AAC1B,WAAO1hC,+CAAA,CAAe;AAAExoI;AAAF,KAAf,CAAP;AACD,GAFc,CAAf;AAGD,CAJiC,CAAlC;;AAMA+pI,QAAQ,CAAC,YAAD,CAAR,GAAyB,kBAAiB;AACxC,SAAOvB,6CAAA,EAAP;AACD,CAFD;;AAIAuB,QAAQ,CAAC,wBAAD,CAAR,GAAqC,kBAAiB;AACpD,MAAIwgC,WAAW,GAAG,EAAlB;AACA,MAAI7pB,QAAQ,GAAGv0I,qEAAA,EAAf;AAEAA,yEAAA,CAAiBA,qEAAA,EAAjB,EAAmC,OAAnC,EAA4C,CAAC9D,IAAD,EAAOg2H,EAAP,KAAc;AACxD,QAAIksC,WAAW,CAAClsC,EAAD,CAAX,IAAmB,IAAvB,EAA6B;AAC3BksC,iBAAW,CAAClsC,EAAD,CAAX,GAAkB,CAAlB;AACD;;AACDksC,eAAW,CAAClsC,EAAD,CAAX;AACD,GALD;AAOA,SAAOksC,WAAP;AACD,CAZD;;AAcAxgC,QAAQ,CAAC,cAAD,CAAR,GAA2BkyB,0DAAO,CAAC,gBAAe;AAAE4I,UAAF;AAAY2F;AAAZ,CAAf,EAAuC;AACxE,SAAON,uDAAQ,CACb,YAAY;AACV,WAAO1hC,+CAAA,CAAeq8B,QAAf,EAAyB2F,QAAzB,CAAP;AACD,GAHY,EAIb;AAAE3F,YAAF;AAAY2F;AAAZ,GAJa,CAAf;AAMD,CAPiC,CAAlC;AASAzgC,QAAQ,CAAC,qBAAD,CAAR,GAAkCkyB,0DAAO,CAAC,gBAAe;AACvD3wB,OADuD;AAEvDvE,SAFuD;AAGvDqX;AAHuD,CAAf,EAIvC;AACD,SAAO8rB,uDAAQ,CAAC,YAAY;AAC1B,WAAO79B,4DAAa,CAAC,YAAY;AAC/B,UAAItF,OAAJ,EAAa;AACX,cAAMtpH,OAAO,CAAC0pD,GAAR,CAAY4/D,OAAO,CAAChtI,GAAR,CAAYkiB,CAAC,IAAIusH,+CAAA,CAAevsH,CAAf,CAAjB,CAAZ,CAAN;AACD;;AAED,UAAIqvH,KAAJ,EAAW;AACT,cAAM7tH,OAAO,CAAC0pD,GAAR,CAAYmkE,KAAK,CAACvxI,GAAN,CAAUkiB,CAAC,IAAIusH,+CAAA,CAAevsH,CAAf,CAAf,CAAZ,CAAN;AACD;;AAED,UAAImiI,OAAJ,EAAa;AACX,cAAM3gI,OAAO,CAAC0pD,GAAR,CAAYi3E,OAAO,CAACrkJ,GAAR,CAAYkiB,CAAC,IAAIusH,+CAAA,CAAevsH,CAAf,CAAjB,CAAZ,CAAN;AACD;AACF,KAZmB,CAApB;AAaD,GAdc,CAAf;AAeD,CApBwC,CAAzC;;AAsBA8tH,QAAQ,CAAC,uBAAD,CAAR,GAAoC,gBAAe;AAAE0b;AAAF,CAAf,EAAwB;AAC1D,MAAIglB,QAAQ,GAAG,IAAIp5J,GAAJ,CAAQ,MAAMm3H,qDAAA,EAAd,CAAf;AACA,SAAOid,GAAG,CAAChoJ,MAAJ,CAAW4gI,EAAE,IAAIosC,QAAQ,CAACz7J,GAAT,CAAaqvH,EAAb,CAAjB,CAAP;AACD,CAHD;;AAKA0L,QAAQ,CAAC,kBAAD,CAAR,GAA+B,gBAAe;AAAE1L;AAAF,CAAf,EAAuB;AACpD,SAAOlyH,6EAAA,CAAuBkyH,EAAvB,EAA2BtkI,GAA3B,CAA+BsO,IAAI,IAAIA,IAAI,CAAC4K,SAAL,EAAvC,CAAP;AACD,CAFD;;AAIA82H,QAAQ,CAAC,oBAAD,CAAR,GAAiCkyB,0DAAO,CAAC,gBAAe;AAAE59B,IAAF;AAAM+C;AAAN,CAAf,EAAiC;AACxE,SAAO8oC,uDAAQ,CACb,YAAY;AACV,WAAO,MAAM1hC,mDAAA,CAAmB;AAAEnK;AAAF,KAAnB,CAAb;AACD,GAHY,EAIb;AAAE6C,WAAO,EAAEE;AAAX,GAJa,CAAf;AAMD,CAPuC,CAAxC;AASA2I,QAAQ,CAAC,oBAAD,CAAR,GAAiCkyB,0DAAO,CAAC,gBAAe5zJ,IAAf,EAAqB;AAC5D,SAAO6hK,uDAAQ,CACb,YAAY;AACV,WAAO,MAAM1hC,mDAAA,CAAmBngI,IAAnB,CAAb;AACD,GAHY,EAIb;AAAE64H,WAAO,EAAE74H,IAAI,CAAC+4H;AAAhB,GAJa,CAAf;AAMD,CAPuC,CAAxC;AASA2I,QAAQ,CAAC,iBAAD,CAAR,GAA8BkyB,0DAAO,CAAC,gBAAe5zJ,IAAf,EAAqB;AACzD,SAAO6hK,uDAAQ,CACb,YAAY;AACV,QAAI7rC,EAAE,GAAG,MAAMmK,mDAAA,CAAmBngI,IAAnB,CAAf;AACA,2CAAYA,IAAZ;AAAkBg2H;AAAlB;AACD,GAJY,EAKb;AAAE6C,WAAO,EAAE74H,IAAI,CAAC+4H;AAAhB,GALa,CAAf;AAOD,CARoC,CAArC;;AAUA,SAASspC,YAAT,CAAsBriK,IAAtB,EAA4B;AAC1B;AACA;AACA,WAASsiK,aAAT,CAAuBxlK,KAAvB,EAA8B4iD,QAA9B,EAAwC;AACtC,QAAIh9C,MAAM,GAAG5F,KAAK,CAACpL,GAAN,CAAUmgB,IAAI,IAAI;AAC7B,UAAI;AACF6tC,gBAAQ,CAAC7tC,IAAD,CAAR;AACD,OAFD,CAEE,OAAOoG,CAAP,EAAU;AACV,YAAIA,CAAC,YAAYu2H,kDAAjB,EAA4B;AAC1BnlH,iBAAO,CAACC,IAAR,CAAa,cAAb,EAA6BrR,CAA7B;AACA,iBAAOA,CAAC,CAACnN,IAAT;AACD;;AACD,cAAMmN,CAAN;AACD;;AACD,aAAO,IAAP;AACD,KAXY,CAAb;AAaA,WAAOvV,MAAM,CAAC9M,IAAP,CAAYg9C,OAAZ,IAAuBlwC,MAAvB,GAAgC,IAAvC;AACD;;AAED,MAAI6/J,eAAe,GAAGD,aAAa,CACjCtiK,IAAI,CAAC0wI,UAD4B,EAEjCW,IAAI,IACF,IAAI/B,0DAAJ,CACE+B,IAAI,CAAChC,EADP,EAEEgC,IAAI,CAAC15G,KAFP,EAGE05G,IAAI,CAACnjJ,KAHP,EAIEmjJ,IAAI,CAAC5hJ,OAJP,EAKE+yK,0DALF,CAH+B,CAAnC;AAYA,MAAIC,YAAY,GAAGH,aAAa,CAC9BtiK,IAAI,CAAC2wI,OADyB,EAE9BzsD,MAAM,IACJ,IAAIssD,uDAAJ,CACEtsD,MAAM,CAACmrD,EADT,EAEEnrD,MAAM,CAACvsD,KAFT,EAGEusD,MAAM,CAACh2F,KAHT,EAIEg2F,MAAM,CAACz0F,OAJT,EAKE+yK,0DALF,CAH4B,CAAhC;;AAYA,MAAID,eAAe,IAAIE,YAAvB,EAAqC;AACnC,WAAO;AACLF,qBADK;AAELE;AAFK,KAAP;AAID;;AAED,SAAO,IAAP;AACD;;AAED/gC,QAAQ,CAAC,eAAD,CAAR,GAA4B,gBAAe1hI,IAAf,EAAqB;AAC/C,MAAIq3B,KAAK,GAAGgrI,YAAY,CAACriK,IAAD,CAAxB;AACA,SAAO;AAAEq3B;AAAF,GAAP;AACD,CAHD;;AAKAqqG,QAAQ,CAAC,UAAD,CAAR,GAAuBkyB,0DAAO,CAAC,gBAAe5zJ,IAAf,EAAqB;AAClD,MAAIq3B,KAAK,GAAGgrI,YAAY,CAACriK,IAAD,CAAxB;;AACA,MAAIq3B,KAAJ,EAAW;AACT,WAAO;AAAEA;AAAF,KAAP;AACD;;AAED,MAAI2+F,EAAE,GAAG,MAAMlyH,uEAAA,CAAiB9D,IAAjB,CAAf;AACA,SAAO;AAAEg2H;AAAF,GAAP;AACD,CAR6B,CAA9B;AAUA0L,QAAQ,CAAC,aAAD,CAAR,GAA0BkyB,0DAAO,CAAC,gBAAe5zJ,IAAf,EAAqB;AACrD,MAAIq3B,KAAK,GAAGgrI,YAAY,CAACriK,IAAD,CAAxB;;AACA,MAAIq3B,KAAJ,EAAW;AACT,WAAO;AAAEA;AAAF,KAAP;AACD;;AAED,QAAMvzB,uEAAA,CAAiB9D,IAAjB,CAAN;AACA,SAAO,EAAP;AACD,CARgC,CAAjC;AAUA0hI,QAAQ,CAAC,aAAD,CAAR,GAA0BkyB,0DAAO,CAAC,gBAAe5zJ,IAAf,EAAqB;AACrD,SAAO8D,uEAAA,CAAiB9D,IAAjB,CAAP;AACD,CAFgC,CAAjC;AAIA0hI,QAAQ,CAAC,iBAAD,CAAR,GAA8BkyB,0DAAO,CAAC,gBAAexW,GAAf,EAAoB;AACxD,MAAIslB,mBAAmB,GAAG,KAA1B;AAEA,QAAM1+B,4DAAa,CAAC,YAAY;AAC9B,SAAK,IAAIhO,EAAT,IAAeonB,GAAf,EAAoB;AAClB,UAAIh5B,GAAG,GAAG,MAAMtgH,uEAAA,CAAiB;AAAEkyH;AAAF,OAAjB,CAAhB;;AACA,UAAI5R,GAAG,KAAK,KAAZ,EAAmB;AACjBs+C,2BAAmB,GAAG,IAAtB;AACD;AACF;AACF,GAPkB,CAAnB;AASA,SAAO;AAAEA;AAAF,GAAP;AACD,CAboC,CAArC;AAeAhhC,QAAQ,CAAC,oBAAD,CAAR,GAAiCkyB,0DAAO,CAAC,gBAAe;AACtDxY,gBADsD;AAEtDzK;AAFsD,CAAf,EAGtC;AACD,SAAO7sI,yEAAA,CAAmBs3I,cAAnB,EAAmCzK,OAAnC,EAA4CjP,QAA5C,CAAP;AACD,CALuC,CAAxC;AAOAA,QAAQ,CAAC,uBAAD,CAAR,GAAoCkyB,0DAAO,CAAC,gBAAe;AAAE9X,WAAF;AAAarlH;AAAb,CAAf,EAAkC;AAC5E,SAAO3yB,kFAAA,CAA4Bg4I,SAA5B,EAAuCrlH,EAAvC,CAAP;AACD,CAF0C,CAA3C;;AAIAirG,QAAQ,CAAC,WAAD,CAAR,GAAwB,kBAAiB;AACvC,SAAOmR,kEAAS,CAAC/uI,qEAAA,EAAD,CAAT,CAA4BpS,GAA5B,CAAgCsO,IAAI,IAAIA,IAAI,CAAC4K,SAAL,EAAxC,CAAP;AACD,CAFD;;AAIA82H,QAAQ,CAAC,UAAD,CAAR,GAAuB,gBAAe;AAAE1L;AAAF,CAAf,EAAuB;AAC5C,MAAIh2H,IAAI,GAAG8D,qEAAA,GAAiBuG,IAAjB,CAAsBrK,IAAI,IAAIA,IAAI,CAACg2H,EAAL,KAAYA,EAA1C,CAAX;AACA,SAAOh2H,IAAI,GAAGA,IAAI,CAAC4K,SAAL,EAAH,GAAsB,IAAjC;AACD,CAHD;;AAKA82H,QAAQ,CAAC,WAAD,CAAR,GAAwB,gBAAe;AAAEnG;AAAF,CAAf,EAAgC;AACtD,SAAOz3H,qEAAA,CAAey3H,WAAf,CAAP;AACD,CAFD;;AAIAmG,QAAQ,CAAC,eAAD,CAAR,GAA4B,kBAAiB;AAC3C,QAAM59H,4EAAA,EAAN;AACD,CAFD;;AAIA49H,QAAQ,CAAC,8BAAD,CAAR,GAA2C,gBAAe;AAAEgP;AAAF,CAAf,EAA+B;AACxE,SAAO5sI,4EAAA,CAAsB4sI,UAAtB,CAAP;AACD,CAFD;;AAIAhP,QAAQ,CAAC,SAAD,CAAR,GAAsB,gBAAe;AAAEjB,WAAF;AAAa9oI;AAAb,CAAf,EAAoC;AACxD;AACA,MAAIq/H,MAAM,GAAG,CAAC,MAAD,EAAS,OAAT,CAAb;;AACA,MAAIz0G,IAAI,GAAGuhH,2CAAA,GAAY49B,QAAZ,CAAqB5gB,WAAW,CAACrgB,SAAD,EAAY9oI,IAAZ,CAAhC,CAAX;;AACA,MAAIq/H,MAAJ,EAAY;AACV,QAAI5S,GAAG,GAAG,EAAV;AACA4S,UAAM,CAACn2H,OAAP,CAAe82B,KAAK,IAAI;AACtB,UAAIA,KAAK,KAAK,KAAd,EAAqB;AACnBysF,WAAG,CAACzsF,KAAD,CAAH,GAAapV,IAAI,CAACv0B,IAAL,GAAYu0B,IAAI,CAACv0B,IAAL,CAAUud,QAAV,EAAZ,GAAmC,IAAhD;AACD,OAFD,MAEO;AACL64G,WAAG,CAACzsF,KAAD,CAAH,GAAapV,IAAI,CAACoV,KAAD,CAAjB;AACD;AACF,KAND;AAOA,WAAOysF,GAAP;AACD,GAVD,MAUO;AACL,WAAO7hG,IAAP;AACD;AACF,CAjBD;;AAmBAm/G,QAAQ,CAAC,UAAD,CAAR,GAAuB,gBAAe;AAAE+/B;AAAF,CAAf,EAA0B;AAC/C,SAAOA,KAAK,CAAC/vK,GAAN,CAAUiG,IAAI,KAAK;AAAEzJ,SAAK,EAAE41I,2CAAA,GAAY49B,QAAZ,CAAqB/pK,IAArB,EAA2BzJ;AAApC,GAAL,CAAd,CAAP;AACD,CAFD;;AAIAwzI,QAAQ,CAAC,qBAAD,CAAR,GAAkC,gBAAe;AAAEjB;AAAF,CAAf,EAA8B;AAC9D,MAAIghC,KAAK,GAAG,EAAZ;;AACA,OAAK,IAAI9pK,IAAT,IAAiBmsI,2CAAA,GAEdqyB,QAFc,GAGd3yJ,IAHc,EAAjB,EAGW;AACT,yBAA2C29J,aAAa,CAACxpK,IAAD,CAAxD;AAAA,QAAagrK,SAAb,kBAAM7+B,KAAN;AAAA,QAA8BrY,QAA9B,kBAAwB9zH,IAAxB;;AACA,QAAIgrK,SAAS,KAAKliC,SAAlB,EAA6B;AAC3BghC,WAAK,CAACjuK,IAAN,CAAWi4H,QAAX;AACD;AACF;;AACD,SAAOg2C,KAAP;AACD,CAZD;;AAcA//B,QAAQ,CAAC,WAAD,CAAR,GAAwB,gBAAe;AAAEjB,WAAF;AAAa9oI;AAAb,CAAf,EAAoC;AAC1D,MAAI4qB,IAAI,GAAGuhH,2CAAA,GAAY8+B,OAAZ,CAAoB9hB,WAAW,CAACrgB,SAAD,EAAY9oI,IAAZ,CAA/B,CAAX;AACA,yCACK4qB,IADL;AAEEv0B,QAAI,EAAEu0B,IAAI,CAACv0B,IAAL,IAAau0B,IAAI,CAACv0B,IAAL,CAAUud,QAAV;AAFrB;AAID,CAND;;AAQAm2H,QAAQ,CAAC,cAAD,CAAR,GAA2B,gBAAe;AAAEjB,WAAF;AAAa9oI,MAAb;AAAmBo9H;AAAnB,CAAf,EAA2C;AACpE;AACA;AACA+O,6CAAA,GAAY++B,WAAZ,CAAwBpiC,SAAxB,EAAmC9oI,IAAnC,EAAyCo9H,KAAzC;AACA,SAAO,IAAP;AACD,CALD;;AAOA2M,QAAQ,CAAC,OAAD,CAAR,GAAoB,gBAAe3M,KAAf,EAAsB;AACxC,MAAIA,KAAK,CAACW,KAAN,IAAe,IAAnB,EAAyB;AACvB,UAAM,IAAIviI,KAAJ,CAAU,0DAAV,CAAN;AACD;;AAED,SAAOwxI,uEAAQ,CAAC5P,KAAD,CAAf;AACD,CAND;;AAQA2M,QAAQ,CAAC,aAAD,CAAR,GAA0B,gBAAe;AAAE1L;AAAF,CAAf,EAAuB;AAC/C,QAAM8sC,KAAK,GAAG,MAAM3iC,4CAAA,CAClB,uCADkB,EAElB,CAACnK,EAAD,CAFkB,EAGlB,IAHkB,CAApB;AAMA,QAAMmK,2CAAA,CAAW,OAAX,EAAoBnK,EAApB,CAAN;AACA,QAAM5gH,OAAO,CAAC0pD,GAAR,CACJgkG,KAAK,CAACpxK,GAAN,CAAU,MAAM4pI,IAAN,IAAc;AACtB;AACA;AACA,UAAM6E,4CAAA,CAAY,yCAAZ,EAAuD,CAAC7E,IAAI,CAACtF,EAAN,CAAvD,CAAN;AACA,UAAMmK,2CAAA,CAAW,UAAX,EAAuB7E,IAAI,CAACtF,EAA5B,CAAN;AACD,GALD,CADI,CAAN;AAQA,SAAO,IAAP;AACD,CAjBD;;AAmBA0L,QAAQ,CAAC,gBAAD,CAAR,GAA6BkyB,0DAAO,CAAC,gBAAe;AAAE59B,IAAF;AAAMr+H;AAAN,CAAf,EAA6B;AAChE,SAAOkqK,uDAAQ,CAAC,YAAY;AAC1B,UAAM1hC,0CAAA,CAAU,UAAV,EAAsB;AAAEnK,QAAF;AAAMr+H;AAAN,KAAtB,CAAN;AACA,WAAO,EAAP;AACD,GAHc,CAAf;AAID,CALmC,CAApC;;AAOA+pI,QAAQ,CAAC,cAAD,CAAR,GAA2B,kBAAiB;AAC1C,SAAOvB,+CAAA,EAAP;AACD,CAFD;;AAIAuB,QAAQ,CAAC,oBAAD,CAAR,GAAiC,gBAAe;AAAE1L;AAAF,CAAf,EAAuB;AACtD,0BAAoB,MAAMmK,yCAAA,CACxB,mGADwB,EAExB,CAACnK,EAAD,CAFwB,CAA1B;AAAA,QAAQme,OAAR,mBAAQA,OAAR;;AAIA,2BAAkB,MAAMhU,yCAAA,CACtB,8EADsB,EAEtB,CAACnK,EAAD,CAFsB,CAAxB;AAAA,QAAQ5/H,KAAR,oBAAQA,KAAR;;AAKA,SAAO;AAAE+9I,WAAO,EAAEA,OAAO,IAAI,CAAtB;AAAyBxR,mBAAe,EAAEvsI;AAA1C,GAAP;AACD,CAXD;;AAaAsrI,QAAQ,CAAC,eAAD,CAAR,GAA4B,gBAAe;AACzCyJ,aADyC;AAEzCC,aAFyC;AAGzC1U,WAHyC;AAIzCqsC;AAJyC,CAAf,EAKzB;AACD,MAAIh3B,MAAM,GAAG,MAAMh3D,kEAAA,CAAwBo2D,WAAxB,EAAqCC,WAArC,CAAnB;;AAEA,8BAAgC,MAAMC,oEAAY,CAACjF,QAAb,CAAsB,CAC1D,SAD0D,EAE1D,UAF0D,CAAtB,CAAtC;AAAA;AAAA;AAAA,MAAQkF,MAAR;AAAA;AAAA,MAAoBY,OAApB,6BAHC,CAQD;;;AACA,MAAItS,QAAQ,GAAG,MAAMuS,2DAAA,CAAqBb,MAArB,EAA6BY,OAA7B,EAAsCH,MAAtC,CAArB;AACA,MAAI3U,OAAO,GAAGwC,QAAQ,CAACvvH,IAAT,CAAcixH,IAAI,IAAIA,IAAI,CAACmE,UAAL,KAAoB/I,SAA1C,CAAd;AAEA,QAAMyJ,0CAAA,CAAU,UAAV,EAAsB;AAC1BnK,MAAE,EAAE+sC,WADsB;AAE1BtjC,cAAU,EAAErI,OAAO,CAACqI,UAFM;AAG1B2M,iBAAa,EAAEhV,OAAO,CAACgV,aAHG;AAI1BthI,QAAI,EAAEuhI,8EAAoB,CAACjV,OAAO,CAACtsH,IAAT,CAJA;AAK1BwhI,mBAAe,EAAElT,qEAAe,CAAChC,OAAO,CAACmV,QAAR,CAAiBC,OAAlB,CALN;AAM1Bw2B,qBAAiB,EAAE5pC,qEAAe,CAAChC,OAAO,CAACmV,QAAR,CAAiBpI,SAAlB,CANR;AAO1B8+B,iBAAa,EAAE7pC,qEAAe,CAAChC,OAAO,CAACmV,QAAR,CAAiBjrG,KAAlB,CAPJ;AAQ1BmrG,QAAI,EAAErV,OAAO,CAACqV,IARY;AAS1BC,QAAI,EAAEX;AAToB,GAAtB,CAAN;AAYA,QAAMI,2DAAA,CACJb,MADI,EAEJY,OAFI,EAGJ62B,WAHI,EAIJ3rC,OAAO,CAACqI,UAJJ,EAKJsM,MALI,CAAN;AAQAuR,YAAU,CAACvnF,IAAX,CAAgB,YAAhB,EAA8B;AAC5BjrD,QAAI,EAAE,SADsB;AAE5BwvI,UAAM,EAAE,CAAC,cAAD;AAFoB,GAA9B;AAKA,SAAO,IAAP;AACD,CA3CD;;AA6CA5Y,QAAQ,CAAC,kBAAD,CAAR,GAA+B,gBAAe;AAC5CyJ,aAD4C;AAE5CC,aAF4C;AAG5CY,YAH4C;AAI5CC;AAJ4C,CAAf,EAK5B;AACD,MAAIF,MAAM,GAAG,MAAMh3D,kEAAA,CAAwBo2D,WAAxB,EAAqCC,WAArC,CAAnB;AACA,MAAIgS,GAAG,GAAG,MAAMroE,2DAAA,CAAiBg3D,MAAjB,EAAyBC,UAAzB,EAAqCC,YAArC,CAAhB;AACA,SAAOmR,GAAP;AACD,CATD;;AAWA1b,QAAQ,CAAC,gBAAD,CAAR,GAA6BkyB,0DAAO,CAAC,gBAAe;AAClDj8J,MADkD;AAElDmT,MAFkD;AAGlDqpI,SAHkD;AAIlD7P,WAJkD;AAKlDpK;AALkD,CAAf,EAMlC;AACD,SAAO2nC,uDAAQ,CAAC,YAAY;AAC1B,UAAM7rC,EAAE,GAAG,MAAMmK,iDAAA,CAAiB;AAChCxoI,UADgC;AAEhCmT,UAFgC;AAGhCkvH,eAAS,EAAEsK,SAAS,GAAG,CAAH,GAAO,CAHK;AAIhCpK,YAAM,EAAEA,MAAM,GAAG,CAAH,GAAO;AAJW,KAAjB,CAAjB;AAOA,UAAMiG,+CAAA,CAAe;AACnBxoI,UAAI,EAAE,EADa;AAEnBojI,mBAAa,EAAE/E;AAFI,KAAf,CAAN;;AAKA,QAAIme,OAAO,IAAI,IAAf,EAAqB;AACnB,UAAI1b,KAAK,GAAG,MAAMmV,iFAAuB,EAAzC;AAEA,YAAMzN,qDAAA,CAAqB;AACzB/I,eAAO,EAAEpB,EADgB;AAEzBp8H,cAAM,EAAEw/H,qEAAe,CAAC+a,OAAD,CAFE;AAGzB/b,gBAAQ,EAAEkM,SAAS,GAAG,IAAH,GAAU7L,KAAK,CAACL,QAHV;AAIzBK,aAAK,EAAEA,KAAK,CAACzC,EAJY;AAKzBrlI,YAAI,EAAEiyI,0DAAA,EALmB;AAMzBlD,eAAO,EAAE,IANgB;AAOzBqD,6BAAqB,EAAE;AAPE,OAArB,CAAN;AASD;;AAED,WAAO/M,EAAP;AACD,GA5Bc,CAAf;AA6BD,CApCmC,CAApC;AAsCA0L,QAAQ,CAAC,eAAD,CAAR,GAA4BkyB,0DAAO,CAAC,gBAAe;AACjD59B,IADiD;AAEjDwB,mBAFiD;AAGjDlB,YAHiD;AAIjDohB;AAJiD,CAAf,EAKjC;AACD;AACA;AACA;AACA,QAAMhW,QAAQ,CAAC,gBAAD,CAAR,CAA2B;AAAE1L;AAAF,GAA3B,CAAN;AAEA,SAAO6rC,uDAAQ,CAAC,YAAY;AAC1B,QAAIzqC,OAAO,GAAG,MAAM+I,yCAAA,CAClB,uDADkB,EAElB,CAACnK,EAAD,CAFkB,CAApB,CAD0B,CAM1B;AACA;;AACA,QAAI,CAACoB,OAAD,IAAYA,OAAO,CAAC8C,MAAR,KAAmB,CAAnC,EAAsC;AACpC;AACD;;AAED,kCAAqC,MAAMwH,QAAQ,CAAC,oBAAD,CAAR,CAA+B;AACxE1L;AADwE,KAA/B,CAA3C;AAAA,UAAQme,OAAR,yBAAQA,OAAR;AAAA,UAAiBxR,eAAjB,yBAAiBA,eAAjB,CAZ0B,CAgB1B;;;AACA,QAAIA,eAAe,KAAK,CAAxB,EAA2B;AACzB,YAAMxC,iDAAA,CAAiB;AAAEnK;AAAF,OAAjB,CAAN;AACD,KAFD,MAEO,IAAI0hB,MAAJ,EAAY;AACjB,UAAIgG,IAAI,GAAG,MAAMvd,4CAAA,CACf,8DADe,EAEf,CAACnK,EAAD,CAFe,EAGf,IAHe,CAAjB;;AAMA,6BAAsB,MAAMmK,yCAAA,CAC1B,+CAD0B,EAE1B,CAACnK,EAAD,CAF0B,CAA5B;AAAA,UAAU6C,OAAV,oBAAM7C,EAAN;;AAKA,YAAMgO,4DAAa,CAAC,MAAM;AACxB;AACA;AACA;AACA;AACA;AAEA0Z,YAAI,CAAC78I,OAAL,CAAa8sI,GAAG,IAAI;AAClB,cAAIA,GAAG,CAAC3R,WAAR,EAAqB;AACnBmE,iEAAA,CAAqB;AACnBnK,gBAAE,EAAE2X,GAAG,CAAC3R,WADW;AAEnBvD,mBAAK,EAAE,IAFY;AAGnBuD,yBAAW,EAAE;AAHM,aAArB;AAKD;;AAEDmE,+DAAA,CAAqB;AAAEnK,cAAE,EAAE2X,GAAG,CAAC3X;AAAV,WAArB;AACD,SAVD;AAYAmK,yDAAA,CAAiB;AAAEnK;AAAF,SAAjB;AACAmK,+DAAA,CAAuB;AAAEnK,YAAE,EAAE6C;AAAN,SAAvB;AACD,OArBkB,CAAnB;AAsBD,KAlCM,MAkCA;AACL,UAAIsb,OAAO,KAAK,CAAZ,IAAiB3c,iBAAiB,IAAI,IAA1C,EAAgD;AAC9C,cAAMwpB,yDAAQ,CAAC,oDAAD,CAAd;AACD;;AAED,YAAM7gB,0CAAA,CAAU,UAAV,EAAsB;AAAEnK,UAAF;AAAMkE,cAAM,EAAE;AAAd,OAAtB,CAAN,CALK,CAOL;AACA;;AACA,UAAIia,OAAO,KAAK,CAAhB,EAAmB;AACjB,+BAAsB,MAAMhU,yCAAA,CAC1B,+CAD0B,EAE1B,CAAC3I,iBAAD,CAF0B,CAA5B;AAAA,YAAUqB,OAAV,oBAAM7C,EAAN;;AAKA,cAAM0L,QAAQ,CAAC,iBAAD,CAAR,CAA4B;AAChC1L,YAAE,EAAEpD,IAAI,CAACgX,MAAL,EAD4B;AAEhCnR,eAAK,EAAEI,OAFyB;AAGhCj/H,gBAAM,EAAE,CAACu6I,OAHuB;AAIhC/c,iBAAO,EAAEpB,EAJuB;AAKhCrlI,cAAI,EAAEiyI,0DAAA,EAL0B;AAMhC9G,eAAK,EAAE,iBANyB;AAOhC1D,kBAAQ,EAAE9B,UAAU,IAAI;AAPQ,SAA5B,CAAN;AASD;AACF;AACF,GA/Ec,CAAf;AAgFD,CA3FkC,CAAnC;AA6FAoL,QAAQ,CAAC,gBAAD,CAAR,GAA6BkyB,0DAAO,CAAC,gBAAe;AAAE59B;AAAF,CAAf,EAAuB;AAC1D,SAAO6rC,uDAAQ,CAAC,YAAY;AAC1B,UAAM1hC,0CAAA,CAAU,UAAV,EAAsB;AAAEnK,QAAF;AAAMkE,YAAM,EAAE;AAAd,KAAtB,CAAN;AACD,GAFc,CAAf;AAGD,CAJmC,CAApC;AAMAwH,QAAQ,CAAC,cAAD,CAAR,GAA2BkyB,0DAAO,CAAC,gBAAe;AAAE59B,IAAF;AAAMwmC;AAAN,CAAf,EAAiC;AAClE,SAAOqF,uDAAQ,CAAC,YAAY;AAC1B,UAAM1hC,+CAAA,CAAenK,EAAf,EAAmBwmC,QAAnB,CAAN;AACD,GAFc,CAAf;AAGD,CAJiC,CAAlC;AAMA,IAAI0G,WAAW,GAAG,KAAlB;;AAEAxhC,QAAQ,CAAC,gBAAD,CAAR,GAA6B,gBAAe;AAAEx+F;AAAF,CAAf,EAA0B;AACrD,+BAA4B,MAAMmoG,oEAAY,CAACjF,QAAb,CAAsB,CACtD,SADsD,EAEtD,UAFsD,CAAtB,CAAlC;AAAA;AAAA;AAAA,MAAQkF,MAAR;AAAA;AAAA,MAAoB7nI,GAApB;;AAKA,MAAIq0C,SAAS,GAAGh/C,IAAI,CAACoE,GAAL,EAAhB;AACAgmK,aAAW,GAAG,KAAd;;AAEA,iBAAe3wJ,OAAf,CAAuB4wJ,EAAvB,EAA2B;AACzB,QAAID,WAAJ,EAAiB;AACf;AACD;;AAED,QAAIpqK,IAAI,CAACoE,GAAL,KAAa46C,SAAb,IAA0B,OAAO,EAAP,GAAY,EAA1C,EAA8C;AAC5CqrH,QAAE,CAAC,SAAD,CAAF;AACA;AACD;;AAED,QAAIntK,IAAI,GAAG,MAAMw1I,mDAAI,CACnBC,iEAAS,GAAGC,YAAZ,GAA2B,yBADR,EAEnB;AACEJ,YADF;AAEE7nI,SAFF;AAGEy/B;AAHF,KAFmB,CAArB;;AASA,QAAIltC,IAAJ,EAAU;AACR,UAAIA,IAAI,CAACqhC,KAAT,EAAgB;AACd8rI,UAAE,CAAC,SAAD,CAAF;AACD,OAFD,MAEO;AACLA,UAAE,CAAC,IAAD,EAAOntK,IAAP,CAAF;AACD;AACF,KAND,MAMO;AACLqlE,gBAAU,CAAC,MAAM9oD,OAAO,CAAC4wJ,EAAD,CAAd,EAAoB,IAApB,CAAV;AACD;AACF;;AAED,SAAO,IAAI/tJ,OAAJ,CAAYC,OAAO,IAAI;AAC5B9C,WAAO,CAAC,CAAC8kB,KAAD,EAAQrhC,IAAR,KAAiB;AACvB,UAAIqhC,KAAJ,EAAW;AACThiB,eAAO,CAAC;AAAEgiB;AAAF,SAAD,CAAP;AACD,OAFD,MAEO;AACLhiB,eAAO,CAAC;AAAErf;AAAF,SAAD,CAAP;AACD;AACF,KANM,CAAP;AAOD,GARM,CAAP;AASD,CAhDD;;AAkDA0rI,QAAQ,CAAC,qBAAD,CAAR,GAAkC,kBAAiB;AACjDwhC,aAAW,GAAG,IAAd;AACA,SAAO,IAAP;AACD,CAHD;;AAKAxhC,QAAQ,CAAC,eAAD,CAAR,GAA4B,gBAAe;AAAE1L;AAAF,CAAf,EAAuB;AACjD,+BAAgC,MAAMqV,oEAAY,CAACjF,QAAb,CAAsB,CAC1D,SAD0D,EAE1D,UAF0D,CAAtB,CAAtC;AAAA;AAAA;AAAA,MAAQkF,MAAR;AAAA;AAAA,MAAoBY,OAApB;;AAIA,MAAItS,QAAQ,GAAG,MAAMuG,4CAAA,CAClB;AACL;AACA,gDAHuB,EAInB,EAJmB,EAKnB,IALmB,CAArB;;AAQA,MAAInK,EAAJ,EAAQ;AACN4D,YAAQ,GAAGA,QAAQ,CAACxkI,MAAT,CAAgBkmI,IAAI,IAAIA,IAAI,CAACtF,EAAL,KAAYA,EAApC,CAAX;AACD;;AAED,MAAI4W,MAAM,GAAG,EAAb;AACA,MAAI8J,eAAe,GAAG,EAAtB;AACA,MAAI0sB,mBAAmB,GAAG,EAA1B;AACA,MAAIC,eAAe,GAAG,EAAtB;;AAEA,wBAAkBr+B,+CAAA,EAAlB;AAAA,MAAM/F,OAAN,mBAAMA,OAAN;;AAEA,OAAK,IAAIzxH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGosH,QAAQ,CAACjlI,MAA7B,EAAqC6Y,CAAC,EAAtC,EAA0C;AACxC,UAAM8tH,IAAI,GAAG1B,QAAQ,CAACpsH,CAAD,CAArB;;AACA,QAAI8tH,IAAI,CAACyQ,MAAT,EAAiB;AACf,UAAI;AACF,cAAM3nB,GAAG,GAAG,MAAM+nB,2DAAA,CAChBb,MADgB,EAEhBY,OAFgB,EAGhB5Q,IAAI,CAACtF,EAHW,EAIhBsF,IAAI,CAACmE,UAJW,EAKhBnE,IAAI,CAACyQ,MALW,CAAlB;AAOA,YAAM9I,KAAN,GAAyB7e,GAAzB,CAAM6e,KAAN;AAAA,YAAa8S,OAAb,GAAyB3xB,GAAzB,CAAa2xB,OAAb;AAEAW,uBAAe,GAAGA,eAAe,CAAC/qH,MAAhB,CAAuBs3G,KAAvB,CAAlB;AACAmgC,2BAAmB,GAAGA,mBAAmB,CAACz3I,MAApB,CAA2BoqH,OAA3B,CAAtB;;AAEA,YAAI9S,KAAK,CAACtuI,MAAN,GAAe,CAAf,IAAoBohJ,OAAO,CAACphJ,MAAR,GAAiB,CAAzC,EAA4C;AAC1C0uK,yBAAe,GAAGA,eAAe,CAAC13I,MAAhB,CAAuB2vG,IAAI,CAACtF,EAA5B,CAAlB;AACD;AACF,OAhBD,CAgBE,OAAOljH,GAAP,EAAY;AACZ,YAAIA,GAAG,CAAChI,IAAJ,KAAa,eAAjB,EAAkC;AAChC8hI,gBAAM,CAACp5I,IAAP,CAAY;AACVsX,gBAAI,EAAE,WADI;AAEV4rH,qBAAS,EAAE4E,IAAI,CAACtF,EAFN;AAGVp5F,mBAAO,EAAE,6BAA6B0+F,IAAI,CAAC3jI,IAAlC,GAAyC,IAHxC;AAIVygI,oBAAQ,EAAEtlH,GAAG,CAACslH,QAJJ;AAKVtjH,gBAAI,EAAEhC,GAAG,CAACgC;AALA,WAAZ;AAOD,SARD,MAQO,IAAIhC,GAAG,YAAY6lJ,kDAAf,IAA4B7lJ,GAAG,CAACulJ,MAAJ,KAAe,UAA/C,EAA2D;AAChEzrB,gBAAM,CAACp5I,IAAP,CAAY;AACVkjI,qBAAS,EAAE4E,IAAI,CAACtF,EADN;AAEVp5F,mBAAO,EAAG,YACR0+F,IAAI,CAAC3jI,IACN;AAJS,WAAZ;AAMD,SAPM,MAOA;AACLi1I,gBAAM,CAACp5I,IAAP,CAAY;AACVkjI,qBAAS,EAAE4E,IAAI,CAACtF,EADN;AAEVp5F,mBAAO,EACL,8EAHQ;AAIVmgD,oBAAQ,EAAEjqE,GAAG,CAACyyC;AAJJ,WAAZ;AAOAzyC,aAAG,CAAC8pB,OAAJ,GAAc,6BAA6B9pB,GAAG,CAAC8pB,OAA/C;AAEAsoG,uFAAgB,CAACpyH,GAAD,CAAhB;AACD;AACF;AACF;AACF;;AAED,MAAIuwJ,eAAe,CAAC1uK,MAAhB,GAAyB,CAA7B,EAAgC;AAC9B2oJ,cAAU,CAACvnF,IAAX,CAAgB,YAAhB,EAA8B;AAC5BjrD,UAAI,EAAE,SADsB;AAE5BwvI,YAAM,EAAE,CAAC,cAAD;AAFoB,KAA9B;AAID;;AAED,SAAO;AAAE1N,UAAF;AAAU8J,mBAAV;AAA2B0sB,uBAA3B;AAAgDC;AAAhD,GAAP;AACD,CAnFD;;AAqFA3hC,QAAQ,CAAC,qBAAD,CAAR,GAAkCkyB,0DAAO,CAAC,UAAS;AACjDl9B,WADiD;AAEjDC;AAFiD,CAAT,EAGvC;AACD,SAAOkrC,uDAAQ,CAAC,YAAY;AAC1B,QAAI,OAAOnrC,SAAP,KAAqB,QAAzB,EAAmC;AACjC,YAAMsqB,yDAAQ,CAAC,8CAAD,CAAd;AACD;;AAED,QAAI;AACF,aAAO,MAAM7U,qEAAA,CAA+BzV,SAA/B,EAA0CC,YAA1C,CAAb;AACD,KAFD,CAEE,OAAO7jH,GAAP,EAAY;AACZ,UAAIA,GAAG,YAAYiuJ,yDAAnB,EAAqC;AACnC,eAAO;AAAEn0B,gBAAM,EAAE,CAAC;AAAEhwG,mBAAO,EAAE9pB,GAAG,CAAC8pB;AAAf,WAAD,CAAV;AAAsCqmG,eAAK,EAAE,EAA7C;AAAiD8S,iBAAO,EAAE;AAA1D,SAAP;AACD;;AAED,YAAMjjI,GAAN;AACD;AACF,GAdc,CAAf;AAeD,CAnBwC,CAAzC;AAqBA4uH,QAAQ,CAAC,gBAAD,CAAR,GAA6BkyB,0DAAO,CAAC,gBAAe;AAAE59B;AAAF,CAAf,EAAuB;AAC1D,yBAAuB,MAAMmK,yCAAA,CAC3B,wCAD2B,EAE3B,CAACnK,EAAD,CAF2B,CAA7B;AAAA,MAAY+V,MAAZ,oBAAMW,IAAN;;AAKA,MAAI,CAACX,MAAL,EAAa;AACX,WAAO,IAAP;AACD;;AAED,QAAM5L,iDAAA,CAAiB;AACrBnK,MADqB;AAErByJ,cAAU,EAAE,IAFS;AAGrBiN,QAAI,EAAE,IAHe;AAIrBJ,mBAAe,EAAE,IAJI;AAKrB02B,qBAAiB,EAAE,IALE;AAMrBC,iBAAa,EAAE;AANM,GAAjB,CAAN;;AASA,yBAAgB,MAAM9iC,yCAAA,CACpB,uDADoB,EAEpB,CAAC4L,MAAD,CAFoB,CAAtB;AAAA,MAAM31I,KAAN,oBAAMA,KAAN;;AAKA,MAAIA,KAAK,KAAK,CAAd,EAAiB;AACf;AACA;AAEA,kCAA4B,MAAMi1I,oEAAY,CAACjF,QAAb,CAAsB,CACtD,SADsD,EAEtD,UAFsD,CAAtB,CAAlC;AAAA;AAAA;AAAA,QAAQkF,MAAR;AAAA;AAAA,QAAoB7nI,GAApB;;AAKA,UAAM+nI,mDAAI,CAACC,iEAAS,GAAGC,YAAZ,GAA2B,sBAA5B,EAAoD;AAC5DJ,YAD4D;AAE5D7nI,SAF4D;AAG5DkoI,aAAO,EAAEI;AAHmD,KAApD,CAAV;AAKD;;AAED,SAAO,IAAP;AACD,CAzCmC,CAApC;;AA2CArK,QAAQ,CAAC,yBAAD,CAAR,GAAsC,gBAAe;AAAEqK;AAAF,CAAf,EAA2B;AAC/D,gCAAgC,MAAMV,oEAAY,CAACjF,QAAb,CAAsB,CAC1D,SAD0D,EAE1D,UAF0D,CAAtB,CAAtC;AAAA;AAAA;AAAA,MAAQkF,MAAR;AAAA;AAAA,MAAoBY,OAApB;;AAKA,MAAIl2I,IAAI,GAAG,MAAMw1I,mDAAI,CAACC,iEAAS,GAAGC,YAAZ,GAA2B,oBAA5B,EAAkD;AACrEJ,UAAM,EAAEA,MAD6D;AAErE7nI,OAAG,EAAEyoI,OAFgE;AAGrEP,WAAO,EAAE,KAAKI;AAHuD,GAAlD,CAArB;;AAMA,MAAI/1I,IAAI,CAAC8+I,UAAT,EAAqB;AACnB,WAAO;AAAEz9G,WAAK,EAAE,EAAT;AAAaviB,UAAI,EAAE9e,IAAI,CAAC8+I,UAAxB;AAAoChqI,UAAI,EAAE9U,IAAI,CAAC++I;AAA/C,KAAP;AACD;;AAED,SAAO;AAAEuuB,aAAS,EAAEttK,IAAI,CAACutK;AAAlB,GAAP;AACD,CAjBD;;AAmBA7hC,QAAQ,CAAC,mBAAD,CAAR,GAAgC,gBAAesD,KAAf,EAAsB;AACpD,MAAI,eAAeA,KAAnB,EAA0B;AACxB,UAAMqG,oEAAY,CAACnF,OAAb,CAAqB,YAArB,EAAmC,KAAKlB,KAAK,CAACw+B,SAA9C,CAAN;AACD;;AACD,MAAI,gBAAgBx+B,KAApB,EAA2B;AACzBy+B,4DAAA,CAAgBz+B,KAAK,CAAC0+B,UAAtB;AACA,UAAMr4B,oEAAY,CAACnF,OAAb,CAAqB,aAArB,EAAoC,KAAKlB,KAAK,CAAC0+B,UAA/C,CAAN;AACD;;AACD,MAAI,gBAAgB1+B,KAApB,EAA2B;AACzB,UAAMqG,oEAAY,CAACnF,OAAb,CAAqB,aAArB,EAAoC,KAAKlB,KAAK,CAAC2+B,UAA/C,CAAN;AACA55I,WAAO,CAACgsC,IAAR,CAAa;AAAEjrD,UAAI,EAAE,kBAAR;AAA4B0rH,UAAI,EAAEwO,KAAK,CAAC2+B;AAAxC,KAAb;AACD;;AACD,MAAI,iBAAiB3+B,KAArB,EAA4B;AAC1B,QAAI,MAAMr0H,0DAAE,CAACqa,MAAH,CAAUg6G,KAAK,CAAC6B,WAAhB,CAAV,EAAwC;AACtC,YAAMwE,oEAAY,CAACnF,OAAb,CAAqB,cAArB,EAAqClB,KAAK,CAAC6B,WAA3C,CAAN;AACD;AACF;;AACD,MAAI,qBAAqB7B,KAAzB,EAAgC;AAC9B,UAAMqG,oEAAY,CAACnF,OAAb,CAAqB,kBAArB,EAAyC,KAAKlB,KAAK,CAAC4+B,eAApD,CAAN;AACD;;AACD,SAAO,IAAP;AACD,CArBD;;AAuBAliC,QAAQ,CAAC,mBAAD,CAAR,GAAgC,kBAAiB;AAC/C,gCAQI,MAAM2J,oEAAY,CAACjF,QAAb,CAAsB,CAC9B,kBAD8B,EAE9B,eAF8B,EAG9B,YAH8B,EAI9B,aAJ8B,EAK9B,aAL8B,EAM9B,cAN8B,EAO9B,aAP8B,CAAtB,CARV;AAAA;AAAA;AAAA,MACKw9B,eADL;AAAA;AAAA,MAEKC,YAFL;AAAA;AAAA,MAGKL,SAHL;AAAA;AAAA,MAIKE,UAJL;AAAA;AAAA,MAKKC,UALL;AAAA;AAAA,MAMK98B,WANL;AAAA;AAAA,MAOKi9B,UAPL;;AAiBA,SAAO;AACLF,mBAAe,EAAEA,eAAe,KAAK,MAApB,GAA6B,IAA7B,GAAoC,KADhD;AAELC,gBAAY,EAAEA,YAAY,KAAK,MAAjB,GAA0B,IAA1B,GAAiC,KAF1C;AAGLL,aAAS,EAAEO,qEAAe,CAACP,SAAS,IAAI,EAAd,CAHrB;AAIL;AACAE,cAAU,EAAEA,UAAU,IAAI,IAAd,IAAsBA,UAAU,KAAK,MAArC,GAA8C,IAA9C,GAAqD,KAL5D;AAMLC,cAAU,EAAEA,UAAU,IAAI,IAAd,IAAsBA,UAAU,KAAK,MAArC,GAA8C,IAA9C,GAAqD,KAN5D;AAOL98B,eAAW,EAAEA,WAAW,IAAIm9B,qBAAqB,EAP5C;AAQLpL,SAAK,EAAEkL,UAAU,IAAIvnK,IAAI,CAAC0G,KAAL,CAAW6gK,UAAX,EAAuB9tC;AARvC,GAAP;AAUD,CA5BD;;AA8BA0L,QAAQ,CAAC,YAAD,CAAR,GAAyB,gBAAeuiC,UAAf,EAA2B;AAClD,yBAAsBj/B,+CAAA,EAAtB;AAAA,MAAMizB,WAAN,oBAAMA,WAAN,CADkD,CAGlD;;;AACA,MAAIgM,UAAU,CAACpuC,UAAX,IAAyBoiC,WAA7B,EAA0C;AACxC,QAAID,SAAS,GAAG,MAAM3sB,oEAAY,CAACpF,OAAb,CAAqB,YAArB,CAAtB;AAEA,UAAMuF,mDAAI,CAACC,iEAAS,GAAG0sB,WAAZ,GAA0B,uBAA3B,EAAoD;AAC5Dj1H,WAAK,EAAE80H,SADqD;AAE5DI,YAAM,EAAEH,WAFoD;AAG5DtgK,UAAI,EAAEssK,UAAU,CAACpuC;AAH2C,KAApD,CAAV;AAKD;;AAED,QAAMmP,gDAAA,CAAgBi/B,UAAhB,CAAN;AACA,SAAO,IAAP;AACD,CAhBD;;AAkBAviC,QAAQ,CAAC,YAAD,CAAR,GAAyB,kBAAiB;AACxC,SAAOsD,+CAAA,EAAP;AACD,CAFD;;AAIAtD,QAAQ,CAAC,YAAD,CAAR,GAAyB,kBAAiB;AACxC,SAAO,MAAMwiC,wDAAS,EAAtB;AACD,CAFD;;AAIAxiC,QAAQ,CAAC,aAAD,CAAR,GAA0B,kBAAiB;AACzC,QAAMyiC,yDAAU,EAAhB;AACD,CAFD,C,CAIA;AACA;AACA;AACA;;;AACAziC,QAAQ,CAAC,UAAD,CAAR,GAAuB,gBAAe;AAAE2+B;AAAF,CAAf,EAA6B;AAClD,MAAI,CAACr7B,+CAAA,EAAL,EAAuB;AACrB,UAAM,IAAI7xI,KAAJ,CAAU,8CAAV,CAAN;AACD;;AAED,MAAI8kK,WAAW,GAAGjzB,+CAAA,GAAiBizB,WAAnC;AAEA,MAAIz1I,IAAI,GAAG81I,oDAAU,CAAC5lI,WAAX,CAAuB,EAAvB,EAA2BnnB,QAA3B,CAAoC,QAApC,CAAX;AACA,MAAIyqH,EAAE,GAAGpD,IAAI,CAACgX,MAAL,EAAT;AACA,MAAInmI,GAAG,GAAG,MAAM60J,oDAAU,CAACuH,SAAX,CAAqB;AAAE7pC,MAAF;AAAMqqC,YAAN;AAAgB79I;AAAhB,GAArB,CAAhB,CATkD,CAWlD;;AACA,QAAM81I,oDAAU,CAACkI,OAAX,CAAmB/8J,GAAnB,CAAN,CAZkD,CAclD;;AACA,MAAIq1J,WAAW,GAAG,MAAMsL,8DAAe,CAAC3gK,GAAG,CAACstI,KAAJ,EAAD,CAAvC,CAfkD,CAiBlD;AACA;AACA;;AACA,SAAO,MAAMmzB,wDAAS,CAAC;AACrBzgK,OADqB;AAErB+e,QAFqB;AAGrBs2I,eAAW,EAAEv8J,IAAI,CAACC,SAAL,iCACRs8J,WADQ;AAEX5qK,WAAK,EAAE4qK,WAAW,CAAC5qK,KAAZ,CAAkBqd,QAAlB,CAA2B,QAA3B;AAFI;AAHQ,GAAD,CAAtB;AAQD,CA5BD,C,CA8BA;AACA;;;AACAm2H,QAAQ,CAAC,UAAD,CAAR,GAAuB,gBAAe;AAAE02B,QAAF;AAAUiI;AAAV,CAAf,EAAqC;AAC1D,MAAIrI,SAAS,GAAG,MAAM3sB,oEAAY,CAACpF,OAAb,CAAqB,YAArB,CAAtB;;AAEA,MAAImyB,MAAM,IAAI,IAAd,EAAoB;AAClBA,UAAM,GAAGpzB,+CAAA,GAAiBizB,WAA1B;AACD;;AAED,MAAI7zC,GAAJ;;AACA,MAAI;AACFA,OAAG,GAAG,MAAMonB,mDAAI,CAACC,iEAAS,GAAG0sB,WAAZ,GAA0B,eAA3B,EAA4C;AAC1Dj1H,WAAK,EAAE80H,SADmD;AAE1DI;AAF0D,KAA5C,CAAhB;AAID,GALD,CAKE,OAAOngJ,CAAP,EAAU;AACVoR,WAAO,CAACsrE,GAAR,CAAY18E,CAAZ;AACA,WAAO;AAAEof,WAAK,EAAE;AAAEghI,cAAM,EAAE;AAAV;AAAT,KAAP;AACD;;AAED,aAAyBj0C,GAAzB;AAAA,MAAM4R,EAAN,QAAMA,EAAN;AAAA,MAAUxzG,IAAV,QAAUA,IAAV;AAAA,MAAgBrO,IAAhB,QAAgBA,IAAhB;;AAEA,MAAIA,IAAI,IAAI,IAAZ,EAAkB;AAChB,WAAO;AAAEkjB,WAAK,EAAE;AAAEghI,cAAM,EAAE;AAAV;AAAT,KAAP;AACD;;AAEDlkJ,MAAI,GAAG5X,IAAI,CAAC0G,KAAL,CAAWkR,IAAX,CAAP;AAEA,MAAI1Q,GAAG,GAAG,MAAM60J,oDAAU,CAACuH,SAAX,CAAqB;AAAE7pC,MAAF;AAAMqqC,YAAN;AAAgB79I;AAAhB,GAArB,CAAhB;AACA81I,sDAAU,CAACkI,OAAX,CAAmB/8J,GAAnB;;AAEA,MAAI;AACF,UAAM60J,oDAAU,CAACn1I,OAAX,CAAmBpS,MAAM,CAACre,IAAP,CAAYyhB,IAAI,CAACjmB,KAAjB,EAAwB,QAAxB,CAAnB,EAAsDimB,IAAI,CAAC6gE,IAA3D,CAAN;AACD,GAFD,CAEE,OAAO/8D,CAAP,EAAU;AACVoR,WAAO,CAACsrE,GAAR,CAAY18E,CAAZ,EADU,CAGV;;AACAqgJ,wDAAU,CAACoI,SAAX,CAAqBj9J,GAArB;AACA,WAAO;AAAE4zB,WAAK,EAAE;AAAEghI,cAAM,EAAE;AAAV;AAAT,KAAP;AACD,GArCyD,CAuC1D;;;AACA,MAAI70J,IAAI,GAAGjH,IAAI,CAAC0G,KAAL,CAAW,CAAC,MAAMooI,oEAAY,CAACpF,OAAb,CAAsB,cAAtB,CAAP,KAAgD,IAA3D,CAAX;AACAziI,MAAI,CAAC40J,MAAD,CAAJ,GAAe30J,GAAG,CAACmH,SAAJ,EAAf;AACA,QAAMygI,oEAAY,CAACnF,OAAb,CAAqB,cAArB,EAAqC3pI,IAAI,CAACC,SAAL,CAAegH,IAAf,CAArC,CAAN,CA1C0D,CA4C1D;AACA;AACA;;AACA,MAAIwhI,+CAAA,EAAJ,EAAsB;AACpB,UAAMA,gDAAA,CAAgB;AAAEkzB,kBAAY,EAAEz0J,GAAG,CAACstI,KAAJ;AAAhB,KAAhB,CAAN;AACD;;AAED,SAAO,EAAP;AACD,CApDD;;AAsDArP,QAAQ,CAAC,wBAAD,CAAR,GAAqC,kBAAiB;AACpD,MAAI2iC,aAAa,GAAG,MAAMh5B,oEAAY,CAACpF,OAAb,CAAqB,eAArB,CAA1B;AACA,SAAOo+B,aAAa,KAAK,MAAzB;AACD,CAHD;;AAKA3iC,QAAQ,CAAC,uBAAD,CAAR,GAAoC,kBAAiB;AACnD,QAAM2J,oEAAY,CAACnF,OAAb,CAAqB,eAArB,EAAsC,MAAtC,CAAN;AACA,SAAO,IAAP;AACD,CAHD;;AAKAxE,QAAQ,CAAC,2BAAD,CAAR,GAAwC,gBAAe;AAAE9qD;AAAF,IAAU,EAAzB,EAA6B;AACnE,MAAI60D,iEAAS,CAAC70D,GAAD,CAAT,CAAe0tF,WAAf,KAA+B/C,mBAAnC,EAAwD;AACtD,WAAO;AAAEgD,kBAAY,EAAE;AAAhB,KAAP;AACD;;AAED,MAAIngD,GAAJ;;AACA,MAAI;AACFA,OAAG,GAAG,MAAMxzH,kDAAG,CAAC66I,iEAAS,CAAC70D,GAAD,CAAT,CAAe4tF,aAAf,GAA+B,kBAAhC,CAAf;AACD,GAFD,CAEE,OAAO1xJ,GAAP,EAAY;AACZ,WAAO;AAAEukB,WAAK,EAAE;AAAT,KAAP;AACD;;AAED,MAAI;AACF+sF,OAAG,GAAG7nH,IAAI,CAAC0G,KAAL,CAAWmhH,GAAX,CAAN;AACD,GAFD,CAEE,OAAOtxG,GAAP,EAAY;AACZ,WAAO;AAAEukB,WAAK,EAAE;AAAT,KAAP;AACD;;AAED,MAAI+sF,GAAG,CAACpuD,MAAJ,KAAe,OAAnB,EAA4B;AAC1B,WAAO;AAAE3+B,WAAK,EAAE+sF,GAAG,CAACi0C;AAAb,KAAP;AACD;;AAED,SAAO;AAAEkM,gBAAY,EAAEngD,GAAG,CAACpuH,IAAJ,CAASuuK;AAAzB,GAAP;AACD,CAvBD;;AAyBA7iC,QAAQ,CAAC,qBAAD,CAAR,GAAkC,gBAAe;AAAE2+B;AAAF,CAAf,EAA6B;AAC7D,MAAIj8C,GAAJ;;AACA,MAAI;AACFA,OAAG,GAAG,MAAMonB,mDAAI,CAACC,iEAAS,GAAG+4B,aAAZ,GAA4B,YAA7B,EAA2C;AAAEnE;AAAF,KAA3C,CAAhB;AACD,GAFD,CAEE,OAAOvtJ,GAAP,EAAY;AACZ,WAAO;AAAEukB,WAAK,EAAEvkB,GAAG,CAACulJ,MAAJ,IAAc;AAAvB,KAAP;AACD;;AAED,MAAIj0C,GAAG,CAAClhF,KAAR,EAAe;AACb,UAAMmoG,oEAAY,CAACnF,OAAb,CAAqB,YAArB,EAAmC9hB,GAAG,CAAClhF,KAAvC,CAAN;AACA,WAAO,EAAP;AACD;;AACD,SAAO;AAAE7L,SAAK,EAAE;AAAT,GAAP;AACD,CAbD;;AAeAqqG,QAAQ,CAAC,oBAAD,CAAR,GAAiC,gBAAe;AAAEx+F;AAAF,CAAf,EAA0B;AACzD,QAAMmoG,oEAAY,CAACnF,OAAb,CAAqB,YAArB,EAAmChjG,KAAnC,CAAN;AACD,CAFD;;AAIAw+F,QAAQ,CAAC,oBAAD,CAAR,GAAiC,kBAAiB;AAChD,MAAI+J,iEAAS,MAAMA,iEAAS,GAAG64B,WAAZ,KAA4B/C,mBAA/C,EAAoE;AAClE,WAAO;AAAEkD,aAAO,EAAE;AAAX,KAAP;AACD;;AAED,MAAIzM,SAAS,GAAG,MAAM3sB,oEAAY,CAACpF,OAAb,CAAqB,YAArB,CAAtB;;AAEA,MAAI+xB,SAAJ,EAAe;AACb,QAAI;AACF,UAAI5zC,GAAG,GAAG,MAAMxzH,kDAAG,CAAC66I,iEAAS,GAAG+4B,aAAZ,GAA4B,WAA7B,EAA0C;AAC3DppI,eAAO,EAAE;AACP,4BAAkB48H;AADX;AADkD,OAA1C,CAAnB;AAKA5zC,SAAG,GAAG7nH,IAAI,CAAC0G,KAAL,CAAWmhH,GAAX,CAAN;;AAEA,UAAIA,GAAG,CAACpuD,MAAJ,KAAe,OAAnB,EAA4B;AAC1B,YAAIouD,GAAG,CAACi0C,MAAJ,KAAe,cAAnB,EAAmC;AACjC,iBAAO,IAAP;AACD;;AACD,eAAO;AAAEoM,iBAAO,EAAE;AAAX,SAAP;AACD;;AAED,aAAO;AAAEA,eAAO,EAAE;AAAX,OAAP;AACD,KAhBD,CAgBE,OAAOxsJ,CAAP,EAAU;AACVoR,aAAO,CAACsrE,GAAR,CAAY18E,CAAZ;AACA,aAAO;AAAEwsJ,eAAO,EAAE;AAAX,OAAP;AACD;AACF;;AAED,SAAO,IAAP;AACD,CA/BD;;AAiCA/iC,QAAQ,CAAC,2BAAD,CAAR,GAAwC,gBAAe;AAAE2+B;AAAF,CAAf,EAA6B;AACnE,MAAIrI,SAAS,GAAG,MAAM3sB,oEAAY,CAACpF,OAAb,CAAqB,YAArB,CAAtB;AACA,MAAI7hB,GAAJ;;AACA,MAAI;AACFA,OAAG,GAAG,MAAMonB,mDAAI,CAACC,iEAAS,GAAG+4B,aAAZ,GAA4B,kBAA7B,EAAiD;AAC/DthI,WAAK,EAAE80H,SADwD;AAE/DqI;AAF+D,KAAjD,CAAhB;AAID,GALD,CAKE,OAAOvtJ,GAAP,EAAY;AACZ,WAAO;AAAEukB,WAAK,EAAEvkB,GAAG,CAACulJ,MAAJ,IAAc;AAAvB,KAAP;AACD;;AAED,SAAO,EAAP;AACD,CAbD;;AAeA32B,QAAQ,CAAC,mBAAD,CAAR,GAAgC,gBAAe;AAAE2+B;AAAF,CAAf,EAA6B;AAC3D,MAAIj8C,GAAG,GAAG,MAAMonB,mDAAI,CAACC,iEAAS,GAAG+4B,aAAZ,GAA4B,QAA7B,EAAuC;AACzDnE;AADyD,GAAvC,CAApB;;AAIA,MAAIj8C,GAAG,CAAClhF,KAAR,EAAe;AACb,UAAMmoG,oEAAY,CAACnF,OAAb,CAAqB,YAArB,EAAmC9hB,GAAG,CAAClhF,KAAvC,CAAN;AACA,WAAO,EAAP;AACD;;AAED,SAAO;AAAE7L,SAAK,EAAE;AAAT,GAAP;AACD,CAXD;;AAaAqqG,QAAQ,CAAC,oBAAD,CAAR,GAAiC,kBAAiB;AAChD42B,sDAAU,CAACqI,aAAX;AACA,QAAMt1B,oEAAY,CAAC9E,WAAb,CAAyB,CAC7B,YAD6B,EAE7B,cAF6B,EAG7B,YAH6B,EAI7B,UAJ6B,CAAzB,CAAN;AAMA,SAAO,IAAP;AACD,CATD;;AAWA7E,QAAQ,CAAC,gBAAD,CAAR,GAA6B,kBAAiB;AAC5C,SAAO+J,iEAAS,MAAMA,iEAAS,GAAG64B,WAAlC;AACD,CAFD;;AAIA5iC,QAAQ,CAAC,gBAAD,CAAR,GAA6B,gBAAe;AAAE9qD;AAAF,CAAf,EAAwB;AACnD,MAAIA,GAAG,IAAI,IAAX,EAAiB;AACf;AACA,4BAAgB,MAAM8tD,6DAAU,CAAChD,QAAQ,CAAC,2BAAD,CAAT,EAAwC;AACtE9qD;AADsE,KAAxC,CAAhC;AAAA,QAAMv/C,KAAN,qBAAMA,KAAN;;AAGA,QAAIA,KAAJ,EAAW;AACT,aAAO;AAAEA;AAAF,OAAP;AACD;AACF,GARD,MAQO;AACL;AACAu/C,OAAG,GAAG2qF,mBAAN;AACD;;AAEDl2B,sEAAY,CAACnF,OAAb,CAAqB,YAArB,EAAmCtvD,GAAnC;AACA8tF,mEAAS,CAAC9tF,GAAD,CAAT;AACA,SAAO,EAAP;AACD,CAjBD;;AAmBA8qD,QAAQ,CAAC,MAAD,CAAR,GAAmB,kBAAiB;AAClC,SAAOijC,uDAAQ,EAAf;AACD,CAFD;;AAIAjjC,QAAQ,CAAC,aAAD,CAAR,GAA0B,kBAAiB;AACzC,SAAO;AAAEv1H,WAAO,EAAEylF;AAAX,GAAP;AACD,CAFD;;AAIA8vC,QAAQ,CAAC,aAAD,CAAR,GAA0B,kBAAiB;AACzC,QAAM1D,KAAK,GAAG,MAAMrtH,0DAAE,CAAC82H,OAAH,CAAW92H,0DAAE,CAACy2H,cAAH,EAAX,CAApB;AACA,QAAM/K,OAAO,GAAG,CAAC,MAAMjnH,OAAO,CAAC0pD,GAAR,CACrBk/D,KAAK,CAACtsI,GAAN,CAAU,MAAMiG,IAAN,IAAc;AACtB,UAAMitK,SAAS,GAAGj0J,0DAAE,CAACjB,IAAH,CAAQiB,0DAAE,CAACy2H,cAAH,EAAR,EAA6BzvI,IAA7B,EAAmC,eAAnC,CAAlB;;AACA,QAAI,MAAMgZ,0DAAE,CAACqa,MAAH,CAAU45I,SAAV,CAAV,EAAgC;AAC9B,UAAI5/B,KAAJ;;AACA,UAAI;AACFA,aAAK,GAAGzoI,IAAI,CAAC0G,KAAL,CAAW,MAAM0N,0DAAE,CAAC0B,QAAH,CAAYuyJ,SAAZ,CAAjB,CAAR;AACD,OAFD,CAEE,OAAO3sJ,CAAP,EAAU;AACVoR,eAAO,CAACsrE,GAAR,CAAY,yBAAZ,EAAuC18E,CAAC,CAACstC,KAAzC;AACA;AACD,OAP6B,CAS9B;AACA;AACA;AACA;;;AACA,UAAI5tD,IAAI,KAAK0pK,cAAb,EAA6B;AAC3B,eAAO;AACLrrC,YAAE,EAAEr+H,IADC;AAELsgK,qBAAW,EAAEjzB,KAAK,CAACizB,WAFd;AAGLh5B,iBAAO,EAAE+F,KAAK,CAAC/F,OAHV;AAILtnI,cAAI,EAAEqtI,KAAK,CAACnP,UAAN,IAAoB;AAJrB,SAAP;AAMD;AACF;;AAED,WAAO,IAAP;AACD,GA1BD,CADqB,CAAP,EA4BbzgI,MA5Ba,CA4BNiH,CAAC,IAAIA,CA5BC,CAAhB;AA8BA,SAAOggI,OAAP;AACD,CAjCD;;AAmCAqF,QAAQ,CAAC,iBAAD,CAAR,GAA8B,kBAAiB;AAC7C,SAAOu/B,KAAK,CAAC4D,WAAN,EAAP;AACD,CAFD;;AAIAnjC,QAAQ,CAAC,kBAAD,CAAR,GAA+B,kBAAiB;AAC9C,SAAOmgB,+DAAA,EAAP;AACD,CAFD;;AAIAngB,QAAQ,CAAC,oBAAD,CAAR,GAAiCkyB,0DAAO,CAAC,kBAAiB;AACxD;AACA,QAAM9vB,uDAAA,CAAsB3D,gCAAtB,CAAN;AACA2D,6CAAA,GAAYghC,YAAZ;AACA,QAAMhhC,yDAAA,EAAN;AACD,CALuC,CAAxC;;AAOApC,QAAQ,CAAC,eAAD,CAAR,GAA4B,gBAAe;AAAE1L;AAAF,IAAS,EAAxB,EAA4B;AACtD,MAAIA,EAAJ,EAAQ;AACN,QAAIgP,+CAAA,EAAJ,EAAsB;AACpB,YAAM,IAAI7xI,KAAJ,CAAU,kDAAV,CAAN;AACD;;AAED,UAAM6xI,gDAAA,CAAgBhP,EAAhB,CAAN;AACD;;AAED,MAAI;AACF,UAAM6rB,sDAAA,EAAN;AACD,GAFD,CAEE,OAAO5pI,CAAP,EAAU;AACVoR,WAAO,CAACsrE,GAAR,CAAY18E,CAAZ;;AACA,QAAIA,CAAC,CAACnN,IAAF,KAAW,iBAAf,EAAkC;AAChC,aAAO;AAAEusB,aAAK,EAAEpf;AAAT,OAAP;AACD;;AACDitH,iFAAgB,CAACjtH,CAAD,CAAhB;AACA,WAAO;AAAEof,WAAK,EAAE;AAAEghI,cAAM,EAAE;AAAV;AAAT,KAAP;AACD,GATD,SASU;AACR,QAAIriC,EAAJ,EAAQ;AACNgP,wDAAA;AACD;AACF;;AAED,SAAO,EAAP;AACD,CAzBD;;AA2BAtD,QAAQ,CAAC,iBAAD,CAAR,GAA8B,gBAAe;AAAE02B,QAAF;AAAUnqJ;AAAV,CAAf,EAAoC;AAChE,MAAIvL,MAAJ;;AACA,MAAI;AACFA,UAAM,GAAG,MAAMm/I,wDAAA,CAAsBuW,MAAtB,EAA8BnqJ,OAA9B,CAAf;AACD,GAFD,CAEE,OAAOgK,CAAP,EAAU;AACV,QAAIA,CAAC,CAACnN,IAAF,KAAW,mBAAf,EAAoC;AAClC,UAAImN,CAAC,CAACogJ,MAAF,KAAa,aAAb,IAA8BpgJ,CAAC,CAAC+8D,IAAF,CAAOghD,EAAzC,EAA6C;AAC3C,cAAMgP,gDAAA,CAAgB/sH,CAAC,CAAC+8D,IAAF,CAAOghD,EAAvB,CAAN;AACA,YAAIr+H,IAAI,GAAGqtI,+CAAA,GAAiBnP,UAA5B;AACAmP,0DAAA;AAEA/sH,SAAC,CAAC+8D,IAAF,mCAAc/8D,CAAC,CAAC+8D,IAAhB;AAAsBr9E;AAAtB;AACD;;AAED,aAAO;AAAE0/B,aAAK,EAAEpf;AAAT,OAAP;AACD,KAVD,MAUO;AACLitH,mFAAgB,CAACjtH,CAAD,CAAhB;AACA,aAAO;AAAEof,aAAK,EAAE;AAAEghI,gBAAM,EAAE;AAAV;AAAT,OAAP;AACD;AACF;;AAED,MAAIriC,EAAE,GAAGtzH,MAAM,CAACszH,EAAhB,CArBgE,CAuBhE;;AACAtzH,QAAM,GAAG,MAAMozH,UAAU,CAACpzH,MAAM,CAACszH,EAAR,EAAYpkC,OAAZ,EAAqB;AAAEmzE,cAAU,EAAE;AAAd,GAArB,CAAzB;;AACA,MAAIriK,MAAM,CAAC20B,KAAX,EAAkB;AAChB,WAAO;AAAEA,WAAK,EAAE;AAAEghI,cAAM,EAAE31J,MAAM,CAAC20B;AAAjB;AAAT,KAAP;AACD;;AAEDgtG,+DAAc,CAAC,SAAD,CAAd;AACA,QAAM2gC,8DAAe,EAArB;AAEA,QAAMtjC,QAAQ,CAAC,cAAD,CAAR,EAAN;AAEA,SAAO;AAAE1L;AAAF,GAAP;AACD,CAnCD;;AAqCA0L,QAAQ,CAAC,aAAD,CAAR,GAA0B,gBAAe;AAAE1L;AAAF,CAAf,EAAuB;AAC/C,MAAIivC,YAAY,GAAGjgC,+CAAA,EAAnB;;AAEA,MAAIigC,YAAJ,EAAkB;AAChB,QAAIA,YAAY,CAACjvC,EAAb,KAAoBA,EAAxB,EAA4B;AAC1B;AACA,aAAO,EAAP;AACD,KAHD,MAGO;AACL;AACA,YAAM0L,QAAQ,CAAC,cAAD,CAAR,EAAN;AACD;AACF;;AAED,MAAItd,GAAG,GAAG,MAAM0R,UAAU,CAACE,EAAD,EAAKpkC,OAAL,EAAc;AAAEmzE,cAAU,EAAE;AAAd,GAAd,CAA1B;;AAEA,iBAAeG,UAAf,GAA4B;AAC1B,QAAIC,WAAW,GAAG,MAAMxtK,IAAN,IAAc;AAC9B,UAAI+hK,MAAM,GAAG/oJ,0DAAE,CAACjB,IAAH,CAAQiB,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAR,EAA6Br+H,IAA7B,CAAb;;AACA,UAAI;AACF,eAAO,MAAMgZ,0DAAE,CAAC2H,IAAH,CAAQohJ,MAAR,CAAb;AACD,OAFD,CAEE,OAAO5mJ,GAAP,EAAY;AACZ,eAAO,IAAP;AACD;AACF,KAPD;;AASA,QAAI;AACF,UAAIsyJ,MAAM,GAAG,MAAMD,WAAW,CAAC,WAAD,CAA9B;AACA,UAAIE,SAAS,GAAG,MAAMF,WAAW,CAAC,cAAD,CAAjC;AACA1B,6DAAA,CAAe,iBAAf,EAAkC;AAAEnrJ,YAAI,EAAE8sJ,MAAR;AAAgBC;AAAhB,OAAlC;AACD,KAJD,CAIE,OAAOvyJ,GAAP,EAAY;AACZuW,aAAO,CAACC,IAAR,CAAaxW,GAAb;AACD;AACF;;AACDoyJ,YAAU;AAEV,SAAO9gD,GAAP;AACD,CApCD;;AAsCAsd,QAAQ,CAAC,oBAAD,CAAR,GAAiC,kBAAiB;AAChD;AACA;AACA;AACA,QAAM2J,oEAAY,CAACnF,OAAb,CAAqB,UAArB,EAAiC,EAAjC,CAAN;AAEA,SAAOxE,QAAQ,CAAC,eAAD,CAAR,CAA0B;AAC/B7L,cAAU,EAAE,aADmB;AAE/ByvC,YAAQ,EAAE,IAFqB;AAG/BC,gBAAY,EAAElE;AAHiB,GAA1B,CAAP;AAKD,CAXD;;AAaA3/B,QAAQ,CAAC,cAAD,CAAR,GAA2B,kBAAiB;AAC1C2D,gFAAiB,CAAC;AAAEzoG,WAAO,EAAE;AAAX,GAAD,CAAjB,CAD0C,CAG1C;;AACA,QAAMknG,yDAAA,EAAN;AACAA,2DAAA;AAEA0hC,qEAAoB;AACpB,QAAMpiB,kDAAG,CAACI,YAAJ,EAAN;AAEA,QAAMrjB,iDAAA,EAAN;;AAEA,MAAI;AACF,UAAMkL,oEAAY,CAACnF,OAAb,CAAqB,YAArB,EAAmC,EAAnC,CAAN;AACD,GAFD,CAEE,OAAOjuH,CAAP,EAAU,CACV;AACA;AACA;AACD;;AAED+sH,oDAAA;AACA2rB,qEAAiB;AACjB,SAAO,IAAP;AACD,CAvBD;;AAyBAjvB,QAAQ,CAAC,eAAD,CAAR,GAA4B,gBAAe;AAAE1L,IAAF;AAAMiiC;AAAN,CAAf,EAAoC;AAC9D;AACA;AACA,MAAIA,WAAW,IAAI,CAACluI,OAAO,CAACk9G,GAAR,CAAYyxB,OAAhC,EAAyC;AACvC,UAAM7W,0DAAA,CAAwBoW,WAAxB,EAAqCnW,KAArC,CAA2ChvI,GAAG,IAAI,CAAE,CAApD,CAAN;AACD,GAL6D,CAO9D;;;AACA,MAAIkjH,EAAJ,EAAQ;AACN,QAAIq5B,SAAS,GAAG1+I,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAhB;AACA,UAAMrlH,0DAAE,CAAC+3H,oBAAH,CAAwB2mB,SAAxB,CAAN;AACD;;AAED,SAAO,IAAP;AACD,CAdD;;AAgBA3tB,QAAQ,CAAC,eAAD,CAAR,GAA4B,gBAAe;AACzC7L,YADyC;AAEzC8rB,aAFyC;AAGzC2jB,UAHyC;AAIzCC;AAJyC,IAKvC,EALwB,EAKpB;AACN,MAAIvvC,EAAJ;;AACA,MAAIsvC,QAAJ,EAAc;AACZzvC,cAAU,GAAGA,UAAU,IAAI,aAA3B;AACAG,MAAE,GAAGuvC,YAAY,IAAIjE,cAArB;;AAEA,QAAI,MAAM3wJ,0DAAE,CAACqa,MAAH,CAAUra,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAV,CAAV,EAA0C;AACxC,YAAMrlH,0DAAE,CAAC+3H,oBAAH,CAAwB/3H,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAxB,CAAN;AACD;AACF,GAPD,MAOO;AACL;AACA,QAAI,CAACH,UAAL,EAAiB;AACf;AACA;AACA,UAAIpqG,KAAK,GAAG,MAAMi2G,QAAQ,CAAC,aAAD,CAAR,EAAlB;AACA7L,gBAAU,GAAG,MAAM4vC,yEAAc,CAACh6I,KAAD,CAAjC;AACD;;AAEDuqG,MAAE,GAAG,MAAM0vC,yEAAc,CAAC7vC,UAAD,CAAzB;AACD;;AAED,MAAIw5B,SAAS,GAAG1+I,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAhB;AACA,QAAMrlH,0DAAE,CAACm3H,KAAH,CAASunB,SAAT,CAAN,CAtBM,CAwBN;;AACA,QAAM1+I,0DAAE,CAACo3H,QAAH,CAAYp3H,0DAAE,CAAC22H,mBAAf,EAAoC32H,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,WAAnB,CAApC,CAAN,CAzBM,CA2BN;;AACA,QAAM1+I,0DAAE,CAACq1H,SAAH,CACJr1H,0DAAE,CAACjB,IAAH,CAAQ2/I,SAAR,EAAmB,eAAnB,CADI,EAEJ9yJ,IAAI,CAACC,SAAL,CAAewoI,sDAAA,CAAsBhP,EAAtB,EAA0BH,UAA1B,CAAf,CAFI,CAAN,CA5BM,CAiCN;;AACA,0BAAgB,MAAMC,UAAU,CAACE,EAAD,EAAKpkC,OAAL,CAAhC;AAAA,MAAMv6D,KAAN,qBAAMA,KAAN;;AACA,MAAIA,KAAJ,EAAW;AACThO,WAAO,CAACsrE,GAAR,CAAY,4BAA4Bt9D,KAAxC;AACA,WAAO;AAAEA;AAAF,KAAP;AACD;;AAED,MAAI,CAACsqH,WAAD,IAAgB,CAAC2jB,QAArB,EAA+B;AAC7B,QAAI;AACF,YAAMzjB,sDAAA,EAAN;AACD,KAFD,CAEE,OAAO5pI,CAAP,EAAU,CACV;AACA;AACD;AACF;;AAED,MAAIqtJ,QAAJ,EAAc;AACZ,UAAMlhC,uEAAgB,CAAC1C,QAAD,CAAtB;AACD;;AAED,SAAO,EAAP;AACD,CA3DD;;AA6DAA,QAAQ,CAAC,mBAAD,CAAR,GAAgC,kBAAiB;AAC/C,QAAM2J,oEAAY,CAACnF,OAAb,CAAqB,eAArB,EAAsC,MAAtC,CAAN;AACA,SAAO,IAAP;AACD,CAHD;;AAKAxE,QAAQ,CAAC,eAAD,CAAR,GAA4B,gBAAe;AAAEntH,UAAF;AAAYzJ;AAAZ,CAAf,EAAmC;AAC7D,MAAI;AACF,QAAI,EAAE,MAAM6F,0DAAE,CAACqa,MAAH,CAAUzW,QAAV,CAAR,CAAJ,EAAkC;AAChC,YAAM,IAAIphB,KAAJ,CAAW,wCAAuCohB,QAAS,EAA3D,CAAN;AACD;;AAED,QAAI8X,MAAM,GAAGtb,MAAM,CAACre,IAAP,CAAY,MAAMie,0DAAE,CAAC0B,QAAH,CAAYkC,QAAZ,EAAsB,QAAtB,CAAlB,CAAb;;AAEA,YAAQzJ,IAAR;AACE,WAAK,OAAL;AACE,YAAI;AACF,gBAAMm2J,KAAK,CAAChjC,YAAN,CAAmB1pH,QAAnB,EAA6B8X,MAA7B,CAAN;AACD,SAFD,CAEE,OAAOpU,CAAP,EAAU;AACV,cAAIJ,GAAG,GAAGI,CAAC,CAAC2kB,OAAF,CAAU5N,WAAV,EAAV;;AACA,cACEnX,GAAG,CAACzR,QAAJ,CAAa,aAAb,KACAyR,GAAG,CAACzR,QAAJ,CAAa,qBAAb,CAFF,EAGE;AACA,mBAAO;AAAEixB,mBAAK,EAAE;AAAT,aAAP;AACD;AACF;;AACD;;AACF,WAAK,OAAL;AACE,YAAIrhC,IAAJ;;AACA,YAAI;AACFA,cAAI,GAAGuG,IAAI,CAAC0G,KAAL,CAAWopB,MAAM,CAAC9gB,QAAP,EAAX,CAAP;AACD,SAFD,CAEE,OAAO0M,CAAP,EAAU;AACV,iBAAO;AAAEof,iBAAK,EAAE;AAAT,WAAP;AACD;;AAED,YAAI;AACF,gBAAM6pI,KAAK,CAACjhC,WAAN,CAAkBjqI,IAAlB,CAAN;AACD,SAFD,CAEE,OAAOiiB,CAAP,EAAU;AACV,iBAAO;AAAEof,iBAAK,EAAE;AAAT,WAAP;AACD;;AACD;;AACF,WAAK,QAAL;AACE;AACA;AACA;AACA;AACA;AACA,cAAMqqG,QAAQ,CAAC,cAAD,CAAR,EAAN;;AAEA,oCAAa,MAAMmgB,4DAAA,CACjB;AAAEoW,qBAAW,EAAE,IAAf;AAAqBh5B,iBAAO,EAAE;AAA9B,SADiB,EAEjB5yG,MAFiB,CAAnB;AAAA,YAAM2pG,EAAN,yBAAMA,EAAN,CARF,CAaE;AACA;;;AACA,YAAI2vC,QAAQ,GAAG,MAAMnV,oEAAA,CACnB7/I,0DAAE,CAACjB,IAAH,CAAQiB,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAR,EAA6B,WAA7B,CADmB,CAArB;AAGAw6B,yEAAA,CACEmV,QADF,EAEG;AACX;AACA;AACA,SALQ;AAOAnV,6EAAA,CAAqBmV,QAArB,EAzBF,CA2BE;AACA;;AACA,cAAMjkC,QAAQ,CAAC,aAAD,CAAR,CAAwB;AAAE1L;AAAF,SAAxB,CAAN;AACA,cAAM0L,QAAQ,CAAC,mBAAD,CAAR,EAAN;AACA,cAAMoC,yDAAA,EAAN;AACA,cAAM+d,sDAAA,GAAsBC,KAAtB,CAA4BhvI,GAAG,IAAI,CAAE,CAArC,CAAN;AAEA;;AACF;AA/DF;AAiED,GAxED,CAwEE,OAAOA,GAAP,EAAY;AACZA,OAAG,CAAC8pB,OAAJ,GAAc,6BAA6B9pB,GAAG,CAAC8pB,OAA/C;AACAsoG,iFAAgB,CAACpyH,GAAD,CAAhB;AACA,WAAO;AAAEukB,WAAK,EAAE;AAAT,KAAP;AACD;;AAED,SAAO,EAAP;AACD,CAhFD;;AAkFAqqG,QAAQ,CAAC,eAAD,CAAR,GAA4B,kBAAiB;AAC3C,SAAO,MAAMmgB,4DAAA,EAAb;AACD,CAFD;;AAIA,eAAe/rB,UAAf,CAA0BE,EAA1B,EAA8BjlC,UAA9B,EAA0C;AAAEg0E;AAAF,IAAiB,EAA3D,EAA+D;AAC7D,MAAIz5I,GAAJ;;AACA,MAAI;AACFA,OAAG,GAAG3a,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAN;AACD,GAFD,CAEE,OAAO/9G,CAAP,EAAU;AACVitH,iFAAgB,CACd,IAAI/xI,KAAJ,CAAU,4CAA4C8kB,CAAC,CAAC2kB,OAAxD,CADc,CAAhB;AAGA,WAAO;AAAEvF,WAAK,EAAE;AAAT,KAAP;AACD;;AAEDguG,gFAAiB,CAAC;AAAEzoG,WAAO,EAAE,oBAAoBtR;AAA/B,GAAD,CAAjB;;AAEA,MAAI,EAAE,MAAM3a,0DAAE,CAACqa,MAAH,CAAUM,GAAV,CAAR,CAAJ,EAA6B;AAC3B45G,iFAAgB,CAAC,IAAI/xI,KAAJ,CAAU,iCAAV,CAAD,CAAhB;AACA,WAAO;AAAEkkC,WAAK,EAAE;AAAT,KAAP;AACD;;AAED,MAAI;AACF,UAAM2tG,gDAAA,CAAgBhP,EAAhB,CAAN;AACA,UAAMmK,gDAAA,CAAgBnK,EAAhB,CAAN;AACD,GAHD,CAGE,OAAO/9G,CAAP,EAAU;AACVotH,kFAAiB,CAAC;AAAEzoG,aAAO,EAAE,0BAA0Bo5F;AAArC,KAAD,CAAjB;AACAkP,iFAAgB,CAACjtH,CAAD,CAAhB;AACA,UAAMypH,QAAQ,CAAC,cAAD,CAAR,EAAN;AACA,WAAO;AAAErqG,WAAK,EAAE;AAAT,KAAP;AACD,GA1B4D,CA4B7D;AACA;;;AACA,MAAI,CAAC2tG,+CAAA,GAAiBsG,MAAtB,EAA8B;AAC5B,kCAAmB,MAAMD,oEAAY,CAACjF,QAAb,CAAsB,CAAC,YAAD,CAAtB,CAAzB;AAAA;AAAA;AAAA,QAAQkF,MAAR;;AACAtG,oDAAA,CAAgB;AAAEsG;AAAF,KAAhB;AACD;;AAED,yBAAkCtG,+CAAA,EAAlC;AAAA,MAAM4gC,aAAN,oBAAMA,aAAN;AAAA,MAAqB7vC,QAArB,oBAAqBA,QAArB;;AAEA,MAAI;AACF,UAAM8vC,8DAAa,CAACD,aAAD,EAAgBb,UAAhB,CAAnB;AACD,GAFD,CAEE,OAAO9sJ,CAAP,EAAU;AACVoR,WAAO,CAACC,IAAR,CAAa,gBAAb,EAA+BrR,CAA/B;AACA,QAAIvV,MAAJ;;AACA,QAAIuV,CAAC,CAAC2kB,OAAF,CAAUx2B,QAAV,CAAmB,wBAAnB,CAAJ,EAAkD;AAChD1D,YAAM,GAAG;AAAE20B,aAAK,EAAE;AAAT,OAAT;AACD,KAFD,MAEO,IAAIpf,CAAC,CAAC2kB,OAAF,CAAUx2B,QAAV,CAAmB,kBAAnB,CAAJ,EAA4C;AACjD1D,YAAM,GAAG;AAAE20B,aAAK,EAAE;AAAT,OAAT;AACD,KAFM,MAEA;AACL6tG,mFAAgB,CAACjtH,CAAD,CAAhB;AACA6tJ,kEAAM,CAACvwI,IAAP,CAAY,2BAA2BygG,EAAvC,EAA2C/9G,CAA3C;AACAoR,aAAO,CAACsrE,GAAR,CAAY,uBAAZ,EAAqC18E,CAArC;AACAvV,YAAM,GAAG;AAAE20B,aAAK,EAAE;AAAT,OAAT;AACD;;AAED,UAAMqqG,QAAQ,CAAC,cAAD,CAAR,EAAN;AACA,WAAOh/H,MAAP;AACD;;AAED,QAAMy9H,6CAAA,EAAN;;AAEA,MAAI6E,+CAAA,GAAiBm0B,UAArB,EAAiC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACAp7J,wDAAA,GAAqBA,SAArB,CAA+BgoK,OAA/B,CAAuChoK,wDAAA,EAAvC;AACA,UAAMoiI,4CAAA,CACJ,iEADI,EAEJ,CAACpiI,0DAAA,CAAyBA,oDAAA,EAAzB,CAAD,CAFI,CAAN;AAKA,UAAMinI,gDAAA,CAAgB;AAAEm0B,gBAAU,EAAE;AAAd,KAAhB,CAAN;AACD;;AAED,MAAI,CAAC6M,iDAAQ,CAACC,KAAV,IAAmB,CAACD,iDAAQ,CAACE,QAA7B,IAAyC,CAAC/1I,MAAM,CAACg2I,WAArD,EAAkE;AAChEvV,wEAAkB,CAAC56B,EAAD,CAAlB;AACD;;AAED,MAAI;AACF,UAAM8N,uDAAA,CAAsB3D,gCAAtB,EAA0BqhC,aAA1B,CAAN;AACD,GAFD,CAEE,OAAOvpJ,CAAP,EAAU;AACVitH,iFAAgB,CAACjtH,CAAD,CAAhB;AACA,UAAMypH,QAAQ,CAAC,cAAD,CAAR,EAAN;AACA,WAAO;AAAErqG,WAAK,EAAE;AAAT,KAAP;AACD,GArF4D,CAuF7D;;;AACAysG,6CAAA,GAAY9uD,IAAZ,GAAmBs8E,UAAnB,GAAgCtsB,+CAAA,GAAiBssB,UAAjD;AACA,QAAM30B,8DAAA,EAAN,CAzF6D,CA2F7D;;AACA,QAAMsW,0DAAA,EAAN;AACA,QAAMnvI,sEAAA,EAAN;AACA,QAAMsiK,qDAAA,EAAN;AACA,QAAMhjB,kDAAG,CAACG,aAAJ,EAAN;AAEA8iB,0DAAS,GAjGoD,CAmG7D;;AACA,MAAI,CAACl2I,MAAM,CAACg2I,WAAZ,EAAyB;AACvB,QAAIp8I,OAAO,CAACk9G,GAAR,CAAYyxB,OAAZ,IAAuB1iC,EAAE,KAAKqrC,cAAlC,EAAkD;AAChDh9B,mEAAc,CAAC,UAAD,CAAd;AACD,KAFD,MAEO,IAAIrO,EAAE,KAAKsrC,cAAX,EAA2B;AAChC,YAAMj2B,oEAAY,CAACnF,OAAb,CAAqB,YAArB,EAAmClQ,EAAnC,CAAN;AACD,KAFM,MAEA;AACLqO,mEAAc,CAAC,SAAD,CAAd;AAEA,YAAMgH,oEAAY,CAACnF,OAAb,CAAqB,YAArB,EAAmClQ,EAAnC,CAAN,CAHK,CAKL;;AACA,UAAI,CAACgwC,iDAAQ,CAACE,QAAd,EAAwB;AACtB,cAAMrkB,8DAAA,EAAN;AACD;AACF;AACF;;AAEDuB,oDAAG,CAACN,MAAJ,CAAWzmH,IAAX,CAAgB,aAAhB,EAA+B;AAAE25F;AAAF,GAA/B;AAEA,SAAO,EAAP;AACD;;AAED0L,QAAQ,CAAC,2BAAD,CAAR,GAAwC,kBAAiB;AACvD,yBAAasD,+CAAA,EAAb;AAAA,MAAMhP,EAAN,oBAAMA,EAAN;;AACA,MAAIA,EAAE,KAAKsrC,cAAP,IAAyBtrC,EAAE,KAAKqrC,cAApC,EAAoD;AAClD,WAAO,EAAP;AACD;;AAED,MAAIza,KAAK,GAAG,CAAC,WAAD,EAAc,eAAd,CAAZ;AACA,MAAI0f,MAAM,GAAG,EAAb;;AAEA,OAAK,IAAIx7J,IAAT,IAAiB87I,KAAjB,EAAwB;AACtB,QAAInjJ,GAAG,GAAI,iBAAgBqH,IAAK,EAAhC;;AACA,QAAIk6H,+CAAA,GAAiBvhI,GAAjB,KAAyB,IAA7B,EAAmC;AACjC6iK,YAAM,CAAC9yK,IAAP,CAAYsX,IAAZ;AACD;AACF;;AAED,SAAOw7J,MAAP;AACD,CAjBD;;AAmBA5kC,QAAQ,CAAC,2BAAD,CAAR,GAAwC,gBAAe;AAAE52H;AAAF,CAAf,EAAyB;AAC/D,MAAIrH,GAAG,GAAI,iBAAgBqH,IAAK,EAAhC;AACAk6H,kDAAA,CAAgB;AAAE,KAACvhI,GAAD,GAAO;AAAT,GAAhB;AACD,CAHD;;AAKAi+H,QAAQ,CAAC,iBAAD,CAAR,GAA8B,gBAAe;AAAErwH,UAAF;AAAYgsH;AAAZ,CAAf,EAAuC;AACnE,MAAI,CAAC2oC,iDAAQ,CAACC,KAAd,EAAqB;AACnB,WAAO,IAAP;AACD;;AAED,QAAMt1J,0DAAE,CAACq1H,SAAH,CAAa,cAAc30H,QAA3B,EAAqCgsH,QAArC,CAAN;AACA,SAAO,IAAP;AACD,CAPD;;AASAqE,QAAQ,CAAC,aAAD,CAAR,GAA0B,gBAAe;AAAE1L;AAAF,CAAf,EAAuB;AAC/C,SAAO45B,qEAAmB,CAAC55B,EAAD,CAA1B;AACD,CAFD;;AAIA0L,QAAQ,CAAC,aAAD,CAAR,GAA0B,gBAAe;AAAE1L,IAAF;AAAMs6B;AAAN,CAAf,EAAiC;AACzD,QAAMI,4DAAU,CAAC16B,EAAD,EAAKs6B,QAAL,CAAhB;AACD,CAFD;;AAIA5uB,QAAQ,CAAC,aAAD,CAAR,GAA0B,gBAAe;AAAE1L;AAAF,CAAf,EAAuB;AAC/C,QAAMq6B,4DAAU,CAACr6B,EAAD,CAAhB;AACD,CAFD;;AAIA0L,QAAQ,CAAC,wBAAD,CAAR,GAAqC,kBAAiB;AACpD,QAAM1L,EAAE,GAAG,MAAMqV,oEAAY,CAACpF,OAAb,CAAqB,YAArB,CAAjB;;AACA,MAAIjQ,EAAE,IAAIA,EAAE,KAAK,EAAjB,EAAqB;AACnB,UAAMq5B,SAAS,GAAG1+I,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAlB,CADmB,CAGnB;AACA;;AACA,QAAI,MAAMrlH,0DAAE,CAACqa,MAAH,CAAUqkI,SAAV,CAAV,EAAgC;AAC9B,aAAOr5B,EAAP;AACD;AACF;;AACD,SAAO,IAAP;AACD,CAZD;;AAcA0L,QAAQ,CAAC,aAAD,CAAR,GAA0B,kBAAiB;AACzC,MAAIsD,+CAAA,MAAoBA,+CAAA,GAAiBhP,EAAzC,EAA6C;AAC3C;AACA2uC,2DAAQ;AACT;AACF,CALD;;AAOAjjC,QAAQ,CAAC,OAAD,CAAR,GAAoB,gBAAe;AAAE/pI,MAAF;AAAQwd;AAAR,CAAf,EAAgC;AAClDsuJ,yDAAA,CAAe9rK,IAAf,EAAqBwd,KAArB;AACD,CAFD;;AAIAusH,QAAQ,GAAG6kC,qDAAU,CAAC7kC,QAAD,CAArB;;AAEA8kC,gEAAS,CAACzwG,IAAV,GAAiB,CAACp+D,IAAD,EAAOlK,IAAP,KAAgBi3I,6DAAU,CAAC0e,kDAAG,CAAC1hB,QAAJ,CAAa/pI,IAAb,CAAD,EAAqBlK,IAArB,CAA3C,C,CAEA;;;AACA21J,kDAAG,CAAC1hB,QAAJ,GAAeA,QAAf;AACA0hB,kDAAG,CAACF,OAAJ,CAAYujB,uDAAZ,EAA0BC,oDAA1B,EAAqCC,mDAArC,EAA+CC,mDAA/C;;AAEA,SAAS5C,qBAAT,GAAiC;AAC/B,MAAIgC,iDAAQ,CAACE,QAAb,EAAuB;AACrB;AACA;AACA;AACA;AACA,WAAOn8I,OAAO,CAACk9G,GAAR,CAAY4/B,mBAAnB;AACD;;AACD,SAAOl2J,0DAAE,CAACjB,IAAH,CAAQqa,OAAO,CAACk9G,GAAR,CAAY4/B,mBAApB,EAAyC,QAAzC,CAAP;AACD;;AAED,eAAeC,iBAAf,GAAmC;AACjC,iBAAeC,YAAf,CAA4Bz7I,GAA5B,EAAiC;AAC/B;AACA,QAAI,EAAE,MAAM3a,0DAAE,CAACqa,MAAH,CAAUM,GAAV,CAAR,CAAJ,EAA6B;AAC3B,YAAM3a,0DAAE,CAACm3H,KAAH,CAASx8G,GAAT,CAAN;AACD;AACF;;AAED,MAAIu7G,WAAW,GAAG,MAAMwE,oEAAY,CAACpF,OAAb,CAAqB,cAArB,CAAxB,CARiC,CAUjC;AACA;;AACA,MAAIY,WAAJ,EAAiB;AACf,QAAI;AACF,YAAMkgC,YAAY,CAAClgC,WAAD,CAAlB;AACD,KAFD,CAEE,OAAO5uH,CAAP,EAAU;AACV4uH,iBAAW,GAAG,IAAd;AACD;AACF;;AAED,MAAI,CAACA,WAAL,EAAkB;AAChBA,eAAW,GAAGm9B,qBAAqB,EAAnC;AACD;;AAED,QAAM+C,YAAY,CAAClgC,WAAD,CAAlB;;AACAl2H,4DAAE,CAACw2H,eAAH,CAAmBN,WAAnB;AACD;;AAEM,eAAemgC,OAAf,CAAuB76J,OAAvB,EAAgC86J,KAAhC,EAAuCC,UAAvC,EAAmD;AACxDt1E,SAAO,GAAGzlF,OAAV;AAEA,QAAMqkJ,4DAAA,EAAN;AACA,QAAMp7I,OAAO,CAAC0pD,GAAR,CAAY,CAACusE,oEAAY,CAACxF,IAAb,EAAD,EAAsBl1H,0DAAE,CAACk1H,IAAH,EAAtB,CAAZ,CAAN;AACA,QAAM49B,sDAAA,EAAN;AACA,QAAMqD,iBAAiB,EAAvB;AAEA,MAAIK,OAAO,GAAG,MAAM97B,oEAAY,CAACpF,OAAb,CAAqB,cAArB,CAApB;;AACA,MAAIkhC,OAAJ,EAAa;AACX,QAAI;AACF,UAAI3jK,IAAI,GAAGjH,IAAI,CAAC0G,KAAL,CAAWkkK,OAAX,CAAX,CADE,CAGF;;AACA,YAAM/xJ,OAAO,CAAC0pD,GAAR,CACJvtE,MAAM,CAACiS,IAAP,CAAYA,IAAZ,EAAkB9R,GAAlB,CAAsB0mK,MAAM,IAAI;AAC9B,eAAOE,oDAAU,CAACkI,OAAX,CAAmBh9J,IAAI,CAAC40J,MAAD,CAAvB,CAAP;AACD,OAFD,CADI,CAAN;AAKD,KATD,CASE,OAAOngJ,CAAP,EAAU;AACVoR,aAAO,CAACsrE,GAAR,CAAY,mBAAZ,EAAiC18E,CAAjC;AACA,YAAM,IAAI9kB,KAAJ,CAAU,gBAAV,CAAN;AACD;AACF;;AAED,MAAI8zK,KAAJ,EAAW;AACT,UAAMG,UAAU,GAAG,MAAM/7B,oEAAY,CAACpF,OAAb,CAAqB,YAArB,CAAzB,CADS,CAET;AACA;AACA;AACD;;AAED,QAAMrvD,GAAG,GAAG,MAAMy0D,oEAAY,CAACpF,OAAb,CAAqB,YAArB,CAAlB;;AACA,MAAIrvD,GAAJ,EAAS;AACP8tF,qEAAS,CAAC9tF,GAAD,CAAT;AACD;;AAED0mE,YAAU,CAACzX,IAAX,CAAgBqhC,UAAhB,EAA4B9jB,kDAAG,CAAC1hB,QAAhC;AAEA+hC,yDAAA,CAAe,UAAf,EAA2B;AACzBr5I,YAAQ,EAAE47I,iDAAQ,CAACE,QAAT,GAAoB,QAApB,GAA+BF,iDAAQ,CAACC,KAAT,GAAiB,KAAjB,GAAyB;AADzC,GAA3B;;AAIA,MAAI,CAACgB,KAAD,IAAU,CAACjB,iDAAQ,CAACE,QAApB,IAAgC,CAACF,iDAAQ,CAACC,KAA9C,EAAqD;AACnD,QAAItC,UAAU,GAAG,MAAMt4B,oEAAY,CAACpF,OAAb,CAAqB,aAArB,CAAvB;AACAl8G,WAAO,CAACgsC,IAAR,CAAa;AACXjrD,UAAI,EAAE,kBADK;AAEX0rH,UAAI,EAAEmtC,UAAU,IAAI,IAAd,IAAsBA,UAAU,KAAK;AAFhC,KAAb;AAID;;AAED,MAAIsD,KAAK,IAAIl9I,OAAO,CAACk9G,GAAR,CAAYyxB,OAAzB,EAAkC;AAChCvoI,UAAM,CAACk3I,KAAP,GAAe,CAAC1vK,IAAD,EAAOlK,IAAP,KAAgBi3I,6DAAU,CAAC0e,kDAAG,CAAC1hB,QAAJ,CAAa/pI,IAAb,CAAD,EAAqBlK,IAArB,CAAzC;;AACA0iC,UAAM,CAACm3I,MAAP,GAAgB3iC,+DAAhB;AACAx0G,UAAM,CAACo3I,EAAP,GAAYnjI,sDAAZ;AACAjU,UAAM,CAACq3I,GAAP,GAAarnC,gCAAb;AACAhwG,UAAM,CAACs3I,eAAP,GAAyBpjC,qDAAzB;AACD;AACF;AAEM,eAAewB,IAAf,CAAoB;AAAE9P,UAAF;AAAY9hI;AAAZ,CAApB,EAA0C;AAC/C;AACA;AACA29F,SAAO,GAAG81E,SAAV;AAEA,MAAIC,OAAJ,EAAaC,SAAb;;AACA,MAAI3zK,MAAJ,EAAY;AACV0zK,WAAO,GAAG1zK,MAAM,CAAC0zK,OAAjB;AACAC,aAAS,GAAG3zK,MAAM,CAAC2zK,SAAnB;AACD,GAHD,MAGO;AACLD,WAAO,GAAG59I,OAAO,CAACk9G,GAAR,CAAYC,eAAtB;AACA0gC,aAAS,GAAG79I,OAAO,CAACk9G,GAAR,CAAY4gC,iBAAxB;AACD;;AAED,QAAMrX,4DAAA,EAAN;AACA,QAAMp7I,OAAO,CAAC0pD,GAAR,CAAY,CAACusE,oEAAY,CAACxF,IAAb,CAAkB;AAAEC,WAAO,EAAE;AAAX,GAAlB,CAAD,EAAwCn1H,0DAAE,CAACk1H,IAAH,EAAxC,CAAZ,CAAN;;AACAl1H,4DAAE,CAACw2H,eAAH,CAAmBwgC,OAAO,IAAI59I,OAAO,CAAC+9I,GAAR,EAA9B;;AAEA,MAAIF,SAAJ,EAAe;AACblD,qEAAS,CAACkD,SAAD,CAAT;AACD,GAFD,MAEO;AACL;AACA;AACAlD,qEAAS,CAAC,IAAD,CAAT;AAEAthB,sDAAG,CAACN,MAAJ,CAAW7hI,EAAX,CAAc,aAAd,EAA6B,MAAM;AACjCojH,mEAAc,CAAC,SAAD,CAAd;AACD,KAFD;AAGD;;AAED,MAAItO,QAAJ,EAAc;AACZ,UAAM2O,6DAAU,CAAChD,QAAQ,CAAC,aAAD,CAAT,EAA0B;AAAE1L,QAAE,EAAED;AAAN,KAA1B,CAAhB;AACD;;AAED,SAAO7pH,GAAP;AACD,C,CAED;;AACO,MAAMA,GAAG,GAAG;AACjBw5H,YAAU,EAAE/0H,0DAAE,CAAC+0H,UADE;AAEjBqiC,aAAW,EAAE,CAAClwJ,GAAD,EAAMpqB,IAAN,KAAe6vJ,UAAU,CAACvnF,IAAX,CAAgBl+C,GAAhB,EAAqBpqB,IAArB,CAFX;AAGjBsoE,MAAI,EAAE,OAAOp+D,IAAP,EAAalK,IAAb,KAAsB;AAC1B,QAAI22H,GAAG,GAAG,MAAMsgB,6DAAU,CAAC0e,kDAAG,CAAC1hB,QAAJ,CAAa/pI,IAAb,CAAD,EAAqBlK,IAArB,CAA1B;AACA,WAAO22H,GAAP;AACD,GANgB;AAOjBnjG,IAAE,EAAE,CAACtpB,IAAD,EAAOy5B,IAAP,KAAgBgyH,kDAAG,CAACN,MAAJ,CAAW7hI,EAAX,CAActpB,IAAd,EAAoBy5B,IAApB,CAPH;AAQjB42I,uFARiB;AASjB5jI,2DATiB;AAUjB+7F,sCAViB;AAYjB;AACA8nC,+CAbiB;AAcjBlqK,qDAdiB;AAejBmqK,cAAY,EAAE9G;AAfG,CAAZ;;AAkBP,IAAIr3I,KAAA,IAA0Ci8I,iDAAQ,CAACC,KAAvD,EAA8D;AAC5D;AACA3xJ,MAAI,CAAC6zJ,gBAAL,CAAsB,SAAtB,EAAiC,MAAMlwJ,CAAN,IAAW;AAC1C,QAAIA,CAAC,CAACjiB,IAAF,CAAO8U,IAAP,KAAgB,mBAApB,EAAyC;AACvC,YAAMg5H,yDAAA,EAAN;AACA,YAAMsf,kDAAG,CAACI,YAAJ,EAAN;AACA,YAAMrjB,iDAAA,EAAN;AACAkL,0EAAY,CAAC+8B,QAAb;AACAz3J,gEAAE,CAACy3J,QAAH;AAEA/sG,gBAAU,CAAC,MAAM;AACf;AACA/mD,YAAI,CAAC8W,KAAL;AACD,OAHS,EAGP,GAHO,CAAV;AAID;AACF,GAbD;AAcD,C;;;;;;;;;;;;ACltED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,SAASy0C,OAAT,CAAiBwoG,IAAjB,EAAuB;AAC5B,SAAO92K,MAAM,CAACiS,IAAP,CAAY6kK,IAAZ,EAAkBjzK,MAAlB,CAAyBiH,CAAC,IAAIA,CAAC,KAAK,MAApC,CAAP;AACD;AAEM,SAASisK,cAAT,CAAwB7kK,GAAxB,EAA6B;AAClC;AACA;AACA,MAAI8kK,OAAO,GAAG9kK,GAAG,GAAG,IAAI+kE,MAAJ,CAAW,KAAK/kE,GAAG,CAAC9O,MAApB,CAApB,CAHkC,CAKlC;;AACA,SAAOoa,QAAQ,CAACw5J,OAAD,EAAU,CAAV,CAAR,GAAuB,IAAvB,GAA8B,EAArC;AACD;AAEM,SAASvhG,MAAT,CAAgBqhG,IAAhB,EAAsBtqK,SAAtB,EAAiC;AACtC,MAAIyqK,IAAI,GAAGzqK,SAAS,CAACyqK,IAAV,EAAX;AACA,MAAI/kK,GAAG,GAAGvR,MAAM,CAAE6L,SAAS,CAAC0qK,MAAV,KAAqB,IAArB,GAA4B,EAA7B,GAAmC,CAApC,CAAN,CAA6Cl9J,QAA7C,CAAsD,CAAtD,CAAV;AAEA88J,MAAI,GAAG92K,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB62K,IAAlB,EAAwB;AAAEG,QAAI,EAAEH,IAAI,CAACG,IAAL,GAAYA;AAApB,GAAxB,CAAP;AACA,SAAOE,SAAS,CAACL,IAAD,EAAO5kK,GAAP,EAAY+kK,IAAZ,CAAhB;AACD;;AAED,SAASE,SAAT,CAAmBL,IAAnB,EAAyB5kK,GAAzB,EAA8B+kK,IAA9B,EAAoC;AAClC,MAAI/kK,GAAG,CAAC9O,MAAJ,KAAe,CAAnB,EAAsB;AACpB,WAAO0zK,IAAP;AACD;;AACD,QAAMplJ,CAAC,GAAGxf,GAAG,CAAC,CAAD,CAAb;AACA,QAAMsqB,CAAC,GAAGs6I,IAAI,CAACplJ,CAAD,CAAJ,IAAW,EAArB;AACA,SAAO1xB,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB62K,IAAlB,EAAwB;AAC7B,KAACplJ,CAAD,GAAK1xB,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBu8B,CAAlB,EAAqB26I,SAAS,CAAC36I,CAAD,EAAItqB,GAAG,CAAC9M,KAAJ,CAAU,CAAV,CAAJ,EAAkB6xK,IAAlB,CAA9B,EAAuD;AAC1DA,UAAI,EAAEz6I,CAAC,CAACy6I,IAAF,GAASA;AAD2C,KAAvD;AADwB,GAAxB,CAAP;AAKD;;AAEM,SAASG,KAAT,CAAeC,UAAf,EAA2B;AAChC,MAAIP,IAAI,GAAG,EAAX;;AACA,OAAK,IAAItqK,SAAT,IAAsB6qK,UAAtB,EAAkC;AAChC5hG,UAAM,CAACqhG,IAAD,EAAOtqK,SAAP,CAAN;AACD;;AACD,SAAOsqK,IAAP;AACD;AAEM,SAASlrK,IAAT,CAAc0rK,KAAd,EAAqBC,KAArB,EAA4B;AACjC,MAAID,KAAK,CAACL,IAAN,KAAeM,KAAK,CAACN,IAAzB,EAA+B;AAC7B,WAAO,IAAP;AACD;;AAED,MAAIO,KAAK,GAAGF,KAAZ;AACA,MAAIG,KAAK,GAAGF,KAAZ;AACA,MAAIhmJ,CAAC,GAAG,EAAR,CAPiC,CASjC;AACA;AACA;AACA;;AACA,SAAO,CAAP,EAAU;AACR,QAAImmJ,MAAM,GAAG,IAAIjgK,GAAJ,CAAQ,CAAC,GAAG62D,OAAO,CAACkpG,KAAD,CAAX,EAAoB,GAAGlpG,OAAO,CAACmpG,KAAD,CAA9B,CAAR,CAAb;AACA,QAAIxlK,IAAI,GAAG,CAAC,GAAGylK,MAAM,CAACxmK,MAAP,EAAJ,CAAX;AACAe,QAAI,CAACrO,IAAL;AAEA,QAAI+zK,OAAO,GAAG,IAAd,CALQ,CAOR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAAK,IAAI17J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGhK,IAAI,CAAC7O,MAAzB,EAAiC6Y,CAAC,EAAlC,EAAsC;AACpC,UAAI/J,GAAG,GAAGD,IAAI,CAACgK,CAAD,CAAd;;AAEA,UAAI,CAACu7J,KAAK,CAACtlK,GAAD,CAAN,IAAe,CAACulK,KAAK,CAACvlK,GAAD,CAAzB,EAAgC;AAC9B;AACD;;AAED,UAAI0lK,KAAK,GAAGJ,KAAK,CAACtlK,GAAD,CAAjB;AACA,UAAI2lK,KAAK,GAAGJ,KAAK,CAACvlK,GAAD,CAAjB;;AACA,UAAI0lK,KAAK,CAACX,IAAN,KAAeY,KAAK,CAACZ,IAAzB,EAA+B;AAC7BU,eAAO,GAAGzlK,GAAV;AACA;AACD;AACF;;AAED,QAAI,CAACylK,OAAL,EAAc;AACZ,aAAOZ,cAAc,CAACxlJ,CAAD,CAArB;AACD;;AAEDA,KAAC,IAAIomJ,OAAL;AACAH,SAAK,GAAGA,KAAK,CAACG,OAAD,CAAL,IAAkB,EAA1B;AACAF,SAAK,GAAGA,KAAK,CAACE,OAAD,CAAL,IAAkB,EAA1B;AACD;AACF;AAEM,SAASplD,KAAT,CAAeukD,IAAf,EAAqBt6I,CAAC,GAAG,CAAzB,EAA4B;AACjC;AACA,MAAI,CAACs6I,IAAI,CAACG,IAAV,EAAgB;AACd,WAAOH,IAAP;AACD;;AAED,MAAI7kK,IAAI,GAAGq8D,OAAO,CAACwoG,IAAD,CAAlB;AACA7kK,MAAI,CAACrO,IAAL;AAEA,MAAIlH,IAAI,GAAG;AAAEu6K,QAAI,EAAEH,IAAI,CAACG;AAAb,GAAX;AACAhlK,MAAI,GAAGA,IAAI,CAAC7M,KAAL,CAAW,CAACo3B,CAAZ,EAAer8B,GAAf,CAAmBoxB,CAAC,IAAK70B,IAAI,CAAC60B,CAAD,CAAJ,GAAUghG,KAAK,CAACukD,IAAI,CAACvlJ,CAAD,CAAL,EAAUiL,CAAV,CAAxC,CAAP;AAEA,SAAO9/B,IAAP;AACD;AAEM,SAASizE,KAAT,CAAemnG,IAAf,EAAqBvlJ,CAAC,GAAG,EAAzB,EAA6B6nG,MAAM,GAAG,CAAtC,EAAyC;AAC9C,QAAM/4F,GAAG,GACP,IAAI42C,MAAJ,CAAWmiD,MAAX,KACC7nG,CAAC,KAAK,EAAN,GAAY,MAAKA,CAAE,GAAnB,GAAwB,EADzB,IAEC,SAAQulJ,IAAI,CAACG,IAAL,IAAa,SAAU,IAHlC;AAIA,SACE52I,GAAG,GACHiuC,OAAO,CAACwoG,IAAD,CAAP,CACG32K,GADH,CACO+R,GAAG,IAAI;AACV,WAAOy9D,KAAK,CAACmnG,IAAI,CAAC5kK,GAAD,CAAL,EAAYA,GAAZ,EAAiBknH,MAAM,GAAG,CAA1B,CAAZ;AACD,GAHH,EAIGj7G,IAJH,CAIQ,EAJR,CAFF;AAQD,C;;;;;;;;;;;;AC1ID;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;CAGA;AACA;AACA;;AACA;;AAEA,MAAMkjH,IAAI,GAAG7iH,mBAAO,CAAC,qFAAD,CAApB;;AAEA,IAAIs5J,cAAc,GAAG14J,0DAAE,CAAC42H,cAAxB;AAEA,IAAI+hC,oBAAoB,GAAG;AACzB,iBAAeC,iFAAcA;AADJ,CAA3B;AAIO,eAAeC,iBAAf,CAAiCl+I,GAAjC,EAAsC8F,IAAtC,EAA4C;AACjD,MAAIq4I,MAAM,GAAGJ,cAAb;AACAA,gBAAc,GAAG/9I,GAAjB;AACA,QAAM8F,IAAI,EAAV;AACAi4I,gBAAc,GAAGI,MAAjB;AACD;AAEM,SAASC,gBAAT,GAA4B;AACjC,SAAOL,cAAP;AACD;;AAED,SAASM,cAAT,CAAwBhyK,IAAxB,EAA8B;AAC5B,SAAOoX,QAAQ,CAACpX,IAAI,CAACmW,KAAL,CAAW,QAAX,EAAqB,CAArB,CAAD,CAAf;AACD;;AAEM,SAAS87J,cAAT,CAAwB5zC,EAAxB,EAA4ByrC,KAA5B,EAAmC;AACxC,OAAK,IAAI57H,CAAT,IAAc47H,KAAd,EAAqB;AACnB,QAAIkI,cAAc,CAAC9jI,CAAD,CAAd,KAAsBmwF,EAA1B,EAA8B;AAC5B,aAAOnwF,CAAP;AACD;AACF;AACF;AAEM,eAAegkI,oBAAf,CAAoC1pC,EAApC,EAAwC;AAC7C,QAAMud,IAAI,GAAG,MAAM8S,gEAAA,CACjBrwB,EADiB,EAEjB,8CAFiB,EAGjB,EAHiB,EAIjB,IAJiB,CAAnB;AAMA,SAAOud,IAAI,CAAChsJ,GAAL,CAASi8I,GAAG,IAAIA,GAAG,CAAC3X,EAApB,CAAP;AACD;AAEM,eAAe8zC,gBAAf,CAAgCC,aAAhC,EAA+C;AACpD,QAAMt+I,KAAK,GAAG,MAAM9a,0DAAE,CAAC82H,OAAH,CAAWsiC,aAAX,CAApB;AACA,SAAOt+I,KAAK,CACTr2B,MADI,CACGuC,IAAI,IAAIA,IAAI,CAACmW,KAAL,CAAW,eAAX,CADX,EAEJ3Y,IAFI,CAEC,CAAC60K,EAAD,EAAKC,EAAL,KAAY;AAChB,UAAMt3B,GAAG,GAAGg3B,cAAc,CAACK,EAAD,CAA1B;AACA,UAAMp3B,GAAG,GAAG+2B,cAAc,CAACM,EAAD,CAA1B;;AACA,QAAIt3B,GAAG,GAAGC,GAAV,EAAe;AACb,aAAO,CAAC,CAAR;AACD,KAFD,MAEO,IAAID,GAAG,GAAGC,GAAV,EAAe;AACpB,aAAO,CAAP;AACD;;AACD,WAAO,CAAP;AACD,GAXI,CAAP;AAYD;AAEM,SAASs3B,UAAT,CAAoBC,UAApB,EAAgCrrG,GAAhC,EAAqC;AAC1C,SAAOA,GAAG,CAAC1pE,MAAJ,CAAWuC,IAAI,IAAI;AACxB,UAAMq+H,EAAE,GAAG2zC,cAAc,CAAChyK,IAAD,CAAzB;AACA,WAAOwyK,UAAU,CAACxtK,OAAX,CAAmBq5H,EAAnB,MAA2B,CAAC,CAAnC;AACD,GAHM,CAAP;AAID;;AAED,eAAeo0C,eAAf,CAA+BjqC,EAA/B,EAAmCnK,EAAnC,EAAuC;AACrC,QAAMq0C,WAAW,GAAG;AAClBn0C,YAAQ,EAAE,CAACnB,KAAD,EAAQiU,MAAR,EAAgBC,QAAhB,KACRunB,gEAAA,CAAgBrwB,EAAhB,EAAoBpL,KAApB,EAA2BiU,MAA3B,EAAmCC,QAAnC,CAFgB;AAGlB3I,aAAS,EAAEvL,KAAK,IAAIy7B,iEAAA,CAAiBrwB,EAAjB,EAAqBpL,KAArB,CAHF;AAIlBwG,eAAW,EAAEnqG,IAAI,IAAIo/H,mEAAA,CAAmBrwB,EAAnB,EAAuB/uG,IAAvB;AAJH,GAApB;;AAOA,MAAIk4I,oBAAoB,CAACtzC,EAAD,CAApB,IAA4B,IAAhC,EAAsC;AACpC,UAAM,IAAI7iI,KAAJ,CAAU,iDAAiD6iI,EAA3D,CAAN;AACD;;AAED,MAAIzxH,GAAG,GAAG+kK,oBAAoB,CAACtzC,EAAD,CAA9B;AACA,SAAOzxH,GAAG,CAAC8lK,WAAD,EAAc,MAAMz3C,IAAI,CAACgX,MAAL,EAApB,CAAV;AACD;;AAED,eAAe0gC,QAAf,CAAwBnqC,EAAxB,EAA4B4I,GAA5B,EAAiC;AAC/B,MAAI;AACF,UAAMynB,iEAAA,CAAiBrwB,EAAjB,EAAqB4I,GAArB,CAAN;AACD,GAFD,CAEE,OAAO9wH,CAAP,EAAU;AACVoR,WAAO,CAACsrE,GAAR,CAAY,qBAAZ,EAAmCo0C,GAAnC;AACA,UAAM9wH,CAAN;AACD;AACF;;AAEM,eAAesyJ,cAAf,CAA8BpqC,EAA9B,EAAkCxoI,IAAlC,EAAwCoyK,aAAxC,EAAuD;AAC5D,QAAMj1J,IAAI,GAAG,MAAMnE,0DAAE,CAAC0B,QAAH,CAAY1B,0DAAE,CAACjB,IAAH,CAAQq6J,aAAR,EAAuBpyK,IAAvB,CAAZ,CAAnB;;AACA,MAAIA,IAAI,CAACmW,KAAL,CAAW,OAAX,CAAJ,EAAyB;AACvB,UAAMs8J,eAAe,CAACjqC,EAAD,EAAKwpC,cAAc,CAAChyK,IAAD,CAAnB,CAArB;AACD,GAFD,MAEO;AACL,UAAM2yK,QAAQ,CAACnqC,EAAD,EAAKrrH,IAAL,CAAd;AACD;;AACD,QAAM07I,gEAAA,CAAgBrwB,EAAhB,EAAoB,4CAApB,EAAkE,CACtEwpC,cAAc,CAAChyK,IAAD,CADwD,CAAlE,CAAN;AAGD;;AAED,SAAS6yK,qBAAT,CAA+BL,UAA/B,EAA2ChmC,SAA3C,EAAsD;AACpD,OAAK,IAAI32H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG28J,UAAU,CAACx1K,MAA/B,EAAuC6Y,CAAC,EAAxC,EAA4C;AAC1C,QACEA,CAAC,IAAI22H,SAAS,CAACxvI,MAAf,IACAw1K,UAAU,CAAC38J,CAAD,CAAV,KAAkBm8J,cAAc,CAACxlC,SAAS,CAAC32H,CAAD,CAAV,CAFlC,EAGE;AACA,YAAM,IAAIra,KAAJ,CAAU,wBAAV,CAAN;AACD;AACF;AACF;;AAEM,eAAes3K,OAAf,CAAuBtqC,EAAvB,EAA2B;AAChC,MAAIgqC,UAAU,GAAG,MAAMN,oBAAoB,CAAC1pC,EAAD,CAA3C;AACA,MAAIgE,SAAS,GAAG,MAAM2lC,gBAAgB,CAACT,cAAD,CAAtC;AAEAmB,uBAAqB,CAACL,UAAD,EAAahmC,SAAb,CAArB;AAEA,QAAM/nE,OAAO,GAAG8tG,UAAU,CAACC,UAAD,EAAahmC,SAAb,CAA1B;;AAEA,OAAK,IAAIumC,SAAT,IAAsBtuG,OAAtB,EAA+B;AAC7B,UAAMmuG,cAAc,CAACpqC,EAAD,EAAKuqC,SAAL,EAAgBrB,cAAhB,CAApB;AACD;;AAED,SAAOjtG,OAAP;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrIM,SAAS+8E,cAAT,CAAwBxhJ,IAAxB,EAA8Bg2I,GAA9B,EAAmC3W,MAAnC,EAA2CxhH,MAA3C,EAAmD;AACxDwhH,QAAM,CAACn2H,OAAP,CAAe82B,KAAK,IAAI;AACtB,QAAIniB,MAAJ,EAAY;AACV,UAAIm4H,GAAG,CAACtgI,cAAJ,CAAmBsqB,KAAnB,KAA6Bg2G,GAAG,CAACh2G,KAAD,CAAH,IAAc,IAA/C,EAAqD;AACnD,cAAM,IAAIxkC,KAAJ,CAAW,GAAEwE,IAAK,qBAAoBggC,KAAM,EAA5C,CAAN;AACD;AACF,KAJD,MAIO;AACL,UAAI,CAACg2G,GAAG,CAACtgI,cAAJ,CAAmBsqB,KAAnB,CAAD,IAA8Bg2G,GAAG,CAACh2G,KAAD,CAAH,IAAc,IAAhD,EAAsD;AACpD,cAAM,IAAIxkC,KAAJ,CAAW,GAAEwE,IAAK,qBAAoBggC,KAAM,EAA5C,CAAN;AACD;AACF;AACF,GAVD;AAWD;AAEM,SAAS2kH,UAAT,CAAoB1qH,GAApB,EAAyB;AAC9B,MAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;AAC3B,UAAM,IAAIz+B,KAAJ,CAAU,qCAAqCy+B,GAA/C,CAAN;AACD;;AAED,SAAO7iB,QAAQ,CAAC6iB,GAAG,CAAC3jB,OAAJ,CAAY,IAAZ,EAAkB,EAAlB,CAAD,CAAf;AACD;AAEM,SAASu9I,YAAT,CAAsB5+I,MAAtB,EAA8B;AACnC,MAAI,OAAOA,MAAP,KAAkB,QAAtB,EAAgC;AAC9B,UAAM,IAAIzZ,KAAJ,CAAU,uCAAuCyZ,MAAjD,CAAN;AACD;;AAED,QAAMwzC,UAAU,GAAGxzC,MAAM,CAACrB,QAAP,EAAnB;AACA,SACE60C,UAAU,CAACzpD,KAAX,CAAiB,CAAjB,EAAoB,CAApB,IACA,GADA,GAEAypD,UAAU,CAACzpD,KAAX,CAAiB,CAAjB,EAAoB,CAApB,CAFA,GAGA,GAHA,GAIAypD,UAAU,CAACzpD,KAAX,CAAiB,CAAjB,CALF;AAOD;AAEM,MAAM6pJ,YAAY,GAAG;AAC1BmqB,qBAAmB,CAACvzC,OAAD,EAAU;AAC3B,UAAQtsH,IAAR,GAAiBssH,OAAjB,CAAQtsH,IAAR;;AACA,QACEA,IAAI,KAAK,UAAT,IACAA,IAAI,KAAK,SADT,IAEAA,IAAI,KAAK,YAFT,IAGAA,IAAI,KAAK,QAHT,IAIAA,IAAI,KAAK,UAJT,IAKAA,IAAI,KAAK,MALT,IAMAA,IAAI,KAAK,OAPX,EAQE;AACA,YAAM,IAAI3X,KAAJ,CAAU,2BAA2B2X,IAArC,CAAN;AACD;AACF,GAdyB;;AAgB1B40C,UAAQ,CAAC03E,OAAD,EAAU;AAAE5hH;AAAF,MAAa,EAAvB,EAA2B;AACjC,QAAI,CAACA,MAAD,IAAW4hH,OAAO,CAACtsH,IAAR,IAAgB,IAA/B,EAAqC;AACnC01I,kBAAY,CAACmqB,mBAAb,CAAiCvzC,OAAjC;AACD;;AAED+hB,kBAAc,CACZ,SADY,EAEZ/hB,OAFY,EAGZ5hH,MAAM,GAAG,CAAC,MAAD,EAAS,MAAT,EAAiB,WAAjB,EAA8B,QAA9B,CAAH,GAA6C,CAAC,MAAD,EAAS,MAAT,CAHvC,EAIZA,MAJY,CAAd;AAOA,WAAO4hH,OAAP;AACD;;AA7ByB,CAArB;AAgCA,MAAMqpB,aAAa,GAAG;AAC3B/gG,UAAQ,CAAC04E,QAAD,EAAW;AAAE5iH;AAAF,MAAa,EAAxB,EAA4B;AAClC2jI,kBAAc,CACZ,UADY,EAEZ/gB,QAFY,EAGZ5iH,MAAM,GAAG,CAAC,MAAD,EAAS,WAAT,EAAsB,WAAtB,CAAH,GAAwC,CAAC,MAAD,EAAS,WAAT,CAHlC,EAIZA,MAJY,CAAd;;AAOA,QAAMu+H,UAAN,GAA8B3b,QAA9B,CAAM2b,UAAN;AAAA,QAAqBv6F,IAArB,4BAA8B4+E,QAA9B;;AACA,WAAO5+E,IAAP;AACD;;AAX0B,CAAtB;AAcA,MAAMmnG,kBAAkB,GAAG;AAChCjhG,UAAQ,CAACkrH,aAAD,EAAgB;AAAEp1J;AAAF,MAAa,EAA7B,EAAiC;AACvC2jI,kBAAc,CACZ,eADY,EAEZyxB,aAFY,EAGZp1J,MAAM,GAAG,CAAC,MAAD,EAAS,WAAT,CAAH,GAA2B,CAAC,MAAD,CAHrB,EAIZA,MAJY,CAAd;;AAOA,QAAMu+H,UAAN,GAA8B62B,aAA9B,CAAM72B,UAAN;AAAA,QAAqBv6F,IAArB,4BAA8BoxH,aAA9B;;AACA,WAAOpxH,IAAP;AACD;;AAX+B,CAA3B;AAcA,MAAMonG,UAAU,GAAG;AACxBlhG,UAAQ,CAAC+4E,KAAD,EAAQ;AAAEjjH;AAAF,MAAa,EAArB,EAAyB;AAC/B2jI,kBAAc,CAAC,OAAD,EAAU1gB,KAAV,EAAiB,CAAC,MAAD,CAAjB,EAA2BjjH,MAA3B,CAAd;AACA,WAAOijH,KAAP;AACD;;AAJuB,CAAnB;AAOA,MAAMooB,cAAc,GAAG;AAC5BgqB,cAAY,CAAC7qK,IAAD,EAAO;AACjB,UAAQ8K,IAAR,GAAiB9K,IAAjB,CAAQ8K,IAAR;;AACA,QAAIA,IAAI,KAAK,QAAT,IAAqBA,IAAI,KAAK,UAAlC,EAA8C;AAC5C,YAAM,IAAI3X,KAAJ,CAAU,wBAAwB2X,IAAlC,CAAN;AACD;AACF,GAN2B;;AAQ5B40C,UAAQ,CAAC1/C,IAAD,EAAO;AAAEwV;AAAF,MAAa,EAApB,EAAwB;AAC9B,QAAI,CAACA,MAAD,IAAW,UAAUxV,IAAzB,EAA+B;AAC7B6gJ,oBAAc,CAACgqB,YAAf,CAA4B7qK,IAA5B;AACD;;AAEDm5I,kBAAc,CAAC,aAAD,EAAgBn5I,IAAhB,EAAsB,CAAC,UAAD,EAAa,MAAb,CAAtB,EAA4CwV,MAA5C,CAAd;AACA,WAAOxV,IAAP;AACD;;AAf2B,CAAvB;AAkBA,MAAMigJ,gBAAgB,GAAG;AAC9BvgG,UAAQ,CAACsrF,KAAD,EAAQ;AAAEx1H;AAAF,MAAa,EAArB,EAAyB;AAC/B2jI,kBAAc,CAAC,aAAD,EAAgBnO,KAAhB,EAAuB,CAAC,MAAD,EAAS,MAAT,CAAvB,EAAyCx1H,MAAzC,CAAd;;AAEA,QAAI,UAAUw1H,KAAd,EAAqB;AACnB;AACA;AACA;AACA,UACEA,KAAK,CAACr6I,IAAN,CAAWmd,KAAX,CAAiB,qBAAjB,KAA2C,IAA3C,IACAk9H,KAAK,CAACr6I,IAAN,GAAa,YAFf,EAGE;AACA,cAAM,IAAIwC,KAAJ,CAAU,+BAA+B63I,KAAK,CAACr6I,IAA/C,CAAN;AACD;AACF;;AAED,WAAOq6I,KAAP;AACD,GAjB6B;;AAmB9BoO,MAAI,CAACzL,GAAD,EAAM;AACR;AACA;AACA;AACA,QAAI,EAAE,cAAcA,GAAhB,CAAJ,EAA0B;AACxB,YAAM,IAAIx6I,KAAJ,CACJ,yEACEoJ,IAAI,CAACC,SAAL,CAAemxI,GAAf,CAFE,CAAN;AAID;;AAED,QAAI3C,KAAK,qBAAQ2C,GAAR,CAAT;;AACA3C,SAAK,CAAC3zG,KAAN,GAAcs2G,GAAG,CAACt2G,KAAJ,GAAY96B,IAAI,CAAC0G,KAAL,CAAW0qI,GAAG,CAACt2G,KAAf,CAAZ,GAAoC,IAAlD;AACA2zG,SAAK,CAAC8/B,QAAN,GAAiBn9B,GAAG,CAACm9B,QAAJ,KAAiB,CAAjB,GAAqB,IAArB,GAA4B,KAA7C;AACA9/B,SAAK,CAAC+/B,OAAN,GAAgBp9B,GAAG,CAACo9B,OAAJ,KAAgB,CAAhB,GAAoB,IAApB,GAA2B,KAA3C;AACA//B,SAAK,CAACjI,qBAAN,GACE4K,GAAG,CAAC5K,qBAAJ,KAA8B,CAA9B,GAAkC,IAAlC,GAAyC,KAD3C;AAEAiI,SAAK,CAACtL,OAAN,GAAgBiO,GAAG,CAACjO,OAAJ,KAAgB,CAAhB,GAAoB,IAApB,GAA2B,KAA3C;AACAsL,SAAK,CAAC5uE,OAAN,GAAgBuxE,GAAG,CAACvxE,OAAJ,KAAgB,CAAhB,GAAoB,IAApB,GAA2B,KAA3C;AACA4uE,SAAK,CAACr6I,IAAN,GAAaq6I,KAAK,CAACr6I,IAAN,IAAc66J,YAAY,CAACxgB,KAAK,CAACr6I,IAAP,CAAvC;AACA,WAAOq6I,KAAP;AACD,GAxC6B;;AA0C9BsO,QAAM,CAACtO,KAAD,EAAQ;AACZ,QAAI2C,GAAG,qBAAQ3C,KAAR,CAAP;;AACA,QAAI,WAAW2C,GAAf,EAAoB;AAClBA,SAAG,CAACt2G,KAAJ,GAAY2zG,KAAK,CAAC3zG,KAAN,GAAc96B,IAAI,CAACC,SAAL,CAAewuI,KAAK,CAAC3zG,KAArB,CAAd,GAA4C,IAAxD;AACD;;AACD,QAAI,cAAcs2G,GAAlB,EAAuB;AACrBA,SAAG,CAACm9B,QAAJ,GAAe9/B,KAAK,CAAC8/B,QAAN,GAAiB,CAAjB,GAAqB,CAApC;AACD;;AACD,QAAI,aAAan9B,GAAjB,EAAsB;AACpBA,SAAG,CAACo9B,OAAJ,GAAc//B,KAAK,CAAC+/B,OAAN,GAAgB,CAAhB,GAAoB,CAAlC;AACD;;AACD,QAAI,aAAap9B,GAAjB,EAAsB;AACpBA,SAAG,CAACjO,OAAJ,GAAcsL,KAAK,CAACtL,OAAN,GAAgB,CAAhB,GAAoB,CAAlC;AACD;;AACD,QAAI,aAAaiO,GAAjB,EAAsB;AACpBA,SAAG,CAACvxE,OAAJ,GAAc4uE,KAAK,CAAC5uE,OAAN,GAAgB,CAAhB,GAAoB,CAAlC;AACD;;AACD,QAAI,2BAA2BuxE,GAA/B,EAAoC;AAClCA,SAAG,CAAC5K,qBAAJ,GAA4BiI,KAAK,CAACjI,qBAAN,GAA8B,CAA9B,GAAkC,CAA9D;AACD;;AACD,QAAI,UAAU4K,GAAd,EAAmB;AACjBA,SAAG,CAACh9I,IAAJ,GAAW2rJ,UAAU,CAACtR,KAAK,CAACr6I,IAAP,CAArB;AACD;;AAED,WAAOg9I,GAAP;AACD;;AAnE6B,CAAzB,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1HP;AACA;AAEA,IAAIq9B,cAAc,GAAG,IAAIhiK,GAAJ,EAArB;AAEA,IAAIiiK,cAAc,GAAG,IAArB;AACA,IAAIC,eAAe,GAAG,IAAIzkK,OAAJ,EAAtB;AACA,IAAI0kK,sBAAsB,GAAG,KAA7B;AAEA,IAAIC,mBAAmB,GAAG,EAA1B;AAEO,SAASxX,OAAT,CAAiBnyB,OAAjB,EAA0B;AAC/BypC,iBAAe,CAAC/2K,GAAhB,CAAoBstI,OAApB,EAA6B,IAA7B;AACA,SAAOA,OAAP;AACD;AAEM,SAAS4pC,UAAT,CAAoB5pC,OAApB,EAA6B;AAClC,SAAOypC,eAAe,CAACvkK,GAAhB,CAAoB86H,OAApB,CAAP;AACD;;AAED,eAAe6pC,mBAAf,GAAqC;AACnC;AACA,QAAMC,IAAI,CAAC,GAAD,CAAV;;AAEA,SAAOP,cAAc,CAAC1yJ,IAAf,GAAsB,CAA7B,EAAgC;AAC9B;AACA,UAAMlD,OAAO,CAAC0pD,GAAR,CAAY,CAAC,GAAGksG,cAAc,CAACvoK,MAAf,EAAJ,CAAZ,CAAN,CAF8B,CAI9B;AACA;;AACA,UAAM8oK,IAAI,CAAC,GAAD,CAAV;AACD;AACF;;AAED,SAASA,IAAT,CAAcxkK,IAAd,EAAoB;AAClB,SAAO,IAAIqO,OAAJ,CAAYC,OAAO,IAAIgmD,UAAU,CAAChmD,OAAD,EAAUtO,IAAV,CAAjC,CAAP;AACD;;AAEM,eAAe29H,UAAf,CAA0BjD,OAA1B,EAAmCh0I,IAAnC,EAAyC;AAAE+9K,SAAF;AAAW7zK;AAAX,IAAoB,EAA7D,EAAiE;AACtE;AACA;AACAyzK,qBAAmB,CAAC53K,IAApB,CAAyBmE,IAAzB;;AACA,MAAIyzK,mBAAmB,CAACz2K,MAApB,GAA6B,CAAjC,EAAoC;AAClCy2K,uBAAmB,GAAGA,mBAAmB,CAACz0K,KAApB,CAA0B,CAAC,CAA3B,CAAtB;AACD;;AAED,MAAIu0K,eAAe,CAACvkK,GAAhB,CAAoB86H,OAApB,CAAJ,EAAkC;AAChC,WAAOsC,UAAU,CAAC,MAAMtC,OAAO,CAACh0I,IAAD,CAAd,EAAsB;AAAE+9K;AAAF,KAAtB,CAAjB;AACD,GAVqE,CAYtE;AACA;AACA;AACA;;;AACA,MAAI7zK,IAAI,KAAK,cAAb,EAA6B;AAC3B,UAAM2zK,mBAAmB,EAAzB;AACD;;AAED,MAAIG,OAAO,GAAGhqC,OAAO,CAACh0I,IAAD,CAArB;AACAu9K,gBAAc,CAACt6K,GAAf,CAAmB+6K,OAAnB;AACAA,SAAO,CAACnyJ,IAAR,CAAa,MAAM;AACjB0xJ,kBAAc,CAACnyJ,MAAf,CAAsB4yJ,OAAtB;AACD,GAFD;AAGA,SAAOA,OAAP;AACD,C,CAED;;AACO,SAASC,qBAAT,GAAiC;AACtC,MAAIv7I,MAAM,CAACg2I,WAAX,EAAwB;AACtBgF,0BAAsB,GAAG,IAAzB;AACD;AACF;AAEM,SAASQ,sBAAT,GAAkC;AACvC,MAAIx7I,MAAM,CAACg2I,WAAX,EAAwB;AACtBgF,0BAAsB,GAAG,KAAzB;AACD;AACF;AAEM,MAAMpnC,UAAU,GAAG6nC,gEAAU,CAAC,OAAOx6I,IAAP,EAAay6I,cAAc,GAAG,EAA9B,KAAqC;AACxEZ,gBAAc,GAAGY,cAAjB;AACA,SAAOz6I,IAAI,GAAG06I,OAAP,CAAe,MAAM;AAC1Bb,kBAAc,GAAG,IAAjB;AACD,GAFM,CAAP;AAGD,CALmC,CAA7B;AAOA,SAASc,kBAAT,CAA4Bz+J,OAA5B,EAAqC8jB,IAArC,EAA2C;AAChD,MAAI65I,cAAc,IAAI,IAAlB,IAA0B,CAACE,sBAA/B,EAAuD;AACrD9lC,kFAAiB,CAAC,qBAAqB+lC,mBAAmB,CAAC17J,IAApB,CAAyB,IAAzB,CAAtB,CAAjB;AACAw1H,iFAAgB,CAAC,IAAI/xI,KAAJ,CAAU,yCAAV,CAAD,CAAhB,CAFqD,CAIrD;AACA;;AACA,WAAOi+B,IAAI,EAAX;AACD;;AAED,MAAI46I,WAAW,GAAGf,cAAlB;AACAA,gBAAc,mCAAQA,cAAR,GAA2B39J,OAA3B,CAAd;AACA,SAAO8jB,IAAI,GAAG06I,OAAP,CAAe,MAAM;AAC1Bb,kBAAc,GAAGe,WAAjB;AACD,GAFM,CAAP;AAGD;AAEM,SAASC,iBAAT,GAA6B;AAClC,MAAIhB,cAAc,IAAI,IAAtB,EAA4B;AAC1B5lC,kFAAiB,CAAC;AAChBjN,cAAQ,EAAE,QADM;AAEhBx7F,aAAO,EAAE,qBAAqBwuI,mBAAmB,CAAC17J,IAApB,CAAyB,IAAzB;AAFd,KAAD,CAAjB,CAD0B,CAK1B;AAEA;AACA;AACA;AACA;;AACA,WAAO,EAAP;AACD;;AAED,MAAIu7J,cAAc,IAAI,IAAlB,IAA0BE,sBAA9B,EAAsD;AACpD,WAAO,EAAP;AACD;;AACD,SAAOF,cAAP;AACD,C;;;;;;;;;;;;AC1HD;AAAA;AAAA;AAAA;AACA;AAEA,IAAI7nB,GAAG,GAAGM,sDAAS,EAAnB;AAEAN,GAAG,CAACnxJ,MAAJ,CAAW,YAAX,EAAyB,OAAO;AAAE+jI,IAAF;AAAM6K;AAAN,CAAP,KAAwB;AAC/C,QAAMV,0CAAA,CAAU,OAAV,EAAmB;AAAEnK,MAAF;AAAM6K;AAAN,GAAnB,CAAN;AACD,CAFD;AAIeuiB,kEAAf,E;;;;;;;;;;;;ACTA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAI9rH,OAAO,GAAG,KAAd;AACA,IAAInhB,OAAO,GAAG,EAAd;AACA,IAAI+1J,QAAQ,GAAG,EAAf;AAEO,SAASr4I,KAAT,GAAiB;AACtB1d,SAAO,GAAG,EAAV;AACA+1J,UAAQ,GAAG,EAAX;AACD;AAEM,SAASh0I,MAAT,CAAgBvgC,IAAhB,EAAsB;AAC3B,QAAM5J,KAAK,GAAG+K,IAAI,CAACoE,GAAL,EAAd;AACA,SAAO,MAAMivK,QAAQ,CAACx0K,IAAD,EAAO5J,KAAP,CAArB;AACD;;AAED,SAASo+K,QAAT,CAAkBx0K,IAAlB,EAAwB5J,KAAxB,EAA+B;AAC7B,QAAMS,GAAG,GAAGsK,IAAI,CAACoE,GAAL,EAAZ;;AAEA,MAAIo6B,OAAJ,EAAa;AACX,QAAInhB,OAAO,CAACxe,IAAD,CAAP,IAAiB,IAArB,EAA2B;AACzBwe,aAAO,CAACxe,IAAD,CAAP,GAAgB,EAAhB;AACD;;AACDwe,WAAO,CAACxe,IAAD,CAAP,CAAcnE,IAAd,CAAmBhF,GAAG,GAAGT,KAAzB;AACD;AACF;;AAEM,SAASq+K,SAAT,CAAmBz0K,IAAnB,EAAyB;AAC9B,MAAI2/B,OAAJ,EAAa;AACX,QAAI40I,QAAQ,CAACv0K,IAAD,CAAR,IAAkB,IAAtB,EAA4B;AAC1Bu0K,cAAQ,CAACv0K,IAAD,CAAR,GAAiB,CAAjB;AACD;;AACDu0K,YAAQ,CAACv0K,IAAD,CAAR;AACD;AACF;AAEM,SAAS5J,KAAT,GAAiB;AACtBupC,SAAO,GAAG,IAAV;AACD;AAEM,SAASU,IAAT,GAAgB;AACrBV,SAAO,GAAG,KAAV;AAEAjO,SAAO,CAACsrE,GAAR,CAAY,0BAAZ;;AACA,OAAK,IAAIh9F,IAAT,IAAiBwe,OAAjB,EAA0B;AACxB,UAAM4gB,OAAO,GAAG5gB,OAAO,CAACxe,IAAD,CAAvB;AACA,UAAMqpB,KAAK,GAAG+V,OAAO,CAACnoC,MAAR,CAAe,CAACoyB,KAAD,EAAQ+M,CAAR,KAAc/M,KAAK,GAAG+M,CAAC,GAAG,IAAzC,EAA+C,CAA/C,CAAd;AACA,UAAM8kI,GAAG,GAAG7xI,KAAK,GAAG+V,OAAO,CAACpiC,MAA5B;AAEA00B,WAAO,CAACsrE,GAAR,CACG,IAAGh9F,IAAK,YAAWo/B,OAAO,CAACpiC,MAAO,WAAUqsB,KAAM,UAAS6xI,GAAI,EADlE;AAGD;;AAED,OAAK,IAAIl7J,IAAT,IAAiBu0K,QAAjB,EAA2B;AACzB7iJ,WAAO,CAACsrE,GAAR,CAAa,IAAGh9F,IAAK,KAAIu0K,QAAQ,CAACv0K,IAAD,CAAO,EAAxC;AACD;;AACD0xB,SAAO,CAACsrE,GAAR,CAAY,kBAAZ;AAEA9gE,OAAK;AACN,C;;;;;;;;;;;;AC1DD;AAAe;AACbqyI,UAAQ,EAAE,KADG;AAEbD,OAAK,EAAE,KAFM;AAGboG,WAAS,EAAE;AAHE,CAAf,E;;;;;;;;;;;ACAA,yC;;;;;;;;;;;;;;;;;;;;;;;ACAA;;AACA,iBAAiCt8J,mBAAO,CAAC,2DAAD,CAAxC;AAAA,MAAQ4oJ,SAAR,YAAQA,SAAR;AAAA,MAAmBd,SAAnB,YAAmBA,SAAnB;;AACA,kBAAkB9nJ,mBAAO,CAAC,kGAAD,CAAzB;AAAA,MAAQy2H,KAAR,aAAQA,KAAR;;AAEA,SAAS8lC,aAAT,CAAuBloD,GAAvB,EAA4B37B,IAA5B,EAAkC;AAChC,MAAI27B,GAAG,CAACpuD,MAAJ,KAAe,GAAnB,EAAwB;AACtB,QAAIouD,GAAG,CAACpuD,MAAJ,KAAe,GAAnB,EAAwB;AACtB,YAAM,IAAI2iG,SAAJ,CAAcv0C,GAAG,CAACpuD,MAAJ,KAAe,GAAf,GAAqB,UAArB,GAAkCyyB,IAAhD,CAAN;AACD;;AAED,QAAI8jF,WAAW,GAAGnoD,GAAG,CAAChpF,OAAJ,CAAYxqC,GAAZ,CAAgB,cAAhB,CAAlB;;AACA,QAAI27K,WAAW,CAACv9I,WAAZ,GAA0BryB,OAA1B,CAAkC,kBAAlC,MAA0D,CAAC,CAA/D,EAAkE;AAChE,UAAI3F,IAAI,GAAGuF,IAAI,CAAC0G,KAAL,CAAWwlF,IAAX,CAAX;AACA,YAAM,IAAIkwE,SAAJ,CAAc3hK,IAAI,CAACqhK,MAAnB,CAAN;AACD;;AACD,UAAM,IAAIM,SAAJ,CAAclwE,IAAd,CAAN;AACD;AACF;;AAEM,eAAe+iD,IAAf,CAAoB50D,GAApB,EAAyB5gF,IAAzB,EAA+B;AACpC,MAAIyyF,IAAJ;AACA,MAAI27B,GAAJ;AAEA,MAAIvvH,CAAC,GAAG,IAAI1B,KAAJ,GAAYoyD,KAApB;;AAEA,MAAI;AACF6+D,OAAG,GAAG,MAAMoiB,KAAK,CAAC5vD,GAAD,EAAM;AACrB3kF,YAAM,EAAE,MADa;AAErB20I,UAAI,EAAErqI,IAAI,CAACC,SAAL,CAAexG,IAAf,CAFe;AAGrBolC,aAAO,EAAE;AACP,wBAAgB;AADT;AAHY,KAAN,CAAjB;AAOAqtD,QAAI,GAAG,MAAM27B,GAAG,CAAC37B,IAAJ,EAAb;AACD,GATD,CASE,OAAO31E,GAAP,EAAY;AACZ,UAAM,IAAI6lJ,SAAJ,CAAc,iBAAd,CAAN;AACD;;AAED2T,eAAa,CAACloD,GAAD,EAAM37B,IAAN,CAAb;;AAEA,MAAI;AACF27B,OAAG,GAAG7nH,IAAI,CAAC0G,KAAL,CAAWwlF,IAAX,CAAN;AACD,GAFD,CAEE,OAAO31E,GAAP,EAAY;AACZ;AACA,UAAM,IAAI6lJ,SAAJ,CAAc,YAAd,EAA4B;AAAE3jF,UAAI,EAAEyT;AAAR,KAA5B,CAAN;AACD;;AAED,MAAI27B,GAAG,CAACpuD,MAAJ,KAAe,IAAnB,EAAyB;AACvB3sC,WAAO,CAACsrE,GAAR,CACE,sBACE/d,GADF,GAEE,UAFF,GAGEr6E,IAAI,CAACC,SAAL,CAAexG,IAAf,EAAqB,IAArB,EAA2B,CAA3B,CAHF,GAIE,cAJF,GAKEuG,IAAI,CAACC,SAAL,CAAe4nH,GAAf,EAAoB,IAApB,EAA0B,CAA1B,CANJ;AASA,UAAM,IAAIu0C,SAAJ,CAAcv0C,GAAG,CAACspB,WAAJ,IAAmBtpB,GAAG,CAACi0C,MAAvB,IAAiC,SAA/C,CAAN;AACD;;AAED,SAAOj0C,GAAG,CAACpuH,IAAX;AACD;AAEM,eAAew2K,UAAf,CAA0B51F,GAA1B,EAA+B5gF,IAA/B,EAAqColC,OAArC,EAA8C;AACnD,MAAIgpF,GAAJ;;AACA,MAAI;AACFA,OAAG,GAAG,MAAMoiB,KAAK,CAAC5vD,GAAD,EAAM;AACrB3kF,YAAM,EAAE,MADa;AAErB20I,UAAI,EAAEo/B,iDAAQ,CAACC,KAAT,GAAiBjwK,IAAjB,GAAwB+a,MAAM,CAACre,IAAP,CAAYsD,IAAZ,CAFT;AAGrBolC,aAAO;AACL,0BAAkBplC,IAAI,CAACrB,MADlB;AAEL,wBAAgB;AAFX,SAGFymC,OAHE;AAHc,KAAN,CAAjB;AASD,GAVD,CAUE,OAAOtoB,GAAP,EAAY;AACZ,UAAM,IAAI6lJ,SAAJ,CAAc,iBAAd,CAAN;AACD;;AAED,MAAItsI,MAAJ;;AACA,MAAI+3F,GAAG,CAACk2C,WAAR,EAAqB;AACnBjuI,UAAM,GAAGtb,MAAM,CAACre,IAAP,CAAY,MAAM0xH,GAAG,CAACk2C,WAAJ,EAAlB,CAAT;AACD,GAFD,MAEO;AACLjuI,UAAM,GAAG,MAAM+3F,GAAG,CAAC/3F,MAAJ,EAAf;AACD;;AAEDigJ,eAAa,CAACloD,GAAD,EAAM/3F,MAAM,CAAC9gB,QAAP,EAAN,CAAb;AAEA,SAAO8gB,MAAP;AACD;AAEM,SAASz7B,GAAT,CAAagmF,GAAb,EAAkB/rE,IAAlB,EAAwB;AAC7B,SAAO27H,KAAK,CAAC5vD,GAAD,EAAM/rE,IAAN,CAAL,CAAiByO,IAAjB,CAAsB8qG,GAAG,IAAIA,GAAG,CAAC37B,IAAJ,EAA7B,CAAP;AACD,C;;;;;;;;;;;;AC7FD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;AACA,MAAM93E,EAAE,GAAGZ,mBAAO,CAAC,4FAAD,CAAlB;;AAEA,IAAIi1H,KAAK,GAAG,IAAZ;AAEO,eAAeynC,SAAf,CAAyBz2C,EAAzB,EAA6B;AAClC,MAAI7lG,MAAM,CAACg2I,WAAP,IAAsB,CAACnwC,EAA3B,EAA+B;AAC7BgP,SAAK,GAAG;AAAE0nC,oBAAc,EAAE;AAAlB,KAAR;AACA,WAAO1nC,KAAP;AACD;;AAED,QAAM2D,QAAQ,GAAGh4H,EAAE,CAACjB,IAAH,CAAQiB,EAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAR,EAA6B,eAA7B,CAAjB;;AAEA,MAAI;AACFgP,SAAK,GAAGzoI,IAAI,CAAC0G,KAAL,CAAW,MAAM0N,EAAE,CAAC0B,QAAH,CAAYs2H,QAAZ,CAAjB,CAAR;AACD,GAFD,CAEE,OAAO1wH,CAAP,EAAU;AACV;AACA;AACA;AACA+sH,SAAK,GAAG;AAAEhP,QAAF;AAAMH,gBAAU,EAAEG;AAAlB,KAAR;AACD,GAfiC,CAiBlC;AACA;;;AACAgP,OAAK,CAAChP,EAAN,GAAWA,EAAX;AACA,SAAOgP,KAAP;AACD;AAEM,eAAe2nC,SAAf,CAAyB1I,UAAzB,EAAqC;AAAE2I,WAAS,GAAG;AAAd,IAAwB,EAA7D,EAAiE;AACtEr7K,QAAM,CAACC,MAAP,CAAcwzI,KAAd,EAAqBi/B,UAArB;;AAEA,MAAI,CAAC2I,SAAL,EAAgB;AACd;AACA,QAAIC,QAAQ,GAAGt7K,MAAM,CAACiS,IAAP,CAAYygK,UAAZ,EACZvyK,GADY,CACR+R,GAAG,IAAI;AACV,UAAIA,GAAG,KAAK,YAAR,IAAwBA,GAAG,KAAK,YAApC,EAAkD;AAChD,eAAO;AACL49I,iBAAO,EAAE,OADJ;AAEL1T,aAAG,EAAElqI,GAFA;AAGL84B,gBAAM,EAAE,OAHH;AAILruC,eAAK,EAAE+1K,UAAU,CAACxgK,GAAD,CAJZ;AAKL1F,mBAAS,EAAEo9J,kDAAS,CAACplG,IAAV;AALN,SAAP;AAOD;;AACD,aAAO,IAAP;AACD,KAZY,EAaZ3gE,MAbY,CAaLiH,CAAC,IAAIA,CAbA,CAAf;;AAeA,QAAIwwK,QAAQ,CAACl4K,MAAT,GAAkB,CAAtB,EAAyB;AACvB,YAAMinK,0DAAY,CAACiR,QAAD,CAAlB;AACD;AACF;;AAED,MAAI,CAAC7nC,KAAK,CAAC0nC,cAAX,EAA2B;AACzB,QAAI9H,SAAS,GAAGj0J,EAAE,CAACjB,IAAH,CAAQiB,EAAE,CAAC02H,YAAH,CAAgBrC,KAAK,CAAChP,EAAtB,CAAR,EAAmC,eAAnC,CAAhB;AACA,UAAMrlH,EAAE,CAACq1H,SAAH,CAAa4+B,SAAb,EAAwBroK,IAAI,CAACC,SAAL,CAAewoI,KAAf,CAAxB,CAAN;AACD;AACF;AAEM,SAAS8nC,WAAT,GAAuB;AAC5B9nC,OAAK,GAAG,IAAR;AACD;AAEM,SAAS+nC,QAAT,GAAoB;AACzB,SAAO/nC,KAAP;AACD;AAEM,SAASgoC,eAAT,CAAyBh3C,EAAzB,EAA6BH,UAA7B,EAAyC;AAC9C;AACA;AACA,SAAO;AACLG,MADK;AAELH,cAFK;AAGL,+BAA2B,IAHtB;AAIL,mCAA+B;AAJ1B,GAAP;AAMD;AAEM,eAAeo3C,SAAf,CAAyBj3C,EAAzB,EAA6B;AAClC,QAAM2S,QAAQ,GAAGh4H,EAAE,CAACjB,IAAH,CAAQiB,EAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAR,EAA6B,eAA7B,CAAjB;;AAEA,MAAI;AACF,WAAOz5H,IAAI,CAAC0G,KAAL,CAAW,MAAM0N,EAAE,CAAC0B,QAAH,CAAYs2H,QAAZ,CAAjB,CAAP;AACD,GAFD,CAEE,OAAO1wH,CAAP,EAAU;AACV,WAAO,IAAP;AACD;AACF,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvFD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMqlI,UAAU,GAAGvtI,mBAAO,CAAC,0GAAD,CAA1B;;AACA,MAAM6iH,IAAI,GAAG7iH,mBAAO,CAAC,qFAAD,CAApB,C,CAEA;;;AAEA,SAAS64D,GAAT,CAAaskG,IAAb,EAAmBC,IAAnB,EAAyB;AACvB,MAAIzqK,MAAM,GAAG,EAAb;;AACA,OAAK,IAAI8K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0/J,IAAI,CAACv4K,MAAzB,EAAiC6Y,CAAC,EAAlC,EAAsC;AACpC9K,UAAM,CAAClP,IAAP,CAAY,CAAC05K,IAAI,CAAC1/J,CAAD,CAAL,EAAU2/J,IAAI,CAAC3/J,CAAD,CAAd,CAAZ;AACD;;AACD,SAAO9K,MAAP;AACD;;AAEM,SAAS0qK,gBAAT,CAA0B18B,UAA1B,EAAsC28B,aAAtC,EAAqD;AAC1D,MAAIC,aAAa,GAAGC,+EAAoB,CAAC78B,UAAD,CAAxC;AACA,MAAI88B,gBAAgB,GAAGD,+EAAoB,CAACF,aAAD,CAA3C;AAEA,MAAII,YAAY,GAAG7kG,GAAG,CACpBr3E,MAAM,CAACkR,MAAP,CAAc6qK,aAAd,CADoB,EAEpB/7K,MAAM,CAACkR,MAAP,CAAc+qK,gBAAd,CAFoB,CAAtB;AAKA,MAAIz3B,OAAO,GAAGrF,UAAU,CAACh/I,GAAX,CAAe2/I,IAAI,IAAI;AACnC,QAAI4L,CAAC,GAAGwwB,YAAY,CAACpjK,IAAb,CAAkB4yI,CAAC,IAAI5L,IAAI,KAAK4L,CAAC,CAAC,CAAD,CAAjC,CAAR;AACA,WAAOA,CAAC,IAAIA,CAAC,CAAC,CAAD,CAAN,GAAYA,CAAC,CAAC,CAAD,CAAb,GAAmB5L,IAA1B;AACD,GAHa,CAAd;AAKA,MAAIpO,KAAK,GAAGwqC,YAAY,CACrBr4K,MADS,CACFiH,CAAC,IAAIA,CAAC,CAAC,CAAD,CAAD,IAAQ,IAAR,IAAgBA,CAAC,CAAC,CAAD,CAAD,IAAQ,IAD3B,EAET3K,GAFS,CAEL2K,CAAC,IAAIA,CAAC,CAAC,CAAD,CAFD,CAAZ;AAIA,SAAO05I,OAAO,CAACpqH,MAAR,CAAes3G,KAAf,CAAP;AACD;AAEM,SAASyqC,WAAT,CAAqBC,QAArB,EAA+B5/K,KAAK,GAAG,IAAI+K,IAAJ,EAAvC,EAAmD;AACxD/K,OAAK,GAAG82C,mDAAA,CAAa92C,KAAb,CAAR;AAEA,MAAIsjJ,IAAI,GAAG,IAAI/B,0DAAJ,CACTq+B,QAAQ,CAACt+B,EADA,EAET,MAFS,EAGTs+B,QAAQ,CAACz/K,KAHA,EAIT,IAJS,EAKT,IAAIsU,GAAJ,CAAQjR,MAAM,CAAC4kB,OAAP,CAAe;AAAExlB,QAAI,EAAE;AAAR,GAAf,CAAR,CALS,CAAX;AAOA,MAAIzC,KAAK,GAAGmjJ,IAAI,CAACjR,QAAL,EAAZ;;AAEA,MAAIlyI,KAAK,CAAC4c,IAAN,KAAe,MAAnB,EAA2B;AACzB,WAAO5c,KAAK,CAACyC,IAAb;AACD,GAFD,MAEO,IAAIzC,KAAK,CAAC4c,IAAN,KAAe,OAAnB,EAA4B;AACjC,QAAI/X,KAAK,GAAG7E,KAAK,CAACgI,QAAN,CAAelH,WAAf,CAA2B;AAAEjB,WAAF;AAASyE,UAAI,EAAE;AAAf,KAA3B,EAA+CD,OAA/C,EAAZ;;AAEA,QAAIQ,KAAK,CAAC4B,MAAN,GAAe,CAAnB,EAAsB;AACpB,UAAIhE,IAAI,GAAGoC,KAAK,CAAC,CAAD,CAAL,CAASpC,IAApB;AACA,aAAO88I,kEAAW,CAAC98I,IAAD,CAAlB;AACD;AACF;;AACD,SAAO,IAAP;AACD;AAEM,eAAei9K,kBAAf,CAAkC53C,EAAlC,EAAsC;AAC3C,MAAIA,EAAE,IAAI,IAAV,EAAgB;AACd,UAAM,IAAI7iI,KAAJ,CAAU,iCAAV,CAAN;AACD;;AAED,wBAAuB,MAAMwxI,sEAAQ,CACnCvgG,8DAAC,CAAC,WAAD,CAAD,CACGhvC,MADH,CACU;AAAE4gI;AAAF,GADV,EAEGhB,SAFH,CAEa,MAFb,CADmC,CAArC;AAAA,MAAY64C,MAAZ,mBAAM73K,IAAN;;AAKA,SAAO6jJ,6EAAQ,GAAGxvI,IAAX,CAAgBrK,IAAI,IAAIA,IAAI,CAACg2H,EAAL,KAAY63C,MAApC,CAAP;AACD;AAEM,eAAeC,kBAAf,CAAkC93C,EAAlC,EAAsC;AAC3C,yBAAuB,MAAM2O,sEAAQ,CACnCvgG,8DAAC,CAAC,WAAD,CAAD,CACGhvC,MADH,CACU;AAAE4gI;AAAF,GADV,EAEGhB,SAFH,CAEa,MAFb,CADmC,CAArC;AAAA,MAAY64C,MAAZ,oBAAM73K,IAAN;;AAMA,MAAI63K,MAAJ,EAAY;AACV;AACA;AACA,UAAM1tC,2CAAA,CAAW,OAAX,EAAoB0tC,MAApB,CAAN;AACD;;AAED,MAAIE,KAAK,GAAG,MAAMj0B,+EAAU,CAAC;AAC3BrJ,SAAK,EAAE,IADoB;AAE3BC,cAAU,EAAE,CACV;AAAErB,QAAE,EAAE,UAAN;AAAkB13G,WAAK,EAAE,MAAzB;AAAiCzpC,WAAK,EAAEwa,iEAAU;AAAlD,KADU,EAEV;AAAE2mI,QAAE,EAAE,UAAN;AAAkB13G,WAAK,EAAE,QAAzB;AAAmCzpC,WAAK,EAAE;AAA1C,KAFU,CAFe;AAM3ByiJ,WAAO,EAAE,CAAC;AAAEtB,QAAE,EAAE,eAAN;AAAuBnhJ,WAAK,EAAE8nI;AAA9B,KAAD;AANkB,GAAD,CAA5B;AASA,QAAMmK,oDAAA,CAAoB,WAApB,EAAiC;AAAEnK,MAAF;AAAMh2H,QAAI,EAAE+tK;AAAZ,GAAjC,CAAN;AAEA,SAAOl0B,6EAAQ,GAAGxvI,IAAX,CAAgBrK,IAAI,IAAIA,IAAI,CAACg2H,EAAL,KAAY+3C,KAApC,CAAP;AACD;AAEM,eAAeC,WAAf,CAA2B;AAAEh4C,IAAF;AAAMjoI,OAAN;AAAa2iJ,YAAb;AAAyB78G;AAAzB,CAA3B,EAA6D;AAClE,MAAI68G,UAAU,IAAI,IAAlB,EAAwB;AACtB,QAAI1wI,IAAI,GAAG,MAAM4tK,kBAAkB,CAAC53C,EAAD,CAAnC;;AACA,QAAIh2H,IAAI,IAAI,IAAZ,EAAkB;AAChB,YAAM,IAAI7M,KAAJ,CAAU,4BAAV,CAAN;AACD;;AACDu9I,cAAU,GAAG1wI,IAAI,CAAC4K,SAAL,GAAiB8lI,UAA9B;AACD;;AAED,8BAAyB68B,+EAAoB,CAAC78B,UAAD,CAA7C;AAAA,MAAYi9B,QAAZ,yBAAMh9K,IAAN;;AAEA,yBAAyB,MAAMg0I,sEAAQ,CACrCvgG,8DAAC,CAAC,WAAD,CAAD,CACGhvC,MADH,CACU;AAAE4gI;AAAF,GADV,EAEGhB,SAFH,CAEa,WAFb,CADqC,CAAvC;AAAA,MAAY5wH,QAAZ,oBAAMpO,IAAN,CAXkE,CAiBlE;;;AACA,MAAI23K,QAAJ,EAAc;AACZ,QAAIM,WAAW,GAAGP,WAAW,CAC3BC,QAD2B,EAE3B5/K,KAAK,GAAGA,KAAK,CAACqW,QAAD,CAAR,GAAqB,IAAItL,IAAJ,EAFC,CAA7B;;AAKA,QAAIm1K,WAAW,KAAK7pK,QAApB,EAA8B;AAC5B;AACA;AACA,UAAI8pK,EAAE,GAAG,MAAM/tC,yCAAA,CACb,6EADa,EAEb,CAACnK,EAAD,CAFa,CAAf;AAKA,YAAMmK,0CAAA,CACJ,qBADI,EAEJtsG,KAAK,GACD;AACEmiG,UAAE,EAAEk4C,EAAE,CAACl4C,EADT;AAEEm4C,sBAAc,EAAE7xB,0DAAU,CAAC2xB,WAAD,CAF5B;AAGEG,yBAAiB,EAAEt1K,IAAI,CAACoE,GAAL;AAHrB,OADC,GAMD;AACE84H,UAAE,EAAEk4C,EAAE,CAACl4C,EADT;AAEEq4C,uBAAe,EAAE/xB,0DAAU,CAAC2xB,WAAD,CAF7B;AAGEK,0BAAkB,EAAEJ,EAAE,CAACE;AAHzB,OARA,CAAN;AAcD;AACF;AACF,C,CAED;;AAEO,eAAeG,cAAf,CAA8B;AAAEr4K,UAAF;AAAYw6I,YAAU,GAAG;AAAzB,IAAgC,EAA9D,EAAkE;AACvE,MAAI89B,UAAU,GAAIt4K,QAAQ,IAAIA,QAAQ,CAAC8/H,EAAtB,IAA6BpD,IAAI,CAACgX,MAAL,EAA9C;;AAEA,+BAAyB2jC,+EAAoB,CAAC78B,UAAD,CAA7C;AAAA,MAAYi9B,QAAZ,0BAAMh9K,IAAN;;AACA,MAAIg9K,QAAQ,IAAI,IAAhB,EAAsB;AACpB,UAAM,IAAIx6K,KAAJ,CAAU,mDAAV,CAAN;AACD;;AACD,MAAIw6K,QAAQ,CAACz/K,KAAT,IAAkB,IAAtB,EAA4B;AAC1B,UAAM,IAAIiF,KAAJ,CAAU,kBAAV,CAAN;AACD;;AAED,MAAIiR,QAAQ,GAAGspK,WAAW,CAACC,QAAD,CAA1B;AACA,MAAIc,YAAY,GAAGrqK,QAAQ,GAAGk4I,0DAAU,CAACl4I,QAAD,CAAb,GAA0B,IAArD,CAZuE,CAcvE;;AACA,MAAIypK,MAAJ;AACAA,QAAM,GAAG,MAAM/zB,+EAAU,CAAC;AACxBrJ,SAAK,EAAE,IADiB;AAExBC,cAFwB;AAGxBC,WAAO,EAAE,CAAC;AAAEtB,QAAE,EAAE,eAAN;AAAuBnhJ,WAAK,EAAEsgL;AAA9B,KAAD;AAHe,GAAD,CAAzB;AAMA,MAAItxK,GAAG,GAAGpE,IAAI,CAACoE,GAAL,EAAV;AACA,MAAIwxK,UAAU,GAAG,MAAMvuC,kDAAA,CAAkB,qBAAlB,EAAyC;AAC9DwuC,eAAW,EAAEH,UADiD;AAE9DH,mBAAe,EAAEI,YAF6C;AAG9DH,sBAAkB,EAAEpxK,GAH0C;AAI9DixK,kBAAc,EAAEM,YAJ8C;AAK9DL,qBAAiB,EAAElxK;AAL2C,GAAzC,CAAvB;AAQA,MAAI84H,EAAE,GAAG,MAAMmK,oDAAA,CAAoB,WAApB,kCACVjqI,QADU;AAEb8/H,MAAE,EAAEw4C,UAFS;AAGbxuK,QAAI,EAAE6tK;AAHO,KAAf;AAMA,SAAOW,UAAP;AACD,C,CAED;;AAEO,eAAeI,cAAf,CAA8B;AAAE14K,UAAF;AAAYw6I,YAAZ;AAAwBm+B;AAAxB,CAA9B,EAAuE;AAC5E,MAAI34K,QAAQ,CAAC8J,IAAb,EAAmB;AACjB,UAAM,IAAI7M,KAAJ,CAAU,0CAAV,CAAN;AACD,GAH2E,CAK5E;;;AACA,MAAI6M,IAAJ,CAN4E,CAQ5E;AACA;;AACA,MAAI0wI,UAAJ,EAAgB;AACd,iCAAyB68B,+EAAoB,CAAC78B,UAAD,CAA7C;AAAA,QAAYi9B,QAAZ,0BAAMh9K,IAAN;;AACA,QAAIg9K,QAAQ,IAAIA,QAAQ,CAACz/K,KAAT,IAAkB,IAAlC,EAAwC;AACtC,YAAM,IAAIiF,KAAJ,CAAU,kBAAV,CAAN;AACD,KAJa,CAMd;AACA;;;AACA6M,QAAI,GAAG,MAAM4tK,kBAAkB,CAAC13K,QAAQ,CAAC8/H,EAAV,CAA/B;;AAEA,QAAIh2H,IAAI,IAAI,IAAZ,EAAkB;AAChB;AACA;AACA;AACA;AACAA,UAAI,GAAG,MAAM8tK,kBAAkB,CAAC53K,QAAQ,CAAC8/H,EAAV,CAA/B;AACD;AACF;;AAED,QAAMgO,4DAAa,CAAC,YAAY;AAC9B,QAAI0M,UAAJ,EAAgB;AACd,UAAIo+B,aAAa,GAAG9uK,IAAI,CAAC4K,SAAL,GAAiB8lI,UAArC;AACA,UAAI28B,aAAa,GAAGD,gBAAgB,CAAC0B,aAAD,EAAgBp+B,UAAhB,CAApC;AAEA,YAAMqJ,+EAAU,CAAC;AAAE/jB,UAAE,EAAEh2H,IAAI,CAACg2H,EAAX;AAAe0a,kBAAU,EAAE28B;AAA3B,OAAD,CAAhB,CAJc,CAMd;;AACA,UAAI0B,SAAS,GAAG;AAAA,YAAGjkK,IAAH,QAAGA,IAAH;AAAA,YAAYksH,MAAZ;;AAAA,eAAyBA,MAAzB;AAAA,OAAhB,CAPc,CASd;AACA;AACA;AACA;;;AACA,UACE63C,aAAa,IACb,CAACjlH,iDAAS,CACRklH,aAAa,CAACzkK,IAAd,CAAmB4Y,CAAC,IAAIA,CAAC,CAAC0U,KAAF,KAAY,SAApC,CADQ,EAERm3I,aAAa,CAACzkK,IAAd,CAAmB4Y,CAAC,IAAIA,CAAC,CAAC0U,KAAF,KAAY,SAApC,CAFQ,CADV,IAKA,CAACiyB,iDAAS,CACRmlH,SAAS,CAACD,aAAa,CAACzkK,IAAd,CAAmB4Y,CAAC,IAAIA,CAAC,CAAC0U,KAAF,KAAY,MAApC,CAAD,CADD,EAERo3I,SAAS,CAAC1B,aAAa,CAAChjK,IAAd,CAAmB4Y,CAAC,IAAIA,CAAC,CAAC0U,KAAF,KAAY,MAApC,CAAD,CAFD,CANZ,EAUE;AACA,cAAMq2I,WAAW,CAAC;AAChBh4C,YAAE,EAAE9/H,QAAQ,CAAC8/H,EADG;AAEhB0a,oBAAU,EAAE28B,aAFI;AAGhBx5I,eAAK,EAAE;AAHS,SAAD,CAAjB;AAKD;AACF,KA9BD,MA8BO,IAAIg7I,aAAJ,EAAmB;AACxB,YAAMb,WAAW,CAAC;AAAEh4C,UAAE,EAAE9/H,QAAQ,CAAC8/H,EAAf;AAAmBniG,aAAK,EAAE;AAA1B,OAAD,CAAjB;AACD;;AAED,UAAMssG,oDAAA,CAAoB,WAApB,EAAiCjqI,QAAjC,CAAN;AACD,GApCkB,CAAnB;AAqCD;AAEM,eAAe84K,cAAf,CAA8B;AAAEh5C;AAAF,CAA9B,EAAsC;AAC3C,yBAAuB,MAAM2O,sEAAQ,CACnCvgG,8DAAC,CAAC,WAAD,CAAD,CACGhvC,MADH,CACU;AAAE4gI;AAAF,GADV,EAEGhB,SAFH,CAEa,MAFb,CADmC,CAArC;AAAA,MAAY64C,MAAZ,oBAAM73K,IAAN;;AAMA,QAAMguI,4DAAa,CAAC,YAAY;AAC9B,UAAM7D,2CAAA,CAAW,OAAX,EAAoB0tC,MAApB,CAAN;AACA,UAAM1tC,2CAAA,CAAW,WAAX,EAAwBnK,EAAxB,CAAN;AACD,GAHkB,CAAnB;AAID;AAEM,eAAei5C,YAAf,CAA4B;AAAEj5C;AAAF,CAA5B,EAAoC;AACzC,SAAOg4C,WAAW,CAAC;AACjBh4C,MADiB;AAEjBjoI,SAAK,EAAEqW,QAAQ,IAAI;AACjB,aAAOygC,gDAAA,CAAU8c,gEAAS,CAACv9C,QAAD,CAAnB,EAA+B,CAA/B,CAAP;AACD;AAJgB,GAAD,CAAlB;AAMD,C,CAED;AACA;;AACO,SAAS8qK,uBAAT,CAAiC;AAAEh5K;AAAF,CAAjC,EAA+C,CAAE;AAEjD,SAASi5K,iBAAT,GAA6B;AAClC,SAAOC,sEAAa,EAApB;AACD;AAEM,eAAeC,gBAAf,CAAgC;AAAEp7K,QAAF;AAAUmC;AAAV,CAAhC,EAAmD;AACxD,MAAI0N,KAAK,GAAG4qI,iFAAsB,CAACz6I,MAAD,CAAlC;;AAEA,MAAI;AACF,QAAIiC,QAAQ,GAAG,IAAIy4I,yDAAJ,CAAc;AAAE/uI,YAAM,EAAEkE;AAAV,KAAd,CAAf;AAEA,WAAO5N,QAAQ,CACZlH,WADI,CACQ;AAAEjB,WAAK,EAAE82C,mDAAA,CAAa,IAAI/rC,IAAJ,EAAb,CAAT;AAAmCtG,UAAI,EAAE4D;AAAzC,KADR,EAEJ7D,OAFI,GAGJb,GAHI,CAGAf,IAAI,IAAI88I,kEAAW,CAAC98I,IAAI,CAACA,IAAN,CAHnB,CAAP;AAID,GAPD,CAOE,OAAOmiB,GAAP,EAAY;AACZuyH,mFAAiB,CAACpxI,MAAD,CAAjB;AACA,UAAM6e,GAAN;AACD;AACF,C,CAED;;AAEA,SAASw8J,YAAT,CAAsBtvK,IAAtB,EAA4B;AAC1B,cACEA,IAAI,YAAYlB,qDAAhB,GAAuBkB,IAAI,CAAC4K,SAAL,EAAvB,GAA0CsuI,sEAAS,CAACE,IAAV,CAAep5I,IAAf,CAD5C;AAAA,MAAM2wI,OAAN,SAAMA,OAAN;AAAA,MAAeD,UAAf,SAAeA,UAAf;;AAGA,MAAIC,OAAO,IAAIA,OAAO,CAACtmI,IAAR,CAAatV,CAAC,IAAIA,CAAC,CAACs6I,EAAF,KAAS,eAA3B,CAAf,EAA4D;AAC1D,QAAIm/B,UAAU,GAAG79B,OAAO,CAACtmI,IAAR,CAAatV,CAAC,IAAIA,CAAC,CAACs6I,EAAF,KAAS,eAA3B,EAA4CnhJ,KAA7D;;AAEA,QAAIsgL,UAAJ,EAAgB;AACd,UAAIjmB,KAAK,GAAGglB,+EAAoB,CAAC78B,UAAD,CAAhC;AAEA,UAAI6+B,QAAQ,GAAG7+B,UAAU,CAAC95I,SAAX,CAAqBqsB,CAAC,IAAIA,CAAC,KAAKslI,KAAK,CAAC9vB,KAAtC,CAAf;AACA,UAAI+2C,UAAU,GAAG9+B,UAAU,CAAC95I,SAAX,CAAqBqsB,CAAC,IAAIA,CAAC,KAAKslI,KAAK,CAACnxB,OAAtC,CAAjB;AACA,UAAIq4C,SAAS,GAAG/+B,UAAU,CAAC95I,SAAX,CAAqBqsB,CAAC,IAAIA,CAAC,KAAKslI,KAAK,CAAC3uJ,MAAtC,CAAhB;AACA,UAAI81K,OAAO,GAAGh/B,UAAU,CAAC95I,SAAX,CAAqBqsB,CAAC,IAAIA,CAAC,KAAKslI,KAAK,CAAC53J,IAAtC,CAAd;AAEAwvI,kDAAA,CACE,gHADF,EAEE,CACEquC,UADF,EAEEe,QAAQ,KAAK,CAAC,CAAd,GAAkB,IAAlB,GAA0B,KAAIA,QAAS,GAFzC,EAGEC,UAAU,KAAK,CAAC,CAAhB,GAAoB,IAApB,GAA4B,KAAIA,UAAW,GAH7C,EAIEC,SAAS,KAAK,CAAC,CAAf,GAAmB,IAAnB,GAA2B,KAAIA,SAAU,GAJ3C,EAKEC,OAAO,KAAK,CAAC,CAAb,GAAiB,IAAjB,GAAyB,KAAIA,OAAQ,GALvC,CAFF;AAUD;AACF;AACF;;AAED,SAASC,cAAT,GAA0B;AACxB;AACAxvC,iDAAA,CAAe,MAAM;AACnB0Z,iFAAQ,GAAGh5I,OAAX,CAAmBb,IAAI,IAAI;AACzBsvK,kBAAY,CAACtvK,IAAD,CAAZ;AACD,KAFD;AAGD,GAJD;AAMA,SAAO25I,8DAAe,CAACC,WAAD,CAAtB;AACD;;AAED,SAASA,WAAT,CAAqBK,SAArB,EAAgCC,SAAhC,EAA2C;AACzC,MAAI01B,KAAK,GAAG,KAAZ;AACA11B,WAAS,CAACr5I,OAAV,CAAkB,CAACuT,KAAD,EAAQshH,KAAR,KAAkB;AAClC,QAAIA,KAAK,KAAK,OAAd,EAAuB;AACrBk6C,WAAK,GAAG,IAAR;AACAx7J,WAAK,CAACvT,OAAN,CAAcs5I,QAAQ,IAAI;AACxBm1B,oBAAY,CAACn1B,QAAD,CAAZ;AACD,OAFD;AAGD;AACF,GAPD;AAQD,C,CAED;AACA;;;AAEA,eAAe01B,0BAAf,CAA0C;AAAE75C;AAAF,CAA1C,EAAkD;AAChD,yBAAe,MAAM2O,sEAAQ,CAC3BvgG,8DAAC,CAAC,WAAD,CAAD,CACGhvC,MADH,CACU;AAAE4gI;AAAF,GADV,EAEGlB,MAFH,CAEU,GAFV,CAD2B,CAA7B;AAAA,MAAM9+H,IAAN,oBAAMA,IAAN;;AAKA,MAAIE,QAAQ,GAAGF,IAAI,CAAC,CAAD,CAAnB;;AACA,MAAIE,QAAQ,IAAI,IAAZ,IAAoBA,QAAQ,CAACs3J,QAAT,IAAqB,IAA7C,EAAmD;AACjD;AACD;;AAED,MAAIjyB,WAAW,GAAG;AAChB9C,SAAK,EAAEviI,QAAQ,CAACq3J,MADA;AAEhBn2B,WAAO,EAAElhI,QAAQ,CAACs3J,QAFF;AAGhB5zJ,UAAM,EAAEk2K,6EAAkB,CAAC55K,QAAQ,CAACu3J,OAAV,CAHV;AAIhB98J,QAAI,EAAEuF,QAAQ,CAACk3J,SAJC;AAKhBl3J,YAAQ,EAAEA,QAAQ,CAAC8/H,EALH;AAMhB0J,WAAO,EAAE;AANO,GAAlB;;AASA,MAAInE,WAAW,CAACnE,OAAhB,EAAyB;AACvB,UAAMX,uEAAe,CAAC8E,WAAW,CAACnE,OAAb,EAAsB,CAACmE,WAAD,CAAtB,CAArB;AACD;AACF,C,CAED;;;AAEO,eAAew0C,uBAAf,CAAuCC,WAAvC,EAAoD;AACzD;AACA,yBAA0B,MAAMrrC,sEAAQ,CACtCvgG,8DAAC,CAAC,WAAD,CAAD,CACGhvC,MADH,CACU;AAAEi4J,aAAS,EAAE,KAAb;AAAoB,uBAAmB;AAAvC,GADV,EAEGv4B,MAFH,CAEU,GAFV,CADsC,CAAxC;AAAA,MAAY/+H,SAAZ,oBAAMC,IAAN;;AAKA,yBAA6B,MAAM2uI,sEAAQ,CACzCsrC,kFAAuB,CAACl6K,SAAD,CADkB,CAA3C;AAAA,MAAYm6K,YAAZ,oBAAMl6K,IAAN;;AAGA,MAAIm6K,QAAQ,GAAG,IAAInnK,GAAJ,CAAQknK,YAAY,CAAC96K,MAAb,CAAoBw9C,OAApB,EAA6BlhD,GAA7B,CAAiCi8I,GAAG,IAAIA,GAAG,CAACz3I,QAA5C,CAAR,CAAf;AAEA,MAAIk6K,YAAY,GAAG,EAAnB;AACA,MAAIC,OAAO,GAAG,KAAd;;AAEA,OAAK,IAAIn6K,QAAT,IAAqBH,SAArB,EAAgC;AAC9B,QAAIigE,MAAM,GAAGs6G,oEAAS,CACpBp6K,QAAQ,CAACk3J,SADW,EAEpBl3J,QAAQ,CAACm3J,SAFW,EAGpB8iB,QAAQ,CAACxpK,GAAT,CAAazQ,QAAQ,CAAC8/H,EAAtB,CAHoB,CAAtB;;AAMA,QAAIhgE,MAAM,KAAK,MAAf,EAAuB;AACrB,UAAI9/D,QAAQ,CAACuB,KAAb,EAAoB;AAClB;AACA,YAAIvB,QAAQ,CAACuB,KAAT,CAAeoN,SAAnB,EAA8B;AAC5B,cAAI;AACF,kBAAMmpK,WAAW,CAAC;AAAEh4C,gBAAE,EAAE9/H,QAAQ,CAAC8/H;AAAf,aAAD,CAAjB;AACD,WAFD,CAEE,OAAOljH,GAAP,EAAY,CACZ;AACA;AACD;AACF,SAPD,MAOO;AACL,cAAI5c,QAAQ,CAACuB,KAAT,GAAiBiR,iEAAU,EAA/B,EAAmC;AACjC;AACA,kBAAMkmK,cAAc,CAAC;AACnB14K,sBAAQ,EAAE;AAAE8/H,kBAAE,EAAE9/H,QAAQ,CAAC8/H,EAAf;AAAmBq3B,yBAAS,EAAE;AAA9B;AADS,aAAD,CAApB;AAGD;AACF;AACF;AACF,KAnBD,MAmBO,IACL,CAACr3F,MAAM,KAAK,KAAX,IAAoBA,MAAM,KAAK,QAAhC,KACA9/D,QAAQ,CAACo3J,iBADT,IAEAp3J,QAAQ,CAACs3J,QAHJ,EAIL;AACA;AACA,UAAIwiB,WAAJ,EAAiB;AACf,cAAMH,0BAA0B,CAAC;AAAE75C,YAAE,EAAE9/H,QAAQ,CAAC8/H;AAAf,SAAD,CAAhC;AAEAq6C,eAAO,GAAG,IAAV;AACD,OAJD,MAIO;AACLD,oBAAY,CAAC58K,IAAb,CAAkB0C,QAAQ,CAACq3J,MAA3B;AACD;AACF;AACF;;AAED,MAAI6iB,YAAY,CAACz7K,MAAb,GAAsB,CAA1B,EAA6B;AAC3B2oJ,cAAU,CAACvnF,IAAX,CAAgB,mBAAhB,EAAqC;AAAE8kE,YAAM,EAAEu1C;AAAV,KAArC;AACD,GAFD,MAEO,IAAIC,OAAJ,EAAa;AAClB;AACA;AACA;AACA;AACA/yB,cAAU,CAACvnF,IAAX,CAAgB,YAAhB,EAA8B;AAC5BjrD,UAAI,EAAE,SADsB;AAE5BwvI,YAAM,EAAE,CAAC,cAAD,CAFoB;AAG5Bi2B,kBAAY,EAAE;AAHc,KAA9B;AAKD;AACF,C,CAED;;AACA,IAAIntB,GAAG,GAAGM,sDAAS,EAAnB;AAEAN,GAAG,CAACnxJ,MAAJ,CAAW,iBAAX,EAA8B2hK,0DAAO,CAACC,uDAAQ,CAAC0a,cAAD,CAAT,CAArC;AACAnrB,GAAG,CAACnxJ,MAAJ,CAAW,iBAAX,EAA8B2hK,0DAAO,CAACC,uDAAQ,CAAC+a,cAAD,CAAT,CAArC;AACAxrB,GAAG,CAACnxJ,MAAJ,CAAW,iBAAX,EAA8B2hK,0DAAO,CAACC,uDAAQ,CAACmb,cAAD,CAAT,CAArC;AACA5rB,GAAG,CAACnxJ,MAAJ,CAAW,yBAAX,EAAsC2hK,0DAAO,CAACC,uDAAQ,CAACob,YAAD,CAAT,CAA7C;AACA7rB,GAAG,CAACnxJ,MAAJ,CACE,2BADF,EAEE2hK,0DAAO,CAACC,uDAAQ,CAACgc,0BAAD,CAAT,CAFT;AAIAzsB,GAAG,CAACnxJ,MAAJ,CACE,4BADF,EAEE2hK,0DAAO,CAAC,MAAMmc,uBAAuB,CAAC,IAAD,CAA9B,CAFT;AAIA3sB,GAAG,CAACnxJ,MAAJ,CAAW,oCAAX,EAAiDi9K,uBAAjD;AACA9rB,GAAG,CAACnxJ,MAAJ,CAAW,mBAAX,EAAgCk9K,iBAAhC;AACA/rB,GAAG,CAACnxJ,MAAJ,CAAW,6BAAX,EAA0Co9K,gBAA1C;AAEAjsB,GAAG,CAACH,OAAJ,CAAY0sB,cAAZ;AAEAvsB,GAAG,CAACN,MAAJ,CAAW7hI,EAAX,CAAc,MAAd,EAAsB,CAAC;AAAEnW,MAAF;AAAQ0lK;AAAR,CAAD,KAAuB;AAC3C,MAAIC,aAAa,GACf3lK,IAAI,KAAK,SAAT,IAAsBA,IAAI,KAAK,OAA/B,IAA0CA,IAAI,KAAK,cADrD;;AAGA,MAAI2lK,aAAa,IAAIzrC,+CAAA,EAArB,EAAuC;AACrC,0BAA0BA,+CAAA,EAA1B;AAAA,QAAM0rC,eAAN,mBAAMA,eAAN;;AAEA,QAAIA,eAAe,KAAKhoK,iEAAU,EAAlC,EAAsC;AACpCq7H,mEAAU,CAAC,MAAMgsC,uBAAuB,CAACjlK,IAAI,KAAK,SAAV,CAA9B,CAAV;AAEAk6H,sDAAA,CAAgB;AAAE0rC,uBAAe,EAAEhoK,iEAAU;AAA7B,OAAhB;AACD;AACF;AACF,CAbD;AAee06I,kEAAf,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACphBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMxwB,IAAI,GAAG7iH,mBAAO,CAAC,qFAAD,CAApB;;AAEA,SAAS4gK,SAAT,CAAmB18K,MAAnB,EAA2B;AACzB,MAAIiC,QAAQ,GAAG,IAAIy4I,wDAAJ,CAAc;AAAE/uI,UAAM,EAAE8uI,gFAAsB,CAACz6I,MAAD;AAAhC,GAAd,CAAf;AACA,SAAOiC,QAAQ,CACZlH,WADI,CACQ;AAAEwD,QAAI,EAAE;AAAR,GADR,EAEJD,OAFI,GAGJb,GAHI,CAGAmzC,CAAC,IAAIA,CAAC,CAACl0C,IAHP,CAAP;AAID;;AAED,eAAekmI,eAAf,CAA+BlmI,IAA/B,EAAqCymI,OAArC,EAA8C;AAC5C,wBAAe,MAAMuN,sEAAQ,CAC3BvgG,6DAAC,CAAC,cAAD,CAAD,CACGhvC,MADH,CACU;AACNgiI,WADM;AAENlhI,YAAQ,EAAE,IAFJ;AAGN;AACA,2BAAuB,IAJjB;AAKN0kJ,QAAI,EAAE,CACJ;AAAEjqJ,UAAI,EAAE;AAAEsqJ,YAAI,EAAEp2G,gDAAA,CAAUl0C,IAAV,EAAgB,CAAhB;AAAR;AAAR,KADI,EAEJ;AAAEA,UAAI,EAAE;AAAEuqJ,YAAI,EAAEr2G,gDAAA,CAAUl0C,IAAV,EAAgB,CAAhB;AAAR;AAAR,KAFI;AALA,GADV,EAWGmkI,MAXH,CAWU,GAXV,EAYGrlI,OAZH,CAYW;AAAEq7I,UAAM,EAAE;AAAV,GAZX,CAD2B,CAA7B;AAAA,MAAM90I,IAAN,mBAAMA,IAAN;;AAeA,SAAOA,IAAP;AACD;;AAED,SAAS46K,OAAT,CAAiBC,IAAjB,EAAuBC,IAAvB,EAA6B;AAC3B,MAAIC,OAAO,GAAG3zK,IAAI,CAACuF,GAAL,CAASkiC,yDAAA,CAAmB8c,gEAAS,CAACkvH,IAAD,CAA5B,EAAoClvH,gEAAS,CAACmvH,IAAD,CAA7C,CAAT,CAAd,CAD2B,CAG3B;AACA;AACA;;AACA,SAAO,KAAKC,OAAO,GAAG,CAAf,CAAP;AACD;;AAEM,SAASC,cAAT,CAAwBC,SAAxB,EAAmCh9K,MAAnC,EAA2Ci9K,gBAAgB,GAAG,GAA9D,EAAmE;AACxED,WAAS,GAAG,CAAC,GAAGA,SAAJ,EAAexiL,OAAf,EAAZ;AACA,MAAI0iL,SAAS,GAAGF,SAAS,CAAC,CAAD,CAAzB;AACA,MAAIG,MAAM,GAAGH,SAAS,CAACt6K,KAAV,CAAgB,CAAhB,CAAb;AACA,MAAIZ,SAAS,GAAG,EAAhB;;AAEA,OAAK,IAAIi1I,KAAT,IAAkBmmC,SAAS,CAACx6C,YAA5B,EAA0C;AACxC,QAAIyZ,SAAS,GAAGC,8EAAwB,CAACrF,KAAK,CAACpxI,MAAP,CAAxC;AACA,QAAI6+H,KAAK,GAAGuS,KAAK,CAACvS,KAAlB;AACA,QAAIrB,OAAO,GAAG4T,KAAK,CAAC5T,OAApB;AAEA,QAAIw4C,KAAK,GAAGwB,MAAM,CAAC1/K,GAAP,CAAW2/K,KAAK,IAAI;AAC9B,UAAIxkB,OAAO,GAAGwkB,KAAK,CAAC16C,YAAN,CAAmBtsH,IAAnB,CACZ2X,CAAC,IACCA,CAAC,CAACpoB,MAAF,IAAYoxI,KAAK,CAACpxI,MAAN,GAAew2I,SAA3B,IACApuH,CAAC,CAACpoB,MAAF,IAAYoxI,KAAK,CAACpxI,MAAN,GAAew2I,SAHjB,CAAd;AAKAyc,aAAO,GAAGA,OAAO,IAAIA,OAAO,CAACp0B,KAAR,KAAkBA,KAA7B,GAAqCo0B,OAArC,GAA+C,IAAzD;;AAEA,UAAIA,OAAJ,EAAa;AACX,eAAO;AAAE7hB,eAAK,EAAE6hB,OAAT;AAAkBykB,cAAI,EAAEV,OAAO,CAACS,KAAK,CAAC1gL,IAAP,EAAak8J,OAAO,CAACl8J,IAArB;AAA/B,SAAP;AACD;;AACD,aAAO,IAAP;AACD,KAZW,CAAZ;;AAcA,QAAIi/K,KAAK,CAACjzK,OAAN,CAAc,IAAd,MAAwB,CAAC,CAA7B,EAAgC;AAC9B;AACD;;AAED,QAAI20K,IAAI,GAAG1B,KAAK,CAAChhL,MAAN,CACT,CAACoyB,KAAD,EAAQlT,KAAR,KAAkBkT,KAAK,GAAGlT,KAAK,CAACwjK,IADvB,EAETV,OAAO,CAACO,SAAS,CAACxgL,IAAX,EAAiBq6I,KAAK,CAACr6I,IAAvB,CAFE,CAAX;AAKA,QAAI4gL,WAAW,GAAG3B,KAAK,CAAChhL,MAAN,CAChB,CAAC4iL,KAAD,EAAQ1jK,KAAR,KAAkB0jK,KAAK,IAAI1jK,KAAK,CAACk9H,KAAN,CAAYpxI,MAAZ,KAAuBoxI,KAAK,CAACpxI,MADxC,EAEhB,IAFgB,CAAlB;AAKA7D,aAAS,CAACvC,IAAV,CAAe;AACb89K,UADa;AAEb13K,YAAM,EAAEoxI,KAAK,CAACpxI,MAFD;AAGbw9H,aAAO,EAAE4T,KAAK,CAAC5T,OAHF;AAIbqB,WAAK,EAAEuS,KAAK,CAACvS,KAJA;AAKb9nI,UAAI,EAAEsD,MALO;AAMb;AACA;AACAw9K,eAAS,EAAEH,IAAI,KAAKL,SAAS,CAACt8K,MARjB;AASb48K;AATa,KAAf;AAWD;;AAED,SAAOx7K,SAAP;AACD;;AAED,eAAe27K,mBAAf,CACEC,SADF,EAEEC,OAFF,EAGEC,UAHF,EAIEn7C,SAJF,EAKEw6C,gBALF,EAME;AACA,MAAIn7K,SAAS,GAAG,EAAhB;AAEA,MAAIyX,CAAC,GAAG,CAAR;;AACA,OAAK,IAAIA,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGokK,OAApB,EAA6BpkK,CAAC,EAA9B,EAAkC;AAChC,QAAIzf,KAAK,GAAG82C,gDAAA,CAAU8sI,SAAV,EAAqBnkK,CAArB,CAAZ;AACA,QAAIvZ,MAAJ;;AACA,QAAI,OAAO49K,UAAP,KAAsB,UAA1B,EAAsC;AACpC59K,YAAM,GAAG49K,UAAU,CAAC9jL,KAAD,CAAnB;;AAEA,UAAIkG,MAAM,KAAK,KAAf,EAAsB;AACpB;AACA;AACD;AACF,KAPD,MAOO;AACLA,YAAM,mCAAQ49K,UAAR;AAAoB9jL;AAApB,QAAN;AACD,KAZ+B,CAchC;;;AACAkG,UAAM,CAAClG,KAAP,GAAe0/I,kEAAW,CAACx5I,MAAM,CAAClG,KAAR,CAA1B;AAEA,QAAIiI,IAAI,GAAG,EAAX;AACA,QAAIjD,KAAK,GAAG49K,SAAS,CAAC18K,MAAD,CAArB;;AACA,SAAK,IAAItD,IAAT,IAAiBoC,KAAjB,EAAwB;AACtBiD,UAAI,CAACxC,IAAL,CAAU;AACR7C,YAAI,EAAE88I,kEAAW,CAAC98I,IAAD,CADT;AAERgmI,oBAAY,EAAE,MAAME,eAAe,CAAClmI,IAAD,EAAO+lI,SAAP;AAF3B,OAAV;AAID;;AAED3gI,aAAS,GAAGA,SAAS,CAAC41B,MAAV,CACVqlJ,cAAc,CAACh7K,IAAD,EAAO/B,MAAP,EAAei9K,gBAAf,CADJ,CAAZ;AAGD;;AACD,SAAOn7K,SAAP;AACD;;AAED,eAAe+7K,MAAf,CAAsBz+K,SAAtB,EAAiCqjI,SAAjC,EAA4C;AAC1C,SAAOg7C,mBAAmB,CACxB7sI,iDAAA,CAAW8c,gEAAS,CAACtuD,SAAD,CAApB,EAAiC,CAAjC,CADwB,EAExB,IAAI,CAFoB,EAGxB;AAAEwR,aAAS,EAAE;AAAb,GAHwB,EAIxB6xH,SAJwB,CAA1B;AAMD;;AAED,eAAeq7C,WAAf,CAA2B1+K,SAA3B,EAAsCqjI,SAAtC,EAAiD;AAC/C,SAAOg7C,mBAAmB,EACxB;AACA;AACA7sI,mDAAA,CAAW8c,gEAAS,CAACtuD,SAAD,CAApB,EAAiC,CAAjC,CAHwB,EAIxB,IAAI,CAJoB,EAKxB;AAAEwR,aAAS,EAAE,QAAb;AAAuBa,YAAQ,EAAE;AAAjC,GALwB,EAMxBgxH,SANwB,CAA1B;AAQD;;AAED,eAAes7C,OAAf,CAAuB3+K,SAAvB,EAAkCqjI,SAAlC,EAA6C;AAC3C,SAAOg7C,mBAAmB,CACxB7sI,kDAAA,CAAY8c,gEAAS,CAACtuD,SAAD,CAArB,EAAkC,CAAlC,CADwB,EAExB,KAAK,CAFmB,EAGxBtF,KAAK,IAAI;AACP;AACA;AACA;AACA;AACA;AACA,QAAI82C,gDAAA,CAAU92C,KAAV,IAAmB,EAAvB,EAA2B;AACzB,aAAO,KAAP;AACD;;AACD,WAAO;AAAEA,WAAF;AAAS8W,eAAS,EAAE;AAApB,KAAP;AACD,GAbuB,EAcxB6xH,SAdwB,CAA1B;AAgBD;;AAED,eAAeu7C,cAAf,CAA8B5+K,SAA9B,EAAyCqjI,SAAzC,EAAoD;AAClD;AACA;AACA,MAAIw7C,EAAE,GAAG,MAAMR,mBAAmB,CAChC7sI,kDAAA,CAAY8c,gEAAS,CAACtuD,SAAD,CAArB,EAAkC,CAAlC,CADgC,EAEhC,CAFgC,EAGhC;AAAEwR,aAAS,EAAE,SAAb;AAAwBk8C,YAAQ,EAAE,CAAC;AAAEj2C,UAAI,EAAE,KAAR;AAAe5c,WAAK,EAAE,CAAC;AAAvB,KAAD;AAAlC,GAHgC,EAIhCwoI,SAJgC,EAKhC;AACA;AACA,MAPgC,CAAlC;AAUA,MAAIy7C,EAAE,GAAG,MAAMT,mBAAmB,CAChC7sI,kDAAA,CAAY8c,gEAAS,CAACtuD,SAAD,CAArB,EAAkC,CAAlC,CADgC,EAEhC,CAFgC,EAGhC;AAAEwR,aAAS,EAAE,SAAb;AAAwBk8C,YAAQ,EAAE,CAAC;AAAEj2C,UAAI,EAAE,KAAR;AAAe5c,WAAK,EAAE,CAAC;AAAvB,KAAD;AAAlC,GAHgC,EAIhCwoI,SAJgC,EAKhC,IALgC,CAAlC;AAQA,SAAOw7C,EAAE,CAACvmJ,MAAH,CAAUwmJ,EAAV,CAAP;AACD;;AAED,eAAeC,eAAf,CAA+B/+K,SAA/B,EAA0CqjI,SAA1C,EAAqD;AACnD,SAAOg7C,mBAAmB,CACxB7sI,iDAAA,CAAW8c,gEAAS,CAACtuD,SAAD,CAApB,EAAiC,CAAjC,CADwB,EAExB,EAFwB,EAGxBtF,KAAK,IAAI;AACP,QAAIiC,GAAG,GAAG60C,+CAAA,CAAS,IAAI/rC,IAAJ,EAAT,EAAqB,MAArB,CAAV;AACA,QAAIu5K,QAAQ,GAAGriL,GAAG,CAAC2G,KAAJ,CAAU,CAAV,EAAa,CAAb,EAAgBioB,WAAhB,EAAf;AAEA,WAAO;AACL7wB,WADK;AAEL8W,eAAS,EAAE,SAFN;AAGLk8C,cAAQ,EAAE,CAAC;AAAEj2C,YAAI,EAAEunK,QAAR;AAAkBnkL,aAAK,EAAE;AAAzB,OAAD,EAA+B;AAAE4c,YAAI,EAAEunK,QAAR;AAAkBnkL,aAAK,EAAE;AAAzB,OAA/B;AAHL,KAAP;AAKD,GAZuB,EAaxBwoI,SAbwB,CAA1B;AAeD;;AAED,eAAe47C,eAAf,CAA+Bj/K,SAA/B,EAA0CqjI,SAA1C,EAAqD;AACnD,SAAOg7C,mBAAmB,CACxB7sI,kDAAA,CAAY8c,gEAAS,CAACtuD,SAAD,CAArB,EAAkC,CAAlC,CADwB,EAExB,EAFwB,EAGxBtF,KAAK,IAAI;AACP,QAAIiC,GAAG,GAAG60C,+CAAA,CAAS,IAAI/rC,IAAJ,EAAT,EAAqB,MAArB,CAAV;AACA,QAAIu5K,QAAQ,GAAGriL,GAAG,CAAC2G,KAAJ,CAAU,CAAV,EAAa,CAAb,EAAgBioB,WAAhB,EAAf;AAEA,WAAO;AACL7wB,WADK;AAEL8W,eAAS,EAAE,SAFN;AAGLk8C,cAAQ,EAAE,CAAC;AAAEj2C,YAAI,EAAEunK,QAAR;AAAkBnkL,aAAK,EAAE;AAAzB,OAAD,EAA+B;AAAE4c,YAAI,EAAEunK,QAAR;AAAkBnkL,aAAK,EAAE;AAAzB,OAA/B;AAHL,KAAP;AAKD,GAZuB,EAaxBwoI,SAbwB,CAA1B;AAeD;;AAED,eAAe67C,aAAf,CAA6Br8K,QAA7B,EAAuC;AACrC,MAAIw6I,UAAU,GAAGx6I,QAAQ,CAACy3J,WAA1B;AACA,MAAIggB,QAAQ,GAAGj9B,UAAU,CAACrmI,IAAX,CAAgB4Y,CAAC,IAAIA,CAAC,CAAC0U,KAAF,KAAY,MAAjC,CAAf;AACA,MAAI66I,aAAa,GAAG7E,QAAQ,CAACz/K,KAA7B;;AAEA,SAAO,CAAP,EAAU;AACR,QAAIukL,UAAU,GAAGD,aAAjB;AACAA,iBAAa,qBAAQC,UAAR,CAAb;;AAEA,YAAQD,aAAa,CAAC3tK,SAAtB;AACE,WAAK,QAAL;AACE2tK,qBAAa,CAACzkL,KAAd,GAAsB0/I,kEAAW,CAC/B5oG,iDAAA,CACE8c,gEAAS,CAAC6wH,aAAa,CAACzkL,KAAf,CADX,EAEEykL,aAAa,CAAC9sK,QAAd,IAA0B,CAF5B,CAD+B,CAAjC;AAOA;;AACF,WAAK,SAAL;AACE8sK,qBAAa,CAACzkL,KAAd,GAAsB0/I,kEAAW,CAC/B5oG,kDAAA,CACE8c,gEAAS,CAAC6wH,aAAa,CAACzkL,KAAf,CADX,EAEEykL,aAAa,CAAC9sK,QAAd,IAA0B,CAF5B,CAD+B,CAAjC;AAMA;;AACF,WAAK,QAAL;AACE8sK,qBAAa,CAACzkL,KAAd,GAAsB0/I,kEAAW,CAC/B5oG,iDAAA,CACE8c,gEAAS,CAAC6wH,aAAa,CAACzkL,KAAf,CADX,EAEEykL,aAAa,CAAC9sK,QAAd,IAA0B,CAF5B,CAD+B,CAAjC;AAMA;;AACF;AACE,cAAM,IAAIvS,KAAJ,CAAU,kCAAV,CAAN;AA3BJ;;AA8BA,QAAIk6K,aAAa,GAAG38B,UAAU,CAACh/I,GAAX,CAAeuxB,CAAC,IAClCA,CAAC,CAAC0U,KAAF,KAAY,MAAZ,mCAA0B1U,CAA1B;AAA6B/0B,WAAK,EAAEskL;AAApC,SAAsDvvJ,CADpC,CAApB;;AAIA,2BAA0Bw3H,oFAAe,CAAC4yB,aAAD,EAAgB;AACvD3yB,qBAAe,EAAE;AADsC,KAAhB,CAAzC;AAAA,QAAMC,OAAN,oBAAMA,OAAN;AAAA,QAAe/N,MAAf,oBAAeA,MAAf;;AAGA,QAAIA,MAAM,CAACj4I,MAAP,GAAgB,CAApB,EAAuB;AACrB;AACA;AACA69K,mBAAa,GAAG,IAAhB;AACA;AACD;;AAED,2BAAe,MAAM7tC,sEAAQ,CAC3BvgG,6DAAC,CAAC,cAAD,CAAD,CACGhvC,MADH,CACU;AAAEwlJ,UAAI,EAAED;AAAR,KADV,EAEG7lB,MAFH,CAEU,GAFV,CAD2B,CAA7B;AAAA,QAAM9+H,IAAN,oBAAMA,IAAN;;AAMA,QAAIA,IAAI,CAACrB,MAAL,KAAgB,CAApB,EAAuB;AACrB;AACA69K,mBAAa,GAAGC,UAAhB;AACA;AACD;AACF;;AAED,MAAID,aAAJ,EAAmB;AACjB,2CACKt8K,QADL;AAEEvF,UAAI,EAAE6hL,aAFR;AAGE7kB,iBAAW,EAAEjd,UAAU,CAACh/I,GAAX,CAAeuxB,CAAC,IAC3BA,CAAC,CAAC0U,KAAF,KAAY,MAAZ,mCAA0B1U,CAA1B;AAA6B/0B,aAAK,EAAEskL;AAApC,WAAsDvvJ,CAD3C;AAHf;AAOD;;AACD,SAAO/sB,QAAP;AACD;;AAEM,eAAek5K,aAAf,GAA+B;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,yBAAyB,MAAMzqC,sEAAQ,CACrCvgG,6DAAC,CAAC,UAAD,CAAD,CACGhvC,MADH,CACU;AAAE8kI,UAAM,EAAE;AAAV,GADV,EAEGpF,MAFH,CAEU,GAFV,CADqC,CAAvC;AAAA,MAAY8E,QAAZ,oBAAM5jI,IAAN;;AAMA,MAAI08K,YAAY,GAAG,EAAnB;;AAEA,OAAK,IAAIt7C,OAAT,IAAoBwC,QAApB,EAA8B;AAC5B;AACA,QAAI6iB,WAAW,GAAG,MAAMtc,yCAAA,CACtB,iGADsB,EAEtB,CAAC/I,OAAO,CAACpB,EAAT,CAFsB,CAAxB;;AAKA,QAAIymB,WAAJ,EAAiB;AACf,UAAIslB,UAAU,GAAGvW,4DAAY,CAAC/O,WAAW,CAAC9rJ,IAAb,CAA7B;AACA+hL,kBAAY,GAAGA,YAAY,CAAC/mJ,MAAb,CACb,MAAMmmJ,MAAM,CAAC/P,UAAD,EAAa3qC,OAAO,CAACpB,EAArB,CADC,EAEb,MAAM+7C,WAAW,CAAChQ,UAAD,EAAa3qC,OAAO,CAACpB,EAArB,CAFJ,EAGb,MAAMg8C,OAAO,CAACjQ,UAAD,EAAa3qC,OAAO,CAACpB,EAArB,CAHA,EAIb,MAAMi8C,cAAc,CAAClQ,UAAD,EAAa3qC,OAAO,CAACpB,EAArB,CAJP,EAKb,MAAMo8C,eAAe,CAACrQ,UAAD,EAAa3qC,OAAO,CAACpB,EAArB,CALR,EAMb,MAAMs8C,eAAe,CAACvQ,UAAD,EAAa3qC,OAAO,CAACpB,EAArB,CANR,CAAf;AAQD;AACF;;AAED,MAAIjgI,SAAS,GAAG,CAAC,GAAGk/H,4DAAO,CAACy9C,YAAD,EAAe,OAAf,CAAP,CAA+Bv8J,OAA/B,EAAJ,EAA8CzkB,GAA9C,CACd,CAAC,CAACmnI,OAAD,EAAU9iI,SAAV,CAAD,KAA0B;AACxBA,aAAS,CAACZ,IAAV,CAAe,CAAC+8K,EAAD,EAAKC,EAAL,KAAYA,EAAE,CAACb,IAAH,GAAUY,EAAE,CAACZ,IAAxC;AACA,QAAIr1B,MAAM,GAAGlmJ,SAAS,CAAC,CAAD,CAAtB,CAFwB,CAIxB;;AACA,WAAO;AACLigI,QAAE,EAAEpD,IAAI,CAACgX,MAAL,EADC;AAELxS,aAAO,EAAE6kB,MAAM,CAAC7kB,OAFX;AAGLqB,WAAK,EAAEwjB,MAAM,CAACxjB,KAHT;AAIL9nI,UAAI,EAAEsrJ,MAAM,CAACtrJ,IAJR;AAKLiJ,YAAM,EAAEqiJ,MAAM,CAACriJ,MALV;AAML+zJ,iBAAW,EAAE,CACX;AAAEte,UAAE,EAAE,IAAN;AAAY13G,aAAK,EAAE,SAAnB;AAA8BzpC,aAAK,EAAE+tJ,MAAM,CAAC7kB;AAA5C,OADW,EAEX;AAAEiY,UAAE,EAAE,IAAN;AAAY13G,aAAK,EAAE,OAAnB;AAA4BzpC,aAAK,EAAE+tJ,MAAM,CAACxjB;AAA1C,OAFW,EAGX;AACE4W,UAAE,EAAE4M,MAAM,CAACw1B,SAAP,GAAmB,IAAnB,GAA0B,UADhC;AAEE95I,aAAK,EAAE,MAFT;AAGEzpC,aAAK,EAAE+tJ,MAAM,CAACtrJ;AAHhB,OAHW,EAQX;AACE0+I,UAAE,EAAE4M,MAAM,CAACs1B,WAAP,GAAqB,IAArB,GAA4B,UADlC;AAEE55I,aAAK,EAAE,QAFT;AAGEzpC,aAAK,EAAE+tJ,MAAM,CAACriJ;AAHhB,OARW;AANR,KAAP;AAqBD,GA3Ba,CAAhB;AA8BA,MAAI+4K,SAAS,GAAG,EAAhB;;AACA,OAAK,IAAIz8K,QAAT,IAAqBH,SAArB,EAAgC;AAC9B48K,aAAS,CAACn/K,IAAV,CAAe,MAAM++K,aAAa,CAACr8K,QAAD,CAAlC;AACD;;AACD,SAAOy8K,SAAP;AACD,C;;;;;;;;;;;;AC9YD;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,IAAI1+K,MAAM,GAAG,IAAb;;AAEA,SAAS2+K,OAAT,CAAiB7jL,IAAjB,EAAuB,GAAGivI,KAA1B,EAAiC;AAC/B,MAAIpnD,GAAG,GAAG,IAAIO,GAAJ,CAAQpoF,IAAR,CAAV;AACA6nF,KAAG,CAACi8F,QAAJ,GAAeliK,0DAAE,CAACjB,IAAH,CAAQ,GAAGsuH,KAAX,CAAf;AACA,SAAOpnD,GAAG,CAACrrE,QAAJ,EAAP;AACD;;AAEM,SAASm5J,SAAT,CAAmB9tF,GAAnB,EAAwB;AAC7B,MAAIA,GAAG,IAAI,IAAX,EAAiB;AACf3iF,UAAM,GAAG,IAAT;AACD,GAFD,MAEO;AACLA,UAAM,GAAGw3I,SAAS,CAAC70D,GAAD,CAAlB;AACD;AACF,C,CAED;;AACO,SAAS60D,SAAT,CAAmB70D,GAAnB,EAAwB;AAC7B,MAAIA,GAAJ,EAAS;AACP,WAAO;AACL0tF,iBAAW,EAAE1tF,GADR;AAELuhF,iBAAW,EAAEya,OAAO,CAACh8F,GAAD,EAAM,OAAN,CAFf;AAGL4tF,mBAAa,EAAEoO,OAAO,CAACh8F,GAAD,EAAM,UAAN,CAHjB;AAIL80D,kBAAY,EAAEknC,OAAO,CAACh8F,GAAD,EAAM,QAAN;AAJhB,KAAP;AAMD;;AACD,SAAO3iF,MAAP;AACD,C;;;;;;;;;;;;AC7BD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AACA,iBAAwB8b,mBAAO,CAAC,+EAAD,CAA/B;AAAA,MAAQ+wI,WAAR,YAAQA,WAAR;;AAEA,IAAIgyB,WAAJ,EAAiBC,cAAjB;AACA,IAAIC,aAAJ;AAEO,SAASpiL,GAAT,GAAe;AACpB,SAAOkiL,WAAP;AACD;;AAED,eAAeG,sBAAf,CAAsCC,KAAtC,EAA6CzR,KAA7C,EAAoD;AAClD,QAAMjR,mEAAA,CAAmB0iB,KAAnB,EAA0B,MAAM;AACpCzR,SAAK,CAAC5gK,OAAN,CAAclJ,IAAI,IAAI;AACpB,YAAM4qB,IAAI,GAAGuwJ,WAAW,CAACpR,QAAZ,CAAqB/pK,IAArB,CAAb,CADoB,CAGpB;;;AACA,UAAI4qB,IAAI,CAACwmH,GAAL,IAAY,IAAhB,EAAsB;AACpBynB,wEAAA,CACE0iB,KADF,EAEE,2DAFF,EAGE,CAACv7K,IAAD,EAAO4E,IAAI,CAACC,SAAL,CAAe+lB,IAAI,CAACr0B,KAApB,CAAP,CAHF;AAKD;AACF,KAXD;AAYD,GAbK,CAAN;AAcD;;AAED,SAASilL,cAAT,CAAwBC,MAAxB,EAAgCC,OAAhC,EAAyC;AAAEC;AAAF,CAAzC,EAAoD;AAClD,MAAIA,KAAJ,EAAW;AACT;AACA,QAAIjsK,GAAG,GAAGjK,IAAI,CAACqlB,MAAL,KAAgB,QAA1B;AACA+tI,oEAAA,CACE6iB,OADF,EAEE,4DAFF,EAGE,CAAChsK,GAAD,CAHF;;AAMA,QAAI+rK,MAAJ,EAAY;AACV5iB,sEAAA,CACE4iB,MADF,EAEE,4DAFF,EAGE,CAAC/rK,GAAD,CAHF;AAKD;AACF,GAhBD,MAgBO;AACLmpJ,oEAAA,CAAgB6iB,OAAhB,EAAyB,yBAAzB;AACD;AACF;;AAED,SAASE,YAAT,CAAsBH,MAAtB,EAA8BC,OAA9B,EAAuC;AACrC,MAAI31B,IAAI,GAAG8S,gEAAA,CACT6iB,OADS,EAET,0CAFS,EAGT,EAHS,EAIT,IAJS,CAAX;AAMA,MAAIhsK,GAAG,GAAGq2I,IAAI,CAAC/oJ,MAAL,KAAgB,CAAhB,GAAoB,IAApB,GAA2B+oJ,IAAI,CAAC,CAAD,CAAJ,CAAQj6I,GAA7C;;AAEA,MAAI4D,GAAG,IAAI,IAAX,EAAiB;AACf,WAAO,IAAP;AACD;;AAED,MAAI+rK,MAAJ,EAAY;AACV,QAAI11B,IAAI,GAAG8S,gEAAA,CACT4iB,MADS,EAET,0CAFS,EAGT,EAHS,EAIT,IAJS,CAAX;;AAMA,QAAI11B,IAAI,CAAC/oJ,MAAL,KAAgB,CAAhB,IAAqB+oJ,IAAI,CAAC,CAAD,CAAJ,CAAQj6I,GAAR,KAAgB4D,GAAzC,EAA8C;AAC5C,aAAO,IAAP;AACD;AACF,GAvBoC,CAyBrC;AACA;;;AACAq2I,MAAI,GAAG8S,gEAAA,CAAgB6iB,OAAhB,EAAyB,+BAAzB,EAA0D,EAA1D,EAA8D,IAA9D,CAAP;AACA,SAAO31B,IAAI,CAAC/oJ,MAAL,KAAgB,CAAvB;AACD;;AAEM,eAAe6+K,eAAf,CAA+BrzC,EAA/B,EAAmCqhC,aAAnC,EAAkD;AACvD,MAAIiS,YAAY,GAAG,CAACtjJ,MAAM,CAACg2I,WAA3B;AACA,MAAIiN,MAAM,GAAGjzC,EAAE,CAAC26B,WAAH,EAAb;AACA,MAAIuY,OAAJ;;AAEA,MAAIrN,iDAAQ,CAACqG,SAAT,IAAsBoH,YAA1B,EAAwC;AACtC;AACA;AACA;AACA;AACA,QAAIC,SAAS,GAAGvzC,EAAE,CAACs6B,eAAH,GAAqBxsJ,OAArB,CAA6B,aAA7B,EAA4C,cAA5C,CAAhB;AACA+kK,iBAAa,GAAGK,OAAO,GAAG7iB,oEAAA,CAAoBkjB,SAApB,CAA1B;AAEAljB,qEAAA,CACE6iB,OADF,EAEG;AACP;AACA;AACA,OALI;AAOD,GAfD,MAeO;AACL;AACAA,WAAO,GAAGD,MAAV;AACD;;AAED,MAAItvC,KAAJ;;AACA,MAAI2vC,YAAJ,EAAkB;AAChB3vC,SAAK,GAAG,IAAI6vC,gEAAJ,CACNV,sBAAsB,CAACriJ,IAAvB,CAA4B,IAA5B,EAAkCyiJ,OAAlC,CADM,EAENF,cAAc,CAACviJ,IAAf,CAAoB,IAApB,EAA0BwiJ,MAA1B,EAAkCC,OAAlC,CAFM,CAAR;AAID,GALD,MAKO;AACLvvC,SAAK,GAAG,IAAI6vC,gEAAJ,EAAR;AACD;;AAEDtuC,gFAAiB,CAAC;AAChBzoG,WAAO,EAAE,sBADO;AAEhBw7F,YAAQ,EAAE;AAFM,GAAD,CAAjB;AAKA06C,aAAW,GAAGhvC,KAAd;AACAivC,gBAAc,GAAGvR,aAAjB;;AAEA,MAAIA,aAAJ,EAAmB;AACjB19B,SAAK,CAACqkC,gBAAN,CAAuB,QAAvB,EAAiC3G,aAAjC;AACD;;AAED,MAAIiS,YAAY,IAAI,CAACF,YAAY,CAACH,MAAD,EAASC,OAAT,CAAjC,EAAoD;AAClD,QAAIO,UAAU,GAAG,MAAMpjB,gEAAA,CACrB6iB,OADqB,EAErB,uBAFqB,EAGrB,EAHqB,EAIrB,IAJqB,CAAvB;AAMAhqJ,WAAO,CAACsrE,GAAR,CAAa,kCAAiCi/E,UAAU,CAACj/K,MAAO,SAAhE;;AAEA,SAAK,IAAIg5I,GAAT,IAAgBimC,UAAhB,EAA4B;AAC1B,UAAI9yC,MAAM,GAAGvkI,IAAI,CAAC0G,KAAL,CAAW0qI,GAAG,CAACz/I,KAAf,CAAb;AACA41I,WAAK,CAACnnE,IAAN,CAAWgxE,GAAG,CAAClqI,GAAf,EAAoBq9H,MAApB;AACD;AACF,GAbD,MAaO;AACLz3G,WAAO,CAACsrE,GAAR,CAAY,2BAAZ;AACA,UAAMk/E,eAAe,CAAC1zC,EAAD,CAArB;AACD;;AAEDkF,gFAAiB,CAAC;AAChBzoG,WAAO,EAAE,qBADO;AAEhBw7F,YAAQ,EAAE;AAFM,GAAD,CAAjB;AAKA,SAAO0L,KAAP;AACD;AAEM,SAASgwC,iBAAT,GAA6B;AAClC,MAAIhB,WAAJ,EAAiB;AACf;AACAA,eAAW,CAACiB,MAAZ;AACAjB,eAAW,GAAG,IAAd;AACD;;AAED,MAAIE,aAAJ,EAAmB;AACjBxiB,yEAAA,CAAqBwiB,aAArB;AACAA,iBAAa,GAAG,IAAhB;AACD;AACF;AAEM,eAAegB,iBAAf,CAAiC7zC,EAAjC,EAAqC;AAC1C,MAAI2yC,WAAJ,EAAiB;AACfgB,qBAAiB;AACjB,WAAON,eAAe,CAACrzC,EAAD,EAAK4yC,cAAL,CAAtB;AACD;AACF;AAEM,eAAec,eAAf,CAA+B1zC,EAA/B,EAAmC;AACxC,MAAI2D,KAAK,GAAGgvC,WAAZ,CADwC,CAGxC;AACA;;AAEA,aAAqB9tC,+CAAA,MAAoB,EAAzC;AAAA,MAAMssB,UAAN,QAAMA,UAAN;;AAEA,MAAI57B,KAAK,GAAG47B,UAAU,KAAK,QAAf,GAA0B,iBAA1B,GAA8C,cAA1D;AACA,MAAIj1B,OAAO,GAAG,MAAM8D,EAAE,CAACrhE,GAAH,CAAQ;AAC9B,sBAAsB42D,KAAM;AAC5B;AACA;AACA,KAJsB,CAApB;AAMAoO,OAAK,CAACmwC,gBAAN,GAfwC,CAiBxC;;AACA,OAAK,IAAIt3C,MAAT,IAAmBN,OAAnB,EAA4B;AAC1B,QAAIM,MAAM,CAACzjI,KAAP,IAAgByjI,MAAM,CAACvE,QAA3B,EAAqC;AACnC,UAAIqI,SAAS,GAAI,SAAQ9D,MAAM,CAACzjI,KAAM,EAAtC;AACA4qI,WAAK,CAAC3vI,GAAN,CAAW,GAAEssI,SAAU,WAAU9D,MAAM,CAACvE,QAAS,EAAjD,EAAoDuE,MAAM,CAAC/iI,MAA3D;AACAkqI,WAAK,CAAC3vI,GAAN,CACG,GAAEssI,SAAU,cAAa9D,MAAM,CAACvE,QAAS,EAD5C,EAEEuE,MAAM,CAAC+D,SAAP,KAAqB,CAArB,GAAyB,IAAzB,GAAgC,KAFlC;AAID;AACF,GA3BuC,CA6BxC;;;AACA,MAAI4wB,UAAU,KAAK,QAAnB,EAA6B;AAC3B,QAAI4iB,YAAY,GAAG,MAAM/zC,EAAE,CAACrhE,GAAH,CAAO,kCAAP,CAAzB;;AACA,SAAK,IAAIq1G,WAAT,IAAwBD,YAAxB,EAAsC;AACpC,UAAIzzC,SAAS,GAAG2zC,oEAAa,CAACD,WAAW,CAACn+C,EAAb,CAA7B;AACA8N,WAAK,CAAC3vI,GAAN,CAAW,GAAEssI,SAAU,WAAvB,EAAmC0zC,WAAW,CAAC/iB,QAA/C;AACD;AACF;;AAEDttB,OAAK,CAACuwC,cAAN;AACD;AAEM,SAASC,OAAT,CAAiBxwC,KAAjB,EAAwBnsI,IAAxB,EAA8B;AACnC,SAAOm7K,WAAW,CAACpR,QAAZ,CAAqB5gB,WAAW,CAAChd,KAAD,EAAQnsI,IAAR,CAAhC,CAAP;AACD;AAEM,SAASoqJ,YAAT,CAAsBje,KAAtB,EAA6BnsI,IAA7B,EAAmC;AACxC,SAAOm7K,WAAW,CAAC1yC,QAAZ,CAAqB0gB,WAAW,CAAChd,KAAD,EAAQnsI,IAAR,CAAhC,CAAP;AACD;AAEM,SAASs8K,gBAAT,GAA4B;AACjC,MAAInB,WAAJ,EAAiB;AACfA,eAAW,CAACmB,gBAAZ;AACD;AACF;AAEM,SAASI,cAAT,GAA0B;AAC/B,MAAIvB,WAAJ,EAAiB;AACfA,eAAW,CAACuB,cAAZ;AACD;AACF;AAEM,SAASE,iBAAT,GAA6B;AAClC,SAAO,IAAIn/J,OAAJ,CAAYC,OAAO,IAAI;AAC5B,QAAIy9J,WAAJ,EAAiB;AACfA,iBAAW,CAAC0B,QAAZ,CAAqBn/J,OAArB;AACD,KAFD,MAEO;AACLA,aAAO;AACR;AACF,GANM,CAAP;AAOD,C;;;;;;;;;;;ACvPD,SAAS5P,KAAT,CAAeokD,GAAf,EAAoB;AAClB,SAAOA,GAAG,CAAC,CAAD,CAAV;AACD;;AAED,SAAS4qH,UAAT,CAAoB5qH,GAApB,EAAyB;AACvB,QAAMrmD,IAAI,GAAGjS,MAAM,CAACiS,IAAP,CAAYqmD,GAAG,CAAC,CAAD,CAAf,CAAb;AACA,SAAOA,GAAG,CAAC,CAAD,CAAH,CAAOrmD,IAAI,CAAC,CAAD,CAAX,CAAP;AACD;;AAED,SAASoJ,MAAT,CAAgB0rB,CAAhB,EAAmB;AACjB,MAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B;AACzB,WAAOA,CAAP;AACD,GAFD,MAEO,IAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B;AAChC,UAAMwoG,MAAM,GAAGvyH,UAAU,CAAC+pB,CAAD,CAAzB;;AACA,QAAIl8B,KAAK,CAAC0kI,MAAD,CAAT,EAAmB;AACjB,aAAO,CAAP;AACD;;AACD,WAAOA,MAAP;AACD;;AAED,SAAO,CAAP;AACD;;AAED,SAAS3iI,GAAT,CAAa9B,CAAb,EAAgBC,CAAhB,EAAmB;AACjB,SAAOc,IAAI,CAACe,GAAL,CAAS9B,CAAT,EAAYC,CAAZ,CAAP;AACD;;AAED,SAAS8e,GAAT,CAAa/e,CAAb,EAAgBC,CAAhB,EAAmB;AACjB,SAAOc,IAAI,CAACge,GAAL,CAAS/e,CAAT,EAAYC,CAAZ,CAAP;AACD;;AAEDqT,MAAM,CAACC,OAAP,GAAiB;AACfnK,OADe;AAEfgvK,YAFe;AAGf7nK,QAHe;AAIfzO,KAJe;AAKfid;AALe,CAAjB,C;;;;;;;;;;;AC/BA,SAASs5J,KAAT,CAAeC,UAAf,EAA2B;AACzB,MAAIC,KAAK,GAAG;AACVC,WADU;AAEV5wD,cAFU;AAGV6wD,YAHU;AAIVC,oBAJU;AAKVC,WALU;AAMVC,cANU;AAOVC,uBAPU;AAQVC,mBARU;AASVC,eATU;AAUVC;AAVU,GAAZ;AAaA,MAAIC,KAAK,GAAG,IAAI9yK,GAAJ,EAAZ;AACA,MAAI+yK,aAAa,GAAG,IAAI/yK,GAAJ,EAApB;;AAEA,WAAS6yK,QAAT,GAAoB;AAClB,WAAO;AAAEC,WAAF;AAASC;AAAT,KAAP;AACD;;AAED,WAASV,OAAT,CAAiBtyJ,IAAjB,EAAuB;AACrB+yJ,SAAK,CAACnhL,GAAN,CAAUouB,IAAV,EAAgBuyJ,QAAQ,CAACvyJ,IAAD,CAAxB;AACAgzJ,iBAAa,CAACphL,GAAd,CAAkBouB,IAAlB,EAAwBwyJ,gBAAgB,CAACxyJ,IAAD,CAAxC;AACA,WAAOqyJ,KAAP;AACD;;AAED,WAASM,mBAAT,CAA6B3yJ,IAA7B,EAAmC;AACjC,UAAMizJ,QAAQ,GAAGT,gBAAgB,CAACxyJ,IAAD,CAAjC;AACAgzJ,iBAAa,CAACphL,GAAd,CAAkBouB,IAAlB,EAAwB,IAAIvZ,GAAJ,EAAxB;AAEA,QAAIysK,IAAI,GAAGD,QAAQ,CAAC/yK,MAAT,EAAX;AACA,QAAIizK,GAAG,GAAGD,IAAI,CAACxnL,IAAL,EAAV;;AACA,WAAO,CAACynL,GAAG,CAACjhL,IAAZ,EAAkB;AAChBwgL,gBAAU,CAACS,GAAG,CAACxnL,KAAL,EAAYq0B,IAAZ,CAAV;AACAmzJ,SAAG,GAAGD,IAAI,CAACxnL,IAAL,EAAN;AACD;AACF;;AAED,WAASg2H,UAAT,CAAoB1hG,IAApB,EAA0B;AACxB2yJ,uBAAmB,CAAC3yJ,IAAD,CAAnB;AACA+yJ,SAAK,CAACz8J,MAAN,CAAa0J,IAAb;AACAgzJ,iBAAa,CAAC18J,MAAd,CAAqB0J,IAArB;AACD;;AAED,WAASuyJ,QAAT,CAAkBvyJ,IAAlB,EAAwB;AACtB,WAAO+yJ,KAAK,CAAC1kL,GAAN,CAAU2xB,IAAV,KAAmB,IAAIvZ,GAAJ,EAA1B;AACD;;AAED,WAAS+rK,gBAAT,CAA0BxyJ,IAA1B,EAAgC;AAC9B,WAAOgzJ,aAAa,CAAC3kL,GAAd,CAAkB2xB,IAAlB,KAA2B,IAAIvZ,GAAJ,EAAlC;AACD,GAnDwB,CAqDzB;AACA;;;AACA,WAASgsK,OAAT,CAAiBjM,KAAjB,EAAwBC,KAAxB,EAA+B;AAC7B6L,WAAO,CAAC9L,KAAD,CAAP;AACA8L,WAAO,CAAC7L,KAAD,CAAP;AACA8L,YAAQ,CAAC/L,KAAD,CAAR,CAAgBr4K,GAAhB,CAAoBs4K,KAApB;AACA+L,oBAAgB,CAAC/L,KAAD,CAAhB,CAAwBt4K,GAAxB,CAA4Bq4K,KAA5B;AACA,WAAO6L,KAAP;AACD,GA7DwB,CA+DzB;AACA;AACA;;;AACA,WAASK,UAAT,CAAoBlM,KAApB,EAA2BC,KAA3B,EAAkC;AAChC,QAAIsM,KAAK,CAAC3uK,GAAN,CAAUoiK,KAAV,CAAJ,EAAsB;AACpB+L,cAAQ,CAAC/L,KAAD,CAAR,CAAgBlwJ,MAAhB,CAAuBmwJ,KAAvB;AACD;;AACD,QAAIuM,aAAa,CAAC5uK,GAAd,CAAkBqiK,KAAlB,CAAJ,EAA8B;AAC5B+L,sBAAgB,CAAC/L,KAAD,CAAhB,CAAwBnwJ,MAAxB,CAA+BkwJ,KAA/B;AACD;;AACD,WAAO6L,KAAP;AACD;;AAED,WAASe,oBAAT,CAA8Bh+K,IAA9B,EAAoCi+K,OAApC,EAA6CC,MAA7C,EAAqD;AACnDD,WAAO,CAACllL,GAAR,CAAYiH,IAAZ;AAEA,QAAI89K,IAAI,GAAGX,QAAQ,CAACn9K,IAAD,CAAR,CAAe8K,MAAf,EAAX;AACA,QAAIizK,GAAG,GAAGD,IAAI,CAACxnL,IAAL,EAAV;;AACA,WAAO,CAACynL,GAAG,CAACjhL,IAAZ,EAAkB;AAChB,UAAI,CAACmhL,OAAO,CAACjvK,GAAR,CAAY+uK,GAAG,CAACxnL,KAAhB,CAAL,EAA6B;AAC3BynL,4BAAoB,CAACD,GAAG,CAACxnL,KAAL,EAAY0nL,OAAZ,EAAqBC,MAArB,CAApB;AACD;;AACDH,SAAG,GAAGD,IAAI,CAACxnL,IAAL,EAAN;AACD;;AAED4nL,UAAM,CAAC/7K,OAAP,CAAenC,IAAf;AACD;;AAED,WAASw9K,eAAT,CAAyBW,WAAzB,EAAsC;AACpC,UAAMF,OAAO,GAAG,IAAI5sK,GAAJ,EAAhB;AACA,UAAM6sK,MAAM,GAAG,EAAf;AAEAC,eAAW,CAACj1K,OAAZ,CAAoBlJ,IAAI,IAAI;AAC1B,UAAI,CAACi+K,OAAO,CAACjvK,GAAR,CAAYhP,IAAZ,CAAL,EAAwB;AACtBg+K,4BAAoB,CAACh+K,IAAD,EAAOi+K,OAAP,EAAgBC,MAAhB,CAApB;AACD;AACF,KAJD;AAMA,WAAOA,MAAP;AACD;;AAED,WAAST,WAAT,GAAuB;AACrB,QAAIW,WAAW,GAAG,EAAlB;AACAT,SAAK,CAACz0K,OAAN,CAAc,UAASm1K,GAAT,EAAcC,IAAd,EAAoB;AAChC,UAAID,GAAG,CAACrhL,MAAJ,KAAe,CAAnB,EAAsB;AACpBohL,mBAAW,CAACviL,IAAZ,CAAkB,GAAEyiL,IAAK,QAAOD,GAAG,CAACtmK,IAAJ,CAAS,GAAT,CAAc,GAA9C;AACD;AACF,KAJD;AAMA,WAAQ;AACZ;AACA,SAASqmK,WAAW,CAACrmK,IAAZ,CAAiB,IAAjB,EAAuBzB,OAAvB,CAA+B,IAA/B,EAAqC,GAArC,CAA0C;AACnD;AACA,KAJI;AAKD;;AAED,SAAO2mK,KAAP;AACD;;AAEDjlK,MAAM,CAACC,OAAP,GAAiB8kK,KAAjB,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1HA;AACA;AACA;AACA;;AAEA,MAAMA,KAAK,GAAG3kK,mBAAO,CAAC,mGAAD,CAArB;;AACA,iBAAuCA,mBAAO,CAAC,mEAAD,CAA9C;AAAA,MAAQoxJ,aAAR,YAAQA,aAAR;AAAA,MAAuBrgB,WAAvB,YAAuBA,WAAvB;;AAEe,MAAM6yB,WAAN,CAAkB;AAC/BnmL,aAAW,CAAC0oL,SAAD,EAAY/C,cAAZ,EAA4B;AACrC,SAAKyB,KAAL,GAAa,IAAIF,KAAJ,EAAb;AACA,SAAKxe,KAAL,GAAa,IAAI1zJ,GAAJ,EAAb;AACA,SAAK8mI,gBAAL,GAAwB,CAAxB;AACA,SAAK4sC,SAAL,GAAiBA,SAAjB;AACA,SAAK/C,cAAL,GAAsBA,cAAtB;AACA,SAAKgD,UAAL,GAAkB,EAAlB;AACA,SAAKC,YAAL,GAAoB,EAApB;AACA,SAAKtzB,MAAL,GAAcC,oDAAI,EAAlB;AACA,SAAKszB,KAAL,GAAa;AACXzkB,mBAAa,EAAE,IAAI5oJ,GAAJ;AADJ,KAAb;AAGD;;AAEDgsE,MAAI,GAAG;AACL,WAAO,KAAKqhG,KAAZ;AACD;;AAEDxgB,SAAO,CAAC7gF,IAAD,EAAO;AACZ,SAAKqhG,KAAL,GAAarhG,IAAb;AACD,GArB8B,CAuB/B;;;AAEA0sF,UAAQ,CAAC/pK,IAAD,EAAO;AACb,2BAAkBwpK,aAAa,CAACxpK,IAAD,CAA/B;AAAA,UAAQmsI,KAAR,kBAAQA,KAAR;;AAEA,QAAI,CAAC,KAAKoyB,KAAL,CAAWvvJ,GAAX,CAAehP,IAAf,CAAL,EAA2B;AACzB,WAAKu+J,KAAL,CAAW/hK,GAAX,CAAewD,IAAf,EAAqB;AACnBA,YADmB;AAEnB+8H,YAAI,EAAE,IAFa;AAGnBxmI,aAAK,EAAE,IAHY;AAInB41I,aAAK,EAAEA;AAJY,OAArB;AAMD;;AACD,WAAO,KAAKoyB,KAAL,CAAWtlK,GAAX,CAAe+G,IAAf,CAAP;AACD;;AAEDirK,SAAO,CAACjrK,IAAD,EAAO;AACZ,WAAO,KAAK+pK,QAAL,CAAc/pK,IAAd,CAAP;AACD;;AAED2+K,SAAO,CAAC3+K,IAAD,EAAO;AACZ,WAAO,KAAKu+J,KAAL,CAAWvvJ,GAAX,CAAehP,IAAf,CAAP;AACD;;AAEDjH,KAAG,CAACiH,IAAD,EAAO+8H,IAAP,EAAaxmI,KAAb,EAAoB;AACrB,SAAKiG,GAAL,CAASwD,IAAT,EAAe+8H,IAAf;AACD;;AAEDyhC,UAAQ,GAAG;AACT,WAAO,KAAKD,KAAZ;AACD;;AAEDtrJ,WAAS,GAAG;AACV,WAAO;AACLgqK,WAAK,EAAE,KAAKA,KAAL,CAAWS,QAAX,EADF;AAELnf,WAAK,EAAE,CAAC,GAAG,KAAKA,KAAL,CAAW//I,OAAX,EAAJ;AAFF,KAAP;AAID;;AAEDolH,aAAW,CAACnqG,IAAD,EAAO;AAChB,SAAK6iJ,gBAAL;;AACA,QAAI;AACF7iJ,UAAI;AACL,KAFD,CAEE,OAAOnZ,CAAP,EAAU;AACVoR,aAAO,CAACsrE,GAAR,CAAY18E,CAAZ;AACD;;AACD,WAAO,KAAKo8J,cAAL,EAAP;AACD;;AAEDJ,kBAAgB,GAAG;AACjB,SAAK3qC,gBAAL;AACD;;AAED+qC,gBAAc,GAAG;AACf,SAAK/qC,gBAAL;;AAEA,QAAI,KAAKA,gBAAL,KAA0B,CAA9B,EAAiC;AAC/B,YAAMitC,KAAK,GAAG,KAAKJ,UAAnB;AACA,WAAKA,UAAL,GAAkB,EAAlB;AAEA,WAAKK,gBAAL,CAAsB,KAAK5B,KAAL,CAAWO,eAAX,CAA2BoB,KAA3B,CAAtB;AACD;;AAED,WAAO,EAAP;AACD;;AAEDC,kBAAgB,CAACC,SAAD,EAAY;AAC1B;AACA;AACA;AACA;AACA;AAEA,SAAKL,YAAL,GAAoB,KAAKA,YAAL,CAAkBzqJ,MAAlB,CAAyB8qJ,SAAzB,CAApB,CAP0B,CAS1B;AACA;AACA;;AACArhK,WAAO,CAACC,OAAR,GAAkBiE,IAAlB,CAAuB,MAAM;AAC3B,UAAI,CAAC,KAAKo9J,OAAV,EAAmB;AACjB,aAAKC,eAAL;AACD;AACF,KAJD;AAKD;;AAEDA,iBAAe,CAAC9iC,GAAG,GAAG,CAAP,EAAU;AACvB,SAAK6iC,OAAL,GAAe,IAAf;;AAEA,WAAO7iC,GAAG,GAAG,KAAKuiC,YAAL,CAAkBzhL,MAA/B,EAAuC;AACrC,UAAIgD,IAAI,GAAG,KAAKy+K,YAAL,CAAkBviC,GAAlB,CAAX;AACA,UAAItxH,IAAJ;AACA,UAAI7f,MAAJ;;AAEA,UAAI;AACF6f,YAAI,GAAG,KAAKqgJ,OAAL,CAAajrK,IAAb,CAAP;;AAEA,YAAI4qB,IAAI,CAACv0B,IAAT,EAAe;AACb,cAAIP,IAAI,GAAG80B,IAAI,CAACq0J,aAAL,CAAmBllL,GAAnB,CAAuBmlL,GAAG,IAAI;AACvC,mBAAO,KAAKjU,OAAL,CAAaiU,GAAb,EAAkB3oL,KAAzB;AACD,WAFU,CAAX;;AAIAwU,gBAAM,GAAG6f,IAAI,CAACv0B,IAAL,CAAU,GAAGP,IAAb,CAAT;;AAEA,cAAIiV,MAAM,YAAY0S,OAAtB,EAA+B;AAC7BiU,mBAAO,CAACC,IAAR,CACE,8FADF;AAGD;AACF,SAZD,MAYO,IAAI/G,IAAI,CAACwmH,GAAT,EAAc;AACnBrmI,gBAAM,GAAGuoJ,8EAAgB,CACvB1oI,IAAI,CAACwyG,KADkB,EAEvBxyG,IAAI,CAACwmH,GAAL,CAAS4hB,SAFc,EAGvBpoI,IAAI,CAACwmH,GAAL,CAAS/xG,KAHc,CAAzB;AAKD,SANM,MAMA;AACL68G,aAAG;AACH;AACD;AACF,OAzBD,CAyBE,OAAO57H,CAAP,EAAU;AACVoR,eAAO,CAACsrE,GAAR,CAAY,4BAA4Bh9F,IAA5B,GAAmC,GAA/C,EAAoDsgB,CAApD,EADU,CAEV;;AACA,aAAKy+J,OAAL,GAAe,KAAf;AACA,aAAKN,YAAL,GAAoB,EAApB;AACA;AACD;;AAED,UAAI1zK,MAAM,YAAY0S,OAAtB,EAA+B;AAC7B;AACA;AACA1S,cAAM,CAAC4W,IAAP,CACEprB,KAAK,IAAI;AACPq0B,cAAI,CAACr0B,KAAL,GAAaA,KAAb;AACA,eAAKyoL,eAAL,CAAqB9iC,GAAG,GAAG,CAA3B;AACD,SAJH,EAKE/gI,GAAG,IAAI;AACL;AACAuW,iBAAO,CAACC,IAAR,CAAc,kBAAiB/G,IAAI,CAAC5qB,IAAK,GAAzC,EAA6Cmb,GAA7C;AACA,eAAK6jK,eAAL,CAAqB9iC,GAAG,GAAG,CAA3B;AACD,SATH;AAYA;AACD,OAhBD,MAgBO;AACLtxH,YAAI,CAACr0B,KAAL,GAAawU,MAAb;AACD;;AAEDmxI,SAAG;AACJ,KA9DsB,CAgEvB;AACA;;;AACA,QAAIA,GAAG,KAAK,KAAKuiC,YAAL,CAAkBzhL,MAA9B,EAAsC;AACpC,WAAKmuJ,MAAL,CAAYzmH,IAAZ,CAAiB,QAAjB,EAA2B;AAAEolI,aAAK,EAAE,KAAK2U;AAAd,OAA3B,EADoC,CAGpC;;AACA,UAAI,KAAKF,SAAT,EAAoB;AAClB,aAAKA,SAAL,CAAe,KAAKE,YAApB;AACD;;AACD,WAAKU,aAAL;AAEA,WAAKJ,OAAL,GAAe,KAAf;AACA,WAAKN,YAAL,GAAoB,EAApB;AACD;AACF;;AAEDU,eAAa,GAAG;AACd,QAAI,CAAC,KAAKC,YAAV,EAAwB;AACtB,UAAI,KAAK5D,cAAT,EAAyB;AACvB,aAAKA,cAAL,CAAoB;AAAEG,eAAK,EAAE;AAAT,SAApB;AACD;AACF;AACF;;AAED1xB,gBAAc,GAAG;AACf,QAAI,KAAKuxB,cAAT,EAAyB;AACvB,WAAKA,cAAL,CAAoB;AAAEG,aAAK,EAAE;AAAT,OAApB;AACD;AACF;;AAEDhd,mBAAiB,GAAG;AAClB,SAAKygB,YAAL,GAAoB,IAApB;AACA,SAAKn1B,cAAL;AACD;;AAED4U,iBAAe,GAAG;AAChB,SAAKugB,YAAL,GAAoB,KAApB;AAEA,QAAIC,aAAa,GAAG,KAAKN,OAAL,IAAgB,KAAKN,YAAL,CAAkBzhL,MAAlB,GAA2B,CAA/D;;AACA,QAAI,CAACqiL,aAAL,EAAoB;AAClB,WAAKF,aAAL;AACD;AACF;;AAED3O,kBAAgB,CAACxwK,IAAD,EAAOy5B,IAAP,EAAa;AAC3B,SAAK0xH,MAAL,CAAY7hI,EAAZ,CAAetpB,IAAf,EAAqBy5B,IAArB;AACA,WAAO,MAAM,KAAK0xH,MAAL,CAAY72H,GAAZ,CAAgBt0B,IAAhB,EAAsBy5B,IAAtB,CAAb;AACD;;AAEDojJ,UAAQ,CAACpjJ,IAAD,EAAO;AACb,QAAI,KAAKk4G,gBAAL,KAA0B,CAA9B,EAAiC;AAC/B,YAAM,IAAIn2I,KAAJ,CACJ,gHADI,CAAN;AAGD;;AAED,QAAI,CAAC,KAAKujL,OAAN,IAAiB,KAAKN,YAAL,CAAkBzhL,MAAlB,KAA6B,CAAlD,EAAqD;AACnDy8B,UAAI,CAAC,EAAD,CAAJ,CADmD,CAEnD;;AACA,aAAO,MAAM,CAAE,CAAf;AACD;;AAED,QAAI16B,MAAM,GAAG,KAAKyxK,gBAAL,CAAsB,QAAtB,EAAgC,CAAC,GAAG16K,IAAJ,KAAa;AACxDiJ,YAAM;AACN,aAAO06B,IAAI,CAAC,GAAG3jC,IAAJ,CAAX;AACD,KAHY,CAAb;AAIA,WAAOiJ,MAAP;AACD;;AAEDq9K,QAAM,GAAG;AACP,SAAKjxB,MAAL,CAAYhkF,GAAZ,CAAgBoB,KAAhB;AACD;;AAEDkgE,UAAQ,CAACzoI,IAAD,EAAO;AACb,WAAO,KAAKirK,OAAL,CAAajrK,IAAb,EAAmBzJ,KAA1B;AACD;;AAED+oL,SAAO,CAACt/K,IAAD,EAAO;AACZ,WAAO,KAAKirK,OAAL,CAAajrK,IAAb,EAAmB+8H,IAA1B;AACD;;AAEDqtB,cAAY,CAACje,KAAD,EAAQnsI,IAAR,EAAc;AACxB,WAAO,KAAKirK,OAAL,CAAa9hB,WAAW,CAAChd,KAAD,EAAQnsI,IAAR,CAAxB,EAAuCzJ,KAA9C;AACD;;AAEDgpL,aAAW,CAACpzC,KAAD,EAAQnsI,IAAR,EAAc;AACvB,WAAO,KAAKirK,OAAL,CAAa9hB,WAAW,CAAChd,KAAD,EAAQnsI,IAAR,CAAxB,EAAuC+8H,IAA9C;AACD;;AAEDyiD,mBAAiB,CAAC12C,SAAD,EAAY21B,QAAZ,EAAsB;AACrC,QAAIz+J,IAAI,GAAGmpJ,WAAW,CAACrgB,SAAD,EAAY21B,QAAZ,CAAtB;;AACA,QAAI,KAAKF,KAAL,CAAWvvJ,GAAX,CAAehP,IAAf,CAAJ,EAA0B;AACxB,aAAO,KAAKirK,OAAL,CAAajrK,IAAb,EAAmBzJ,KAA1B;AACD;;AACD,WAAO,IAAP;AACD;;AAEDkpL,QAAM,CAACC,OAAD,EAAU;AACd,SAAK7C,QAAL,CAAc,MAAM;AAClB6C,aAAO;AACR,KAFD;AAGD;;AAED16G,MAAI,CAAChlE,IAAD,EAAOzJ,KAAP,EAAc;AAChB,UAAMq0B,IAAI,GAAG,KAAKm/I,QAAL,CAAc/pK,IAAd,CAAb;;AACA4qB,QAAI,CAACmyG,IAAL,GAAYxmI,KAAZ;AACAq0B,QAAI,CAACr0B,KAAL,GAAaA,KAAb;AACD;;AAED2iB,QAAM,CAAClZ,IAAD,EAAOzJ,KAAP,EAAc;AAClB,WAAO,KAAKqtI,WAAL,CAAiB,MAAM;AAC5B,YAAMh5G,IAAI,GAAG,KAAKm/I,QAAL,CAAc/pK,IAAd,CAAb;;AACA4qB,UAAI,CAACmyG,IAAL,GAAYxmI,KAAZ;AACAq0B,UAAI,CAACr0B,KAAL,GAAaA,KAAb;;AACA,WAAKopL,UAAL,CAAgB3/K,IAAhB;AACD,KALM,CAAP;AAMD;;AAEDxD,KAAG,CAACwD,IAAD,EAAOzJ,KAAP,EAAc;AACf,SAAK2iB,MAAL,CAAYlZ,IAAZ,EAAkBzJ,KAAlB;AACD;;AAEDwmK,WAAS,CAAC/8J,IAAD,EAAO;AACd,SAAK4jI,WAAL,CAAiB,MAAM;AACrB,WAAK46C,UAAL,CAAgB3iL,IAAhB,CAAqBmE,IAArB;AACD,KAFD;AAGD;;AAEDmtK,cAAY,GAAG;AACb;AACA,SAAKvpC,WAAL,CAAiB,MAAM;AACrB,WAAK46C,UAAL,GAAkB,CAAC,GAAG,KAAKjgB,KAAL,CAAW1yJ,IAAX,EAAJ,CAAlB;AACD,KAFD;AAGD;;AAEDq/J,aAAW,CAACpiC,SAAD,EAAY21B,QAAZ,EAAsBrhC,KAAtB,EAA6B;AACtC,QAAIp9H,IAAI,GAAGmpJ,WAAW,CAACrgB,SAAD,EAAY21B,QAAZ,CAAtB;;AACA,QAAI7zI,IAAI,GAAG,KAAKm/I,QAAL,CAAc/pK,IAAd,CAAX;;AAEA,QAAI4qB,IAAI,CAACwyG,KAAL,KAAeA,KAAnB,EAA0B;AACxBxyG,UAAI,CAACwyG,KAAL,GAAaA,KAAb;;AACA,0BAA2Bq1B,kEAAY,CAAC7nI,IAAI,CAACwyG,KAAN,EAAaqvB,kDAAb,EAAqBvL,wDAArB,CAAvC;AAAA,UAAM8R,SAAN,iBAAMA,SAAN;AAAA,UAAiB3zH,KAAjB,iBAAiBA,KAAjB;;AACAzU,UAAI,CAACwmH,GAAL,GAAW;AAAE4hB,iBAAF;AAAa3zH;AAAb,OAAX;AAEA,WAAKukG,WAAL,CAAiB,MAAM;AACrB,aAAK+7C,UAAL,CAAgB3/K,IAAhB;AACD,OAFD;AAGD;AACF;;AAED8+J,cAAY,CAACh2B,SAAD,EAAY21B,QAAZ,EAAsBhC,YAAtB,EAAoC;AAC9C,QAAIz8J,IAAI,GAAGmpJ,WAAW,CAACrgB,SAAD,EAAY21B,QAAZ,CAAtB;AACA,QAAIprI,MAAM,GAAG,KAAKkrI,KAAL,CAAWvvJ,GAAX,CAAehP,IAAf,CAAb;;AACA,QAAI,CAACqzB,MAAL,EAAa;AACX,WAAKna,MAAL,CAAYlZ,IAAZ,EAAkBy8J,YAAlB;AACD;AACF;;AAEDD,eAAa,CACX1zB,SADW,EAEX21B,QAFW,EAGX;AAAE5M,gBAAY,GAAG,EAAjB;AAAqBjlJ,OAArB;AAA0B6vJ,gBAA1B;AAAwCyC;AAAxC,GAHW,EAIX;AACA,QAAIl/J,IAAI,GAAGmpJ,WAAW,CAACrgB,SAAD,EAAY21B,QAAZ,CAAtB;;AACA,QAAI7zI,IAAI,GAAG,KAAKm/I,QAAL,CAAc/pK,IAAd,CAAX;;AAEA,QAAI4qB,IAAI,CAACg1J,OAAT,EAAkB;AAChB;AACA;AACD;;AAEDh1J,QAAI,CAACg1J,OAAL,GAAe,IAAf;AACAh1J,QAAI,CAACv0B,IAAL,GAAYuW,GAAZ;AAEAilJ,gBAAY,GAAGA,YAAY,CAAC93J,GAAb,CAAiBmlL,GAAG,IAAI;AACrC,UAAIW,QAAJ;;AACA,UAAI,CAACrW,aAAa,CAAC0V,GAAD,CAAb,CAAmB/yC,KAAxB,EAA+B;AAC7B0zC,gBAAQ,GAAG12B,WAAW,CAACrgB,SAAD,EAAYo2C,GAAZ,CAAtB;AACD,OAFD,MAEO;AACLW,gBAAQ,GAAGX,GAAX;AACD;;AAED,aAAOW,QAAP;AACD,KATc,CAAf;AAWAj1J,QAAI,CAACq0J,aAAL,GAAqBptB,YAArB,CAvBA,CAyBA;;AACA,SAAKorB,KAAL,CAAWM,mBAAX,CAA+Bv9K,IAA/B;AACA6xJ,gBAAY,CAAC3oJ,OAAb,CAAqBg2K,GAAG,IAAI;AAC1B,WAAKjC,KAAL,CAAWI,OAAX,CAAmB6B,GAAnB,EAAwBl/K,IAAxB;AACD,KAFD;;AAIA,QAAI4qB,IAAI,CAACr0B,KAAL,IAAc,IAAd,IAAsB2oK,OAA1B,EAAmC;AACjC,WAAKt7B,WAAL,CAAiB,MAAM;AACrBh5G,YAAI,CAACr0B,KAAL,GAAakmK,YAAb;;AACA,aAAKkjB,UAAL,CAAgB3/K,IAAhB;AACD,OAHD;AAID;AACF;;AAED+/J,YAAU,CAACj3B,SAAD,EAAY;AACpB,qBAAyB,KAAKy1B,KAAL,CAAW//I,OAAX,EAAzB,EAA+C;AAAA;;AAAA,UAArCxe,IAAqC;AAAA,UAA/B4qB,IAA+B;;AAC7C,UAAIA,IAAI,CAACuhH,KAAL,KAAerD,SAAnB,EAA8B;AAC5B,aAAKy1B,KAAL,CAAWr9I,MAAX,CAAkBlhB,IAAlB;AACD;AACF;AACF;;AAED8/K,UAAQ,CAACh3C,SAAD,EAAY9oI,IAAZ,EAAkB+/K,SAAS,GAAG,IAA9B,EAAoC;AAC1C,QAAIn1J,IAAI,GAAG,KAAKqgJ,OAAL,CAAa9hB,WAAW,CAACrgB,SAAD,EAAY9oI,IAAZ,CAAxB,CAAX;AACA4qB,QAAI,CAACv0B,IAAL,GAAY,IAAZ;AACAu0B,QAAI,CAACg1J,OAAL,GAAe,KAAf;AACAh1J,QAAI,CAACr0B,KAAL,GAAawpL,SAAb;AACD;;AAEDrhB,YAAU,CAAC51B,SAAD,EAAY9oI,IAAZ,EAAkB;AAC1B,SAAK8/K,QAAL,CAAch3C,SAAd,EAAyB9oI,IAAzB;AACA,SAAKu+J,KAAL,CAAWr9I,MAAX,CAAkBioI,WAAW,CAACrgB,SAAD,EAAY9oI,IAAZ,CAA7B;AACD;;AAEDq9J,iBAAe,CAACv0B,SAAD,EAAY21B,QAAZ,EAAsB/vJ,IAAtB,EAA4B;AACzC,QAAI1O,IAAI,GAAGmpJ,WAAW,CAACrgB,SAAD,EAAY21B,QAAZ,CAAtB;AAEA/vJ,QAAI,GAAGA,IAAI,CAAC3U,GAAL,CAASmlL,GAAG,IAAI;AACrB,UAAI,CAAC1V,aAAa,CAAC0V,GAAD,CAAb,CAAmB/yC,KAAxB,EAA+B;AAC7B,eAAOgd,WAAW,CAACrgB,SAAD,EAAYo2C,GAAZ,CAAlB;AACD;;AACD,aAAOA,GAAP;AACD,KALM,CAAP;AAOA,QAAIt0J,IAAI,GAAG,KAAKqgJ,OAAL,CAAajrK,IAAb,CAAX;AACA,QAAIggL,OAAO,GAAGtxK,IAAI,CAACjR,MAAL,CACZyhL,GAAG,IAAI,CAACt0J,IAAI,CAACq0J,aAAL,IAAsB,EAAvB,EAA2Bj6K,OAA3B,CAAmCk6K,GAAnC,MAA4C,CAAC,CADxC,CAAd;;AAIA,QAAIc,OAAO,CAAChjL,MAAR,GAAiB,CAArB,EAAwB;AACtB4tB,UAAI,CAACq0J,aAAL,GAAqB,CAACr0J,IAAI,CAACq0J,aAAL,IAAsB,EAAvB,EAA2BjrJ,MAA3B,CAAkCgsJ,OAAlC,CAArB;AACAA,aAAO,CAAC92K,OAAR,CAAgBg2K,GAAG,IAAI;AACrB,aAAKjC,KAAL,CAAWI,OAAX,CAAmB6B,GAAnB,EAAwBl/K,IAAxB;AACD,OAFD;AAGA,WAAK+8J,SAAL,CAAe/8J,IAAf;AACD;AACF;;AAEDu9J,oBAAkB,CAACz0B,SAAD,EAAY21B,QAAZ,EAAsB/vJ,IAAtB,EAA4B;AAC5C,QAAI1O,IAAI,GAAGmpJ,WAAW,CAACrgB,SAAD,EAAY21B,QAAZ,CAAtB;AAEA/vJ,QAAI,GAAGA,IAAI,CAAC3U,GAAL,CAASmlL,GAAG,IAAI;AACrB,UAAI,CAAC1V,aAAa,CAAC0V,GAAD,CAAb,CAAmB/yC,KAAxB,EAA+B;AAC7B,eAAOgd,WAAW,CAACrgB,SAAD,EAAYo2C,GAAZ,CAAlB;AACD;;AACD,aAAOA,GAAP;AACD,KALM,CAAP;AAOA,QAAIt0J,IAAI,GAAG,KAAKqgJ,OAAL,CAAajrK,IAAb,CAAX;AAEA4qB,QAAI,CAACq0J,aAAL,GAAqB,CAACr0J,IAAI,CAACq0J,aAAL,IAAsB,EAAvB,EAA2BxhL,MAA3B,CACnByhL,GAAG,IAAIxwK,IAAI,CAAC1J,OAAL,CAAak6K,GAAb,MAAsB,CAAC,CADX,CAArB;AAIAxwK,QAAI,CAACxF,OAAL,CAAag2K,GAAG,IAAI;AAClB,WAAKjC,KAAL,CAAWK,UAAX,CAAsB4B,GAAtB,EAA2Bl/K,IAA3B;AACD,KAFD;AAGA,SAAK+8J,SAAL,CAAe/8J,IAAf;AACD;;AAED2/K,YAAU,CAAC3/K,IAAD,EAAO;AACf,SAAKw+K,UAAL,CAAgB3iL,IAAhB,CAAqBmE,IAArB;AACD;;AAEDigL,wBAAsB,CAAC39B,SAAD,EAAYC,SAAZ,EAAuB;AAC3C,QAAII,MAAM,GAAG,IAAItxI,GAAJ,CAAQ,CAAC,GAAGixI,SAAS,CAACz2I,IAAV,EAAJ,EAAsB,GAAG02I,SAAS,CAAC12I,IAAV,EAAzB,CAAR,CAAb;AAEA,SAAKywK,gBAAL,GAH2C,CAI3C;AACA;;AACA,SAAK/d,KAAL,CAAWr1J,OAAX,CAAmB0hB,IAAI,IAAI;AACzB,UACEA,IAAI,CAACwmH,GAAL,IACAxmH,IAAI,CAACwmH,GAAL,CAAS/xG,KAAT,CAAewyH,YAAf,CAA4B5zJ,IAA5B,CAAiCihL,GAAG,IAAIv8B,MAAM,CAAC3zI,GAAP,CAAWkwK,GAAX,CAAxC,CAFF,EAGE;AACA,aAAKS,UAAL,CAAgB/0J,IAAI,CAAC5qB,IAArB;AACD;AACF,KAPD;AAQA,SAAK08K,cAAL;AACD;;AA1c8B,C;;;;;;;;;;;ACRjC,SAASlT,aAAT,CAAuBxpK,IAAvB,EAA6B;AAC3B,MAAIk8I,GAAG,GAAGl8I,IAAI,CAACgF,OAAL,CAAa,GAAb,CAAV;;AACA,MAAIk3I,GAAG,KAAK,CAAC,CAAb,EAAgB;AACd,WAAO;AACL/P,WAAK,EAAEnsI,IAAI,CAAChB,KAAL,CAAW,CAAX,EAAck9I,GAAd,CADF;AAELl8I,UAAI,EAAEA,IAAI,CAAChB,KAAL,CAAWk9I,GAAG,GAAG,CAAjB;AAFD,KAAP;AAID;;AACD,SAAO;AAAE/P,SAAK,EAAE,IAAT;AAAensI;AAAf,GAAP;AACD;;AAED,SAASmpJ,WAAT,CAAqBhd,KAArB,EAA4BnsI,IAA5B,EAAkC;AAChC,SAAOmsI,KAAK,GAAG,GAAR,GAAcnsI,IAArB;AACD;;AAED,SAASkgL,qBAAT,CAA+BC,MAA/B,EAAuC;AACrC,QAAMvB,KAAK,GAAG,EAAd;AACAhlL,QAAM,CAACiS,IAAP,CAAYs0K,MAAZ,EAAoBj3K,OAApB,CAA4B4/H,SAAS,IAAI;AACvC,UAAMqD,KAAK,GAAGg0C,MAAM,CAACr3C,SAAD,CAApB;AAEAlvI,UAAM,CAACiS,IAAP,CAAYsgI,KAAZ,EAAmBjjI,OAAnB,CAA2BlJ,IAAI,IAAI;AACjC,YAAM+8H,IAAI,GAAGoP,KAAK,CAACnsI,IAAD,CAAlB;AACA4+K,WAAK,CAACz1B,WAAW,CAACrgB,SAAD,EAAY9oI,IAAZ,CAAZ,CAAL,GAAsC+8H,IAAtC;AACD,KAHD;AAID,GAPD;AAQA,SAAO6hD,KAAP;AACD;;AAED,SAASwB,oBAAT,CAA8BD,MAA9B,EAAsC;AACpC,QAAMvB,KAAK,GAAG,EAAd;AACAhlL,QAAM,CAACiS,IAAP,CAAYs0K,MAAZ,EAAoBj3K,OAApB,CAA4B4/H,SAAS,IAAI;AACvC,UAAMqD,KAAK,GAAGg0C,MAAM,CAACr3C,SAAD,CAApB;AAEAqD,SAAK,CAACjjI,OAAN,CAAclJ,IAAI,IAAI;AACpB,YAAM+8H,IAAI,GAAGoP,KAAK,CAACnsI,IAAD,CAAlB;AACA4+K,WAAK,CAAC/iL,IAAN,CAAWstJ,WAAW,CAACrgB,SAAD,EAAY9oI,IAAZ,CAAtB;AACD,KAHD;AAID,GAPD;AAQA,SAAO4+K,KAAP;AACD;;AAED5mK,MAAM,CAACC,OAAP,GAAiB;AACfuxJ,eADe;AAEfrgB,aAFe;AAGf+2B,uBAHe;AAIfE;AAJe,CAAjB,C;;;;;;;;;;;;ACzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;AACA,eAAoBhoK,mBAAO,CAAC,4DAAD,CAA3B;AAAA,IAAM+wJ,SAAN,YAAMA,SAAN;;AACA,IAAIM,MAAM,GAAGrxJ,mBAAO,CAAC,8EAAD,CAApB;;AAEA,SAASioK,YAAT,CAAsB9pL,KAAtB,EAA6B;AAC3B;AACA;AACA;AACA;AACA,MAAI,CAAC6iB,MAAM,CAACC,QAAP,CAAgB9iB,KAAhB,CAAL,EAA6B;AAC3B,WAAO6iB,MAAM,CAACre,IAAP,CAAYxE,KAAZ,CAAP;AACD;;AACD,SAAOA,KAAP;AACD;;AAEM,eAAe+pL,MAAf,CAAsBh5C,OAAtB,EAA+Bm5B,MAA/B,EAAuC7jB,KAAvC,EAA8Cs4B,QAA9C,EAAwD;AAC7D,wBAAuB7nC,+CAAA,EAAvB;AAAA,MAAMkzB,YAAN,mBAAMA,YAAN;;AACA,MAAIggB,SAAS,GAAG,IAAI9W,MAAM,CAAC+W,WAAX,EAAhB;;AAEA,OAAK,IAAI3qK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGq/J,QAAQ,CAACl4K,MAA7B,EAAqC6Y,CAAC,EAAtC,EAA0C;AACxC,QAAIqK,GAAG,GAAGg1J,QAAQ,CAACr/J,CAAD,CAAlB;AACA,QAAI4qK,UAAU,GAAG,IAAIhX,MAAM,CAACiX,eAAX,EAAjB;AACAD,cAAU,CAACE,YAAX,CAAwBzgK,GAAG,CAAC9Z,SAA5B;AAEA,QAAIw6K,SAAS,GAAG,IAAInX,MAAM,CAACn4D,OAAX,EAAhB;AACAsvE,aAAS,CAACC,UAAV,CAAqB3gK,GAAG,CAACwpI,OAAzB;AACAk3B,aAAS,CAACE,MAAV,CAAiB5gK,GAAG,CAAC81H,GAArB;AACA4qC,aAAS,CAACG,SAAV,CAAoB7gK,GAAG,CAAC0kB,MAAxB;AACAg8I,aAAS,CAACI,QAAV,CAAmB9gK,GAAG,CAAC3pB,KAAvB;AACA,QAAI0qL,SAAS,GAAGL,SAAS,CAACtwE,eAAV,EAAhB;;AAEA,QAAIiwD,YAAJ,EAAkB;AAChB,UAAI+B,SAAS,GAAG,IAAImH,MAAM,CAACyX,aAAX,EAAhB;AAEA,UAAIn2K,MAAJ;;AACA,UAAI;AACFA,cAAM,GAAG,MAAM41J,mDAAU,CAACh1I,OAAX,CAAmBs1J,SAAnB,EAA8B1gB,YAA9B,CAAf;AACD,OAFD,CAEE,OAAOjgJ,CAAP,EAAU;AACV,cAAM,IAAI6oJ,SAAJ,CAAc,iBAAd,EAAiC;AACrC5G,sBAAY,EAAEjiJ,CAAC,CAAC2kB,OAAF,KAAc;AADS,SAAjC,CAAN;AAGD;;AAEDq9H,eAAS,CAACzmJ,OAAV,CAAkB9Q,MAAM,CAACxU,KAAzB;AACA+rK,eAAS,CAAC6e,KAAV,CAAgB/nK,MAAM,CAACre,IAAP,CAAYgQ,MAAM,CAACsyE,IAAP,CAAYkqF,EAAxB,EAA4B,QAA5B,CAAhB;AACAjF,eAAS,CAAC8e,UAAV,CAAqBhoK,MAAM,CAACre,IAAP,CAAYgQ,MAAM,CAACsyE,IAAP,CAAYsqF,OAAxB,EAAiC,QAAjC,CAArB;AAEA8Y,gBAAU,CAACY,UAAX,CAAsB/e,SAAS,CAAChyD,eAAV,EAAtB;AACAmwE,gBAAU,CAACa,cAAX,CAA0B,IAA1B;AACD,KAlBD,MAkBO;AACLb,gBAAU,CAACY,UAAX,CAAsBJ,SAAtB;AACD;;AAEDV,aAAS,CAACgB,WAAV,CAAsBd,UAAtB;AACD;;AAEDF,WAAS,CAACiB,UAAV,CAAqBl6C,OAArB;AACAi5C,WAAS,CAACkB,SAAV,CAAoBhhB,MAApB;AACA8f,WAAS,CAACmB,QAAV,CAAmBnhB,YAAnB;AACAggB,WAAS,CAACoB,QAAV,CAAmB/kC,KAAnB;AAEA,SAAO2jC,SAAS,CAACjwE,eAAV,EAAP;AACD;AAEM,eAAesxE,MAAf,CAAsBvjL,IAAtB,EAA4B;AACjC,yBAAuBgvI,+CAAA,EAAvB;AAAA,MAAMkzB,YAAN,oBAAMA,YAAN;;AAEA,MAAIshB,UAAU,GAAGpY,MAAM,CAACqY,YAAP,CAAoBvxE,iBAApB,CAAsClyG,IAAtC,CAAjB;AACA,MAAIiyK,MAAM,GAAG1rK,IAAI,CAAC0G,KAAL,CAAWu2K,UAAU,CAACE,SAAX,EAAX,CAAb;AACA,MAAIrqK,IAAI,GAAGmqK,UAAU,CAACG,eAAX,EAAX;AACA,MAAI9M,QAAQ,GAAG,EAAf;;AAEA,OAAK,IAAIr/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6B,IAAI,CAAC1a,MAAzB,EAAiC6Y,CAAC,EAAlC,EAAsC;AACpC,QAAI4qK,UAAU,GAAG/oK,IAAI,CAAC7B,CAAD,CAArB;AACA,QAAIzP,SAAS,GAAGq6K,UAAU,CAACwB,YAAX,EAAhB;AACA,QAAI3f,SAAS,GAAGme,UAAU,CAACyB,cAAX,EAAhB;AACA,QAAIhiK,GAAJ;;AAEA,QAAIoiJ,SAAJ,EAAe;AACb,UAAI6f,MAAM,GAAG1Y,MAAM,CAACyX,aAAP,CAAqB3wE,iBAArB,CACXkwE,UAAU,CAAC2B,UAAX,EADW,CAAb;AAIA,UAAIna,SAAJ;;AACA,UAAI;AACFA,iBAAS,GAAG,MAAMtH,mDAAU,CAACn1I,OAAX,CAAmB60J,YAAY,CAAC8B,MAAM,CAACvnK,OAAP,EAAD,CAA/B,EAAmD;AACnEqmJ,eAAK,EAAEV,YAD4D;AAEnEsH,mBAAS,EAAE,aAFwD;AAGnEN,YAAE,EAAE8Y,YAAY,CAAC8B,MAAM,CAACE,KAAP,EAAD,CAHmD;AAInE1a,iBAAO,EAAE0Y,YAAY,CAAC8B,MAAM,CAACG,UAAP,EAAD;AAJ8C,SAAnD,CAAlB;AAMD,OAPD,CAOE,OAAOhiK,CAAP,EAAU;AACVoR,eAAO,CAACsrE,GAAR,CAAY18E,CAAZ;AACA,cAAM,IAAI6oJ,SAAJ,CAAc,iBAAd,EAAiC;AACrC5G,sBAAY,EAAEjiJ,CAAC,CAAC2kB,OAAF,KAAc;AADS,SAAjC,CAAN;AAGD;;AAED/kB,SAAG,GAAGupJ,MAAM,CAACn4D,OAAP,CAAef,iBAAf,CAAiC03D,SAAjC,CAAN;AACD,KArBD,MAqBO;AACL/nJ,SAAG,GAAGupJ,MAAM,CAACn4D,OAAP,CAAef,iBAAf,CAAiCkwE,UAAU,CAAC2B,UAAX,EAAjC,CAAN;AACD;;AAEDlN,YAAQ,CAACr5K,IAAT,CAAc;AACZuK,eAAS,EAAEA,SADC;AAEZsjJ,aAAO,EAAExpI,GAAG,CAACqiK,UAAJ,EAFG;AAGZvsC,SAAG,EAAE91H,GAAG,CAACsiK,MAAJ,EAHO;AAIZ59I,YAAM,EAAE1kB,GAAG,CAACuiK,SAAJ,EAJI;AAKZlsL,WAAK,EAAE2pB,GAAG,CAACuoH,QAAJ;AALK,KAAd;AAOD;;AAED,SAAO;AAAEysC,YAAF;AAAY5E;AAAZ,GAAP;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClHD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;;AAEA,iBAAiCl4J,mBAAO,CAAC,4DAAD,CAAxC;AAAA,MAAQ4oJ,SAAR,YAAQA,SAAR;AAAA,MAAmBmI,SAAnB,YAAmBA,SAAnB;;AACA,MAAMxjB,UAAU,GAAGvtI,mBAAO,CAAC,0GAAD,CAA1B;;AAEA,IAAIsqK,eAAe,GAAG,IAAtB;AACA,IAAIC,YAAY,GAAG,SAAnB;AAEO,SAASj2C,cAAT,CAAwBruH,IAAxB,EAA8B;AACnC,MAAIqnI,QAAQ,GAAGi9B,YAAf;;AACA,UAAQtkK,IAAR;AACE,SAAK,SAAL;AACEskK,kBAAY,GAAG,SAAf;AACA;;AACF,SAAK,SAAL;AACEA,kBAAY,GAAG,SAAf;AACA;;AACF,SAAK,UAAL;AACEA,kBAAY,GAAG,UAAf;AACA;;AACF,SAAK,QAAL;AACEA,kBAAY,GAAG,QAAf;AACA;;AACF;AACE,YAAM,IAAInnL,KAAJ,CAAU,mCAAmC6iB,IAA7C,CAAN;AAdJ;;AAgBA,SAAOqnI,QAAP;AACD;AAEM,SAASk9B,gBAAT,CAA0BvkK,IAA1B,EAAgC;AACrC,UAAQA,IAAR;AACE,SAAK,SAAL;AACE,aAAOskK,YAAY,KAAK,SAAjB,IAA8BA,YAAY,KAAK,SAAtD;;AACF,SAAK,UAAL;AACE,aAAOA,YAAY,KAAK,UAAjB,IAA+BA,YAAY,KAAK,QAAvD;;AACF,SAAK,SAAL;AACE,aAAOA,YAAY,KAAK,SAAxB;;AACF,SAAK,QAAL;AACE,aAAOA,YAAY,KAAK,QAAxB;;AACF;AACE,YAAM,IAAInnL,KAAJ,CAAU,qCAAqC6iB,IAA/C,CAAN;AAVJ;AAYD;;;;;;;;AAMD,SAASwb,KAAT,CAAe3Z,GAAf,EAAoBhpB,IAApB,EAA0B;AACxB,MAAMwyJ,OAAN,GAAsCxpI,GAAtC,CAAMwpI,OAAN;AAAA,MAAe1T,GAAf,GAAsC91H,GAAtC,CAAe81H,GAAf;AAAA,MAAoBpxG,MAApB,GAAsC1kB,GAAtC,CAAoB0kB,MAApB;AAAA,MAA4BruC,KAA5B,GAAsC2pB,GAAtC,CAA4B3pB,KAA5B;;AAEA,MAAImzJ,OAAO,KAAK,OAAhB,EAAyB,CACvB;AACD,GAFD,MAEO;AACL,QAAI;AACF,UAAItsB,KAAJ;;AACA,UAAIlmI,IAAJ,EAAU;AACRkmI,aAAK,GAAG;AACNgU,aAAG,EAAE5I,yCAAA,CAAU,UAASkhB,OAAQ,QAAO9kH,MAAO,mBAAzC,CADC;AAENysG,gBAAM,EAAE,CAAC96I,KAAD,EAAQy/I,GAAR;AAFF,SAAR;AAID,OALD,MAKO;AACL5Y,aAAK,GAAG;AACNgU,aAAG,EAAE5I,yCAAA,CAAU,eAAckhB,OAAQ,SAAQ9kH,MAAO,iBAA/C,CADC;AAENysG,gBAAM,EAAE,CAAC2E,GAAD,EAAMz/I,KAAN;AAFF,SAAR;AAID;;AAEDiyI,kDAAA,CAAYpL,KAAK,CAACgU,GAAlB,EAAuBhU,KAAK,CAACiU,MAA7B;AACD,KAfD,CAeE,OAAO/wH,CAAP,EAAU;AACV;AACA,YAAM,IAAI6oJ,SAAJ,CAAc,gBAAd,CAAN;AACD;AACF;AACF;;AAED,eAAe73B,QAAf,CAAwBvT,KAAxB,EAA+B0nB,GAA/B,EAAoC;AAClC,MAAI7vI,OAAO,GAAG,EAAd,CADkC,CAGlC;;AAEA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4vI,GAAG,CAACzoJ,MAAxB,EAAgC6Y,CAAC,IAAI,GAArC,EAA0C;AACxC,QAAIgtK,OAAO,GAAGp9B,GAAG,CAACzmJ,KAAJ,CAAU6W,CAAV,EAAaA,CAAC,GAAG,GAAjB,CAAd;AACA,QAAIu7H,GAAJ;AACA,QAAIxsG,MAAM,GAAI,GAAEm5F,KAAM,KAAtB,CAHwC,CAKxC;AACA;AACA;AACA;;AACA,QAAIA,KAAK,KAAK,cAAd,EAA8B;AAC5BqT,SAAG,GAAI;AACb;AACA;AACA;AACA,OAJM;AAKAxsG,YAAM,GAAG,MAAT;AACD,KAPD,MAOO;AACLwsG,SAAG,GAAI,iBAAgBrT,KAAM,EAA7B;AACD;;AAEDqT,OAAG,IAAK,SAAR;AACAA,OAAG,IAAIyxC,OAAO,CAAC9oL,GAAR,CAAYskI,EAAE,IAAK,GAAEz5F,MAAO,MAA5B,EAAmC7sB,IAAnC,CAAwC,MAAxC,CAAP;;AAEA,QAAI;AACF,UAAIguI,IAAI,GAAG,MAAMvd,4CAAA,CAAY4I,GAAZ,EAAiByxC,OAAjB,EAA0B,IAA1B,CAAjB;AACAjtK,aAAO,GAAGA,OAAO,CAACoe,MAAR,CAAe+xH,IAAf,CAAV;AACD,KAHD,CAGE,OAAOzlI,CAAP,EAAU;AACV,YAAM,IAAI6oJ,SAAJ,CAAc,gBAAd,CAAN;AACD;AACF;;AAED,SAAOvzJ,OAAP;AACD;;AAEM,SAASktK,cAAT,CAAwBvsL,KAAxB,EAA+B;AACpC,MAAIA,KAAK,KAAK,IAAd,EAAoB;AAClB,WAAO,IAAP;AACD,GAFD,MAEO,IAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AACpC,WAAO,OAAOA,KAAd;AACD,GAFM,MAEA,IAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AACpC,WAAO,OAAOA,KAAd;AACD;;AAED,QAAM,IAAIiF,KAAJ,CAAU,gCAAgCoJ,IAAI,CAACC,SAAL,CAAetO,KAAf,CAA1C,CAAN;AACD;AAEM,SAASwsL,gBAAT,CAA0BxsL,KAA1B,EAAiC;AACtC,QAAM4c,IAAI,GAAG5c,KAAK,CAAC,CAAD,CAAlB;;AACA,UAAQ4c,IAAR;AACE,SAAK,GAAL;AACE,aAAO,IAAP;;AACF,SAAK,GAAL;AACE,aAAOyD,UAAU,CAACrgB,KAAK,CAACyI,KAAN,CAAY,CAAZ,CAAD,CAAjB;;AACF,SAAK,GAAL;AACE,aAAOzI,KAAK,CAACyI,KAAN,CAAY,CAAZ,CAAP;;AACF;AAPF;;AAUA,QAAM,IAAIxD,KAAJ,CAAU,iCAAiCjF,KAA3C,CAAN;AACD;AAED,IAAIysL,cAAc,GAAG,EAArB;AAEO,SAAShhC,eAAT,CAAyBvoH,IAAzB,EAA+B;AACpCupJ,gBAAc,CAACnnL,IAAf,CAAoB49B,IAApB;;AAEA,SAAO,MAAM;AACXupJ,kBAAc,GAAGA,cAAc,CAACvlL,MAAf,CAAsBomC,CAAC,IAAIA,CAAC,KAAKpK,IAAjC,CAAjB;AACD,GAFD;AAGD;;AAED,eAAewpJ,eAAf,CAA+B/N,QAA/B,EAAyC;AACvC,MAAIgO,WAAW,GAAG,EAAlB;;AAEA,OAAK,IAAIrtK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGq/J,QAAQ,CAACl4K,MAA7B,EAAqC6Y,CAAC,EAAtC,EAA0C;AACxC,QAAIovB,OAAO,GAAGiwI,QAAQ,CAACr/J,CAAD,CAAtB;AACA,QAAM6zI,OAAN,GAA0CzkH,OAA1C,CAAMykH,OAAN;AAAA,QAAe1T,GAAf,GAA0C/wG,OAA1C,CAAe+wG,GAAf;AAAA,QAAoBpxG,MAApB,GAA0CK,OAA1C,CAAoBL,MAApB;AAAA,QAA4Bx+B,SAA5B,GAA0C6+B,OAA1C,CAA4B7+B,SAA5B;AACA,QAAI+8K,YAAY,GAAG/8K,SAAS,CAACwN,QAAV,EAAnB;AAEA,QAAI64G,GAAG,GAAG+b,4CAAA,CACRA,yCAAA,CACE,qGADF,CADQ,EAIR,CAACkhB,OAAD,EAAU1T,GAAV,EAAepxG,MAAf,EAAuBu+I,YAAvB,CAJQ,EAKR,IALQ,CAAV,CALwC,CAaxC;AACA;;AACA,QAAI12D,GAAG,CAACzvH,MAAJ,KAAe,CAAnB,EAAsB;AACpBkmL,iBAAW,CAACrnL,IAAZ,CAAiBopC,OAAjB;AACD,KAFD,MAEO,IAAIwnF,GAAG,CAAC,CAAD,CAAH,CAAOrmH,SAAP,KAAqB+8K,YAAzB,EAAuC;AAC5CD,iBAAW,CAACrnL,IAAZ,iCAAsBopC,OAAtB;AAA+B24H,WAAG,EAAE;AAApC;AACD;AACF;;AAED,SAAOslB,WAAP;AACD,C,CAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASE,sBAAT,CAAgClO,QAAhC,EAA0C;AACxC1sC,iDAAA,CAAe,MAAM;AACnB,SAAK,IAAI3yH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGq/J,QAAQ,CAACl4K,MAA7B,EAAqC6Y,CAAC,EAAtC,EAA0C;AACxC,UAAIqK,GAAG,GAAGg1J,QAAQ,CAACr/J,CAAD,CAAlB;AACA,UAAM6zI,OAAN,GAAiDxpI,GAAjD,CAAMwpI,OAAN;AAAA,UAAe1T,GAAf,GAAiD91H,GAAjD,CAAe81H,GAAf;AAAA,UAAoBpxG,MAApB,GAAiD1kB,GAAjD,CAAoB0kB,MAApB;AAAA,UAA4Bx+B,SAA5B,GAAiD8Z,GAAjD,CAA4B9Z,SAA5B;AAAA,UAAuC7P,KAAvC,GAAiD2pB,GAAjD,CAAuC3pB,KAAvC;;AAEA,UAAI,CAAC2pB,GAAG,CAAC09I,GAAT,EAAc;AACZ,YAAI;AACF/jI,eAAK,CAAC3Z,GAAD,CAAL;AACD,SAFD,CAEE,OAAOI,CAAP,EAAU;AACVuZ,eAAK,CAAC3Z,GAAD,EAAM,IAAN,CAAL;AACD;;AAED,YAAIwpI,OAAO,KAAK,OAAhB,EAAyB;AACvB,gBAAM,IAAIluJ,KAAJ,CAAU,kCAAV,CAAN;AACD;AACF;AACF;AACF,GAjBD;AAkBD;;AAEM,MAAM6nL,aAAa,GAAGpP,gEAAU,CAAC,MAAMiB,QAAN,IAAkB;AACxD,MAAI0N,gBAAgB,CAAC,QAAD,CAApB,EAAgC;AAC9B,WAAOQ,sBAAsB,CAAClO,QAAD,CAA7B;AACD,GAFD,MAEO,IAAI0N,gBAAgB,CAAC,SAAD,CAApB,EAAiC;AACtC;AACA;AACA;AACA;AACA1N,YAAQ,GAAG,MAAM+N,eAAe,CAAC/N,QAAD,CAAhC;AACD;;AAEDA,UAAQ,GAAG,CAAC,GAAGA,QAAJ,EAAc13K,IAAd,CAAmB,CAAC60K,EAAD,EAAKC,EAAL,KAAY;AACxC,QAAIgR,EAAE,GAAGjR,EAAE,CAACjsK,SAAH,GAAeisK,EAAE,CAACjsK,SAAH,CAAawN,QAAb,EAAf,GAAyC,EAAlD;AACA,QAAI2vK,EAAE,GAAGjR,EAAE,CAAClsK,SAAH,GAAeksK,EAAE,CAAClsK,SAAH,CAAawN,QAAb,EAAf,GAAyC,EAAlD;;AACA,QAAI0vK,EAAE,GAAGC,EAAT,EAAa;AACX,aAAO,CAAC,CAAR;AACD,KAFD,MAEO,IAAID,EAAE,GAAGC,EAAT,EAAa;AAClB,aAAO,CAAP;AACD;;AACD,WAAO,CAAP;AACD,GATU,CAAX;AAWA,MAAIC,WAAW,GAAG,EAAlB;AACAtO,UAAQ,CAAChsK,OAAT,CAAiBgX,GAAG,IAAI;AACtB,QAAIA,GAAG,CAACwpI,OAAJ,KAAgB,OAApB,EAA6B;AAC3B;AACD;;AAED,QAAI85B,WAAW,CAACtjK,GAAG,CAACwpI,OAAL,CAAX,IAA4B,IAAhC,EAAsC;AACpC85B,iBAAW,CAACtjK,GAAG,CAACwpI,OAAL,CAAX,GAA2B,EAA3B;AACD;;AACD85B,eAAW,CAACtjK,GAAG,CAACwpI,OAAL,CAAX,CAAyB7tJ,IAAzB,CAA8BqkB,GAAG,CAAC81H,GAAlC;AACD,GATD;;AAWA,iBAAeytC,SAAf,GAA2B;AACzB,QAAIplL,IAAI,GAAG,IAAIwM,GAAJ,EAAX;;AAEA,SAAK,IAAIkzH,KAAT,IAAkBnkI,MAAM,CAACiS,IAAP,CAAY23K,WAAZ,CAAlB,EAA4C;AAC1C,YAAMz9B,IAAI,GAAG,MAAMzU,QAAQ,CAACvT,KAAD,EAAQylD,WAAW,CAACzlD,KAAD,CAAnB,CAA3B;;AAEA,WAAK,IAAIloH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkwI,IAAI,CAAC/oJ,MAAzB,EAAiC6Y,CAAC,EAAlC,EAAsC;AACpC,YAAImgI,GAAG,GAAG+P,IAAI,CAAClwI,CAAD,CAAd;AACA6tK,mEAAK,CAACrlL,IAAD,EAAO,CAAC0/H,KAAD,EAAQiY,GAAG,CAAC3X,EAAZ,CAAP,EAAwB2X,GAAxB,CAAL;AACD;AACF;;AAED,WAAO33I,IAAP;AACD;;AAED,MAAIiuK,UAAU,GAAG,EAAjB;AACA,MAAIqX,OAAO,GAAG,MAAMF,SAAS,EAA7B;AAEAzZ,uDAAA,CAAoBkL,QAApB,EAA8ByO,OAA9B,EApDwD,CAsDxD;AACA;AACA;AACA;;AACA,MAAItgB,KAAJ;AACA,MAAIugB,aAAJ;;AACA,MAAIhB,gBAAgB,CAAC,SAAD,CAApB,EAAiC;AAC/Bvf,SAAK,GAAG7Z,4DAAQ,EAAhB;AACAo6B,iBAAa,GAAGvgB,KAAK,CAACiN,MAAtB;AACD;;AAED,MAAInkC,0CAAA,EAAJ,EAAiB;AACfA,8CAAA,GAAYwyB,iBAAZ;AACD,GAnEuD,CAqExD;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAn2B,iDAAA,CAAe,MAAM;AACnB,QAAI8C,KAAK,GAAG,IAAIj6H,GAAJ,EAAZ;;AAEA,SAAK,IAAIwE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGq/J,QAAQ,CAACl4K,MAA7B,EAAqC6Y,CAAC,EAAtC,EAA0C;AACxC,UAAIqK,GAAG,GAAGg1J,QAAQ,CAACr/J,CAAD,CAAlB;AACA,UAAM6zI,OAAN,GAAiDxpI,GAAjD,CAAMwpI,OAAN;AAAA,UAAe1T,GAAf,GAAiD91H,GAAjD,CAAe81H,GAAf;AAAA,UAAoBpxG,MAApB,GAAiD1kB,GAAjD,CAAoB0kB,MAApB;AAAA,UAA4Bx+B,SAA5B,GAAiD8Z,GAAjD,CAA4B9Z,SAA5B;AAAA,UAAuC7P,KAAvC,GAAiD2pB,GAAjD,CAAuC3pB,KAAvC;;AAEA,UAAI,CAAC2pB,GAAG,CAAC09I,GAAT,EAAc;AACZ/jI,aAAK,CAAC3Z,GAAD,EAAM2jK,2DAAK,CAACF,OAAD,EAAU,CAACj6B,OAAD,EAAU1T,GAAV,CAAV,CAAL,IAAkC1K,KAAK,CAACt8H,GAAN,CAAU06I,OAAO,GAAG1T,GAApB,CAAxC,CAAL;;AAEA,YAAI0T,OAAO,KAAK,OAAhB,EAAyB;AACvB4iB,oBAAU,CAACt2B,GAAD,CAAV,GAAkBz/I,KAAlB;AACD,SAFD,MAEO;AACL;AACA;AACA;AACA+0I,eAAK,CAACvyI,GAAN,CAAU2wJ,OAAO,GAAG1T,GAApB;AACD;AACF;;AAED,UAAI4sC,gBAAgB,CAAC,SAAD,CAApB,EAAiC;AAC/Bp6C,oDAAA,CACEA,yCAAA,CAAU;AACpB,kCADU,CADF,EAGE,CAACpiI,SAAS,CAACwN,QAAV,EAAD,EAAuB81I,OAAvB,EAAgC1T,GAAhC,EAAqCpxG,MAArC,EAA6Ck+I,cAAc,CAACvsL,KAAD,CAA3D,CAHF;AAMAqtL,qBAAa,GAAGtT,+CAAA,CAAcsT,aAAd,EAA6B1jK,GAAG,CAAC9Z,SAAjC,CAAhB;AACD;AACF;;AAED,QAAIw8K,gBAAgB,CAAC,SAAD,CAApB,EAAiC;AAC/BgB,mBAAa,GAAGtT,8CAAA,CAAasT,aAAb,CAAhB,CAD+B,CAG/B;AACA;;AACAp7C,kDAAA,CACEA,yCAAA,CACE,iEADF,CADF,EAIE,CAACm7B,kEAAc,iCAAMN,KAAN;AAAaiN,cAAM,EAAEsT;AAArB,SAAf,CAJF;AAMD;AACF,GA3CD;;AA6CA,MAAIhB,gBAAgB,CAAC,SAAD,CAApB,EAAiC;AAC/B;AACA;AACAvf,SAAK,CAACiN,MAAN,GAAesT,aAAf;AACD,GA7HuD,CA+HxD;;;AACA,MAAIhqL,MAAM,CAACiS,IAAP,CAAYygK,UAAZ,EAAwBtvK,MAAxB,GAAiC,CAArC,EAAwC;AACtCqwI,oDAAA,CAAgBi/B,UAAhB,EAA4B;AAAE2I,eAAS,EAAE;AAAb,KAA5B;;AAEA,QAAI3I,UAAU,CAAC3S,UAAf,EAA2B;AACzBmqB,mEAAa,CAACxX,UAAU,CAAC3S,UAAZ,CAAb;AACD;;AAEDhU,cAAU,CAACvnF,IAAX,CAAgB,eAAhB;AACD;;AAED,MAAI2lH,OAAO,GAAG,MAAMN,SAAS,EAA7B,CA1IwD,CA4IxD;;AACA,MAAIt3C,0CAAA,EAAJ,EAAiB;AACf;AACAA,2DAAA;AACAwxB,8EAAoB,CAACgmB,OAAD,EAAUI,OAAV,CAApB;AACA53C,8CAAA,GAAY8zC,sBAAZ,CAAmC0D,OAAnC,EAA4CI,OAA5C;AACA53C,yDAAA,GALe,CAOf;AACA;;AACAA,8CAAA,GAAY0yB,eAAZ;AACD;;AAEDmkB,gBAAc,CAAC95K,OAAf,CAAuBuwB,IAAI,IAAIA,IAAI,CAACkqJ,OAAD,EAAUI,OAAV,CAAnC;;AAEA,MAAIphC,MAAM,GAAGqhC,qBAAqB,CAAC9O,QAAQ,CAACz3K,MAAT,CAAgByiB,GAAG,IAAI,CAACA,GAAG,CAAC09I,GAA5B,CAAD,CAAlC;AACAnS,mDAAG,CAACN,MAAJ,CAAWzmH,IAAX,CAAgB,MAAhB,EAAwB;AACtBvxB,QAAI,EAAE,SADgB;AAEtBwvI,UAFsB;AAGtBtkJ,QAAI,EAAE0lL,OAHgB;AAItBE,YAAQ,EAAEN;AAJY,GAAxB;AAOA,SAAOzO,QAAP;AACD,CApKsC,CAAhC;AAsKA,SAASgP,eAAT,CAAyBhP,QAAzB,EAAmC;AACxCA,UAAQ,CAAChsK,OAAT,CAAiBgX,GAAG,IAAI;AACtBsjJ,uDAAS,CAAC2gB,IAAV,CAAejkK,GAAG,CAAC9Z,SAAnB;AACD,GAFD;AAIA,SAAOgmI,6DAAU,CAAC,MAAMi3C,aAAa,CAACnO,QAAD,CAApB,CAAjB;AACD;;AAED,eAAekP,aAAf,CAA6BlP,QAA7B,EAAuC;AACrC,MAAI;AACF,UAAMmO,aAAa,CAACnO,QAAD,CAAnB;AACD,GAFD,CAEE,OAAO50J,CAAP,EAAU;AACV,QAAIA,CAAC,YAAY6oJ,SAAjB,EAA4B;AAC1B,UAAI7oJ,CAAC,CAACogJ,MAAF,KAAa,gBAAjB,EAAmC;AACjC;AACA;AACA;AACA;AACAjV,yDAAG,CAACN,MAAJ,CAAWzmH,IAAX,CAAgB,MAAhB,EAAwB;AACtBvxB,cAAI,EAAE,OADgB;AAEtB0lK,iBAAO,EAAE;AAFa,SAAxB;AAID,OATD,MASO;AACLptB,yDAAG,CAACN,MAAJ,CAAWzmH,IAAX,CAAgB,MAAhB,EAAwB;AAAEvxB,cAAI,EAAE;AAAR,SAAxB;AACD;AACF;;AAED,UAAMmN,CAAN;AACD;;AAED,QAAM+jK,gBAAgB,EAAtB;AACD;;AAED,IAAIC,WAAW,GAAG,KAAlB;AACA,IAAIC,QAAQ,GAAG,EAAf;AACO,eAAel4C,aAAf,CAA6B5yG,IAA7B,EAAmC;AACxC,MAAI6qJ,WAAJ,EAAiB;AACf,UAAM7qJ,IAAI,EAAV;AACA;AACD;;AAED6qJ,aAAW,GAAG,IAAd;AACA,MAAIE,OAAO,GAAG,EAAd;;AAEA,MAAI;AACF,UAAM/qJ,IAAI,EAAV,CADE,CAEF;AACD,GAHD,SAGU;AACR6qJ,eAAW,GAAG,KAAd;AACAE,WAAO,GAAGD,QAAV;AACAA,YAAQ,GAAG,EAAX;AACD;;AAED,MAAIC,OAAO,CAACxnL,MAAR,GAAiB,CAArB,EAAwB;AACtB,UAAMonL,aAAa,CAACI,OAAD,CAAnB;AACD;AACF;AAEM,eAAevgB,YAAf,CAA4BiR,QAA5B,EAAsC;AAC3C,MAAIoP,WAAJ,EAAiB;AACfC,YAAQ,GAAGA,QAAQ,CAACvwJ,MAAT,CAAgBkhJ,QAAhB,CAAX;AACD,GAFD,MAEO;AACL,WAAOkP,aAAa,CAAClP,QAAD,CAApB;AACD;AACF;AAEM,SAASuP,gBAAT,CAA0B7nC,KAA1B,EAAiC;AACtC,SAAOpU,4CAAA,CACL,sFADK,EAEL,CAACoU,KAAD,CAFK,EAGL,IAHK,CAAP;AAKD;AAEM,eAAeyzB,sBAAf,CAAsC6E,QAAtC,EAAgDt4B,KAAhD,EAAuD;AAC5D,MAAI8nC,aAAa,GAAG,MAAMD,gBAAgB,CAAC7nC,KAAD,CAA1C;AACA,QAAMsnC,eAAe,CACnBhP,QAAQ,CAACn7K,GAAT,CAAammB,GAAG,oCACXA,GADW;AAEd3pB,SAAK,EAAEwsL,gBAAgB,CAAC7iK,GAAG,CAAC3pB,KAAL,CAFT;AAGd6P,aAAS,EAAEo9J,mDAAS,CAACl4J,KAAV,CAAgB4U,GAAG,CAAC9Z,SAApB;AAHG,IAAhB,CADmB,CAArB;AAOA,SAAOs+K,aAAP;AACD;AAEM,SAAS7W,oBAAT,GAAgC;AACrC,MAAI8W,WAAJ,EAAiB;AACfpwG,gBAAY,CAACowG,WAAD,CAAZ;AACAA,eAAW,GAAG,IAAd;AACD;AACF;AAED,IAAIA,WAAW,GAAG,IAAlB;AACO,SAASN,gBAAT,GAA4B;AACjCxW,sBAAoB;;AAEpB,MAAI+U,gBAAgB,CAAC,SAAD,CAAhB,IAA+B,CAACA,gBAAgB,CAAC,SAAD,CAApD,EAAiE;AAC/D,QAAIpqJ,MAAM,CAACg2I,WAAX,EAAwB;AACtB,aAAOxB,QAAQ,GAAGrrJ,IAAX,CAAgB8qG,GAAG,IAAI;AAC5B,YAAIA,GAAG,CAAC/sF,KAAR,EAAe;AACb,gBAAM+sF,GAAG,CAAC/sF,KAAV;AACD;;AACD,eAAO+sF,GAAP;AACD,OALM,CAAP;AAMD,KAPD,MAOO;AACLk4D,iBAAW,GAAGjhH,UAAU,CAACspG,QAAD,EAAW0V,eAAX,CAAxB;AACD;AACF;AACF;;AAED,SAASsB,qBAAT,CAA+B9O,QAA/B,EAAyC;AACvC,SAAOA,QAAQ,CAACj+K,MAAT,CAAgB,CAAC61H,GAAD,EAAM7nF,OAAN,KAAkB;AACvC,QAAIykH,OAAO,GACTzkH,OAAO,CAACykH,OAAR,KAAoB,qBAApB,GAA4C,WAA5C,GAA0DzkH,OAAO,CAACykH,OADpE;;AAGA,QAAI,CAAC58B,GAAG,CAACr+G,QAAJ,CAAai7I,OAAb,CAAL,EAA4B;AAC1B58B,SAAG,CAACjxH,IAAJ,CAAS6tJ,OAAT;AACD;;AACD,WAAO58B,GAAP;AACD,GARM,EAQJ,EARI,CAAP;AASD,C,CAED;AACA;AACA;AACA;;;AACO,eAAeugD,eAAf,GAAiC;AACtC,MAAItiK,MAAM,GAAG,MAAMiiK,QAAQ,EAA3B;;AACA,MAAI,CAACjiK,MAAM,CAAC20B,KAAZ,EAAmB;AACjB;AACA,UAAMysG,wDAAA,EAAN;AACD;AACF;AAEM,MAAM6gC,QAAQ,GAAG34F,0DAAI,CAAC,kBAAiB;AAC5Co3E,mDAAG,CAACN,MAAJ,CAAWzmH,IAAX,CAAgB,MAAhB,EAAwB;AAAEvxB,QAAI,EAAE;AAAR,GAAxB;AACA,MAAI+hK,QAAJ;;AAEA,MAAI;AACFA,YAAQ,GAAG,MAAM0P,SAAS,CAAC,IAAD,EAAO,CAAP,EAAU,IAAV,CAA1B;AACD,GAFD,CAEE,OAAOtkK,CAAP,EAAU;AACVoR,WAAO,CAACsrE,GAAR,CAAY18E,CAAZ;;AAEA,QAAIA,CAAC,YAAY6oJ,SAAjB,EAA4B;AAC1B,UAAI7oJ,CAAC,CAACogJ,MAAF,KAAa,aAAjB,EAAgC;AAC9BnzB,qFAAgB,CAACjtH,CAAD,CAAhB;AAEAmrI,yDAAG,CAACN,MAAJ,CAAWzmH,IAAX,CAAgB,MAAhB,EAAwB;AACtBvxB,cAAI,EAAE,OADgB;AAEtB0lK,iBAAO,EAAE;AAFa,SAAxB;AAID,OAPD,MAOO,IAAIv4J,CAAC,CAACogJ,MAAF,KAAa,gBAAjB,EAAmC;AACxCjV,yDAAG,CAACN,MAAJ,CAAWzmH,IAAX,CAAgB,MAAhB,EAAwB;AACtBvxB,cAAI,EAAE,OADgB;AAEtB0lK,iBAAO,EAAE;AAFa,SAAxB;AAID,OALM,MAKA,IACLv4J,CAAC,CAACogJ,MAAF,KAAa,iBAAb,IACApgJ,CAAC,CAACogJ,MAAF,KAAa,iBAFR,EAGL;AACAjV,yDAAG,CAACN,MAAJ,CAAWzmH,IAAX,CAAgB,MAAhB,EAAwB;AACtBvxB,cAAI,EAAE,OADgB;AAEtB0lK,iBAAO,EAAEv4J,CAAC,CAACogJ,MAFW;AAGtBrjF,cAAI,EAAE/8D,CAAC,CAAC+8D;AAHc,SAAxB;AAKD,OATM,MASA,IAAI/8D,CAAC,CAACogJ,MAAF,KAAa,cAAjB,EAAiC;AACtCjV,yDAAG,CAACN,MAAJ,CAAWzmH,IAAX,CAAgB,MAAhB,EAAwB;AACtBvxB,cAAI,EAAE,OADgB;AAEtB0lK,iBAAO,EAAEv4J,CAAC,CAACogJ;AAFW,SAAxB;AAID,OALM,MAKA;AACLjV,yDAAG,CAACN,MAAJ,CAAWzmH,IAAX,CAAgB,MAAhB,EAAwB;AAAEvxB,cAAI,EAAE;AAAR,SAAxB;AACD;AACF,KA9BD,MA8BO,IAAImN,CAAC,YAAY0gJ,SAAjB,EAA4B;AACjCtvI,aAAO,CAACsrE,GAAR,CAAY18E,CAAZ;;AACA,UAAIA,CAAC,CAACogJ,MAAF,KAAa,cAAjB,EAAiC;AAC/BjV,yDAAG,CAACN,MAAJ,CAAWzmH,IAAX,CAAgB,MAAhB,EAAwB;AAAEvxB,cAAI,EAAE;AAAR,SAAxB,EAD+B,CAG/B;;AACAugI,4EAAY,CAACnF,OAAb,CAAqB,UAArB,EAAiC,MAAjC;AACD,OALD,MAKO,IAAIjuH,CAAC,CAACogJ,MAAF,KAAa,iBAAjB,EAAoC;AACzCjV,yDAAG,CAACN,MAAJ,CAAWzmH,IAAX,CAAgB,MAAhB,EAAwB;AAAEvxB,cAAI,EAAE,OAAR;AAAiB0lK,iBAAO,EAAE;AAA1B,SAAxB;AACD,OAFM,MAEA;AACLptB,yDAAG,CAACN,MAAJ,CAAWzmH,IAAX,CAAgB,MAAhB,EAAwB;AAAEvxB,cAAI,EAAE,OAAR;AAAiB0lK,iBAAO,EAAEv4J,CAAC,CAACogJ;AAA5B,SAAxB;AACD;AACF,KAZM,MAYA;AACLnzB,mFAAgB,CAACjtH,CAAD,CAAhB,CADK,CAEL;;AACAmrI,uDAAG,CAACN,MAAJ,CAAWzmH,IAAX,CAAgB,MAAhB,EAAwB;AAAEvxB,YAAI,EAAE;AAAR,OAAxB;AACD;;AAED,WAAO;AAAEusB,WAAK,EAAE;AAAEuF,eAAO,EAAE3kB,CAAC,CAAC2kB,OAAb;AAAsBy7H,cAAM,EAAEpgJ,CAAC,CAACogJ,MAAhC;AAAwCrjF,YAAI,EAAE/8D,CAAC,CAAC+8D;AAAhD;AAAT,KAAP;AACD;;AAED,MAAIslE,MAAM,GAAGqhC,qBAAqB,CAAC9O,QAAD,CAAlC;AAEAzpB,mDAAG,CAACN,MAAJ,CAAWzmH,IAAX,CAAgB,MAAhB,EAAwB;AACtBvxB,QAAI,EAAE,SADgB;AAEtBwvI,UAFsB;AAGtBi2B,gBAAY,EAAEgK,gBAAgB,CAAC,UAAD;AAHR,GAAxB;AAKA,SAAO;AAAE1N;AAAF,GAAP;AACD,CApE2B,CAArB;;AAsEP,eAAe0P,SAAf,CAAyBC,cAAzB,EAAyCpmL,KAAzC,EAAgDqmL,YAAhD,EAA8D;AAC5D,aAAoDz3C,+CAAA,MAAoB,EAAxE;AAAA,MAAMizB,WAAN,QAAMA,WAAN;AAAA,MAAmBh5B,OAAnB,QAAmBA,OAAnB;AAAA,MAA4B4xB,mBAA5B,QAA4BA,mBAA5B;;AAEA2U,sBAAoB;;AAEpB,MAAI+U,gBAAgB,CAAC,UAAD,CAAhB,IAAgCA,gBAAgB,CAAC,SAAD,CAApD,EAAiE;AAC/D,WAAO,EAAP;AACD,GAP2D,CAS5D;;;AACA,MAAIzzK,WAAW,GAAGq6I,4DAAQ,GAAGpjJ,SAAX,CAAqBwN,QAArB,EAAlB;AAEA,MAAIgpI,KAAK,GACPioC,cAAc,IACd3rB,mBADA,IAEA;AACA,MAAIsK,mDAAJ,CAAcriK,IAAI,CAACoE,GAAL,KAAa,IAAI,EAAJ,GAAS,IAApC,EAA0C,CAA1C,EAA6C,GAA7C,EAAkDqO,QAAlD,EAJF;AAMA,MAAIshK,QAAQ,GAAGuP,gBAAgB,CAAC7nC,KAAD,CAA/B;AAEA,MAAIyjB,SAAS,GAAG,MAAM3sB,oEAAY,CAACpF,OAAb,CAAqB,YAArB,CAAtB;AAEA6/B,8DAAM,CAACvwI,IAAP,CACE,eADF,EAEEg/G,KAFF,EAGEs4B,QAAQ,CAACl4K,MAHX,EAIE,eAAeyB,KAAf,GAAuB,GAJzB;AAOA,MAAIi2B,MAAM,GAAG,MAAMqwJ,gDAAA,CAAez9C,OAAf,EAAwBg5B,WAAxB,EAAqC1jB,KAArC,EAA4Cs4B,QAA5C,CAAnB,CA7B4D,CA+B5D;AACA;AACA;AACA;;AACA,MAAI8P,SAAS,GAAG,MAAMnQ,wDAAU,CAAC/gC,iEAAS,GAAG0sB,WAAZ,GAA0B,OAA3B,EAAoC9rI,MAApC,EAA4C;AAC1E,sBAAkB2rI;AADwD,GAA5C,CAAhC,CAnC4D,CAuC5D;AACA;;AACA,MAAI,CAAChzB,+CAAA,EAAD,IAAqBA,+CAAA,GAAiB/F,OAAjB,KAA6BA,OAAtD,EAA+D;AAC7D,WAAO,EAAP;AACD;;AAED,MAAI7a,GAAG,GAAG,MAAMs4D,gDAAA,CAAeC,SAAf,CAAhB;AAEA7W,8DAAM,CAACvwI,IAAP,CAAY,0BAAZ,EAAwC6uF,GAAG,CAACyoD,QAAJ,CAAal4K,MAArD;AAEA,MAAIioL,gBAAgB,GAAGz7B,4DAAQ,GAAGpjJ,SAAX,CAAqBwN,QAArB,OAAoCzE,WAA3D,CAjD4D,CAmD5D;;AACA,MAAI+1K,gBAAgB,GAAG,EAAvB;;AACA,MAAIz4D,GAAG,CAACyoD,QAAJ,CAAal4K,MAAb,GAAsB,CAA1B,EAA6B;AAC3BkoL,oBAAgB,GAAG,MAAMhB,eAAe,CACtCz3D,GAAG,CAACyoD,QAAJ,CAAan7K,GAAb,CAAiBmmB,GAAG,oCACfA,GADe;AAElB3pB,WAAK,EAAEwsL,gBAAgB,CAAC7iK,GAAG,CAAC3pB,KAAL,CAFL;AAGlB6P,eAAS,EAAEo9J,mDAAS,CAACl4J,KAAV,CAAgB4U,GAAG,CAAC9Z,SAApB;AAHO,MAApB,CADsC,CAAxC;AAOD;;AAED,MAAI++K,QAAQ,GAAG7U,6CAAA,CAAY7jD,GAAG,CAAC6jD,MAAhB,EAAwB9mB,4DAAQ,GAAG8mB,MAAnC,CAAf;AACA,MAAIvlK,MAAM,GAAG0hH,GAAG,CAACyoD,QAAjB;;AAEA,MAAIiQ,QAAQ,KAAK,IAAjB,EAAuB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,QAAK1mL,KAAK,IAAI,EAAT,IAAe0mL,QAAQ,KAAKL,YAA7B,IAA8CrmL,KAAK,IAAI,GAA3D,EAAgE;AAC9D0vK,kEAAM,CAACvwI,IAAP,CAAY,cAAZ;AACAuwI,kEAAM,CAACvwI,IAAP,CAAYh5B,IAAI,CAACC,SAAL,CAAeqwK,QAAf,CAAZ;AACA/G,kEAAM,CAACvwI,IAAP,CAAY,kBAAZ;AACAuwI,kEAAM,CAACvwI,IAAP,CAAYh5B,IAAI,CAACC,SAAL,CAAe4nH,GAAG,CAACyoD,QAAnB,CAAZ;AAEA,UAAIkQ,aAAa,GAAGC,kEAAiB,EAArC;AAEA3zJ,aAAO,CAACsrE,GAAR,CACEv+F,KADF,EAEE,WAFF,EAGEy2K,QAAQ,CAACl4K,MAHX,EAIEk4K,QAAQ,CAACl4K,MAAT,GAAkB,CAAlB,GAAsBk4K,QAAQ,CAAC,CAAD,CAA9B,GAAoC,IAJtC,EAKE,eALF,EAMEzoD,GAAG,CAACyoD,QAAJ,CAAal4K,MANf,EAOEyvH,GAAG,CAACyoD,QAAJ,CAAal4K,MAAb,GAAsB,CAAtB,GAA0ByvH,GAAG,CAACyoD,QAAJ,CAAa,CAAb,CAA1B,GAA4C,IAP9C,EAQE,UARF,EASE1rB,4DAAQ,GAAGpjJ,SAAX,CAAqBwkB,IAArB,EATF,EAUE,SAVF,EAWE08G,OAXF,EAYE,WAZF,EAaE69C,QAbF,EAcEA,QAAQ,KAAKL,YAdf,EAeE,cAfF,EAgBEt7B,4DAAQ,GAAGpjJ,SAAX,CAAqBwN,QAArB,EAhBF,EAiBE41I,4DAAQ,GAAG8mB,MAAX,CAAkBO,IAjBpB,EAkBE,eAlBF,EAmBEuU,aAAa,CAACE,WAnBhB,EAoBEF,aAAa,CAAC1U,IAAd,CAAmBG,IApBrB,EAqBE,cArBF,EAsBEpkD,GAAG,CAAC6jD,MAAJ,CAAWO,IAtBb,EAuBE,mBAvBF,EAwBEoU,gBAxBF;;AA2BA,UAAIG,aAAa,CAAC1U,IAAd,CAAmBG,IAAnB,KAA4BpkD,GAAG,CAAC6jD,MAAJ,CAAWO,IAA3C,EAAiD;AAC/C;AACA,YAAI0U,MAAM,GAAG,MAAM/8C,uCAAA,CAAO,8BAAP,CAAnB;;AACA,YAAI+8C,MAAM,CAACvoL,MAAP,KAAkB,CAAtB,EAAyB;AACvB00B,iBAAO,CAACsrE,GAAR,CAAY,uBAAZ,EAAqCuoF,MAAM,CAACvoL,MAA5C;AACD;;AACD,YAAI6zK,IAAI,GAAGvN,oEAAgB,CAACiiB,MAAM,CAAC,CAAD,CAAP,CAAhB,CAA4BjV,MAA5B,CAAmCO,IAA9C;AACAn/I,eAAO,CAACsrE,GAAR,CAAY,oBAAZ,EAAkC6zE,IAAlC;AACD;;AAED,YAAM,IAAI1H,SAAJ,CAAc,aAAd,CAAN;AACD;;AAED+b,oBAAgB,GAAGA,gBAAgB,CAAClxJ,MAAjB,CACjB,MAAM4wJ,SAAS,CACb,IAAIphB,mDAAJ,CAAc2hB,QAAd,EAAwB,CAAxB,EAA2B,GAA3B,EAAgCvxK,QAAhC,EADa,EAEb;AACA;AACA;AACA;AACA;AACAqxK,oBAAgB,GAAG,CAAH,GAAOxmL,KAAK,GAAG,CAPlB,EAQb0mL,QARa,CADE,CAAnB;AAYD,GA3ED,MA2EO;AACL;AACA;AACA,UAAM93C,gDAAA,CAAgB;AACpB6rB,yBAAmB,EAAE1P,4DAAQ,GAAGpjJ,SAAX,CAAqBwN,QAArB;AADD,KAAhB,CAAN;AAGD;;AAED,SAAOsxK,gBAAP;AACD,C;;;;;;;;;;;;AC9uBD;AAAA;AAAA;AAAA;;AACA,IAAIzb,MAAM,GAAGrxJ,mBAAO,CAAC,8EAAD,CAApB;;AAEA,eAAeotK,YAAf,GAA8B;AAC5B,SAAO,CAAC,MAAM7kB,mDAAU,CAAC5lI,WAAX,CAAuB,EAAvB,CAAP,EAAmCnnB,QAAnC,EAAP;AACD;;AAEc,eAAe64J,eAAf,CAA+BxL,KAA/B,EAAsC;AACnD,MAAI2f,SAAS,GAAG,IAAInX,MAAM,CAACn4D,OAAX,EAAhB;AACAsvE,WAAS,CAACC,UAAV,CAAqB,MAAM2E,YAAY,EAAvC;AACA5E,WAAS,CAACE,MAAV,CAAiB,MAAM0E,YAAY,EAAnC;AACA5E,WAAS,CAACG,SAAV,CAAoB,MAAMyE,YAAY,EAAtC;AACA5E,WAAS,CAACI,QAAV,CAAmB,MAAMwE,YAAY,EAArC;AACA,MAAIvE,SAAS,GAAGL,SAAS,CAACtwE,eAAV,EAAhB;AAEA,SAAO,MAAMqwD,mDAAU,CAACh1I,OAAX,CAAmBs1J,SAAnB,EAA8BhgB,KAA9B,CAAb;AACD,C;;;;;;;;;;;;AChBD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;AAEA,SAASwkB,gBAAT,CAA0BnjC,SAA1B,EAAqCC,SAArC,EAAgD;AAC9CA,WAAS,CAACr5I,OAAV,CAAkB,CAACuT,KAAD,EAAQshH,KAAR,KAAkB;AAClC,QAAIA,KAAK,KAAK,cAAd,EAA8B;AAC5B,UAAI6/B,GAAG,GAAGtb,SAAS,CAACrpJ,GAAV,CAAc8kI,KAAd,CAAV;AACA,UAAI2nD,OAAO,GAAG,EAAd;AAEAjpK,WAAK,CAACvT,OAAN,CAAcs5I,QAAQ,IAAI;AACxB,YACEA,QAAQ,CAAC4wB,OAAT,KAAqB,CAArB,IACA5wB,QAAQ,CAACqF,SAAT,IAAsB,IADtB,IAEArF,QAAQ,CAACnkB,EAAT,CAAY5vH,QAAZ,CAAqB,GAArB,CAHF,EAIE;AACA,cAAIk3K,QAAQ,GAAGnjC,QAAQ,CAACnkB,EAAT,CAAYhnH,KAAZ,CAAkB,GAAlB,EAAuB,CAAvB,CAAf;AAEAquK,iBAAO,CAAC7pL,IAAR,CAAa;AACX6tJ,mBAAO,EAAE,cADE;AAEX1T,eAAG,EAAEwM,QAAQ,CAACnkB,EAFH;AAGXz5F,kBAAM,EAAE,WAHG;AAIXruC,iBAAK,EAAEovL,QAJI;AAKXv/K,qBAAS,EAAEo9J,kDAAS,CAACplG,IAAV;AALA,WAAb;AAOD;AACF,OAhBD;;AAkBA,UAAIsnH,OAAO,CAAC1oL,MAAR,GAAiB,CAArB,EAAwB;AACtBqmL,oEAAa,CAACqC,OAAD,CAAb;AACD;AACF;AACF,GA3BD;AA4BD;;AAED,IAAIE,SAAS,GAAG,IAAhB;AACO,SAASC,MAAT,GAAkB;AACvB/5B,UAAQ;AACR85B,WAAS,GAAG5jC,8DAAe,CAACyjC,gBAAD,CAA3B;AACD;AAEM,SAAS35B,QAAT,GAAoB;AACzB,MAAI85B,SAAJ,EAAe;AACbA,aAAS;;AACTA,aAAS,GAAG,IAAZ;AACD;AACF,C;;;;;;;;;;;AC7CD;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAI75G,IAAI,GAAG3zD,mBAAO,CAAC,0EAAD,CAAlB;;AACA,IAAI8gD,IAAI,GAAG6S,IAAX;AACA,IAAIvzC,MAAM,GAAGD,UAAb;AAEA2gC,IAAI,CAAC2H,YAAL,CAAkB,qBAAlB,EAAyC,IAAzC,EAA+CroC,MAA/C;AACA0gC,IAAI,CAAC2H,YAAL,CAAkB,eAAlB,EAAmC,IAAnC,EAAyCroC,MAAzC;AACA0gC,IAAI,CAAC2H,YAAL,CAAkB,uBAAlB,EAA2C,IAA3C,EAAiDroC,MAAjD;AACA0gC,IAAI,CAAC2H,YAAL,CAAkB,mBAAlB,EAAuC,IAAvC,EAA6CroC,MAA7C;AACA0gC,IAAI,CAAC2H,YAAL,CAAkB,oBAAlB,EAAwC,IAAxC,EAA8CroC,MAA9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACAqhF,KAAK,CAACqnE,aAAN,GAAsB,UAAS4E,QAAT,EAAmB;AACvC/5G,MAAI,CAACulC,OAAL,CAAaa,UAAb,CAAwB,IAAxB,EAA8B2zE,QAA9B,EAAwC,CAAxC,EAA2C,CAAC,CAA5C,EAA+C,IAA/C,EAAqD,IAArD;AACD,CAFD;;AAGA5sH,IAAI,CAAC6H,QAAL,CAAc84C,KAAK,CAACqnE,aAApB,EAAmCn1G,IAAI,CAACulC,OAAxC;;AACA,IAAIp4C,IAAI,CAACW,KAAL,IAAc,CAACZ,QAAnB,EAA6B;AAC3B;AACF;AACA;AACA;AACE4gD,OAAK,CAACqnE,aAAN,CAAoBp1G,WAApB,GAAkC,qBAAlC;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA+tC,KAAK,CAACvI,OAAN,GAAgB,UAASw0E,QAAT,EAAmB;AACjC/5G,MAAI,CAACulC,OAAL,CAAaa,UAAb,CAAwB,IAAxB,EAA8B2zE,QAA9B,EAAwC,CAAxC,EAA2C,CAAC,CAA5C,EAA+C,IAA/C,EAAqD,IAArD;AACD,CAFD;;AAGA5sH,IAAI,CAAC6H,QAAL,CAAc84C,KAAK,CAACvI,OAApB,EAA6BvlC,IAAI,CAACulC,OAAlC;;AACA,IAAIp4C,IAAI,CAACW,KAAL,IAAc,CAACZ,QAAnB,EAA6B;AAC3B;AACF;AACA;AACA;AACE4gD,OAAK,CAACvI,OAAN,CAAcxlC,WAAd,GAA4B,eAA5B;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA+tC,KAAK,CAAC6mE,eAAN,GAAwB,UAASoF,QAAT,EAAmB;AACzC/5G,MAAI,CAACulC,OAAL,CAAaa,UAAb,CAAwB,IAAxB,EAA8B2zE,QAA9B,EAAwC,CAAxC,EAA2C,CAAC,CAA5C,EAA+C,IAA/C,EAAqD,IAArD;AACD,CAFD;;AAGA5sH,IAAI,CAAC6H,QAAL,CAAc84C,KAAK,CAAC6mE,eAApB,EAAqC30G,IAAI,CAACulC,OAA1C;;AACA,IAAIp4C,IAAI,CAACW,KAAL,IAAc,CAACZ,QAAnB,EAA6B;AAC3B;AACF;AACA;AACA;AACE4gD,OAAK,CAAC6mE,eAAN,CAAsB50G,WAAtB,GAAoC,uBAApC;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA+tC,KAAK,CAAC2mE,WAAN,GAAoB,UAASsF,QAAT,EAAmB;AACrC/5G,MAAI,CAACulC,OAAL,CAAaa,UAAb,CAAwB,IAAxB,EAA8B2zE,QAA9B,EAAwC,CAAxC,EAA2C,CAAC,CAA5C,EAA+CjsE,KAAK,CAAC2mE,WAAN,CAAkBuF,eAAjE,EAAkF,IAAlF;AACD,CAFD;;AAGA7sH,IAAI,CAAC6H,QAAL,CAAc84C,KAAK,CAAC2mE,WAApB,EAAiCz0G,IAAI,CAACulC,OAAtC;;AACA,IAAIp4C,IAAI,CAACW,KAAL,IAAc,CAACZ,QAAnB,EAA6B;AAC3B;AACF;AACA;AACA;AACE4gD,OAAK,CAAC2mE,WAAN,CAAkB10G,WAAlB,GAAgC,mBAAhC;AACD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA+tC,KAAK,CAACioE,YAAN,GAAqB,UAASgE,QAAT,EAAmB;AACtC/5G,MAAI,CAACulC,OAAL,CAAaa,UAAb,CAAwB,IAAxB,EAA8B2zE,QAA9B,EAAwC,CAAxC,EAA2C,CAAC,CAA5C,EAA+CjsE,KAAK,CAACioE,YAAN,CAAmBiE,eAAlE,EAAmF,IAAnF;AACD,CAFD;;AAGA7sH,IAAI,CAAC6H,QAAL,CAAc84C,KAAK,CAACioE,YAApB,EAAkC/1G,IAAI,CAACulC,OAAvC;;AACA,IAAIp4C,IAAI,CAACW,KAAL,IAAc,CAACZ,QAAnB,EAA6B;AAC3B;AACF;AACA;AACA;AACE4gD,OAAK,CAACioE,YAAN,CAAmBh2G,WAAnB,GAAiC,oBAAjC;AACD;;AAID,IAAIC,IAAI,CAACulC,OAAL,CAAaC,kBAAjB,EAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAsI,OAAK,CAACqnE,aAAN,CAAoBluK,SAApB,CAA8B29D,QAA9B,GAAyC,UAASq1G,mBAAT,EAA8B;AACrE,WAAOnsE,KAAK,CAACqnE,aAAN,CAAoBvwG,QAApB,CAA6Bq1G,mBAA7B,EAAkD,IAAlD,CAAP;AACD,GAFD;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAnsE,OAAK,CAACqnE,aAAN,CAAoBvwG,QAApB,GAA+B,UAASs1G,eAAT,EAA0B/lK,GAA1B,EAA+B;AAC5D,QAAI2jB,CAAJ;AAAA,QAAO93B,GAAG,GAAG;AACXw7J,QAAE,EAAErnJ,GAAG,CAACgmK,WAAJ,EADO;AAEXC,aAAO,EAAEjmK,GAAG,CAACkmK,gBAAJ,EAFE;AAGX/nL,UAAI,EAAE6hB,GAAG,CAACmmK,aAAJ;AAHK,KAAb;;AAMA,QAAIJ,eAAJ,EAAqB;AACnBl6K,SAAG,CAACu6K,oBAAJ,GAA2BpmK,GAA3B;AACD;;AACD,WAAOnU,GAAP;AACD,GAXD;AAYC;AAGD;AACA;AACA;AACA;AACA;;;AACA8tG,KAAK,CAACqnE,aAAN,CAAoB3wE,iBAApB,GAAwC,UAASzpF,KAAT,EAAgB;AACtD,MAAIy/J,MAAM,GAAG,IAAIx6G,IAAI,CAAC22B,YAAT,CAAsB57E,KAAtB,CAAb;AACA,MAAI5G,GAAG,GAAG,IAAI25F,KAAK,CAACqnE,aAAV,EAAV;AACA,SAAOrnE,KAAK,CAACqnE,aAAN,CAAoBsF,2BAApB,CAAgDtmK,GAAhD,EAAqDqmK,MAArD,CAAP;AACD,CAJD;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA1sE,KAAK,CAACqnE,aAAN,CAAoBsF,2BAApB,GAAkD,UAAStmK,GAAT,EAAcqmK,MAAd,EAAsB;AACtE,SAAOA,MAAM,CAACljF,SAAP,EAAP,EAA2B;AACzB,QAAIkjF,MAAM,CAACnjF,UAAP,EAAJ,EAAyB;AACvB;AACD;;AACD,QAAIpjE,KAAK,GAAGumJ,MAAM,CAACtjF,cAAP,EAAZ;;AACA,YAAQjjE,KAAR;AACA,WAAK,CAAL;AACE,YAAIzpC,KAAK;AAAG;AAA4BgwL,cAAM,CAAChkF,SAAP,EAAxC;AACAriF,WAAG,CAACihK,KAAJ,CAAU5qL,KAAV;AACA;;AACF,WAAK,CAAL;AACE,YAAIA,KAAK;AAAG;AAA4BgwL,cAAM,CAAChkF,SAAP,EAAxC;AACAriF,WAAG,CAACkhK,UAAJ,CAAe7qL,KAAf;AACA;;AACF,WAAK,CAAL;AACE,YAAIA,KAAK;AAAG;AAA4BgwL,cAAM,CAAChkF,SAAP,EAAxC;AACAriF,WAAG,CAACrE,OAAJ,CAAYtlB,KAAZ;AACA;;AACF;AACEgwL,cAAM,CAAC/iF,SAAP;AACA;AAfF;AAiBD;;AACD,SAAOtjF,GAAP;AACD,CAzBD;AA4BA;AACA;AACA;AACA;;;AACA25F,KAAK,CAACqnE,aAAN,CAAoBluK,SAApB,CAA8Bs9F,eAA9B,GAAgD,YAAW;AACzD,MAAIm2E,MAAM,GAAG,IAAI16G,IAAI,CAACs9B,YAAT,EAAb;AACAwQ,OAAK,CAACqnE,aAAN,CAAoBwF,uBAApB,CAA4C,IAA5C,EAAkDD,MAAlD;AACA,SAAOA,MAAM,CAACz8E,eAAP,EAAP;AACD,CAJD;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA6P,KAAK,CAACqnE,aAAN,CAAoBwF,uBAApB,GAA8C,UAASzhJ,OAAT,EAAkBwhJ,MAAlB,EAA0B;AACtE,MAAI5iJ,CAAC,GAAG7tC,SAAR;AACA6tC,GAAC,GAAGoB,OAAO,CAAC0hJ,UAAR,EAAJ;;AACA,MAAI9iJ,CAAC,CAAC7mC,MAAF,GAAW,CAAf,EAAkB;AAChBypL,UAAM,CAACv+E,UAAP,CACE,CADF,EAEErkE,CAFF;AAID;;AACDA,GAAC,GAAGoB,OAAO,CAAC2hJ,eAAR,EAAJ;;AACA,MAAI/iJ,CAAC,CAAC7mC,MAAF,GAAW,CAAf,EAAkB;AAChBypL,UAAM,CAACv+E,UAAP,CACE,CADF,EAEErkE,CAFF;AAID;;AACDA,GAAC,GAAGoB,OAAO,CAAC4hJ,YAAR,EAAJ;;AACA,MAAIhjJ,CAAC,CAAC7mC,MAAF,GAAW,CAAf,EAAkB;AAChBypL,UAAM,CAACv+E,UAAP,CACE,CADF,EAEErkE,CAFF;AAID;AACF,CAvBD;AA0BA;AACA;AACA;AACA;;;AACAg2E,KAAK,CAACqnE,aAAN,CAAoBluK,SAApB,CAA8BqvK,KAA9B,GAAsC,YAAW;AAC/C;AAAO;AAAqCt2G,QAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0C,EAA1C;AAA5C;AACD,CAFD;AAKA;AACA;AACA;AACA;AACA;;;AACA8F,KAAK,CAACqnE,aAAN,CAAoBluK,SAApB,CAA8BkzK,WAA9B,GAA4C,YAAW;AACrD;AAAO;AAAuBn6G,QAAI,CAACulC,OAAL,CAAaoC,UAAb,CAC1B,KAAK2uE,KAAL,EAD0B;AAA9B;AAED,CAHD;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAxoE,KAAK,CAACqnE,aAAN,CAAoBluK,SAApB,CAA8B2zK,UAA9B,GAA2C,YAAW;AACpD;AAAO;AAA4B56G,QAAI,CAACulC,OAAL,CAAaqC,SAAb,CAC/B,KAAK0uE,KAAL,EAD+B;AAAnC;AAED,CAHD;AAMA;AACA;AACA;AACA;;;AACAxoE,KAAK,CAACqnE,aAAN,CAAoBluK,SAApB,CAA8BmuK,KAA9B,GAAsC,UAAS5qL,KAAT,EAAgB;AACpD,SAAOw1E,IAAI,CAACulC,OAAL,CAAaoD,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0Cn+G,KAA1C,CAAP;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACAsjH,KAAK,CAACqnE,aAAN,CAAoBluK,SAApB,CAA8BsvK,UAA9B,GAA2C,YAAW;AACpD;AAAO;AAAqCv2G,QAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0C,EAA1C;AAA5C;AACD,CAFD;AAKA;AACA;AACA;AACA;AACA;;;AACA8F,KAAK,CAACqnE,aAAN,CAAoBluK,SAApB,CAA8BozK,gBAA9B,GAAiD,YAAW;AAC1D;AAAO;AAAuBr6G,QAAI,CAACulC,OAAL,CAAaoC,UAAb,CAC1B,KAAK4uE,UAAL,EAD0B;AAA9B;AAED,CAHD;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAzoE,KAAK,CAACqnE,aAAN,CAAoBluK,SAApB,CAA8B4zK,eAA9B,GAAgD,YAAW;AACzD;AAAO;AAA4B76G,QAAI,CAACulC,OAAL,CAAaqC,SAAb,CAC/B,KAAK2uE,UAAL,EAD+B;AAAnC;AAED,CAHD;AAMA;AACA;AACA;AACA;;;AACAzoE,KAAK,CAACqnE,aAAN,CAAoBluK,SAApB,CAA8BouK,UAA9B,GAA2C,UAAS7qL,KAAT,EAAgB;AACzD,SAAOw1E,IAAI,CAACulC,OAAL,CAAaoD,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0Cn+G,KAA1C,CAAP;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACAsjH,KAAK,CAACqnE,aAAN,CAAoBluK,SAApB,CAA8B4H,OAA9B,GAAwC,YAAW;AACjD;AAAO;AAAqCmxD,QAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0C,EAA1C;AAA5C;AACD,CAFD;AAKA;AACA;AACA;AACA;AACA;;;AACA8F,KAAK,CAACqnE,aAAN,CAAoBluK,SAApB,CAA8BqzK,aAA9B,GAA8C,YAAW;AACvD;AAAO;AAAuBt6G,QAAI,CAACulC,OAAL,CAAaoC,UAAb,CAC1B,KAAK94F,OAAL,EAD0B;AAA9B;AAED,CAHD;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAi/F,KAAK,CAACqnE,aAAN,CAAoBluK,SAApB,CAA8B6zK,YAA9B,GAA6C,YAAW;AACtD;AAAO;AAA4B96G,QAAI,CAACulC,OAAL,CAAaqC,SAAb,CAC/B,KAAK/4F,OAAL,EAD+B;AAAnC;AAED,CAHD;AAMA;AACA;AACA;AACA;;;AACAi/F,KAAK,CAACqnE,aAAN,CAAoBluK,SAApB,CAA8B6I,OAA9B,GAAwC,UAAStlB,KAAT,EAAgB;AACtD,SAAOw1E,IAAI,CAACulC,OAAL,CAAaoD,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0Cn+G,KAA1C,CAAP;AACD,CAFD;;AAQA,IAAIw1E,IAAI,CAACulC,OAAL,CAAaC,kBAAjB,EAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAsI,OAAK,CAACvI,OAAN,CAAct+F,SAAd,CAAwB29D,QAAxB,GAAmC,UAASq1G,mBAAT,EAA8B;AAC/D,WAAOnsE,KAAK,CAACvI,OAAN,CAAc3gC,QAAd,CAAuBq1G,mBAAvB,EAA4C,IAA5C,CAAP;AACD,GAFD;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAnsE,OAAK,CAACvI,OAAN,CAAc3gC,QAAd,GAAyB,UAASs1G,eAAT,EAA0B/lK,GAA1B,EAA+B;AACtD,QAAI2jB,CAAJ;AAAA,QAAO93B,GAAG,GAAG;AACX29I,aAAO,EAAE39E,IAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC7zF,GAAjC,EAAsC,CAAtC,EAAyC,EAAzC,CADE;AAEX81H,SAAG,EAAEjqE,IAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC7zF,GAAjC,EAAsC,CAAtC,EAAyC,EAAzC,CAFM;AAGX0kB,YAAM,EAAEmnC,IAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC7zF,GAAjC,EAAsC,CAAtC,EAAyC,EAAzC,CAHG;AAIX3pB,WAAK,EAAEw1E,IAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC7zF,GAAjC,EAAsC,CAAtC,EAAyC,EAAzC;AAJI,KAAb;;AAOA,QAAI+lK,eAAJ,EAAqB;AACnBl6K,SAAG,CAACu6K,oBAAJ,GAA2BpmK,GAA3B;AACD;;AACD,WAAOnU,GAAP;AACD,GAZD;AAaC;AAGD;AACA;AACA;AACA;AACA;;;AACA8tG,KAAK,CAACvI,OAAN,CAAcf,iBAAd,GAAkC,UAASzpF,KAAT,EAAgB;AAChD,MAAIy/J,MAAM,GAAG,IAAIx6G,IAAI,CAAC22B,YAAT,CAAsB57E,KAAtB,CAAb;AACA,MAAI5G,GAAG,GAAG,IAAI25F,KAAK,CAACvI,OAAV,EAAV;AACA,SAAOuI,KAAK,CAACvI,OAAN,CAAck1E,2BAAd,CAA0CtmK,GAA1C,EAA+CqmK,MAA/C,CAAP;AACD,CAJD;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA1sE,KAAK,CAACvI,OAAN,CAAck1E,2BAAd,GAA4C,UAAStmK,GAAT,EAAcqmK,MAAd,EAAsB;AAChE,SAAOA,MAAM,CAACljF,SAAP,EAAP,EAA2B;AACzB,QAAIkjF,MAAM,CAACnjF,UAAP,EAAJ,EAAyB;AACvB;AACD;;AACD,QAAIpjE,KAAK,GAAGumJ,MAAM,CAACtjF,cAAP,EAAZ;;AACA,YAAQjjE,KAAR;AACA,WAAK,CAAL;AACE,YAAIzpC,KAAK;AAAG;AAAuBgwL,cAAM,CAAClkF,UAAP,EAAnC;AACAniF,WAAG,CAAC2gK,UAAJ,CAAetqL,KAAf;AACA;;AACF,WAAK,CAAL;AACE,YAAIA,KAAK;AAAG;AAAuBgwL,cAAM,CAAClkF,UAAP,EAAnC;AACAniF,WAAG,CAAC4gK,MAAJ,CAAWvqL,KAAX;AACA;;AACF,WAAK,CAAL;AACE,YAAIA,KAAK;AAAG;AAAuBgwL,cAAM,CAAClkF,UAAP,EAAnC;AACAniF,WAAG,CAAC6gK,SAAJ,CAAcxqL,KAAd;AACA;;AACF,WAAK,CAAL;AACE,YAAIA,KAAK;AAAG;AAAuBgwL,cAAM,CAAClkF,UAAP,EAAnC;AACAniF,WAAG,CAAC8gK,QAAJ,CAAazqL,KAAb;AACA;;AACF;AACEgwL,cAAM,CAAC/iF,SAAP;AACA;AAnBF;AAqBD;;AACD,SAAOtjF,GAAP;AACD,CA7BD;AAgCA;AACA;AACA;AACA;;;AACA25F,KAAK,CAACvI,OAAN,CAAct+F,SAAd,CAAwBs9F,eAAxB,GAA0C,YAAW;AACnD,MAAIm2E,MAAM,GAAG,IAAI16G,IAAI,CAACs9B,YAAT,EAAb;AACAwQ,OAAK,CAACvI,OAAN,CAAco1E,uBAAd,CAAsC,IAAtC,EAA4CD,MAA5C;AACA,SAAOA,MAAM,CAACz8E,eAAP,EAAP;AACD,CAJD;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA6P,KAAK,CAACvI,OAAN,CAAco1E,uBAAd,GAAwC,UAASzhJ,OAAT,EAAkBwhJ,MAAlB,EAA0B;AAChE,MAAI5iJ,CAAC,GAAG7tC,SAAR;AACA6tC,GAAC,GAAGoB,OAAO,CAACs9I,UAAR,EAAJ;;AACA,MAAI1+I,CAAC,CAAC7mC,MAAF,GAAW,CAAf,EAAkB;AAChBypL,UAAM,CAACp+E,WAAP,CACE,CADF,EAEExkE,CAFF;AAID;;AACDA,GAAC,GAAGoB,OAAO,CAACu9I,MAAR,EAAJ;;AACA,MAAI3+I,CAAC,CAAC7mC,MAAF,GAAW,CAAf,EAAkB;AAChBypL,UAAM,CAACp+E,WAAP,CACE,CADF,EAEExkE,CAFF;AAID;;AACDA,GAAC,GAAGoB,OAAO,CAACw9I,SAAR,EAAJ;;AACA,MAAI5+I,CAAC,CAAC7mC,MAAF,GAAW,CAAf,EAAkB;AAChBypL,UAAM,CAACp+E,WAAP,CACE,CADF,EAEExkE,CAFF;AAID;;AACDA,GAAC,GAAGoB,OAAO,CAACwjG,QAAR,EAAJ;;AACA,MAAI5kG,CAAC,CAAC7mC,MAAF,GAAW,CAAf,EAAkB;AAChBypL,UAAM,CAACp+E,WAAP,CACE,CADF,EAEExkE,CAFF;AAID;AACF,CA9BD;AAiCA;AACA;AACA;AACA;;;AACAg2E,KAAK,CAACvI,OAAN,CAAct+F,SAAd,CAAwBuvK,UAAxB,GAAqC,YAAW;AAC9C;AAAO;AAAuBx2G,QAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0C,EAA1C;AAA9B;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACA8F,KAAK,CAACvI,OAAN,CAAct+F,SAAd,CAAwB6tK,UAAxB,GAAqC,UAAStqL,KAAT,EAAgB;AACnD,SAAOw1E,IAAI,CAACulC,OAAL,CAAamD,oBAAb,CAAkC,IAAlC,EAAwC,CAAxC,EAA2Cl+G,KAA3C,CAAP;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACAsjH,KAAK,CAACvI,OAAN,CAAct+F,SAAd,CAAwBwvK,MAAxB,GAAiC,YAAW;AAC1C;AAAO;AAAuBz2G,QAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0C,EAA1C;AAA9B;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACA8F,KAAK,CAACvI,OAAN,CAAct+F,SAAd,CAAwB8tK,MAAxB,GAAiC,UAASvqL,KAAT,EAAgB;AAC/C,SAAOw1E,IAAI,CAACulC,OAAL,CAAamD,oBAAb,CAAkC,IAAlC,EAAwC,CAAxC,EAA2Cl+G,KAA3C,CAAP;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACAsjH,KAAK,CAACvI,OAAN,CAAct+F,SAAd,CAAwByvK,SAAxB,GAAoC,YAAW;AAC7C;AAAO;AAAuB12G,QAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0C,EAA1C;AAA9B;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACA8F,KAAK,CAACvI,OAAN,CAAct+F,SAAd,CAAwB+tK,SAAxB,GAAoC,UAASxqL,KAAT,EAAgB;AAClD,SAAOw1E,IAAI,CAACulC,OAAL,CAAamD,oBAAb,CAAkC,IAAlC,EAAwC,CAAxC,EAA2Cl+G,KAA3C,CAAP;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACAsjH,KAAK,CAACvI,OAAN,CAAct+F,SAAd,CAAwBy1H,QAAxB,GAAmC,YAAW;AAC5C;AAAO;AAAuB18D,QAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0C,EAA1C;AAA9B;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACA8F,KAAK,CAACvI,OAAN,CAAct+F,SAAd,CAAwBguK,QAAxB,GAAmC,UAASzqL,KAAT,EAAgB;AACjD,SAAOw1E,IAAI,CAACulC,OAAL,CAAamD,oBAAb,CAAkC,IAAlC,EAAwC,CAAxC,EAA2Cl+G,KAA3C,CAAP;AACD,CAFD;;AAQA,IAAIw1E,IAAI,CAACulC,OAAL,CAAaC,kBAAjB,EAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAsI,OAAK,CAAC6mE,eAAN,CAAsB1tK,SAAtB,CAAgC29D,QAAhC,GAA2C,UAASq1G,mBAAT,EAA8B;AACvE,WAAOnsE,KAAK,CAAC6mE,eAAN,CAAsB/vG,QAAtB,CAA+Bq1G,mBAA/B,EAAoD,IAApD,CAAP;AACD,GAFD;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAnsE,OAAK,CAAC6mE,eAAN,CAAsB/vG,QAAtB,GAAiC,UAASs1G,eAAT,EAA0B/lK,GAA1B,EAA+B;AAC9D,QAAI2jB,CAAJ;AAAA,QAAO93B,GAAG,GAAG;AACX3F,eAAS,EAAE2lE,IAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC7zF,GAAjC,EAAsC,CAAtC,EAAyC,EAAzC,CADA;AAEX4mK,iBAAW,EAAE/6G,IAAI,CAACulC,OAAL,CAAa0C,0BAAb,CAAwC9zF,GAAxC,EAA6C,CAA7C,EAAgD,KAAhD,CAFF;AAGXtE,aAAO,EAAEsE,GAAG,CAAC6mK,gBAAJ;AAHE,KAAb;;AAMA,QAAId,eAAJ,EAAqB;AACnBl6K,SAAG,CAACu6K,oBAAJ,GAA2BpmK,GAA3B;AACD;;AACD,WAAOnU,GAAP;AACD,GAXD;AAYC;AAGD;AACA;AACA;AACA;AACA;;;AACA8tG,KAAK,CAAC6mE,eAAN,CAAsBnwE,iBAAtB,GAA0C,UAASzpF,KAAT,EAAgB;AACxD,MAAIy/J,MAAM,GAAG,IAAIx6G,IAAI,CAAC22B,YAAT,CAAsB57E,KAAtB,CAAb;AACA,MAAI5G,GAAG,GAAG,IAAI25F,KAAK,CAAC6mE,eAAV,EAAV;AACA,SAAO7mE,KAAK,CAAC6mE,eAAN,CAAsB8F,2BAAtB,CAAkDtmK,GAAlD,EAAuDqmK,MAAvD,CAAP;AACD,CAJD;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA1sE,KAAK,CAAC6mE,eAAN,CAAsB8F,2BAAtB,GAAoD,UAAStmK,GAAT,EAAcqmK,MAAd,EAAsB;AACxE,SAAOA,MAAM,CAACljF,SAAP,EAAP,EAA2B;AACzB,QAAIkjF,MAAM,CAACnjF,UAAP,EAAJ,EAAyB;AACvB;AACD;;AACD,QAAIpjE,KAAK,GAAGumJ,MAAM,CAACtjF,cAAP,EAAZ;;AACA,YAAQjjE,KAAR;AACA,WAAK,CAAL;AACE,YAAIzpC,KAAK;AAAG;AAAuBgwL,cAAM,CAAClkF,UAAP,EAAnC;AACAniF,WAAG,CAACygK,YAAJ,CAAiBpqL,KAAjB;AACA;;AACF,WAAK,CAAL;AACE,YAAIA,KAAK;AAAG;AAAwBgwL,cAAM,CAACpkF,QAAP,EAApC;AACAjiF,WAAG,CAACohK,cAAJ,CAAmB/qL,KAAnB;AACA;;AACF,WAAK,CAAL;AACE,YAAIA,KAAK;AAAG;AAA4BgwL,cAAM,CAAChkF,SAAP,EAAxC;AACAriF,WAAG,CAACmhK,UAAJ,CAAe9qL,KAAf;AACA;;AACF;AACEgwL,cAAM,CAAC/iF,SAAP;AACA;AAfF;AAiBD;;AACD,SAAOtjF,GAAP;AACD,CAzBD;AA4BA;AACA;AACA;AACA;;;AACA25F,KAAK,CAAC6mE,eAAN,CAAsB1tK,SAAtB,CAAgCs9F,eAAhC,GAAkD,YAAW;AAC3D,MAAIm2E,MAAM,GAAG,IAAI16G,IAAI,CAACs9B,YAAT,EAAb;AACAwQ,OAAK,CAAC6mE,eAAN,CAAsBgG,uBAAtB,CAA8C,IAA9C,EAAoDD,MAApD;AACA,SAAOA,MAAM,CAACz8E,eAAP,EAAP;AACD,CAJD;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA6P,KAAK,CAAC6mE,eAAN,CAAsBgG,uBAAtB,GAAgD,UAASzhJ,OAAT,EAAkBwhJ,MAAlB,EAA0B;AACxE,MAAI5iJ,CAAC,GAAG7tC,SAAR;AACA6tC,GAAC,GAAGoB,OAAO,CAACg9I,YAAR,EAAJ;;AACA,MAAIp+I,CAAC,CAAC7mC,MAAF,GAAW,CAAf,EAAkB;AAChBypL,UAAM,CAACp+E,WAAP,CACE,CADF,EAEExkE,CAFF;AAID;;AACDA,GAAC,GAAGoB,OAAO,CAACi9I,cAAR,EAAJ;;AACA,MAAIr+I,CAAJ,EAAO;AACL4iJ,UAAM,CAACz+E,SAAP,CACE,CADF,EAEEnkE,CAFF;AAID;;AACDA,GAAC,GAAGoB,OAAO,CAAC+hJ,eAAR,EAAJ;;AACA,MAAInjJ,CAAC,CAAC7mC,MAAF,GAAW,CAAf,EAAkB;AAChBypL,UAAM,CAACv+E,UAAP,CACE,CADF,EAEErkE,CAFF;AAID;AACF,CAvBD;AA0BA;AACA;AACA;AACA;;;AACAg2E,KAAK,CAAC6mE,eAAN,CAAsB1tK,SAAtB,CAAgCivK,YAAhC,GAA+C,YAAW;AACxD;AAAO;AAAuBl2G,QAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0C,EAA1C;AAA9B;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACA8F,KAAK,CAAC6mE,eAAN,CAAsB1tK,SAAtB,CAAgC2tK,YAAhC,GAA+C,UAASpqL,KAAT,EAAgB;AAC7D,SAAOw1E,IAAI,CAACulC,OAAL,CAAamD,oBAAb,CAAkC,IAAlC,EAAwC,CAAxC,EAA2Cl+G,KAA3C,CAAP;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACAsjH,KAAK,CAAC6mE,eAAN,CAAsB1tK,SAAtB,CAAgCkvK,cAAhC,GAAiD,YAAW;AAC1D;AAAO;AAAwBn2G,QAAI,CAACulC,OAAL,CAAa0C,0BAAb,CAAwC,IAAxC,EAA8C,CAA9C,EAAiD,KAAjD;AAA/B;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACA6F,KAAK,CAAC6mE,eAAN,CAAsB1tK,SAAtB,CAAgCsuK,cAAhC,GAAiD,UAAS/qL,KAAT,EAAgB;AAC/D,SAAOw1E,IAAI,CAACulC,OAAL,CAAakD,qBAAb,CAAmC,IAAnC,EAAyC,CAAzC,EAA4Cj+G,KAA5C,CAAP;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACAsjH,KAAK,CAAC6mE,eAAN,CAAsB1tK,SAAtB,CAAgCovK,UAAhC,GAA6C,YAAW;AACtD;AAAO;AAAqCr2G,QAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0C,EAA1C;AAA5C;AACD,CAFD;AAKA;AACA;AACA;AACA;AACA;;;AACA8F,KAAK,CAAC6mE,eAAN,CAAsB1tK,SAAtB,CAAgC+zK,gBAAhC,GAAmD,YAAW;AAC5D;AAAO;AAAuBh7G,QAAI,CAACulC,OAAL,CAAaoC,UAAb,CAC1B,KAAK0uE,UAAL,EAD0B;AAA9B;AAED,CAHD;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAvoE,KAAK,CAAC6mE,eAAN,CAAsB1tK,SAAtB,CAAgCg0K,eAAhC,GAAkD,YAAW;AAC3D;AAAO;AAA4Bj7G,QAAI,CAACulC,OAAL,CAAaqC,SAAb,CAC/B,KAAKyuE,UAAL,EAD+B;AAAnC;AAED,CAHD;AAMA;AACA;AACA;AACA;;;AACAvoE,KAAK,CAAC6mE,eAAN,CAAsB1tK,SAAtB,CAAgCquK,UAAhC,GAA6C,UAAS9qL,KAAT,EAAgB;AAC3D,SAAOw1E,IAAI,CAACulC,OAAL,CAAaoD,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0Cn+G,KAA1C,CAAP;AACD,CAFD;AAMA;AACA;AACA;AACA;AACA;;;AACAsjH,KAAK,CAAC2mE,WAAN,CAAkBuF,eAAlB,GAAoC,CAAC,CAAD,CAApC;;AAIA,IAAIh6G,IAAI,CAACulC,OAAL,CAAaC,kBAAjB,EAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAsI,OAAK,CAAC2mE,WAAN,CAAkBxtK,SAAlB,CAA4B29D,QAA5B,GAAuC,UAASq1G,mBAAT,EAA8B;AACnE,WAAOnsE,KAAK,CAAC2mE,WAAN,CAAkB7vG,QAAlB,CAA2Bq1G,mBAA3B,EAAgD,IAAhD,CAAP;AACD,GAFD;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAnsE,OAAK,CAAC2mE,WAAN,CAAkB7vG,QAAlB,GAA6B,UAASs1G,eAAT,EAA0B/lK,GAA1B,EAA+B;AAC1D,QAAI2jB,CAAJ;AAAA,QAAO93B,GAAG,GAAG;AACXk7K,kBAAY,EAAEl7G,IAAI,CAACulC,OAAL,CAAa0B,YAAb,CAA0B9yF,GAAG,CAAC8hK,eAAJ,EAA1B,EACdnoE,KAAK,CAAC6mE,eAAN,CAAsB/vG,QADR,EACkBs1G,eADlB,CADH;AAGXiB,YAAM,EAAEn7G,IAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC7zF,GAAjC,EAAsC,CAAtC,EAAyC,EAAzC,CAHG;AAIXinK,aAAO,EAAEp7G,IAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC7zF,GAAjC,EAAsC,CAAtC,EAAyC,EAAzC,CAJE;AAKXknK,WAAK,EAAEr7G,IAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC7zF,GAAjC,EAAsC,CAAtC,EAAyC,EAAzC,CALI;AAMX08H,WAAK,EAAE7wE,IAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC7zF,GAAjC,EAAsC,CAAtC,EAAyC,EAAzC;AANI,KAAb;;AASA,QAAI+lK,eAAJ,EAAqB;AACnBl6K,SAAG,CAACu6K,oBAAJ,GAA2BpmK,GAA3B;AACD;;AACD,WAAOnU,GAAP;AACD,GAdD;AAeC;AAGD;AACA;AACA;AACA;AACA;;;AACA8tG,KAAK,CAAC2mE,WAAN,CAAkBjwE,iBAAlB,GAAsC,UAASzpF,KAAT,EAAgB;AACpD,MAAIy/J,MAAM,GAAG,IAAIx6G,IAAI,CAAC22B,YAAT,CAAsB57E,KAAtB,CAAb;AACA,MAAI5G,GAAG,GAAG,IAAI25F,KAAK,CAAC2mE,WAAV,EAAV;AACA,SAAO3mE,KAAK,CAAC2mE,WAAN,CAAkBgG,2BAAlB,CAA8CtmK,GAA9C,EAAmDqmK,MAAnD,CAAP;AACD,CAJD;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA1sE,KAAK,CAAC2mE,WAAN,CAAkBgG,2BAAlB,GAAgD,UAAStmK,GAAT,EAAcqmK,MAAd,EAAsB;AACpE,SAAOA,MAAM,CAACljF,SAAP,EAAP,EAA2B;AACzB,QAAIkjF,MAAM,CAACnjF,UAAP,EAAJ,EAAyB;AACvB;AACD;;AACD,QAAIpjE,KAAK,GAAGumJ,MAAM,CAACtjF,cAAP,EAAZ;;AACA,YAAQjjE,KAAR;AACA,WAAK,CAAL;AACE,YAAIzpC,KAAK,GAAG,IAAIsjH,KAAK,CAAC6mE,eAAV,EAAZ;AACA6F,cAAM,CAAChiF,WAAP,CAAmBhuG,KAAnB,EAAyBsjH,KAAK,CAAC6mE,eAAN,CAAsB8F,2BAA/C;AACAtmK,WAAG,CAACqhK,WAAJ,CAAgBhrL,KAAhB;AACA;;AACF,WAAK,CAAL;AACE,YAAIA,KAAK;AAAG;AAAuBgwL,cAAM,CAAClkF,UAAP,EAAnC;AACAniF,WAAG,CAACuhK,SAAJ,CAAclrL,KAAd;AACA;;AACF,WAAK,CAAL;AACE,YAAIA,KAAK;AAAG;AAAuBgwL,cAAM,CAAClkF,UAAP,EAAnC;AACAniF,WAAG,CAACshK,UAAJ,CAAejrL,KAAf;AACA;;AACF,WAAK,CAAL;AACE,YAAIA,KAAK;AAAG;AAAuBgwL,cAAM,CAAClkF,UAAP,EAAnC;AACAniF,WAAG,CAACwhK,QAAJ,CAAanrL,KAAb;AACA;;AACF,WAAK,CAAL;AACE,YAAIA,KAAK;AAAG;AAAuBgwL,cAAM,CAAClkF,UAAP,EAAnC;AACAniF,WAAG,CAACyhK,QAAJ,CAAaprL,KAAb;AACA;;AACF;AACEgwL,cAAM,CAAC/iF,SAAP;AACA;AAxBF;AA0BD;;AACD,SAAOtjF,GAAP;AACD,CAlCD;AAqCA;AACA;AACA;AACA;;;AACA25F,KAAK,CAAC2mE,WAAN,CAAkBxtK,SAAlB,CAA4Bs9F,eAA5B,GAA8C,YAAW;AACvD,MAAIm2E,MAAM,GAAG,IAAI16G,IAAI,CAACs9B,YAAT,EAAb;AACAwQ,OAAK,CAAC2mE,WAAN,CAAkBkG,uBAAlB,CAA0C,IAA1C,EAAgDD,MAAhD;AACA,SAAOA,MAAM,CAACz8E,eAAP,EAAP;AACD,CAJD;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA6P,KAAK,CAAC2mE,WAAN,CAAkBkG,uBAAlB,GAA4C,UAASzhJ,OAAT,EAAkBwhJ,MAAlB,EAA0B;AACpE,MAAI5iJ,CAAC,GAAG7tC,SAAR;AACA6tC,GAAC,GAAGoB,OAAO,CAAC+8I,eAAR,EAAJ;;AACA,MAAIn+I,CAAC,CAAC7mC,MAAF,GAAW,CAAf,EAAkB;AAChBypL,UAAM,CAACh5E,oBAAP,CACE,CADF,EAEE5pE,CAFF,EAGEg2E,KAAK,CAAC6mE,eAAN,CAAsBgG,uBAHxB;AAKD;;AACD7iJ,GAAC,GAAGoB,OAAO,CAACoiJ,SAAR,EAAJ;;AACA,MAAIxjJ,CAAC,CAAC7mC,MAAF,GAAW,CAAf,EAAkB;AAChBypL,UAAM,CAACp+E,WAAP,CACE,CADF,EAEExkE,CAFF;AAID;;AACDA,GAAC,GAAGoB,OAAO,CAACqiJ,UAAR,EAAJ;;AACA,MAAIzjJ,CAAC,CAAC7mC,MAAF,GAAW,CAAf,EAAkB;AAChBypL,UAAM,CAACp+E,WAAP,CACE,CADF,EAEExkE,CAFF;AAID;;AACDA,GAAC,GAAGoB,OAAO,CAACsiJ,QAAR,EAAJ;;AACA,MAAI1jJ,CAAC,CAAC7mC,MAAF,GAAW,CAAf,EAAkB;AAChBypL,UAAM,CAACp+E,WAAP,CACE,CADF,EAEExkE,CAFF;AAID;;AACDA,GAAC,GAAGoB,OAAO,CAACuiJ,QAAR,EAAJ;;AACA,MAAI3jJ,CAAC,CAAC7mC,MAAF,GAAW,CAAf,EAAkB;AAChBypL,UAAM,CAACp+E,WAAP,CACE,CADF,EAEExkE,CAFF;AAID;AACF,CAtCD;AAyCA;AACA;AACA;AACA;;;AACAg2E,KAAK,CAAC2mE,WAAN,CAAkBxtK,SAAlB,CAA4BgvK,eAA5B,GAA8C,YAAW;AACvD;AAAO;AACLj2G,QAAI,CAACulC,OAAL,CAAa0D,uBAAb,CAAqC,IAArC,EAA2C6E,KAAK,CAAC6mE,eAAjD,EAAkE,CAAlE;AADF;AAED,CAHD;AAMA;AACA;AACA;AACA;;;AACA7mE,KAAK,CAAC2mE,WAAN,CAAkBxtK,SAAlB,CAA4By0K,eAA5B,GAA8C,UAASlxL,KAAT,EAAgB;AAC5D,SAAOw1E,IAAI,CAACulC,OAAL,CAAa8D,uBAAb,CAAqC,IAArC,EAA2C,CAA3C,EAA8C7+G,KAA9C,CAAP;AACD,CAFD;AAKA;AACA;AACA;AACA;AACA;;;AACAsjH,KAAK,CAAC2mE,WAAN,CAAkBxtK,SAAlB,CAA4BuuK,WAA5B,GAA0C,UAASmG,SAAT,EAAoBC,SAApB,EAA+B;AACvE,SAAO57G,IAAI,CAACulC,OAAL,CAAa+D,yBAAb,CAAuC,IAAvC,EAA6C,CAA7C,EAAgDqyE,SAAhD,EAA2D7tE,KAAK,CAAC6mE,eAAjE,EAAkFiH,SAAlF,CAAP;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACA9tE,KAAK,CAAC2mE,WAAN,CAAkBxtK,SAAlB,CAA4B40K,iBAA5B,GAAgD,YAAW;AACzD,SAAO,KAAKH,eAAL,CAAqB,EAArB,CAAP;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACA5tE,KAAK,CAAC2mE,WAAN,CAAkBxtK,SAAlB,CAA4Bq0K,SAA5B,GAAwC,YAAW;AACjD;AAAO;AAAuBt7G,QAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0C,EAA1C;AAA9B;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACA8F,KAAK,CAAC2mE,WAAN,CAAkBxtK,SAAlB,CAA4ByuK,SAA5B,GAAwC,UAASlrL,KAAT,EAAgB;AACtD,SAAOw1E,IAAI,CAACulC,OAAL,CAAamD,oBAAb,CAAkC,IAAlC,EAAwC,CAAxC,EAA2Cl+G,KAA3C,CAAP;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACAsjH,KAAK,CAAC2mE,WAAN,CAAkBxtK,SAAlB,CAA4Bs0K,UAA5B,GAAyC,YAAW;AAClD;AAAO;AAAuBv7G,QAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0C,EAA1C;AAA9B;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACA8F,KAAK,CAAC2mE,WAAN,CAAkBxtK,SAAlB,CAA4BwuK,UAA5B,GAAyC,UAASjrL,KAAT,EAAgB;AACvD,SAAOw1E,IAAI,CAACulC,OAAL,CAAamD,oBAAb,CAAkC,IAAlC,EAAwC,CAAxC,EAA2Cl+G,KAA3C,CAAP;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACAsjH,KAAK,CAAC2mE,WAAN,CAAkBxtK,SAAlB,CAA4Bu0K,QAA5B,GAAuC,YAAW;AAChD;AAAO;AAAuBx7G,QAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0C,EAA1C;AAA9B;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACA8F,KAAK,CAAC2mE,WAAN,CAAkBxtK,SAAlB,CAA4B0uK,QAA5B,GAAuC,UAASnrL,KAAT,EAAgB;AACrD,SAAOw1E,IAAI,CAACulC,OAAL,CAAamD,oBAAb,CAAkC,IAAlC,EAAwC,CAAxC,EAA2Cl+G,KAA3C,CAAP;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACAsjH,KAAK,CAAC2mE,WAAN,CAAkBxtK,SAAlB,CAA4Bw0K,QAA5B,GAAuC,YAAW;AAChD;AAAO;AAAuBz7G,QAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0C,EAA1C;AAA9B;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACA8F,KAAK,CAAC2mE,WAAN,CAAkBxtK,SAAlB,CAA4B2uK,QAA5B,GAAuC,UAASprL,KAAT,EAAgB;AACrD,SAAOw1E,IAAI,CAACulC,OAAL,CAAamD,oBAAb,CAAkC,IAAlC,EAAwC,CAAxC,EAA2Cl+G,KAA3C,CAAP;AACD,CAFD;AAMA;AACA;AACA;AACA;AACA;;;AACAsjH,KAAK,CAACioE,YAAN,CAAmBiE,eAAnB,GAAqC,CAAC,CAAD,CAArC;;AAIA,IAAIh6G,IAAI,CAACulC,OAAL,CAAaC,kBAAjB,EAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAsI,OAAK,CAACioE,YAAN,CAAmB9uK,SAAnB,CAA6B29D,QAA7B,GAAwC,UAASq1G,mBAAT,EAA8B;AACpE,WAAOnsE,KAAK,CAACioE,YAAN,CAAmBnxG,QAAnB,CAA4Bq1G,mBAA5B,EAAiD,IAAjD,CAAP;AACD,GAFD;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAnsE,OAAK,CAACioE,YAAN,CAAmBnxG,QAAnB,GAA8B,UAASs1G,eAAT,EAA0B/lK,GAA1B,EAA+B;AAC3D,QAAI2jB,CAAJ;AAAA,QAAO93B,GAAG,GAAG;AACXk7K,kBAAY,EAAEl7G,IAAI,CAACulC,OAAL,CAAa0B,YAAb,CAA0B9yF,GAAG,CAAC8hK,eAAJ,EAA1B,EACdnoE,KAAK,CAAC6mE,eAAN,CAAsB/vG,QADR,EACkBs1G,eADlB,CADH;AAGX3V,YAAM,EAAEvkG,IAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC7zF,GAAjC,EAAsC,CAAtC,EAAyC,EAAzC;AAHG,KAAb;;AAMA,QAAI+lK,eAAJ,EAAqB;AACnBl6K,SAAG,CAACu6K,oBAAJ,GAA2BpmK,GAA3B;AACD;;AACD,WAAOnU,GAAP;AACD,GAXD;AAYC;AAGD;AACA;AACA;AACA;AACA;;;AACA8tG,KAAK,CAACioE,YAAN,CAAmBvxE,iBAAnB,GAAuC,UAASzpF,KAAT,EAAgB;AACrD,MAAIy/J,MAAM,GAAG,IAAIx6G,IAAI,CAAC22B,YAAT,CAAsB57E,KAAtB,CAAb;AACA,MAAI5G,GAAG,GAAG,IAAI25F,KAAK,CAACioE,YAAV,EAAV;AACA,SAAOjoE,KAAK,CAACioE,YAAN,CAAmB0E,2BAAnB,CAA+CtmK,GAA/C,EAAoDqmK,MAApD,CAAP;AACD,CAJD;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA1sE,KAAK,CAACioE,YAAN,CAAmB0E,2BAAnB,GAAiD,UAAStmK,GAAT,EAAcqmK,MAAd,EAAsB;AACrE,SAAOA,MAAM,CAACljF,SAAP,EAAP,EAA2B;AACzB,QAAIkjF,MAAM,CAACnjF,UAAP,EAAJ,EAAyB;AACvB;AACD;;AACD,QAAIpjE,KAAK,GAAGumJ,MAAM,CAACtjF,cAAP,EAAZ;;AACA,YAAQjjE,KAAR;AACA,WAAK,CAAL;AACE,YAAIzpC,KAAK,GAAG,IAAIsjH,KAAK,CAAC6mE,eAAV,EAAZ;AACA6F,cAAM,CAAChiF,WAAP,CAAmBhuG,KAAnB,EAAyBsjH,KAAK,CAAC6mE,eAAN,CAAsB8F,2BAA/C;AACAtmK,WAAG,CAACqhK,WAAJ,CAAgBhrL,KAAhB;AACA;;AACF,WAAK,CAAL;AACE,YAAIA,KAAK;AAAG;AAAuBgwL,cAAM,CAAClkF,UAAP,EAAnC;AACAniF,WAAG,CAAC2nK,SAAJ,CAActxL,KAAd;AACA;;AACF;AACEgwL,cAAM,CAAC/iF,SAAP;AACA;AAZF;AAcD;;AACD,SAAOtjF,GAAP;AACD,CAtBD;AAyBA;AACA;AACA;AACA;;;AACA25F,KAAK,CAACioE,YAAN,CAAmB9uK,SAAnB,CAA6Bs9F,eAA7B,GAA+C,YAAW;AACxD,MAAIm2E,MAAM,GAAG,IAAI16G,IAAI,CAACs9B,YAAT,EAAb;AACAwQ,OAAK,CAACioE,YAAN,CAAmB4E,uBAAnB,CAA2C,IAA3C,EAAiDD,MAAjD;AACA,SAAOA,MAAM,CAACz8E,eAAP,EAAP;AACD,CAJD;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA6P,KAAK,CAACioE,YAAN,CAAmB4E,uBAAnB,GAA6C,UAASzhJ,OAAT,EAAkBwhJ,MAAlB,EAA0B;AACrE,MAAI5iJ,CAAC,GAAG7tC,SAAR;AACA6tC,GAAC,GAAGoB,OAAO,CAAC+8I,eAAR,EAAJ;;AACA,MAAIn+I,CAAC,CAAC7mC,MAAF,GAAW,CAAf,EAAkB;AAChBypL,UAAM,CAACh5E,oBAAP,CACE,CADF,EAEE5pE,CAFF,EAGEg2E,KAAK,CAAC6mE,eAAN,CAAsBgG,uBAHxB;AAKD;;AACD7iJ,GAAC,GAAGoB,OAAO,CAAC88I,SAAR,EAAJ;;AACA,MAAIl+I,CAAC,CAAC7mC,MAAF,GAAW,CAAf,EAAkB;AAChBypL,UAAM,CAACp+E,WAAP,CACE,CADF,EAEExkE,CAFF;AAID;AACF,CAjBD;AAoBA;AACA;AACA;AACA;;;AACAg2E,KAAK,CAACioE,YAAN,CAAmB9uK,SAAnB,CAA6BgvK,eAA7B,GAA+C,YAAW;AACxD;AAAO;AACLj2G,QAAI,CAACulC,OAAL,CAAa0D,uBAAb,CAAqC,IAArC,EAA2C6E,KAAK,CAAC6mE,eAAjD,EAAkE,CAAlE;AADF;AAED,CAHD;AAMA;AACA;AACA;AACA;;;AACA7mE,KAAK,CAACioE,YAAN,CAAmB9uK,SAAnB,CAA6By0K,eAA7B,GAA+C,UAASlxL,KAAT,EAAgB;AAC7D,SAAOw1E,IAAI,CAACulC,OAAL,CAAa8D,uBAAb,CAAqC,IAArC,EAA2C,CAA3C,EAA8C7+G,KAA9C,CAAP;AACD,CAFD;AAKA;AACA;AACA;AACA;AACA;;;AACAsjH,KAAK,CAACioE,YAAN,CAAmB9uK,SAAnB,CAA6BuuK,WAA7B,GAA2C,UAASmG,SAAT,EAAoBC,SAApB,EAA+B;AACxE,SAAO57G,IAAI,CAACulC,OAAL,CAAa+D,yBAAb,CAAuC,IAAvC,EAA6C,CAA7C,EAAgDqyE,SAAhD,EAA2D7tE,KAAK,CAAC6mE,eAAjE,EAAkFiH,SAAlF,CAAP;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACA9tE,KAAK,CAACioE,YAAN,CAAmB9uK,SAAnB,CAA6B40K,iBAA7B,GAAiD,YAAW;AAC1D,SAAO,KAAKH,eAAL,CAAqB,EAArB,CAAP;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACA5tE,KAAK,CAACioE,YAAN,CAAmB9uK,SAAnB,CAA6B+uK,SAA7B,GAAyC,YAAW;AAClD;AAAO;AAAuBh2G,QAAI,CAACulC,OAAL,CAAayC,mBAAb,CAAiC,IAAjC,EAAuC,CAAvC,EAA0C,EAA1C;AAA9B;AACD,CAFD;AAKA;AACA;AACA;AACA;;;AACA8F,KAAK,CAACioE,YAAN,CAAmB9uK,SAAnB,CAA6B60K,SAA7B,GAAyC,UAAStxL,KAAT,EAAgB;AACvD,SAAOw1E,IAAI,CAACulC,OAAL,CAAamD,oBAAb,CAAkC,IAAlC,EAAwC,CAAxC,EAA2Cl+G,KAA3C,CAAP;AACD,CAFD;;AAKA2iE,IAAI,CAACp3D,MAAL,CAAYgnE,MAAZ,CAAmB7wD,OAAnB,EAA4B4hG,KAA5B,E;;;;;;;;;;;;AC1wCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEO,SAASwrE,iBAAT,GAA6B;AAClC,MAAIt/B,IAAI,GAAGvd,4CAAA,CAAY,qCAAZ,EAAmD,EAAnD,EAAuD,IAAvD,CAAX;AACA,MAAIkoC,IAAI,GAAG,EAAX;;AAEA,OAAK,IAAI76J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkwI,IAAI,CAAC/oJ,MAAzB,EAAiC6Y,CAAC,EAAlC,EAAsC;AACpC66J,QAAI,GAAGJ,8CAAA,CAAcI,IAAd,EAAoBlN,kDAAS,CAACl4J,KAAV,CAAgBy6I,IAAI,CAAClwI,CAAD,CAAJ,CAAQzP,SAAxB,CAApB,CAAP;AACD;;AAED,SAAO;AACLk/K,eAAW,EAAEv/B,IAAI,CAAC/oJ,MADb;AAEL0zK,QAAI,EAAEA;AAFD,GAAP;AAID;AAEc,eAAelE,UAAf,GAA4B;AACzC,MAAIsb,OAAO,GAAGzC,iBAAiB,EAA/B;AACA,MAAIhiB,KAAK,GAAG7Z,2DAAQ,EAApB,CAFyC,CAIzC;;AACA6Z,OAAK,CAACiN,MAAN,GAAewX,OAAO,CAACpX,IAAvB,CALyC,CAOzC;;AACAloC,8CAAA,CACEA,yCAAA,CAAS,iEAAT,CADF,EAEE,CAACm7B,iEAAc,CAACN,KAAD,CAAf,CAFF;AAID,C;;;;;;;;;;;;AC9BD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAM1d,UAAU,GAAGvtI,mBAAO,CAAC,0GAAD,CAA1B;;AAEe,eAAem0J,SAAf,CAAyBwb,QAAzB,EAAmC;AAChD,MAAI,CAACA,QAAL,EAAe;AACb;AACA;AACA;AACA,gCAAuB,MAAM79B,uDAAA,EAA7B;AAAA,QAAMv/I,KAAN,yBAAMA,KAAN;AAAA,QAAa+0B,KAAb,yBAAaA,KAAb;;AACA,QAAIA,KAAJ,EAAW;AACT,aAAO;AAAEA;AAAF,OAAP;AACD,KAFD,MAEO,IAAI,CAAC/0B,KAAL,EAAY;AACjB,aAAO;AAAE+0B,aAAK,EAAE;AAAEghI,gBAAM,EAAE;AAAV;AAAT,OAAP;AACD;AACF;;AAED,8BAAgB,MAAMxW,6DAAA,CAA4B69B,QAA5B,CAAtB;AAAA,MAAMroJ,KAAN,yBAAMA,KAAN;;AACA,MAAIA,KAAJ,EAAW;AACT,WAAO;AAAEA;AAAF,KAAP;AACD;;AAED,QAAM0sG,4DAAU,CAAC,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA,UAAM5D,6CAAA,CAAc;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAZU,CAAN;AAaA,UAAMA,6CAAA,EAAN;AACD,GApBe,CAAhB;AAsBA,QAAM6E,gDAAA,CAAgB;AACpB/F,WAAO,EAAE,IADW;AAEpB4xB,uBAAmB,EAAE,IAFD;AAGpBC,gBAAY,EAAE;AAHM,GAAhB,CAAN;;AAMA,MAAI4uB,QAAJ,EAAc;AACZ,QAAMj8K,GAAN,GAAci8K,QAAd,CAAMj8K,GAAN;;AACA,0BAAsBuhI,+CAAA,EAAtB;AAAA,QAAMizB,WAAN,mBAAMA,WAAN,CAFY,CAIZ;AACA;AAEA;;;AACA,QAAIz0J,IAAI,GAAGjH,IAAI,CAAC0G,KAAL,CAAW,CAAC,MAAMooI,oEAAY,CAACpF,OAAb,CAAsB,cAAtB,CAAP,KAAgD,IAA3D,CAAX;AACAziI,QAAI,CAACy0J,WAAD,CAAJ,GAAoBx0J,GAAG,CAACmH,SAAJ,EAApB;AACA,UAAMygI,oEAAY,CAACnF,OAAb,CAAqB,cAArB,EAAqC3pI,IAAI,CAACC,SAAL,CAAegH,IAAf,CAArC,CAAN,CAVY,CAYZ;;AACA,UAAMwhI,gDAAA,CAAgB;AAAEkzB,kBAAY,EAAEz0J,GAAG,CAACstI,KAAJ;AAAhB,KAAhB,CAAN;AACD,GA5D+C,CA8DhD;AACA;;;AACA,MAAI;AACF,UAAM8Q,qDAAA,EAAN;AACD,GAFD,CAEE,OAAO5pI,CAAP,EAAU;AACV,QAAIA,CAAC,CAACogJ,MAAN,EAAc;AACZ,aAAO;AAAEhhI,aAAK,EAAEpf;AAAT,OAAP;AACD;;AACDitH,iFAAgB,CAACjtH,CAAD,CAAhB;AACA,WAAO;AAAEof,WAAK,EAAE;AAAEghI,cAAM,EAAE;AAAV;AAAT,KAAP;AACD,GARD,SAQU;AACR/a,cAAU,CAACvnF,IAAX,CAAgB,eAAhB;AACD;;AAED,SAAO,EAAP;AACD,C;;;;;;;;;;;;ACrFD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA,MAAM68D,IAAI,GAAG7iH,mBAAO,CAAC,kFAAD,CAApB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;AACA,IAAIirJ,KAAK,GAAG,IAAZ;AAEO,SAASE,QAAT,CAAkBykB,MAAlB,EAA0B;AAC/B3kB,OAAK,GAAG2kB,MAAR;AACD;AAEM,SAASx+B,QAAT,GAAoB;AACzB,SAAO6Z,KAAP;AACD;AAEM,SAASK,SAAT,CAAmBt9J,SAAnB,EAA8BkqK,MAAM,GAAG,EAAvC,EAA2C;AAChD,SAAO;AAAElqK,aAAS,EAAE6hL,gBAAgB,CAACltL,IAAjB,CAAsBqL,SAAtB,CAAb;AAA+CkqK;AAA/C,GAAP;AACD;AAEM,SAAS3M,cAAT,CAAwBN,KAAxB,EAA+B;AACpC,SAAOz+J,IAAI,CAACC,SAAL,CAAe;AACpBuB,aAAS,EAAEi9J,KAAK,CAACj9J,SAAN,CAAgBwN,QAAhB,EADS;AAEpB08J,UAAM,EAAEjN,KAAK,CAACiN;AAFM,GAAf,CAAP;AAID;AAEM,SAAShN,gBAAT,CAA0BD,KAA1B,EAAiC;AACtC,MAAIhlK,IAAJ;;AACA,MAAI;AACFA,QAAI,GAAGuG,IAAI,CAAC0G,KAAL,CAAW+3J,KAAX,CAAP;AACD,GAFD,CAEE,OAAO/iJ,CAAP,EAAU;AACVjiB,QAAI,GAAG;AACL+H,eAAS,EAAE,mCAAmCq9J,YAAY,EADrD;AAEL6M,YAAM,EAAE;AAFH,KAAP;AAID;;AAED,SAAO;AACLlqK,aAAS,EAAE6hL,gBAAgB,CAACltL,IAAjB,CAAsByoK,SAAS,CAACl4J,KAAV,CAAgBjN,IAAI,CAAC+H,SAArB,CAAtB,CADN;AAELkqK,UAAM,EAAEjyK,IAAI,CAACiyK;AAFR,GAAP;AAID;AAEM,SAAS7M,YAAT,GAAwB;AAC7B,SAAOxoC,IAAI,CACRgX,MADI,GAEJ37H,OAFI,CAEI,IAFJ,EAEU,EAFV,EAGJtX,KAHI,CAGE,CAAC,EAHH,CAAP;AAID;AAED,IAAI1C,MAAM,GAAG;AACX;AACA4rL,UAAQ,EAAE,IAAI,EAAJ,GAAS;AAFR,CAAb;AAKA;AACA;AACA;;AACe,MAAM1kB,SAAN,CAAgB;AAC7B3tK,aAAW,CAACi7K,MAAD,EAASqX,OAAT,EAAkBv9J,IAAlB,EAAwB;AACjC,SAAKw9J,MAAL,GAAc;AACZtX,YAAM,EAAEA,MADI;AAEZqX,aAAO,EAAEA,OAFG;AAGZv9J,UAAI,EAAEA;AAHM,KAAd;AAKD;;AAED1rB,SAAO,GAAG;AACR,WAAO,KAAK0U,QAAL,EAAP;AACD;;AAEDA,UAAQ,GAAG;AACT,WAAO,CACL,IAAIzS,IAAJ,CAAS,KAAK2vK,MAAL,EAAT,EAAwBtwK,WAAxB,EADK,EAEL,CACE,SACA,KAAK2nL,OAAL,GACGv0K,QADH,CACY,EADZ,EAEGqT,WAFH,EAFF,EAKEjoB,KALF,CAKQ,CAAC,CALT,CAFK,EAQL,CAAC,qBAAqB,KAAK4rB,IAAL,EAAtB,EAAmC5rB,KAAnC,CAAyC,CAAC,EAA1C,CARK,EASL+Y,IATK,CASA,GATA,CAAP;AAUD;;AAED+4J,QAAM,GAAG;AACP,WAAO,KAAKsX,MAAL,CAAYtX,MAAnB;AACD;;AAEDqX,SAAO,GAAG;AACR,WAAO,KAAKC,MAAL,CAAYD,OAAnB;AACD;;AAEDv9J,MAAI,GAAG;AACL,WAAO,KAAKw9J,MAAL,CAAYx9J,IAAnB;AACD;;AAEDimJ,MAAI,GAAG;AACL,WAAOwX,iDAAU,CAACx4D,EAAX,CAAc,KAAKj8G,QAAL,EAAd,CAAP;AACD;;AAxC4B;AA2CxB,MAAMq0K,gBAAN,SAA+BzkB,SAA/B,CAAyC;AAC9C8kB,WAAS,CAAClyJ,CAAD,EAAI;AACX,SAAKgyJ,MAAL,CAAYtX,MAAZ,GAAqB16I,CAArB;AACD;;AAEDmyJ,YAAU,CAACnyJ,CAAD,EAAI;AACZ,SAAKgyJ,MAAL,CAAYD,OAAZ,GAAsB/xJ,CAAtB;AACD;;AAEDg4I,SAAO,CAACh4I,CAAD,EAAI;AACT,SAAKgyJ,MAAL,CAAYx9J,IAAZ,GAAmBwL,CAAnB;AACD;;AAX6C;;AAchD6xJ,gBAAgB,CAACltL,IAAjB,GAAwBqL,SAAS,IAAI;AACnC,SAAO,IAAI6hL,gBAAJ,CACL7hL,SAAS,CAAC0qK,MAAV,EADK,EAEL1qK,SAAS,CAAC+hL,OAAV,EAFK,EAGL/hL,SAAS,CAACwkB,IAAV,EAHK,CAAP;AAKD,CAND,C,CAQA;AACA;AACA;;;AACA44I,SAAS,CAACt1B,IAAV,GAAiB,UAASp2I,OAAO,GAAG,EAAnB,EAAuB;AACtC,MAAIA,OAAO,CAACowL,QAAZ,EAAsB;AACpB5rL,UAAM,CAAC4rL,QAAP,GAAkBpwL,OAAO,CAACowL,QAA1B;AACD;;AAED3kB,UAAQ,CACNG,SAAS,CACP,IAAIF,SAAJ,CACE,CADF,EAEE,CAFF,EAGE1rK,OAAO,CAAC8yB,IAAR,GACI,CAAC,qBAAqB9yB,OAAO,CAAC8yB,IAA9B,EAAoChX,QAApC,GAA+C5U,KAA/C,CAAqD,CAAC,EAAtD,CADJ,GAEI,EALN,CADO,CADH,EAUN,IAVM,CAAR;AAYD,CAjBD;AAmBA;AACA;AACA;AACA;;;AACAwkK,SAAS,CAACplG,IAAV,GAAiB,YAAW;AAC1B,MAAI,CAACilG,KAAL,EAAY;AACV,WAAO,IAAP;AACD,GAHyB,CAK1B;;;AACA,MAAImlB,IAAI,GAAGrnL,IAAI,CAACoE,GAAL,EAAX,CAN0B,CAQ1B;;AACA,MAAIkjL,IAAI,GAAGplB,KAAK,CAACj9J,SAAN,CAAgB0qK,MAAhB,EAAX;AACA,MAAI4X,IAAI,GAAGrlB,KAAK,CAACj9J,SAAN,CAAgB+hL,OAAhB,EAAX,CAV0B,CAY1B;AACA;AACA;;AACA,MAAIQ,IAAI,GAAGljL,IAAI,CAACge,GAAL,CAASglK,IAAT,EAAeD,IAAf,CAAX;AACA,MAAII,IAAI,GAAGH,IAAI,KAAKE,IAAT,GAAgBD,IAAI,GAAG,CAAvB,GAA2B,CAAtC,CAhB0B,CAkB1B;;AACA,MAAIC,IAAI,GAAGH,IAAP,GAAclsL,MAAM,CAAC4rL,QAAzB,EAAmC;AACjC,UAAM,IAAI1kB,SAAS,CAACqlB,eAAd,CAA8BF,IAA9B,EAAoCH,IAApC,EAA0ClsL,MAAM,CAAC4rL,QAAjD,CAAN;AACD;;AACD,MAAIU,IAAI,GAAG,KAAX,EAAkB;AAChB,UAAM,IAAIplB,SAAS,CAACslB,aAAd,EAAN;AACD,GAxByB,CA0B1B;;;AACAzlB,OAAK,CAACj9J,SAAN,CAAgBkiL,SAAhB,CAA0BK,IAA1B;AACAtlB,OAAK,CAACj9J,SAAN,CAAgBmiL,UAAhB,CAA2BK,IAA3B;AAEA,SAAO,IAAIplB,SAAJ,CACLH,KAAK,CAACj9J,SAAN,CAAgB0qK,MAAhB,EADK,EAELzN,KAAK,CAACj9J,SAAN,CAAgB+hL,OAAhB,EAFK,EAGL9kB,KAAK,CAACj9J,SAAN,CAAgBwkB,IAAhB,EAHK,CAAP;AAKD,CAnCD,C,CAqCA;AACA;AACA;;;AACA44I,SAAS,CAAC2gB,IAAV,GAAiB,UAASjkK,GAAT,EAAc;AAC7B,MAAI,CAACmjJ,KAAL,EAAY;AACV,WAAO,IAAP;AACD,GAH4B,CAK7B;;;AACA,MAAImlB,IAAI,GAAGrnL,IAAI,CAACoE,GAAL,EAAX,CAN6B,CAQ7B;;AACA,MAAIwjL,IAAI,GAAG7oK,GAAG,CAAC4wJ,MAAJ,EAAX;AACA,MAAIkY,IAAI,GAAG9oK,GAAG,CAACioK,OAAJ,EAAX,CAV6B,CAY7B;AACA;AACA;AACA;;AACA,MAAIY,IAAI,GAAGP,IAAP,GAAclsL,MAAM,CAAC4rL,QAAzB,EAAmC;AACjC,UAAM,IAAI1kB,SAAS,CAACqlB,eAAd,EAAN;AACD,GAlB4B,CAoB7B;;;AACA,MAAIJ,IAAI,GAAGplB,KAAK,CAACj9J,SAAN,CAAgB0qK,MAAhB,EAAX;AACA,MAAI4X,IAAI,GAAGrlB,KAAK,CAACj9J,SAAN,CAAgB+hL,OAAhB,EAAX,CAtB6B,CAwB7B;AACA;AACA;AACA;AACA;AACA;;AACA,MAAIQ,IAAI,GAAGljL,IAAI,CAACge,GAAL,CAAShe,IAAI,CAACge,GAAL,CAASglK,IAAT,EAAeD,IAAf,CAAT,EAA+BO,IAA/B,CAAX;AACA,MAAIH,IAAI,GACND,IAAI,KAAKF,IAAT,IAAiBE,IAAI,KAAKI,IAA1B,GACItjL,IAAI,CAACge,GAAL,CAASilK,IAAT,EAAeM,IAAf,IAAuB,CAD3B,GAEIL,IAAI,KAAKF,IAAT,GACAC,IAAI,GAAG,CADP,GAEAC,IAAI,KAAKI,IAAT,GACAC,IAAI,GAAG,CADP,GAEA,CAPN,CA/B6B,CAwC7B;;AACA,MAAIL,IAAI,GAAGH,IAAP,GAAclsL,MAAM,CAAC4rL,QAAzB,EAAmC;AACjC,UAAM,IAAI1kB,SAAS,CAACqlB,eAAd,EAAN;AACD;;AACD,MAAID,IAAI,GAAG,KAAX,EAAkB;AAChB,UAAM,IAAIplB,SAAS,CAACslB,aAAd,EAAN;AACD,GA9C4B,CAgD7B;;;AACAzlB,OAAK,CAACj9J,SAAN,CAAgBkiL,SAAhB,CAA0BK,IAA1B;AACAtlB,OAAK,CAACj9J,SAAN,CAAgBmiL,UAAhB,CAA2BK,IAA3B;AAEA,SAAO,IAAIplB,SAAJ,CACLH,KAAK,CAACj9J,SAAN,CAAgB0qK,MAAhB,EADK,EAELzN,KAAK,CAACj9J,SAAN,CAAgB+hL,OAAhB,EAFK,EAGL9kB,KAAK,CAACj9J,SAAN,CAAgBwkB,IAAhB,EAHK,CAAP;AAKD,CAzDD;AA2DA;AACA;AACA;AACA;;;AACA44I,SAAS,CAACl4J,KAAV,GAAkB,UAASlF,SAAT,EAAoB;AACpC,MAAI,OAAOA,SAAP,KAAqB,QAAzB,EAAmC;AACjC,QAAIgjB,KAAK,GAAGhjB,SAAS,CAACiR,KAAV,CAAgB,GAAhB,CAAZ;;AACA,QAAI+R,KAAK,IAAIA,KAAK,CAACpsB,MAAN,KAAiB,CAA9B,EAAiC;AAC/B,UAAI8zK,MAAM,GAAG3vK,IAAI,CAACmK,KAAL,CAAW8d,KAAK,CAACpqB,KAAN,CAAY,CAAZ,EAAe,CAAf,EAAkB+Y,IAAlB,CAAuB,GAAvB,CAAX,EAAwC7Y,OAAxC,EAAb;AACA,UAAIipL,OAAO,GAAG/wK,QAAQ,CAACgS,KAAK,CAAC,CAAD,CAAN,EAAW,EAAX,CAAtB;AACA,UAAIwB,IAAI,GAAGxB,KAAK,CAAC,CAAD,CAAhB;AACA,UAAI,CAAC3kB,KAAK,CAACqsK,MAAD,CAAN,IAAkB,CAACrsK,KAAK,CAAC0jL,OAAD,CAA5B,EACE,OAAO,IAAI3kB,SAAJ,CAAcsN,MAAd,EAAsBqX,OAAtB,EAA+Bv9J,IAA/B,CAAP;AACH;AACF;;AACD,SAAO,IAAP;AACD,CAZD;AAcA;AACA;AACA;;;AACA,IAAIrU,IAAI,GAAGitJ,SAAS,CAACl4J,KAAV,CAAgB,gDAAhB,CAAX;;AACAk4J,SAAS,CAACjtJ,IAAV,GAAiB,YAAW;AAC1B,SAAOA,IAAP;AACD,CAFD;AAIA;AACA;AACA;;;AACA,IAAIkN,GAAG,GAAG+/I,SAAS,CAACl4J,KAAV,CAAgB,gDAAhB,CAAV;;AACAk4J,SAAS,CAAC//I,GAAV,GAAgB,YAAW;AACzB,SAAOA,GAAP;AACD,CAFD;;AAIA+/I,SAAS,CAAC5mB,KAAV,GAAkBqsC,SAAS,IAAI;AAC7B,SAAOA,SAAS,GAAG,wBAAnB;AACD,CAFD;AAIA;AACA;AACA;;;AACAzlB,SAAS,CAAC0lB,kBAAV,GAA+B,cAAc1tL,KAAd,CAAoB;AACjD3F,aAAW,CAAC+0B,IAAD,EAAO;AAChB;AACA,SAAKzX,IAAL,GAAY,oBAAZ;AACA,SAAK8xB,OAAL,GAAe,+BAA+Bra,IAA9C;AACD;;AALgD,CAAnD;AAQA44I,SAAS,CAACqlB,eAAV,GAA4B,cAAcrtL,KAAd,CAAoB;AAC9C3F,aAAW,CAAC,GAAGC,IAAJ,EAAU;AACnB;AACA,SAAKqd,IAAL,GAAY,iBAAZ;AACA,SAAK8xB,OAAL,GAAe,CAAC,8BAAD,EAAiCjR,MAAjC,CAAwCl+B,IAAxC,EAA8CiiB,IAA9C,CAAmD,GAAnD,CAAf;AACD;;AAL6C,CAAhD;AAQAyrJ,SAAS,CAACslB,aAAV,GAA0B,cAActtL,KAAd,CAAoB;AAC5C3F,aAAW,GAAG;AACZ;AACA,SAAKsd,IAAL,GAAY,eAAZ;AACA,SAAK8xB,OAAL,GAAe,4BAAf;AACD;;AAL2C,CAA9C,C;;;;;;;;;;;;ACvUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA,IAAIwmH,GAAG,GAAGM,sDAAS,EAAnB;AAEAN,GAAG,CAACnxJ,MAAJ,CAAW,8BAAX,EAA2C,YAAY;AACrD;AACA;AACA,MAAI6uL,cAAc,GAAG,MAAM3gD,uCAAA,CAAQ;AACrC;AACA;AACA;AACA,GAJ6B,CAA3B;AAMA,QAAM4D,4DAAU,CAAC,YAAY;AAC3B,QAAIgS,OAAO,GAAG+qC,cAAc,CAACpvL,GAAf,CAAmBi8I,GAAG,KAAK;AACvC3X,QAAE,EAAE2X,GAAG,CAAC3X,EAD+B;AAEvCyC,WAAK,EAAEkV,GAAG,CAACozC;AAF4B,KAAL,CAAtB,CAAd;AAIA,UAAMvqC,sFAAuB,CAAC;AAAET;AAAF,KAAD,CAA7B;AACD,GANe,CAAhB,CATqD,CAiBrD;AACA;;AACA,MAAIirC,WAAW,GAAG,MAAM7gD,uCAAA,CAAQ;AAClC;AACA;AACA;AACA,GAJ0B,CAAxB;AAMA,QAAM4D,4DAAU,CAAC,YAAY;AAC3B,QAAIgS,OAAO,GAAGirC,WAAW,CAACtvL,GAAZ,CAAgBi8I,GAAG,KAAK;AACpC3X,QAAE,EAAE2X,GAAG,CAAC3X,EAD4B;AAEpC0J,aAAO,EAAEiO,GAAG,CAACjO,OAAJ,KAAgB;AAFW,KAAL,CAAnB,CAAd;AAIA,UAAM8W,sFAAuB,CAAC;AAAET;AAAF,KAAD,CAA7B;AACD,GANe,CAAhB,CAzBqD,CAiCrD;AACA;;AACA,MAAIkrC,WAAW,GAAG,MAAM9gD,uCAAA,CAAQ;AAClC;AACA;AACA;AACA,GAJ0B,CAAxB;AAMA,QAAM4D,4DAAU,CAAC,YAAY;AAC3B,QAAIgS,OAAO,GAAGkrC,WAAW,CAACvvL,GAAZ,CAAgBi8I,GAAG,KAAK;AAAE3X,QAAE,EAAE2X,GAAG,CAAC3X,EAAV;AAAcqkB,eAAS,EAAE;AAAzB,KAAL,CAAnB,CAAd;AACA,UAAM7D,sFAAuB,CAAC;AAAET;AAAF,KAAD,CAA7B;AACD,GAHe,CAAhB;AAKA,SAAO;AACLmrC,kBAAc,EAAEJ,cAAc,CAACnsL,MAD1B;AAELwsL,cAAU,EAAEH,WAAW,CAACrsL,MAFnB;AAGLysL,cAAU,EAAEH,WAAW,CAACtsL;AAHnB,GAAP;AAKD,CAnDD;AAqDeyuJ,kEAAf,E;;;;;;;;;;;;AC7DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;AACA,IAAIxwB,IAAI,GAAG7iH,mBAAO,CAAC,qFAAD,CAAlB;;AAEA,IAAIsxK,eAAJ;AACA,IAAIC,QAAJ;AACA,IAAIC,SAAS,GAAG,IAAhB;AAEO,SAASC,MAAT,CAAgB9d,UAAhB,EAA4B;AACjC6d,WAAS,GAAG7d,UAAU,IAAI,IAAd,IAAsBA,UAAU,KAAK,MAArC,GAA8C,IAA9C,GAAqD,KAAjE;AACD,C,CAED;AACA;AACA;AACA;AAEA;AACA;;AACA,eAAe8E,IAAf,CAAoBl9B,MAApB,EAA4B;AAC1B,MAAIm2C,MAAM,GAAG,MAAM5iB,0EAAY,CAACvzB,MAAD,CAA/B;AACA,SAAQ,QAAOm2C,MAAM,CAACxzK,OAAP,CAAe,OAAf,EAAwB,EAAxB,CAA4B,EAA3C;AACD;;AAED,SAASyzK,WAAT,CAAqB1rD,EAArB,EAAyB;AACvB,SAAO,CAACA,EAAE,CAACh5C,UAAH,CAAc,OAAd,CAAR;AACD;;AAEM,eAAe6oD,IAAf,GAAsB,CAC5B;AAEM,eAAe87C,KAAf,CAAqBr2C,MAArB,EAA6B,CACnC;AAED,IAAIs2C,SAAS,GAAG,KAAhB;AACA,IAAI3wK,MAAM,GAAG,EAAb;;AAEA,SAAS4wK,cAAT,GAA0B;AACxBD,WAAS,GAAG,IAAZ;AACA3wK,QAAM,GAAG,EAAT;AACD;;AAED,SAAS6wK,aAAT,GAAyB;AACvB,OAAK,IAAIt2K,IAAT,IAAiByF,MAAjB,EAAyB;AACvBzF,QAAI,CAAC,CAAD,CAAJ,CAAQ,GAAGA,IAAI,CAAC,CAAD,CAAf;AACD;;AACDo2K,WAAS,GAAG,KAAZ;AACA3wK,QAAM,GAAG,EAAT;AACD;;AAED,SAASmgJ,QAAT,CAAkBhgI,IAAlB,EAAwB;AACtB,SAAO,CAAC,GAAG3jC,IAAJ,KAAa;AAClB,QAAIs8B,KAAJ,EAA4C,EAM3C;AACF,GARD;AASD;;AAEM,MAAMmrD,KAAK,GAAGk8E,QAAQ,CAAC,CAAC2wB,WAAD,EAAcpqL,IAAd,EAAoBwd,KAApB,KAA8B,CAAE,CAAjC,CAAtB;AAEA,MAAM6sK,UAAU,GAAG5wB,QAAQ,CAAC,CAAC2wB,WAAD,EAAc5sK,KAAd,KAAwB,CAAE,CAA3B,CAA3B,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChEP;AACA;AACA;AACA;;AACA,MAAMmoI,UAAU,GAAGvtI,mBAAO,CAAC,uGAAD,CAA1B,C,CAEA;;;AACA,IAAIkyK,eAAe,GAAG,CAAC;AAAEn3K,MAAI,EAAE;AAAR,CAAD,CAAtB;AACA,IAAIo3K,MAAM,GAAG,CAAb;AACA,IAAIC,YAAY,GAAG,EAAnB;;AAEA,SAASC,WAAT,GAAuB;AACrBH,iBAAe,GAAGA,eAAe,CAACtrL,KAAhB,CAAsB,CAAtB,EAAyBurL,MAAM,GAAG,CAAlC,CAAlB;AAEA,MAAIG,OAAO,GAAGJ,eAAe,CAAC7sL,MAAhB,CAAuByc,IAAI,IAAIA,IAAI,CAAC/G,IAAL,KAAc,QAA7C,CAAd;;AACA,MAAIu3K,OAAO,CAAC1tL,MAAR,GAAiBwtL,YAArB,EAAmC;AACjC,QAAIxrL,KAAK,GAAG0rL,OAAO,CAAC1rL,KAAR,CAAc,CAACwrL,YAAf,CAAZ;AACA,QAAIG,MAAM,GAAGL,eAAe,CAACtlL,OAAhB,CAAwBhG,KAAK,CAAC,CAAD,CAA7B,CAAb;AACAsrL,mBAAe,GAAGA,eAAe,CAACtrL,KAAhB,CAAsB2rL,MAAtB,CAAlB;AACAJ,UAAM,GAAGD,eAAe,CAACttL,MAAhB,GAAyB,CAAlC;AACD;AACF;;AAEM,SAAS4tL,cAAT,CAAwB1V,QAAxB,EAAkCyO,OAAlC,EAA2C;AAChD,MAAIhuK,OAAO,GAAG2+J,mEAAiB,EAA/B;;AAEA,MAAI3+J,OAAO,CAACk1K,aAAR,IAAyB3V,QAAQ,CAACl4K,MAAT,GAAkB,CAA/C,EAAkD;AAChDytL,eAAW;AAEX,QAAM5W,OAAN,GAAkBl+J,OAAlB,CAAMk+J,OAAN;AAEAyW,mBAAe,CAACzuL,IAAhB,CAAqB;AACnBsX,UAAI,EAAE,UADa;AAEnB+hK,cAFmB;AAGnByO,aAHmB;AAInB9P;AAJmB,KAArB;AAMA0W,UAAM;AACP;AACF;AAEM,SAAS7b,SAAT,GAAqB;AAC1B4b,iBAAe,GAAG,CAAC;AAAEn3K,QAAI,EAAE;AAAR,GAAD,CAAlB;AACAo3K,QAAM,GAAG,CAAT;AACD;AAEM,SAASrgB,QAAT,CAAkBzwI,IAAlB,EAAwB4jD,IAAxB,EAA8B;AACnC,MAAI1nE,OAAO,GAAG2+J,mEAAiB,EAA/B;;AACA,MAAI3+J,OAAO,CAACg0I,YAAR,IAAwBh0I,OAAO,CAACk1K,aAApC,EAAmD;AACjD,WAAOpxJ,IAAI,EAAX;AACD;;AAED6wJ,iBAAe,GAAGA,eAAe,CAACtrL,KAAhB,CAAsB,CAAtB,EAAyBurL,MAAM,GAAG,CAAlC,CAAlB;AAEA,MAAIO,MAAM,GAAG;AAAE33K,QAAI,EAAE,QAAR;AAAkBkqE;AAAlB,GAAb;;AAEA,MAAIitG,eAAe,CAACA,eAAe,CAACttL,MAAhB,GAAyB,CAA1B,CAAf,CAA4CmW,IAA5C,KAAqD,QAAzD,EAAmE;AACjEm3K,mBAAe,CAACA,eAAe,CAACttL,MAAhB,GAAyB,CAA1B,CAAf,GAA8C8tL,MAA9C;AACD,GAFD,MAEO;AACLR,mBAAe,CAACzuL,IAAhB,CAAqBivL,MAArB;AACAP,UAAM;AACP;;AAED,SAAOnW,oEAAkB,CACvB;AAAEyW,iBAAa,EAAE,IAAjB;AAAuBhX,WAAO,EAAEl+J,OAAO,CAACk+J;AAAxC,GADuB,EAEvBp6I,IAFuB,CAAzB;AAID;AAEM,SAASyiI,QAAT,CAAkBziI,IAAlB,EAAwB;AAC7B,SAAO,CAAC,GAAG3jC,IAAJ,KAAa;AAClB,WAAOo0K,QAAQ,CAAC,MAAM;AACpB,aAAOzwI,IAAI,CAAC,GAAG3jC,IAAJ,CAAX;AACD,KAFc,CAAf;AAGD,GAJD;AAKD;;AAED,eAAei1L,eAAf,CAA+B7V,QAA/B,EAAyC73F,IAAzC,EAA+Cw2F,OAA/C,EAAwD;AACtD,QAAMO,oEAAkB,CAAC;AAAEyW,iBAAa,EAAE;AAAjB,GAAD,EAA2B,MAAM;AACvD,WAAO5mB,0DAAY,CACjBiR,QAAQ,CAACn7K,GAAT,CAAammB,GAAG,oCAAUA,GAAV;AAAe9Z,eAAS,EAAEo9J,kDAAS,CAACplG,IAAV;AAA1B,MAAhB,CADiB,CAAnB;AAGD,GAJuB,CAAxB;AAMA,QAAMukF,MAAM,GAAGuyB,QAAQ,CAACj+K,MAAT,CAAgB,CAAC61H,GAAD,EAAM7nF,OAAN,KAAkB;AAC/C,QAAI,CAAC6nF,GAAG,CAACr+G,QAAJ,CAAaw2B,OAAO,CAACykH,OAArB,CAAL,EAAoC;AAClC58B,SAAG,CAACjxH,IAAJ,CAASopC,OAAO,CAACykH,OAAjB;AACD;;AACD,WAAO58B,GAAP;AACD,GALc,EAKZ,EALY,CAAf;AAOA64B,YAAU,CAACvnF,IAAX,CAAgB,YAAhB,EAA8B;AAC5B82G,YAD4B;AAE5BvyB,UAF4B;AAG5BtlE,QAH4B;AAI5Bw2F;AAJ4B,GAA9B;AAMD;;AAEM,eAAe7J,IAAf,GAAsB;AAC3B,MAAInzK,GAAG,GAAG0zL,MAAV;AACAA,QAAM,GAAG9kL,IAAI,CAACge,GAAL,CAAS8mK,MAAM,GAAG,CAAlB,EAAqB,CAArB,CAAT,CAF2B,CAI3B;;AACA,SAAOA,MAAM,GAAG,CAAT,IAAcD,eAAe,CAACC,MAAD,CAAf,CAAwBp3K,IAAxB,KAAiC,QAAtD,EAAgE;AAC9Do3K,UAAM;AACP;;AAED,MAAIltG,IAAI,GAAGitG,eAAe,CAACC,MAAD,CAAf,CAAwBltG,IAAnC;AACA,MAAIjnF,KAAK,GAAGqP,IAAI,CAACge,GAAL,CAAS8mK,MAAT,EAAiB,CAAjB,CAAZ;AACA,MAAI/rK,OAAO,GAAG8rK,eAAe,CAACtrL,KAAhB,CAAsB5I,KAAtB,EAA6BS,GAAG,GAAG,CAAnC,EAAsC4G,MAAtC,CACZ0T,KAAK,IAAIA,KAAK,CAACgC,IAAN,KAAe,UADZ,CAAd;;AAIA,MAAIqL,OAAO,CAACxhB,MAAR,GAAiB,CAArB,EAAwB;AACtB,QAAI0oL,OAAO,GAAGlnK,OAAO,CAClBvnB,MADW,CACJ,CAAC61H,GAAD,EAAM37G,KAAN,KAAgB;AACtB,aAAO27G,GAAG,CAAC94F,MAAJ,CACL7iB,KAAK,CAAC+jK,QAAN,CACGn7K,GADH,CACOkrC,OAAO,IAAI+lJ,WAAW,CAAC/lJ,OAAD,EAAU9zB,KAAK,CAACwyK,OAAhB,CAD7B,EAEGlmL,MAFH,CAEUiH,CAAC,IAAIA,CAFf,CADK,CAAP;AAKD,KAPW,EAOT,EAPS,EAQX5N,OARW,EAAd;AAUA,UAAMi0L,eAAe,CAACrF,OAAD,EAAUroG,IAAV,EAAgB7+D,OAAO,CAAC,CAAD,CAAP,CAAWq1J,OAA3B,CAArB;AACD;AACF;;AAED,SAASmX,WAAT,CAAqB/lJ,OAArB,EAA8B0+I,OAA9B,EAAuC;AACrC,MAAIsH,OAAO,GAAGpH,0DAAK,CAACF,OAAD,EAAU,CAAC1+I,OAAO,CAACykH,OAAT,EAAkBzkH,OAAO,CAAC+wG,GAA1B,CAAV,CAAnB;;AACA,MAAIi1C,OAAJ,EAAa;AACX,QAAIrmJ,MAAM,GAAGK,OAAO,CAACL,MAArB;;AACA,QAAIK,OAAO,CAACykH,OAAR,KAAoB,mBAAxB,EAA6C;AAC3C;AACA;AACA;AACA9kH,YAAM,GAAG,aAAT;AACD;;AAED,2CAAYK,OAAZ;AAAqB1uC,WAAK,EAAE00L,OAAO,CAACrmJ,MAAD;AAAnC;AACD,GAVD,MAUO;AACL,QAAIK,OAAO,CAACykH,OAAR,KAAoB,mBAAxB,EAA6C;AAC3C,UAAIzkH,OAAO,CAACL,MAAR,KAAmB,MAAvB,EAA+B;AAC7B,+CAAYK,OAAZ;AAAqB1uC,eAAK,EAAE;AAA5B;AACD;;AACD,aAAO0uC,OAAP;AACD,KALD,MAKO,KACL;AACA;AACA;AACAA,WAAO,CAACykH,OAAR,KAAoB,kBAApB,IACAzkH,OAAO,CAACykH,OAAR,KAAoB,eALf,EAML;AACA,UACEzkH,OAAO,CAACykH,OAAR,KAAoB,oBAApB,IACAzkH,OAAO,CAACykH,OAAR,KAAoB,cADpB,IAEAzkH,OAAO,CAACykH,OAAR,KAAoB,iBAHtB,EAIE;AACA;AACA,YAAI,CAAC,UAAD,EAAa,QAAb,EAAuB,WAAvB,EAAoCj7I,QAApC,CAA6Cw2B,OAAO,CAACL,MAArD,CAAJ,EAAkE;AAChE,iDAAYK,OAAZ;AAAqB1uC,iBAAK,EAAE;AAA5B;AACD;;AACD,eAAO,IAAP;AACD,OAVD,MAUO,IAAI0uC,OAAO,CAACykH,OAAR,KAAoB,OAAxB,EAAiC;AACtC,+CAAYzkH,OAAZ;AAAqB1uC,eAAK,EAAE;AAA5B;AACD;;AAED,6CAAY0uC,OAAZ;AAAqBL,cAAM,EAAE,WAA7B;AAA0CruC,aAAK,EAAE;AAAjD;AACD;AACF;;AACD,SAAO,IAAP;AACD;;AAEM,eAAe0zK,IAAf,GAAsB;AAC3B,MAAI5sF,IAAI,GACNitG,eAAe,CAACC,MAAD,CAAf,CAAwBp3K,IAAxB,KAAiC,QAAjC,GACIm3K,eAAe,CAACC,MAAD,CAAf,CAAwBltG,IAD5B,GAEI,IAHN;AAKA,MAAIjnF,KAAK,GAAGm0L,MAAZ;AACAA,QAAM,GAAG9kL,IAAI,CAACe,GAAL,CAAS+jL,MAAM,GAAG,CAAlB,EAAqBD,eAAe,CAACttL,MAAhB,GAAyB,CAA9C,CAAT,CAP2B,CAS3B;;AACA,SACEutL,MAAM,GAAGD,eAAe,CAACttL,MAAhB,GAAyB,CAAlC,IACAstL,eAAe,CAACC,MAAD,CAAf,CAAwBp3K,IAAxB,KAAiC,QAFnC,EAGE;AACAo3K,UAAM;AACP;;AAED,MAAI1zL,GAAG,GAAG0zL,MAAV;AACA,MAAI/rK,OAAO,GAAG8rK,eAAe,CAACtrL,KAAhB,CAAsB5I,KAAK,GAAG,CAA9B,EAAiCS,GAAG,GAAG,CAAvC,EAA0C4G,MAA1C,CACZ0T,KAAK,IAAIA,KAAK,CAACgC,IAAN,KAAe,UADZ,CAAd;;AAIA,MAAIqL,OAAO,CAACxhB,MAAR,GAAiB,CAArB,EAAwB;AACtB,QAAI0oL,OAAO,GAAGlnK,OAAO,CAACvnB,MAAR,CAAe,CAAC61H,GAAD,EAAM37G,KAAN,KAAgB;AAC3C,aAAO27G,GAAG,CACP94F,MADI,CACG7iB,KAAK,CAAC+jK,QADT,EAEJlhJ,MAFI,CAEGk3J,iBAAiB,CAAC/5K,KAAK,CAAC+jK,QAAP,EAAiB/jK,KAAK,CAACwyK,OAAvB,CAFpB,CAAP;AAGD,KAJa,EAIX,EAJW,CAAd;AAMA,UAAMoH,eAAe,CAACrF,OAAD,EAAUroG,IAAV,EAAgB7+D,OAAO,CAACA,OAAO,CAACxhB,MAAR,GAAiB,CAAlB,CAAP,CAA4B62K,OAA5C,CAArB;AACD;AACF;;AAED,SAASqX,iBAAT,CAA2BhW,QAA3B,EAAqCyO,OAArC,EAA8C;AAC5C,MAAIwH,SAAS,GAAG,IAAI95K,GAAJ,EAAhB;AAEA6jK,UAAQ,CAAChsK,OAAT,CAAiB+7B,OAAO,IAAI;AAC1B;AACA;AACA,QAAIgmJ,OAAO,GAAGpH,0DAAK,CAACF,OAAD,EAAU,CAAC1+I,OAAO,CAACykH,OAAT,EAAkBzkH,OAAO,CAAC+wG,GAA1B,CAAV,CAAnB;;AACA,QACE,CAACi1C,OAAD,IACA,CAAC,CACC,oBADD,EAEC,cAFD,EAGC,iBAHD,EAIC,OAJD,EAKC,kBALD,EAMC,eAND,EAOCx8K,QAPD,CAOUw2B,OAAO,CAACykH,OAPlB,CAFH,EAUE;AACAyhC,eAAS,CAACpyL,GAAV,CAAcksC,OAAO,CAACykH,OAAR,GAAkB,GAAlB,GAAwBzkH,OAAO,CAAC+wG,GAA9C;AACD;AACF,GAjBD;AAmBA,SAAO,CAAC,GAAGm1C,SAAJ,EAAepxL,GAAf,CAAmB2/B,IAAI,IAAI;AAChC,sBAAmBA,IAAI,CAACriB,KAAL,CAAW,GAAX,CAAnB;AAAA;AAAA,QAAK0mH,KAAL;AAAA,QAAYiY,GAAZ;;AACA,WAAO;AACL0T,aAAO,EAAE3rB,KADJ;AAELiY,SAFK;AAGLpxG,YAAM,EAAE,WAHH;AAILruC,WAAK,EAAE,CAJF;AAKL6P,eAAS,EAAEo9J,kDAAS,CAACplG,IAAV;AALN,KAAP;AAOD,GATM,CAAP;AAUD,C;;;;;;;;;;;;AC/OD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;CAGA;;AAEA,eAAegtH,aAAf,GAA+B;AAC7B,QAAMC,2DAAA,CAAmB7iD,+CAAA,EAAnB,CAAN;AACD;;AAEM,eAAe8iD,WAAf,GAA6B;AAClC,MAAIC,OAAO,GAAG,WAAd;AACA,MAAIv1C,GAAG,GAAG,MAAMxN,yCAAA,CAAS,0CAAT,EAAqD,CACnE+iD,OADmE,CAArD,CAAhB;;AAGA,aAAsBv1C,GAAG,IAAI,EAA7B;AAAA,MAAa66B,IAAb,QAAMt6K,KAAN;;AAEA,MAAI4qJ,KAAK,GAAG6V,4DAAS,CAACvK,kDAAD,EAASvL,wDAAT,CAArB;AACA,MAAIsqC,WAAW,GAAGp+D,0CAAG,CAAC+zB,KAAD,CAArB;;AAEA,MAAI0vB,IAAI,KAAK2a,WAAb,EAA0B;AACxB,UAAMhjD,6CAAA,CAAa2Y,KAAb,CAAN;AACA,UAAM3Y,4CAAA,CACJ,4DADI,EAEJ,CAAC+iD,OAAD,EAAUC,WAAV,CAFI,CAAN;AAID;AACF;AAEM,eAAetd,aAAf,GAA+B;AACpC,QAAMkd,aAAa,EAAnB;AACA,QAAME,WAAW,EAAjB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA,MAAMrwD,IAAI,GAAG7iH,mBAAO,CAAC,qFAAD,CAApB;;AAEO,eAAe01J,cAAf,CAA8B2d,aAA9B,EAA6C;AAClD,MAAIC,WAAW,GAAG,aAAlB;AACA,MAAIxvC,GAAG,GAAG,CAAV,CAFkD,CAIlD;AACA;;AACA,MAAIyvC,OAAO,GAAGD,WAAd;;AACA,SAAOD,aAAa,CAAC/4K,IAAd,CAAmByN,IAAI,IAAIA,IAAI,CAACngB,IAAL,KAAc2rL,OAAzC,CAAP,EAA0D;AACxDA,WAAO,GAAI,GAAED,WAAY,IAAGxvC,GAAI,EAAhC;AACAA,OAAG;AACJ;;AAED,SAAOyvC,OAAP;AACD;AAEM,eAAe5d,cAAf,CAA8B/tK,IAA9B,EAAoC;AACzC,MAAIq+H,EAAE,GACJr+H,IAAI,CAACsW,OAAL,CAAa,mBAAb,EAAkC,GAAlC,IAAyC,GAAzC,GAA+C2kH,IAAI,CAACgX,MAAL,GAAcjzI,KAAd,CAAoB,CAApB,EAAuB,CAAvB,CADjD,CADyC,CAIzC;AACA;AACA;;AACA,MAAIjD,KAAK,GAAG,CAAZ;AAEA,MAAI27J,SAAS,GAAG1+I,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAhB,CAAhB;;AACA,SAAO,MAAMrlH,0DAAE,CAACqa,MAAH,CAAUqkI,SAAV,CAAb,EAAmC;AACjC37J,SAAK;AACL27J,aAAS,GAAG1+I,0DAAE,CAAC02H,YAAH,CAAgBrR,EAAE,GAAGtiI,KAAK,CAAC6X,QAAN,EAArB,CAAZ;AACD,GAbwC,CAezC;;;AACA,MAAI7X,KAAK,GAAG,CAAZ,EAAe;AACbsiI,MAAE,GAAGA,EAAE,GAAGtiI,KAAK,CAAC6X,QAAN,EAAV;AACD;;AAED,SAAOyqH,EAAP;AACD,C;;;;;;;;;;;;ACvCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;;;;;;;;;;;;;ACJA;AAAA;AAAA;AAAA;AAAO,SAASqW,oBAAT,CAA8BvhI,IAA9B,EAAoC0lK,OAApC,EAA6C;AAClD,UAAQ1lK,IAAR;AACE,SAAK,WAAL;AACA,SAAK,YAAL;AACE,aAAO,YAAP;;AACF,SAAK,QAAL;AACE,aAAO,QAAP;;AACF,SAAK,MAAL;AACE,aAAO,MAAP;;AACF,SAAK,OAAL;AACE,aAAO,OAAP;;AACF,SAAK,YAAL;AACA;AACE,cAAQ0lK,OAAR;AACE,aAAK,cAAL;AACA,aAAK,SAAL;AACE,iBAAO,SAAP;;AACF,aAAK,IAAL;AACE,iBAAO,IAAP;;AACF;AACE,iBAAO,UAAP;AAPJ;;AAZJ;AAsBD;AAEM,SAAS+S,iBAAT,CAA2Bz4K,IAA3B,EAAiC;AACtC,UAAQA,IAAR;AACE,SAAK,UAAL;AACE,aAAO,UAAP;;AACF,SAAK,SAAL;AACE,aAAO,SAAP;;AACF,SAAK,IAAL;AACE,aAAO,IAAP;;AACF,SAAK,YAAL;AACE,aAAO,YAAP;;AACF,SAAK,QAAL;AACE,aAAO,aAAP;;AACF,SAAK,UAAL;AACE,aAAO,UAAP;;AACF,SAAK,MAAL;AACE,aAAO,MAAP;;AACF,SAAK,OAAL;AACA;AACE,aAAO,OAAP;AAjBJ;AAmBD;AAEM,SAAS04K,kBAAT,CAA4B14K,IAA5B,EAAkC;AACvC,UAAQA,IAAR;AACE,SAAK,YAAL;AACA,SAAK,UAAL;AACA,SAAK,MAAL;AACA,SAAK,OAAL;AACE,aAAO,IAAP;;AACF;AANF;;AAQA,SAAO,KAAP;AACD,C;;;;;;;;;;;;ACzDD;AAAA;AAAA;AAAO,SAAS8gK,UAAT,CAAoBz0K,EAApB,EAAwB;AAC7B,MAAIssL,aAAa,GAAG;AAClB/M,WAAO,EAAE,IADS;AAElBgN,SAAK,EAAE;AAFW,GAApB;;AAKA,WAASC,IAAT,GAAgB;AACd,QAAIF,aAAa,CAACC,KAAd,CAAoB/uL,MAApB,GAA6B,CAAjC,EAAoC;AAClC,YAAM1G,IAAI,GAAGw1L,aAAa,CAACC,KAAd,CAAoBruL,KAApB,EAAb;AACAkP,SAAG,CAACtW,IAAI,CAACR,IAAN,EAAYQ,IAAI,CAAConB,OAAjB,EAA0BpnB,IAAI,CAACqnB,MAA/B,CAAH;AACD,KAHD,MAGO;AACLmuK,mBAAa,CAAC/M,OAAd,GAAwB,IAAxB;AACD;AACF;;AAED,WAASnyK,GAAT,CAAa9W,IAAb,EAAmB4nB,OAAnB,EAA4BC,MAA5B,EAAoC;AAClCmuK,iBAAa,CAAC/M,OAAd,GAAwBv/K,EAAE,CAAC,GAAG1J,IAAJ,CAA1B;AAEAg2L,iBAAa,CAAC/M,OAAd,CAAsBp9J,IAAtB,CACE3L,GAAG,IAAI;AACLg2K,UAAI;AACJtuK,aAAO,CAAC1H,GAAD,CAAP;AACD,KAJH,EAKEmF,GAAG,IAAI;AACL6wK,UAAI;AACJruK,YAAM,CAACxC,GAAD,CAAN;AACD,KARH;AAUD;;AAED,SAAO,CAAC,GAAGrlB,IAAJ,KAAa;AAClB,QAAI,CAACg2L,aAAa,CAAC/M,OAAnB,EAA4B;AAC1B,aAAO,IAAIthK,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,eAAO/Q,GAAG,CAAC9W,IAAD,EAAO4nB,OAAP,EAAgBC,MAAhB,CAAV;AACD,OAFM,CAAP;AAGD,KAJD,MAIO;AACL,aAAO,IAAIF,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtCmuK,qBAAa,CAACC,KAAd,CAAoBlwL,IAApB,CAAyB;AAAE6hB,iBAAF;AAAWC,gBAAX;AAAmB7nB;AAAnB,SAAzB;AACD,OAFM,CAAP;AAGD;AACF,GAVD;AAWD;AAEM,SAASu+E,IAAT,CAAc70E,EAAd,EAAkB;AACvB,MAAIs0K,OAAO,GAAG,IAAd;;AACA,MAAImY,MAAM,GAAG,CAAC,GAAGn2L,IAAJ,KAAa;AACxB,QAAI,CAACg+K,OAAL,EAAc;AACZA,aAAO,GAAGt0K,EAAE,CAAC,GAAG1J,IAAJ,CAAF,CAAYq+K,OAAZ,CAAoB,MAAM;AAClCL,eAAO,GAAG,IAAV;AACD,OAFS,CAAV;AAGA,aAAOA,OAAP;AACD;;AAED,WAAOA,OAAP;AACD,GATD;;AAWA,SAAOmY,MAAP;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzDD;AACA;;AAEA,SAASrqD,MAAT,CAAgBrrI,KAAhB,EAAuB;AACrB,MAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,uBAAyBA,KAAK,CAAC8gB,KAAN,CAAY,GAAZ,CAAzB;AAAA;AAAA,QAAK/V,IAAL;AAAA,QAAWC,KAAX;AAAA,QAAkBlJ,GAAlB;;AACA,QAAIA,GAAG,IAAI,IAAX,EAAiB;AACf,aAAO,IAAI8I,IAAJ,CAASiW,QAAQ,CAAC9V,IAAD,CAAjB,EAAyB8V,QAAQ,CAAC7V,KAAD,CAAR,GAAkB,CAA3C,EAA8C6V,QAAQ,CAAC/e,GAAD,CAAtD,EAA6D,EAA7D,CAAP;AACD,KAFD,MAEO,IAAIkJ,KAAK,IAAI,IAAb,EAAmB;AACxB,aAAO,IAAIJ,IAAJ,CAASiW,QAAQ,CAAC9V,IAAD,CAAjB,EAAyB8V,QAAQ,CAAC7V,KAAD,CAAR,GAAkB,CAA3C,EAA8C,CAA9C,EAAiD,EAAjD,CAAP;AACD,KAFM,MAEA;AACL,aAAO,IAAIJ,IAAJ,CAASiW,QAAQ,CAAC9V,IAAD,CAAjB,EAAyB,CAAzB,EAA4B,CAA5B,EAA+B,EAA/B,CAAP;AACD;AACF;;AACD,SAAO/K,KAAP;AACD;;AAEM,MAAMyzD,SAAS,GAAG43E,MAAlB;AAEA,SAAS4W,YAAT,CAAsBx/I,IAAtB,EAA4B;AACjC,SAAOk0C,+CAAA,CAAS00F,MAAM,CAAC5oI,IAAD,CAAf,EAAuB,MAAvB,CAAP;AACD;AAEM,SAAS6oI,aAAT,CAAuB7oI,IAAvB,EAA6B;AAClC,SAAOk0C,+CAAA,CAAS00F,MAAM,CAAC5oI,IAAD,CAAf,EAAuB,SAAvB,CAAP;AACD;AAEM,SAAS88I,WAAT,CAAqB98I,IAArB,EAA2B;AAChC,SAAOk0C,+CAAA,CAAS00F,MAAM,CAAC5oI,IAAD,CAAf,EAAuB,YAAvB,CAAP;AACD;AAEM,SAAS4Z,YAAT,GAAwB;AAC7B,MAAI4lB,MAAM,CAAC0zJ,UAAX,EAAuB;AACrB,WAAO,SAAP;AACD,GAFD,MAEO;AACL,WAAOh/I,+CAAA,CAAS,IAAI/rC,IAAJ,EAAT,EAAqB,SAArB,CAAP;AACD;AACF;AAEM,SAAS4P,UAAT,GAAsB;AAC3B,MAAIynB,MAAM,CAAC0zJ,UAAX,EAAuB;AACrB,WAAO,YAAP;AACD,GAFD,MAEO;AACL,WAAOh/I,+CAAA,CAAS,IAAI/rC,IAAJ,EAAT,EAAqB,YAArB,CAAP;AACD;AACF;AAEM,SAAS6P,SAAT,CAAmBzP,KAAnB,EAA0B;AAC/B,SAAO2rC,+CAAA,CAASA,kDAAA,CAAY00F,MAAM,CAACrgI,KAAD,CAAlB,EAA2B,CAA3B,CAAT,EAAwC,SAAxC,CAAP;AACD;AAEM,SAASg5J,SAAT,CAAmBh5J,KAAnB,EAA0B;AAC/B,SAAO2rC,+CAAA,CAASA,kDAAA,CAAY00F,MAAM,CAACrgI,KAAD,CAAlB,EAA2B,CAA3B,CAAT,EAAwC,SAAxC,CAAP;AACD;AAEM,SAASuxC,SAAT,CAAmBvxC,KAAnB,EAA0B60B,CAA1B,EAA6B;AAClC,SAAO8W,+CAAA,CAASA,kDAAA,CAAY00F,MAAM,CAACrgI,KAAD,CAAlB,EAA2B60B,CAA3B,CAAT,EAAwC,SAAxC,CAAP;AACD;AAEM,SAASk3B,SAAT,CAAmB/rD,KAAnB,EAA0B60B,CAA1B,EAA6B;AAClC,SAAO8W,+CAAA,CAASA,kDAAA,CAAY00F,MAAM,CAACrgI,KAAD,CAAlB,EAA2B60B,CAA3B,CAAT,EAAwC,SAAxC,CAAP;AACD;AAEM,SAASmc,OAAT,CAAiBl6C,GAAjB,EAAsB+9B,CAAtB,EAAyB;AAC9B,SAAO8W,+CAAA,CAASA,gDAAA,CAAU00F,MAAM,CAACvpI,GAAD,CAAhB,EAAuB+9B,CAAvB,CAAT,EAAoC,YAApC,CAAP;AACD;AAEM,SAAS+2B,OAAT,CAAiB90D,GAAjB,EAAsB+9B,CAAtB,EAAyB;AAC9B,SAAO8W,+CAAA,CAASA,gDAAA,CAAU00F,MAAM,CAACvpI,GAAD,CAAhB,EAAuB+9B,CAAvB,CAAT,EAAoC,YAApC,CAAP;AACD;AAEM,SAAS99B,QAAT,CAAkB6zL,MAAlB,EAA0BC,MAA1B,EAAkC;AACvC,SAAOl/I,iDAAA,CAAW00F,MAAM,CAACuqD,MAAD,CAAjB,EAA2BvqD,MAAM,CAACwqD,MAAD,CAAjC,CAAP;AACD;AAEM,SAAS/yL,OAAT,CAAiB8yL,MAAjB,EAAyBC,MAAzB,EAAiC;AACtC,SAAOl/I,gDAAA,CAAU00F,MAAM,CAACuqD,MAAD,CAAhB,EAA0BvqD,MAAM,CAACwqD,MAAD,CAAhC,CAAP;AACD,C,CAED;AACA;;AACO,SAASxtB,MAAT,CAAgBr9J,KAAhB,EAAuB;AAC5B,SAAO;AACLnL,SAAK,EAAEghB,QAAQ,CAAC81B,+CAAA,CAASA,qDAAA,CAAe00F,MAAM,CAACrgI,KAAD,CAArB,CAAT,EAAwC,UAAxC,CAAD,CADV;AAEL1K,OAAG,EAAEugB,QAAQ,CAAC81B,+CAAA,CAASA,mDAAA,CAAa00F,MAAM,CAACrgI,KAAD,CAAnB,CAAT,EAAsC,UAAtC,CAAD;AAFR,GAAP;AAID;AAEM,SAAS8qL,MAAT,CAAgBj2L,KAAhB,EAAuBS,GAAvB,EAA4By1L,SAA5B,EAAuC;AAC5C,QAAMn+K,MAAM,GAAG,EAAf;AACA,MAAI5M,KAAK,GAAGsgI,aAAa,CAACzrI,KAAD,CAAzB;;AACA,SAAO82C,iDAAA,CAAW00F,MAAM,CAACrgI,KAAD,CAAjB,EAA0BqgI,MAAM,CAAC/qI,GAAD,CAAhC,CAAP,EAA+C;AAC7CsX,UAAM,CAACtS,IAAP,CAAY0F,KAAZ;AACAA,SAAK,GAAGuxC,SAAS,CAACvxC,KAAD,EAAQ,CAAR,CAAjB;AACD;;AAED,MAAI+qL,SAAJ,EAAe;AACbn+K,UAAM,CAACtS,IAAP,CAAY0F,KAAZ;AACD;;AAED,SAAO4M,MAAP;AACD;AAEM,SAASyiE,KAAT,CAAex6E,KAAf,EAAsBS,GAAtB,EAA2B;AAChC,SAAOw1L,MAAM,CAACj2L,KAAD,EAAQS,GAAR,CAAb;AACD;AAEM,SAAS01L,cAAT,CAAwBn2L,KAAxB,EAA+BS,GAA/B,EAAoC;AACzC,SAAOw1L,MAAM,CAACj2L,KAAD,EAAQS,GAAR,EAAa,IAAb,CAAb;AACD;AAEM,SAAS21L,SAAT,CAAmBp2L,KAAnB,EAA0BS,GAA1B,EAA+By1L,SAA/B,EAA0C;AAC/C,QAAM7lL,IAAI,GAAG,EAAb;AACA,MAAIpO,GAAG,GAAGjC,KAAV;;AACA,SAAO82C,iDAAA,CAAW00F,MAAM,CAACvpI,GAAD,CAAjB,EAAwBupI,MAAM,CAAC/qI,GAAD,CAA9B,CAAP,EAA6C;AAC3C4P,QAAI,CAAC5K,IAAL,CAAUxD,GAAV;AACAA,OAAG,GAAGk6C,OAAO,CAACl6C,GAAD,EAAM,CAAN,CAAb;AACD;;AAED,MAAIi0L,SAAJ,EAAe;AACb7lL,QAAI,CAAC5K,IAAL,CAAUxD,GAAV;AACD;;AAED,SAAOoO,IAAP;AACD;AAEM,SAASgmL,QAAT,CAAkBr2L,KAAlB,EAAyBS,GAAzB,EAA8B;AACnC,SAAO21L,SAAS,CAACp2L,KAAD,EAAQS,GAAR,CAAhB;AACD;AAEM,SAAS61L,iBAAT,CAA2Bt2L,KAA3B,EAAkCS,GAAlC,EAAuC;AAC5C,SAAO21L,SAAS,CAACp2L,KAAD,EAAQS,GAAR,EAAa,IAAb,CAAhB;AACD;AAEM,SAAS81L,aAAT,CAAuBprL,KAAvB,EAA8B;AACnC,SAAO6V,QAAQ,CAAC7V,KAAK,CAACvC,KAAN,CAAY,CAAZ,EAAe,CAAf,CAAD,CAAR,GAA8B,CAArC;AACD;AAEM,SAAS2+C,OAAT,CAAiBp8C,KAAjB,EAAwB;AAC7B,SAAOA,KAAK,CAACvC,KAAN,CAAY,CAAZ,EAAe,CAAf,CAAP;AACD;AAEM,SAASgV,QAAT,CAAkB3b,GAAlB,EAAuB;AAC5B,SAAOA,GAAG,CAAC2G,KAAJ,CAAU,CAAV,EAAa,CAAb,CAAP;AACD;AAEM,SAAS4tL,YAAT,CAAsBrrL,KAAtB,EAA6B;AAClC,SAAOo8C,OAAO,CAACp8C,KAAD,CAAP,GAAiB,KAAxB;AACD;AAEM,SAASsrL,UAAT,CAAoBtrL,KAApB,EAA2B;AAChC,SAAOo8C,OAAO,CAACp8C,KAAD,CAAP,GAAiB,KAAxB;AACD;AAEM,SAASk7K,aAAT,CAAuBl7K,KAAvB,EAA8B;AACnC,SAAO,WAAWA,KAAK,CAAC+U,OAAN,CAAc,GAAd,EAAmB,EAAnB,CAAlB;AACD;AAEM,SAASw2K,YAAT,CAAsBvrL,KAAtB,EAA6B;AAClC,SAAO2rC,+CAAA,CAAS00F,MAAM,CAACrgI,KAAD,CAAf,EAAwB,UAAxB,CAAP;AACD;AAEM,SAASqT,MAAT,CAAgBrT,KAAhB,EAAuB04B,GAAvB,EAA4B;AACjC,SAAOiT,+CAAA,CAAS00F,MAAM,CAACrgI,KAAD,CAAf,EAAwB04B,GAAxB,CAAP;AACD;AAEM,MAAM8yJ,kBAAkB,GAAGC,2DAAU,CAACp4K,MAAM,IAAI;AACrD,SAAO,IAAI8B,MAAJ,CACL9B,MAAM,CACH0B,OADH,CACW,KADX,EACkB,UADlB,EAEGA,OAFH,CAEW,KAFX,EAEkB,UAFlB,EAGGA,OAHH,CAGW,KAHX,EAGkB,QAHlB,CADK,CAAP;AAMD,CAP2C,CAArC;AASA,MAAM22K,iBAAiB,GAAGD,2DAAU,CAACp4K,MAAM,IAAI;AACpD,SAAOA,MAAM,CACV0B,OADI,CACI,KADJ,EACW,EADX,EAEJA,OAFI,CAEI,QAFJ,EAEc,EAFd,EAGJA,OAHI,CAGI,QAHJ,EAGc,EAHd,CAAP;AAID,CAL0C,CAApC;AAOA,MAAM42K,gBAAgB,GAAGF,2DAAU,CAACp4K,MAAM,IAAI;AACnD,MAAI6B,KAAK,GAAG7B,MAAM,CACf0B,OADS,CACD,KADC,EACM,EADN,EAETA,OAFS,CAED,QAFC,EAES,EAFT,EAGTA,OAHS,CAGD,QAHC,EAGS,EAHT,EAITA,OAJS,CAID,KAJC,EAIM,UAJN,EAKTA,OALS,CAKD,KALC,EAKM,UALN,CAAZ;AAMA,SAAO,IAAII,MAAJ,CAAW,MAAMD,KAAN,GAAc,GAAzB,CAAP;AACD,CARyC,CAAnC;AAUA,MAAM02K,kBAAkB,GAAGH,2DAAU,CAACp4K,MAAM,IAAI;AACrD,SAAOA,MAAM,CACV0B,OADI,CACI,KADJ,EACW,EADX,EAEJA,OAFI,CAEI,QAFJ,EAEc,EAFd,EAGJA,OAHI,CAGI,QAHJ,EAGc,EAHd,EAIJA,OAJI,CAII,MAJJ,EAIY,GAJZ,EAKJA,OALI,CAKI,MALJ,EAKY,GALZ,EAMJA,OANI,CAMI,IANJ,EAMU,GANV,CAAP;AAOD,CAR2C,CAArC;AAUA,MAAM82K,iBAAiB,GAAGJ,2DAAU,CAACp4K,MAAM,IAAI;AACpD,MAAI6B,KAAK,GAAG7B,MAAM,CACf0B,OADS,CACD,KADC,EACM,EADN,EAETA,OAFS,CAED,QAFC,EAES,EAFT,EAGTA,OAHS,CAGD,QAHC,EAGS,EAHT,EAITA,OAJS,CAID,MAJC,EAIO,GAJP,EAKTA,OALS,CAKD,KALC,EAKM,UALN,EAMTA,OANS,CAMD,KANC,EAMM,UANN,CAAZ;AAOA,SAAO,IAAII,MAAJ,CAAW,MAAMD,KAAN,GAAc,GAAzB,CAAP;AACD,CAT0C,CAApC;AAWA,MAAM42K,kBAAkB,GAAGL,2DAAU,CAACp4K,MAAM,IAAI;AACrD,SAAOA,MAAM,CAAC0B,OAAP,CAAe,KAAf,EAAsB,IAAtB,CAAP;AACD,CAF2C,CAArC;AAIA,MAAMg3K,iBAAiB,GAAGN,2DAAU,CAACp4K,MAAM,IAAI;AACpD,MAAI6B,KAAK,GAAG7B,MAAM,CACf0B,OADS,CACD,QADC,EACS,EADT,EAETA,OAFS,CAED,QAFC,EAES,EAFT,EAGTA,OAHS,CAGD,KAHC,EAGM,UAHN,EAITA,OAJS,CAID,KAJC,EAIM,UAJN,EAKTA,OALS,CAKD,KALC,EAKM,QALN,CAAZ;AAMA,SAAO,IAAII,MAAJ,CAAW,MAAMD,KAAN,GAAc,GAAzB,CAAP;AACD,CAR0C,CAApC,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/QA,MAAM6lH,KAAN,CAAY;AACjBzmI,aAAW,CAACwpC,KAAD,EAAQ;AACjB,SAAKA,KAAL;AACEk9F,uBAAiB,EAAEl9F,KAAK,CAACk9F,iBAAN,IAA2B,EADhD;AAEEC,uBAAiB,EAAEn9F,KAAK,CAACm9F,iBAAN,IAA2B,EAFhD;AAGEC,sBAAgB,EAAEp9F,KAAK,CAACo9F,gBAAN,IAA0B,EAH9C;AAIEC,sBAAgB,EAAEr9F,KAAK,CAACq9F,gBAAN,IAA0B,EAJ9C;AAKEC,iBAAW,EAAE,KALf;AAMEC,aAAO,EAAE,KANX;AAOEC,cAAQ,EAAE,KAPZ;AAQEC,kBAAY,EAAE,IARhB;AASEnzF,WAAK,EAAE,IATT;AAUE3lB,YAAM,EAAE;AAVV,OAWKqb,KAXL;AAaD;;AAED5hC,QAAM,CAACs/H,IAAD,EAAO;AACX,WAAO,IAAIT,KAAJ,iCACF,KAAKj9F,KADH;AAELk9F,uBAAiB,EAAE,CAAC,GAAG,KAAKl9F,KAAL,CAAWk9F,iBAAf,EAAkCQ,IAAlC;AAFd,OAAP;AAID;;AAEDC,UAAQ,CAACC,KAAD,EAAQ;AACd,QAAIC,OAAO,GAAG,IAAI7rH,GAAJ,CAAQ4rH,KAAR,CAAd;AACA,WAAO,IAAIX,KAAJ,iCACF,KAAKj9F,KADH;AAELk9F,uBAAiB,EAAE,KAAKl9F,KAAL,CAAWk9F,iBAAX,CAA6B9+H,MAA7B,CACjBs/H,IAAI,IAAI,CAACG,OAAO,CAACluH,GAAR,CAAYpV,MAAM,CAACiS,IAAP,CAAYkxH,IAAZ,EAAkB,CAAlB,CAAZ,CADQ;AAFd,OAAP;AAMD;;AAEDI,QAAM,CAACF,KAAK,GAAG,EAAT,EAAa;AACjB,QAAI,CAACniI,KAAK,CAACwD,OAAN,CAAc2+H,KAAd,CAAL,EAA2B;AACzBA,WAAK,GAAG,CAACA,KAAD,CAAR;AACD;;AAED,QAAIG,KAAK,GAAG,IAAId,KAAJ,iCAAe,KAAKj9F,KAApB;AAA2Bm9F,uBAAiB,EAAES;AAA9C,OAAZ;AACAG,SAAK,CAAC/9F,KAAN,CAAYs9F,WAAZ,GAA0B,KAA1B;AACA,WAAOS,KAAP;AACD;;AAEDC,WAAS,CAACN,IAAD,EAAO;AACd,QAAIK,KAAK,GAAG,KAAKD,MAAL,CAAY;AAAEpyH,YAAM,EAAEgyH;AAAV,KAAZ,CAAZ;AACAK,SAAK,CAAC/9F,KAAN,CAAYs9F,WAAZ,GAA0B,IAA1B;AACA,WAAOS,KAAP;AACD;;AAEDE,SAAO,CAACL,KAAD,EAAQ;AACb,QAAI,CAACniI,KAAK,CAACwD,OAAN,CAAc2+H,KAAd,CAAL,EAA2B;AACzBA,WAAK,GAAG,CAACA,KAAD,CAAR;AACD;;AAED,WAAO,IAAIX,KAAJ,iCACF,KAAKj9F,KADH;AAELo9F,sBAAgB,EAAE,CAAC,GAAG,KAAKp9F,KAAL,CAAWo9F,gBAAf,EAAiC,GAAGQ,KAApC;AAFb,OAAP;AAID;;AAEDM,SAAO,CAACN,KAAD,EAAQ;AACb,QAAI,CAACniI,KAAK,CAACwD,OAAN,CAAc2+H,KAAd,CAAL,EAA2B;AACzBA,WAAK,GAAG,CAACA,KAAD,CAAR;AACD;;AAED,WAAO,IAAIX,KAAJ,iCACF,KAAKj9F,KADH;AAELq9F,sBAAgB,EAAE,CAAC,GAAG,KAAKr9F,KAAL,CAAWq9F,gBAAf,EAAiC,GAAGO,KAApC;AAFb,OAAP;AAID;;AAEDtzF,OAAK,CAACj6B,GAAD,EAAM;AACT,WAAO,IAAI4sH,KAAJ,iCAAe,KAAKj9F,KAApB;AAA2BsK,WAAK,EAAEj6B;AAAlC,OAAP;AACD;;AAEDsU,QAAM,CAACtU,GAAD,EAAM;AACV,WAAO,IAAI4sH,KAAJ,iCAAe,KAAKj9F,KAApB;AAA2Brb,YAAM,EAAEtU;AAAnC,OAAP;AACD;;AAEDuuB,KAAG,GAAG;AACJ,WAAO,IAAIq+F,KAAJ,iCAAe,KAAKj9F,KAApB;AAA2Bu9F,aAAO,EAAE;AAApC,OAAP;AACD;;AAEDC,UAAQ,GAAG;AACT,WAAO,IAAIP,KAAJ,iCAAe,KAAKj9F,KAApB;AAA2Bw9F,cAAQ,EAAE;AAArC,OAAP;AACD;;AAEDW,sBAAoB,GAAG;AACrB,WAAO,IAAIlB,KAAJ,iCAAe,KAAKj9F,KAApB;AAA2By9F,kBAAY,EAAE;AAAzC,OAAP;AACD;;AAEDhlI,SAAO,CAACob,IAAD,EAAO;AACZ,WAAO,IAAIopH,KAAJ,iCAAe,KAAKj9F,KAApB;AAA2Bo+F,kBAAY,EAAEvqH;AAAzC,OAAP;AACD;;AAEDD,WAAS,GAAG;AACV,WAAO,KAAKosB,KAAZ;AACD;;AAlGgB;AAqGZ,SAASq+F,iBAAT,CAA2BN,KAA3B,EAAkCO,cAAlC,EAAkD;AACvD,MAAIC,UAAU,GAAGR,KAAK,CAACnqH,SAAN,GAAkBypH,gBAAnC;;AACA,MAAIkB,UAAU,CAAC5gI,MAAX,KAAsB,CAA1B,EAA6B;AAC3B,QAAI2gI,cAAJ,EAAoB;AAClB;AAASE,aAAK,EAAE;AAAhB,SAA0BF,cAA1B;AACD;;AACD,WAAO,IAAP;AACD;;AAED,MAAIG,UAAU,GAAGF,UAAU,CAAC,CAAD,CAA3B;;AACA,MAAI,OAAOE,UAAP,KAAsB,QAA1B,EAAoC;AAClC,WAAO;AAAE99F,WAAK,EAAE89F,UAAT;AAAqBD,WAAK,EAAE;AAA5B,KAAP;AACD,GAZsD,CAavD;;;AACA,qBAAcjkI,MAAM,CAACiS,IAAP,CAAYiyH,UAAZ,CAAd;AAAA;AAAA,MAAK99F,KAAL;;AACA,SAAO;AAAEA,SAAF;AAAS69F,SAAK,EAAEC,UAAU,CAAC99F,KAAD;AAA1B,GAAP;AACD;AAEc,SAASyM,CAAT,CAAWsxF,KAAX,EAAkB;AAC/B,SAAO,IAAIzB,KAAJ,CAAU;AAAEyB;AAAF,GAAV,CAAP;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CCvHD;AACA;;AACO,MAAMwvD,SAAS,GAAG;AACvBv0L,MAAI,EAAE;AACJw+I,OAAG,EAAE,CAAC,IAAD,EAAO,UAAP,EAAmB,IAAnB,EAAyB,KAAzB,EAAgC,IAAhC,EAAsC,KAAtC,CADD;AAEJC,YAAQ,EAAE;AAFN,GADiB;AAKvBpZ,IAAE,EAAE;AACFmZ,OAAG,EAAE,CAAC,IAAD,EAAO,UAAP,EAAmB,OAAnB,CADH;AAEFC,YAAQ,EAAE;AAFR,GALmB;AASvBtxG,QAAM,EAAE;AACNqxG,OAAG,EAAE,CAAC,IAAD,EAAO,UAAP,EAAmB,OAAnB,CADC;AAENC,YAAQ,EAAE;AAFJ,GATe;AAavBxiI,QAAM,EAAE;AACNuiI,OAAG,EAAE,CAAC,IAAD,EAAO,UAAP,EAAmB,WAAnB,EAAgC,IAAhC,EAAsC,KAAtC,EAA6C,IAA7C,EAAmD,KAAnD,CADC;AAENC,YAAQ,EAAE;AAFJ,GAbe;AAiBvBvxG,SAAO,EAAE;AACPsxG,OAAG,EAAE,CAAC,IAAD,CADE;AAEPC,YAAQ,EAAE;AAFH;AAjBc,CAAlB;AAuBA,MAAMoK,WAAW,GAAG,IAAIh3I,GAAJ,CACzBjR,MAAM,CAAC4kB,OAAP,CAAe;AACbk3H,gBAAc,EAAE,QADH;AAEb5U,OAAK,EAAE,IAFM;AAGb9nI,MAAI,EAAE,MAHO;AAIbmrI,OAAK,EAAE,QAJM;AAKbliI,QAAM,EAAE,QALK;AAMburL,cAAY,EAAE,QAND;AAObC,cAAY,EAAE,QAPD;AAQbhtD,UAAQ,EAAE,IARG;AASbhB,SAAO,EAAE,IATI;AAUbsI,SAAO,EAAE;AAVI,CAAf,CADyB,CAApB;AAeA,SAAS2lD,QAAT,CAAkB1tJ,KAAlB,EAAyB9sB,IAAzB,EAA+B;AACpCA,MAAI,GAAGA,IAAI,IAAI,EAAf;;AAEA,UAAQ8sB,KAAR;AACE,SAAK,gBAAL;AACE,aAAO,gBAAP;;AACF,SAAK,QAAL;AACE,UAAI9sB,IAAI,CAACglI,MAAT,EAAiB;AACf,eAAO,iBAAP;AACD,OAFD,MAEO,IAAIhlI,IAAI,CAAC+kI,OAAT,EAAkB;AACvB,eAAO,kBAAP;AACD;;AACD,aAAO,QAAP;;AACF,SAAK,eAAL;AACE,aAAO,iBAAP;;AACF,SAAK,gBAAL;AACE,aAAO,kBAAP;;AACF;AACE,aAAOj4G,KAAP;AAfJ;AAiBD;AAEM,SAAS2tJ,UAAT,CAAoBj2C,EAApB,EAAwBvkI,IAAxB,EAA8B;AACnC,UAAQukI,EAAR;AACE,SAAK,OAAL;AACE,aAAO,QAAP;;AACF,SAAK,IAAL;AACE,aAAO,IAAP;;AACF,SAAK,UAAL;AACE,aAAO,WAAP;;AACF,SAAK,WAAL;AACE,aAAO,YAAP;;AACF,SAAK,UAAL;AACE,aAAO,UAAP;;AACF,SAAK,IAAL;AACE,UAAIvkI,IAAI,KAAK,MAAb,EAAqB;AACnB,eAAO,UAAP;AACD;;AACD,aAAO,iBAAP;;AACF,SAAK,KAAL;AACE,UAAIA,IAAI,KAAK,MAAb,EAAqB;AACnB,eAAO,oBAAP;AACD;;AACD,aAAO,2BAAP;;AACF,SAAK,IAAL;AACE,UAAIA,IAAI,KAAK,MAAb,EAAqB;AACnB,eAAO,WAAP;AACD;;AACD,aAAO,cAAP;;AACF,SAAK,KAAL;AACE,UAAIA,IAAI,KAAK,MAAb,EAAqB;AACnB,eAAO,qBAAP;AACD;;AACD,aAAO,wBAAP;;AACF,SAAK,MAAL;AACE,aAAO,SAAP;;AACF,SAAK,OAAL;AACE,aAAO,UAAP;;AACF,SAAK,KAAL;AACE,aAAO,KAAP;;AACF,SAAK,eAAL;AACE,aAAO,eAAP;;AACF;AACE,aAAO,EAAP;AAxCJ;AA0CD;AAEM,SAASy6K,gBAAT,CAA0B5tJ,KAA1B,EAAiC;AACtC,MAAIA,KAAK,KAAK,eAAd,EAA+B;AAC7B,WAAO;AAAEA,WAAK,EAAE,QAAT;AAAmBloC,aAAO,EAAE;AAAEogJ,cAAM,EAAE;AAAV;AAA5B,KAAP;AACD,GAFD,MAEO,IAAIl4G,KAAK,KAAK,gBAAd,EAAgC;AACrC,WAAO;AAAEA,WAAK,EAAE,QAAT;AAAmBloC,aAAO,EAAE;AAAEmgJ,eAAO,EAAE;AAAX;AAA5B,KAAP;AACD,GAFM,MAEA;AACL,WAAO;AAAEj4G;AAAF,KAAP;AACD;AACF;AAEM,SAAS6tJ,aAAT,CAAuB16K,IAAvB,EAA6B;AAClC,UAAQA,IAAR;AACE,SAAK,aAAL;AACE,aAAO,qBAAP;;AACF,SAAK,SAAL;AACA,SAAK,gBAAL;AACA,SAAK,iBAAL;AACE,aAAO,uBAAP;;AACF,SAAK,YAAL;AACE,aAAO,wBAAP;;AACF,SAAK,eAAL;AACE,aAAO,mDAAP;;AACF;AACE,aAAO,sDAAP;AAZJ;AAcD;AAEM,SAASwlI,WAAT,CAAqBtB,IAArB,EAA2BC,IAA3B,EAAiC;AACtC,MAAID,IAAI,GAAGC,IAAX,EAAiB;AACf,WAAO,CAACD,IAAD,EAAOC,IAAP,CAAP;AACD;;AACD,SAAO,CAACA,IAAD,EAAOD,IAAP,CAAP;AACD;AAEM,SAAS/rI,KAAT,CAAe4O,IAAf,EAAqB;AAC1B,UAAQA,IAAI,CAAC/G,IAAb;AACE,SAAK,QAAL;AAAe;AACb,YAAIg2H,MAAM,GAAGjvH,IAAI,CAAC3jB,KAAlB;;AACA,YAAI2jB,IAAI,CAAC8lB,KAAL,KAAe,QAAf,IAA2B9lB,IAAI,CAACw9H,EAAL,KAAY,WAA3C,EAAwD;AACtDvO,gBAAM,GAAGtC,6DAAe,CAACsC,MAAD,CAAxB;AACD;;AACD,+CAAYjvH,IAAZ;AAAkB3jB,eAAK,EAAE4yI;AAAzB;AACD;;AACD,SAAK,QAAL;AAAe;AACb,YAAIA,MAAM,GAAGjvH,IAAI,CAAC3jB,KAAL,IAAc,IAAd,GAAqB,EAArB,GAA0B2jB,IAAI,CAAC3jB,KAA5C;AACA,+CAAY2jB,IAAZ;AAAkB3jB,eAAK,EAAE4yI;AAAzB;AACD;;AACD;AAZF;;AAeA,yCAAYjvH,IAAZ;AAAkBwlB,SAAK,EAAE;AAAzB;AACD;AAEM,SAASouJ,OAAT,OAA+C;AAAA,MAA5BpuJ,KAA4B,QAA5BA,KAA4B;AAAA,MAArBquJ,QAAqB,QAArBA,QAAqB;AAAA,MAAR7zK,IAAQ;;AACpD,UAAQA,IAAI,CAAC/G,IAAb;AACE,SAAK,QAAL;AAAe;AACb,YAAI66K,QAAQ,GAAG9zK,IAAI,CAAC3jB,KAApB;;AACA,YAAI2jB,IAAI,CAAC8lB,KAAL,KAAe,QAAf,IAA2B9lB,IAAI,CAACw9H,EAAL,KAAY,WAA3C,EAAwD;AACtDs2C,kBAAQ,GAAGvsD,6DAAe,CAACusD,QAAD,CAA1B;AACD;;AAED,+CAAY9zK,IAAZ;AAAkB3jB,eAAK,EAAEy3L;AAAzB;AACD;;AACD,SAAK,QAAL;AAAe;AACb,YAAIA,QAAQ,GAAG9zK,IAAI,CAAC3jB,KAAL,IAAc,IAAd,GAAqB,EAArB,GAA0B2jB,IAAI,CAAC3jB,KAA9C;AACA,+CAAY2jB,IAAZ;AAAkB3jB,eAAK,EAAEy3L;AAAzB;AACD;;AACD;AAbF;;AAgBA,SAAO9zK,IAAP;AACD;AAEM,SAAS+zK,SAAT,CAAmB13L,KAAnB,EAA0BmjJ,IAA1B,EAAgC;AACrC,UAAQA,IAAI,CAACvmI,IAAb;AACE,SAAK,QAAL;AAAe;AACb,YAAIumI,IAAI,CAAChC,EAAL,KAAY,WAAhB,EAA6B;AAC3B,iDACKgC,IADL;AAEEh6G,iBAAK,EAAE,IAFT;AAGEnpC,iBAAK,EAAEA,KAAK,GAAG23L,8DAAgB,CAAC33L,KAAD,CAAhB,IAA2B,CAA9B,GAAkC;AAHhD;AAKD;;AACD;AACD;;AACD;AAXF;;AAcA,yCAAYmjJ,IAAZ;AAAkBh6G,SAAK,EAAE,IAAzB;AAA+BnpC;AAA/B;AACD;AAEM,SAASmiJ,wBAAT,CAAkCzjI,MAAlC,EAA0C;AAC/C,SAAQxP,IAAI,CAACuF,GAAL,CAASiK,MAAT,IAAmB,KAApB,GAA6B,CAApC;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1MD;AACA;AAEO,SAAS0jK,SAAT,CAAmBlsK,QAAnB,EAA6BipJ,SAA7B,EAAwC8iB,QAAxC,EAAkD;AACvD,MAAI30H,KAAK,GAAGonF,kDAAA,EAAZ;;AAEA,MAAIyqB,SAAJ,EAAe;AACb,WAAO,WAAP;AACD,GAFD,MAEO,IAAI8iB,QAAJ,EAAc;AACnB,WAAO,MAAP;AACD,GAFM,MAEA,IAAI/rK,QAAQ,KAAKo3C,KAAjB,EAAwB;AAC7B,WAAO,KAAP;AACD,GAFM,MAEA,IAAIp3C,QAAQ,GAAGo3C,KAAX,IAAoBp3C,QAAQ,IAAIw+H,+CAAA,CAAmBpnF,KAAnB,EAA0B,CAA1B,CAApC,EAAkE;AACvE,WAAO,UAAP;AACD,GAFM,MAEA,IAAIp3C,QAAQ,GAAGo3C,KAAf,EAAsB;AAC3B,WAAO,QAAP;AACD,GAFM,MAEA;AACL,WAAO,WAAP;AACD;AACF;AAEM,SAASy0H,uBAAT,CAAiCl6K,SAAjC,EAA4C;AACjD,MAAI4kJ,OAAO,GAAG5kJ,SAAS,CAACrE,GAAV,CAAcwE,QAAQ,IAAI;AACtC,QAAIy3K,QAAQ,GAAGz3K,QAAQ,CAACy3J,WAAT,CAAqBtjJ,IAArB,CAA0B4Y,CAAC,IAAIA,CAAC,CAAC0U,KAAF,KAAY,MAA3C,CAAf;;AACA,WAAO;AACLijH,UAAI,EAAE;AACJ1kJ,gBAAQ,EAAEA,QAAQ,CAAC8/H,EADf;AAEJrlI,YAAI,EAAE;AACJsqJ,cAAI,EACF0yB,QAAQ,IAAIA,QAAQ,CAACt+B,EAAT,KAAgB,IAA5B,GACIn5I,QAAQ,CAACk3J,SADb,GAEIxqB,+CAAA,CAAmB1sI,QAAQ,CAACk3J,SAA5B,EAAuC,CAAvC;AAJF;AAFF;AADD,KAAP;AAWD,GAba,CAAd;AAeA,SAAOhpH,sDAAC,CAAC,cAAD,CAAD,CACJhvC,MADI,CACG;AAAE4lJ,OAAG,EAAEL;AAAP,GADH,EAEJzlB,OAFI,CAEI;AAAEvkI,QAAI,EAAE;AAAR,GAFJ,EAGJskI,OAHI,CAGI,UAHJ,EAIJH,MAJI,CAIG,CAAC,UAAD,EAAa,MAAb,CAJH,CAAP;AAKD;;AAED,SAASgxD,gBAAT,CAA0Bz+K,GAA1B,EAA+B;AAC7B;AACA;AACA,SAAOu7H,8CAAA,CAAkB,IAAI9pI,IAAJ,CAAS,IAAT,EAAe,CAAf,EAAkBuO,GAAlB,EAAuB,EAAvB,CAAlB,EAA8C,IAA9C,CAAP;AACD;;AAED,SAAS0+K,aAAT,CAAuB/1L,GAAvB,EAA4B;AAC1B,MAAIoO,IAAI,GAAG;AACT4nL,MAAE,EAAE,QADK;AAETvqE,MAAE,EAAE,QAFK;AAGTwqE,MAAE,EAAE,SAHK;AAITC,MAAE,EAAE,WAJK;AAKTzyG,MAAE,EAAE,UALK;AAMT0jC,MAAE,EAAE,QANK;AAOTmH,MAAE,EAAE;AAPK,GAAX;AASA,SAAOlgH,IAAI,CAACpO,GAAD,CAAX;AACD;;AAEM,SAASm2L,uBAAT,CAAiClyL,MAAjC,EAAyC;AAC9C,MAAIyR,QAAQ,GAAGzR,MAAM,CAACyR,QAAP,IAAmB,CAAlC;;AAEA,UAAQzR,MAAM,CAAC4Q,SAAf;AACE,SAAK,QAAL;AAAe;AACb,YAAIwsB,IAAI,GAAG,QAAX;AACAA,YAAI,IAAI3rB,QAAQ,KAAK,CAAb,GAAkB,GAAEA,QAAS,QAA7B,GAAuC,MAA/C;AACA2rB,YAAI,IAAI,SAASuxG,8CAAA,CAAkB3uI,MAAM,CAAClG,KAAzB,EAAgC,MAAhC,CAAjB;AACA,eAAOsjC,IAAP;AACD;;AACD,SAAK,SAAL;AAAgB;AACd,YAAIA,IAAI,GAAG,QAAX;AACAA,YAAI,IAAI3rB,QAAQ,KAAK,CAAb,GAAkB,GAAEA,QAAS,SAA7B,GAAwC,OAAhD;;AAEA,YAAIzR,MAAM,CAAC8sD,QAAP,IAAmB9sD,MAAM,CAAC8sD,QAAP,CAAgBpsD,MAAhB,GAAyB,CAAhD,EAAmD;AACjD;AACA;AACA;AACA,cAAIosD,QAAQ,GAAG,CAAC,GAAG9sD,MAAM,CAAC8sD,QAAX,EACZ5rD,IADY,CACP,CAACixL,EAAD,EAAKC,EAAL,KAAY;AAChB,gBAAIC,SAAS,GACX,CAACF,EAAE,CAACt7K,IAAH,KAAY,KAAZ,GAAoB,CAApB,GAAwB,CAAzB,KAA+Bu7K,EAAE,CAACv7K,IAAH,KAAY,KAAZ,GAAoB,CAApB,GAAwB,CAAvD,CADF;AAEA,gBAAIy7K,QAAQ,GAAGH,EAAE,CAACl4L,KAAH,GAAWm4L,EAAE,CAACn4L,KAA7B;;AAEA,gBAAIo4L,SAAS,KAAK,CAAlB,EAAqB;AACnB,qBAAOC,QAAP;AACD;;AACD,mBAAOD,SAAP;AACD,WAVY,EAWZlxL,MAXY,CAWLwe,CAAC,IAAIA,CAAC,CAAC1lB,KAAF,KAAY,CAAC,CAXb,CAAf,CAJiD,CAiBjD;;AACA6yD,kBAAQ,GAAGA,QAAQ,CAACp1B,MAAT,CAAgB13B,MAAM,CAAC8sD,QAAP,CAAgB3rD,MAAhB,CAAuBwe,CAAC,IAAIA,CAAC,CAAC1lB,KAAF,KAAY,CAAC,CAAzC,CAAhB,CAAX;AAEAmjC,cAAI,IAAI,UAAR;AAEA,cAAIm1J,IAAI,GAAG,EAAX;AAEA,cAAIC,UAAU,GAAG,IAAIz9K,GAAJ,CAAQ+3C,QAAQ,CAACrvD,GAAT,CAAakiB,CAAC,IAAIA,CAAC,CAAC9I,IAApB,CAAR,CAAjB;AACA,cAAI+qC,SAAS,GAAG4wI,UAAU,CAAC9xL,MAAX,KAAsB,CAAtB,IAA2B,CAAC8xL,UAAU,CAAC9/K,GAAX,CAAe,KAAf,CAA5C;;AAEA,eAAK,IAAI4kB,OAAT,IAAoBw1B,QAApB,EAA8B;AAC5B,gBAAIx1B,OAAO,CAACzgB,IAAR,KAAiB,KAArB,EAA4B;AAC1B,kBAAIygB,OAAO,CAACr9B,KAAR,KAAkB,CAAC,CAAvB,EAA0B;AACxBs4L,oBAAI,CAAChzL,IAAL,CAAU,UAAV;AACD,eAFD,MAEO;AACL;AACAgzL,oBAAI,CAAChzL,IAAL,CAAUsyL,gBAAgB,CAACv6J,OAAO,CAACr9B,KAAT,CAA1B;AACD;AACF,aAPD,MAOO;AACL,kBAAIw4L,OAAO,GAAG7wI,SAAS,GAAG,EAAH,GAAQ,MAAMkwI,aAAa,CAACx6J,OAAO,CAACzgB,IAAT,CAAlD;;AAEA,kBAAIygB,OAAO,CAACr9B,KAAR,KAAkB,CAAC,CAAvB,EAA0B;AACxB;AACAs4L,oBAAI,CAAChzL,IAAL,CAAU,SAASkzL,OAAnB;AACD,eAHD,MAGO;AACL;AACAF,oBAAI,CAAChzL,IAAL,CAAUsyL,gBAAgB,CAACv6J,OAAO,CAACr9B,KAAT,CAAhB,GAAkCw4L,OAA5C;AACD;AACF;AACF;;AAED,cAAIF,IAAI,CAAC7xL,MAAL,GAAc,CAAlB,EAAqB;AACnB08B,gBAAI,IAAIm1J,IAAI,CAAC7vL,KAAL,CAAW,CAAX,EAAc6vL,IAAI,CAAC7xL,MAAL,GAAc,CAA5B,EAA+B+a,IAA/B,CAAoC,IAApC,CAAR;AACA2hB,gBAAI,IAAI,QAAR;AACAA,gBAAI,IAAIm1J,IAAI,CAACA,IAAI,CAAC7xL,MAAL,GAAc,CAAf,CAAZ;AACD,WAJD,MAIO;AACL08B,gBAAI,IAAIm1J,IAAI,CAAC92K,IAAL,CAAU,OAAV,CAAR;AACD;;AAED,cAAImmC,SAAJ,EAAe;AACbxkB,gBAAI,IAAI,MAAM00J,aAAa,CAAChlI,QAAQ,CAAC,CAAD,CAAR,CAAYj2C,IAAb,CAA3B;AACD;AACF,SA3DD,MA2DO;AACLumB,cAAI,IAAI,aAAauxG,8CAAA,CAAkB3uI,MAAM,CAAClG,KAAzB,EAAgC,IAAhC,CAArB;AACD;;AAED,eAAOsjC,IAAP;AACD;;AACD,SAAK,QAAL;AAAe;AACb,YAAIA,IAAI,GAAG,QAAX;AACAA,YAAI,IAAI3rB,QAAQ,KAAK,CAAb,GAAkB,GAAEA,QAAS,QAA7B,GAAuC,MAA/C;AACA2rB,YAAI,IAAI,SAASuxG,8CAAA,CAAkB3uI,MAAM,CAAClG,KAAzB,EAAgC,QAAhC,CAAjB;AACA,eAAOsjC,IAAP;AACD;;AACD;AACE,aAAO,iBAAP;AAnFJ;AAqFD;AAEM,SAASq9G,sBAAT,CAAgCz6I,MAAhC,EAAwC;AAC7C,MAAIlF,IAAI,GAAG;AACThB,SAAK,EAAE60I,iDAAA,CAAqB3uI,MAAM,CAAClG,KAA5B,CADE;AAET8W,aAAS,EAAE5Q,MAAM,CAAC4Q,SAAP,CAAiB+Z,WAAjB,EAFF;AAGT7W,eAAW,EAAE,CAAC,EAAD;AAHJ,GAAX;;AAMA,MAAI9T,MAAM,CAACyR,QAAX,EAAqB;AACnB3W,QAAI,CAAC2W,QAAL,GAAgBzR,MAAM,CAACyR,QAAvB;AACD;;AAED,MAAIihL,SAAS,GAAGhvL,IAAI,IAAIA,IAAI,CAAChB,KAAL,CAAW,CAAX,EAAc,CAAd,EAAiBioB,WAAjB,EAAxB;;AAEA,UAAQ3qB,MAAM,CAAC4Q,SAAf;AACE,SAAK,QAAL;AACE;AACA,aAAO,CAAC9V,IAAD,CAAP;;AACF,SAAK,SAAL;AACE,UAAIkF,MAAM,CAAC8sD,QAAP,IAAmB9sD,MAAM,CAAC8sD,QAAP,CAAgBpsD,MAAhB,GAAyB,CAAhD,EAAmD;AACjD,YAAIyJ,IAAI,GAAGnK,MAAM,CAAC8sD,QAAP,CAAgB3rD,MAAhB,CAAuBwe,CAAC,IAAIA,CAAC,CAAC9I,IAAF,KAAW,KAAvC,CAAX;AACA,YAAI87K,QAAQ,GAAG3yL,MAAM,CAAC8sD,QAAP,CAAgB3rD,MAAhB,CAAuBwe,CAAC,IAAIA,CAAC,CAAC9I,IAAF,KAAW,KAAvC,CAAf;AAEA,eAAO,CACL1M,IAAI,CAACzJ,MAAL,GAAc,CAAd,oCAAwB5F,IAAxB;AAA8ByZ,sBAAY,EAAEpK,IAAI,CAAC1M,GAAL,CAASkiB,CAAC,IAAIA,CAAC,CAAC1lB,KAAhB;AAA5C,UADK,EAEL04L,QAAQ,CAACjyL,MAAT,GAAkB,CAAlB,oCACK5F,IADL;AAEE0Z,qBAAW,EAAEm+K,QAAQ,CAACl1L,GAAT,CAAakiB,CAAC,IAAI,CAAC+yK,SAAS,CAAC/yK,CAAC,CAAC9I,IAAH,CAAV,EAAoB8I,CAAC,CAAC1lB,KAAtB,CAAlB;AAFf,UAFK,EAMLkH,MANK,CAMEw9C,OANF,CAAP;AAOD,OAXD,MAWO;AACL;AACA,eAAO,CAAC7jD,IAAD,CAAP;AACD;;AACH,SAAK,QAAL;AACE,aAAO,CAACA,IAAD,CAAP;;AACF;AACE,YAAM,IAAIoE,KAAJ,CAAU,+BAAV,CAAN;AAvBJ;AAyBD;AAEM,SAASo6K,oBAAT,CAA8B78B,UAA9B,EAA0C;AAC/C,SAAO;AACLjY,SAAK,EACHiY,UAAU,CAACrmI,IAAX,CAAgBgnI,IAAI,IAAIA,IAAI,CAAChC,EAAL,KAAY,IAAZ,IAAoBgC,IAAI,CAAC15G,KAAL,KAAe,OAA3D,KACA+4G,UAAU,CAACrmI,IAAX,CACEgnI,IAAI,IAAIA,IAAI,CAAChC,EAAL,KAAY,IAAZ,IAAoBgC,IAAI,CAAC15G,KAAL,KAAe,aAD7C,CADA,IAIA,IANG;AAOLy/F,WAAO,EACLsZ,UAAU,CAACrmI,IAAX,CAAgBgnI,IAAI,IAAIA,IAAI,CAAChC,EAAL,KAAY,IAAZ,IAAoBgC,IAAI,CAAC15G,KAAL,KAAe,SAA3D,KACA+4G,UAAU,CAACrmI,IAAX,CAAgBgnI,IAAI,IAAIA,IAAI,CAAChC,EAAL,KAAY,IAAZ,IAAoBgC,IAAI,CAAC15G,KAAL,KAAe,MAA3D,CADA,IAEA,IAVG;AAWL/9B,UAAM,EACJ82I,UAAU,CAACrmI,IAAX,CACEgnI,IAAI,IACF,CAACA,IAAI,CAAChC,EAAL,KAAY,IAAZ,IACCgC,IAAI,CAAChC,EAAL,KAAY,UADb,IAECgC,IAAI,CAAChC,EAAL,KAAY,WAFd,KAGAgC,IAAI,CAAC15G,KAAL,KAAe,QALnB,KAMK,IAlBF;AAmBLhnC,QAAI,EACF+/I,UAAU,CAACrmI,IAAX,CACEgnI,IAAI,IACF,CAACA,IAAI,CAAChC,EAAL,KAAY,IAAZ,IAAoBgC,IAAI,CAAChC,EAAL,KAAY,UAAjC,KAAgDgC,IAAI,CAAC15G,KAAL,KAAe,MAFnE,KAGK;AAvBF,GAAP;AAyBD;AAEM,SAASm4I,kBAAT,CAA4Bl2K,MAA5B,EAAoC;AACzC,MAAIA,MAAM,IAAI,OAAOA,MAAP,KAAkB,QAAhC,EAA0C;AACxC,WAAQ,CAACA,MAAM,CAACo1I,IAAP,GAAcp1I,MAAM,CAACq1I,IAAtB,IAA8B,CAA/B,GAAoC,CAA3C;AACD;;AACD,SAAOr1I,MAAP;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClOD;;AACA,MAAMg5H,IAAI,GAAG7iH,mBAAO,CAAC,kFAAD,CAApB,C,CAEA;;;AACA,SAAS1I,GAAT,CAAa0mB,CAAb,EAAgB;AACd,SAAO,OAAOA,CAAP,KAAa,QAAb,GAAwBA,CAAxB,GAA4B,CAAnC;AACD;;AAED,SAAS84J,qBAAT,CAA+B7lK,KAA/B,EAAsCgzH,MAAtC,EAA8C;AAC5C,MAAIpuI,UAAU,GAAGyB,GAAG,CAAC2sI,MAAM,CAACp6I,MAAR,CAAH,GAAqBonB,KAAtC;AAEA,SAAO;AACLlW,QAAI,EAAE,uBADD;AAELqB,WAAO,EAAE,CAFJ;AAGLvG;AAHK,GAAP;AAKD;;AAEM,SAASkhL,SAAT,CAAmB9yC,MAAnB,EAA2Bh+I,IAA3B,EAAiC;AACtC,MAAIm2B,MAAM,GAAG6nH,MAAM,CAAChe,EAAP,KAAc,MAAd,GAAuB,MAAvB,GAAgC,EAA7C;AAEA;AACEp8H,UAAM,EAAE;AADV,KAEK5D,IAFL;AAGEyiI,SAAK,EAAEziI,IAAI,CAACyiI,KAAL,IAAcub,MAAM,CAACvb,KAH9B;AAIEzC,MAAE,EAAEhgI,IAAI,CAACggI,EAAL,GAAUhgI,IAAI,CAACggI,EAAf,GAAoB7pG,MAAM,GAAGymG,IAAI,CAACgX,MAAL,EAJnC;AAKExS,WAAO,EAAE4c,MAAM,CAAC5c,OALlB;AAMEzmI,QAAI,EAAEqjJ,MAAM,CAACrjJ,IANf;AAOE+uI,WAAO,EAAEsU,MAAM,CAACtU,OAAP,IAAkB,IAAlB,GAAyBsU,MAAM,CAACtU,OAAhC,GAA0C,IAPrD;AAQEqD,yBAAqB,EACnBiR,MAAM,CAACjR,qBAAP,IAAgC,IAAhC,GACIiR,MAAM,CAACjR,qBADX,GAEI,IAXR;AAYE6c,YAAQ,EAAE,IAZZ;AAaEJ,aAAS,EAAExL,MAAM,CAAChe,EAbpB;AAcE3+F,SAAK,EAAE;AAdT;AAgBD;AAEM,SAASs8G,gBAAT,CAA0B3I,KAA1B,EAAiC;AACtC;AACA;AACA,QAAMhqH,KAAK,GAAGgqH,KAAK,CAAC/O,eAAN,CAAsBrtI,MAAtB,CACZ,CAAC61H,GAAD,EAAMziG,CAAN,KAAYyiG,GAAG,GAAGp9G,GAAG,CAAC2a,CAAC,CAACpoB,MAAH,CADT,EAEZ,CAFY,CAAd;AAIA,yCACKoxI,KADL;AAEE3zG,SAAK,EACHrW,KAAK,KAAK3Z,GAAG,CAAC2jI,KAAK,CAACpxI,MAAP,CAAb,GAA8B,IAA9B,GAAqCitL,qBAAqB,CAAC7lK,KAAD,EAAQgqH,KAAR;AAH9D;AAKD;AAEM,SAAS+7C,eAAT,CAAyBpwD,YAAzB,EAAuCkd,GAAvC,EAA4C;AACjD;AACA;AACA;AACA,SAAOA,GAAG,IAAI,CAAd,EAAiB;AACf,QAAI7I,KAAK,GAAGrU,YAAY,CAACkd,GAAD,CAAxB;;AACA,QAAI7I,KAAK,CAAC4I,SAAV,EAAqB;AACnB,aAAOC,GAAP;AACD;;AACDA,OAAG;AACJ;;AACD,SAAO,IAAP;AACD;AAEM,SAASmzC,QAAT,CAAkBrwD,YAAlB,EAAgCswD,WAAhC,EAA6C;AAClD,MAAIj4K,KAAK,GAAG,CAAC2nH,YAAY,CAACswD,WAAD,CAAb,CAAZ;AACA,MAAIn4L,IAAI,GAAGm4L,WAAW,GAAG,CAAzB;;AACA,SAAOn4L,IAAI,GAAG6nI,YAAY,CAAChiI,MAApB,IAA8BgiI,YAAY,CAAC7nI,IAAD,CAAZ,CAAmB8wJ,QAAxD,EAAkE;AAChE5wI,SAAK,CAACxb,IAAN,CAAWmjI,YAAY,CAAC7nI,IAAD,CAAvB;AACAA,QAAI;AACL;;AACD,SAAOkgB,KAAP;AACD;AAEM,SAAS0zI,mBAAT,CAA6B/rB,YAA7B,EAA2C;AAChD,MAAIt6H,CAAC,GAAGs6H,YAAY,CAAC/nI,MAAb,CAAoB,CAACygB,IAAD,EAAO2kI,MAAP,KAAkB;AAC5C,QAAM/X,eAAN,GAAoC+X,MAApC,CAAM/X,eAAN;AAAA,QAA0B+O,KAA1B,4BAAoCgJ,MAApC;;AACA/X,mBAAe,GAAGA,eAAe,IAAI,EAArC;AAEA5sH,QAAI,CAAC7b,IAAL,CAAUw3I,KAAV;;AAEA,SAAK,IAAIx9H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyuH,eAAe,CAACtnI,MAApC,EAA4C6Y,CAAC,EAA7C,EAAiD;AAC/C6B,UAAI,CAAC7b,IAAL,CAAUyoI,eAAe,CAACzuH,CAAD,CAAzB;AACD;;AACD,WAAO6B,IAAP;AACD,GAVO,EAUL,EAVK,CAAR;AAWA,SAAOhT,CAAP;AACD;AAEM,SAAS6qL,gBAAT,CAA0Bl4K,KAA1B,EAAiC;AACtC,yCAAYA,KAAK,CAAC,CAAD,CAAjB;AAAsBitH,mBAAe,EAAEjtH,KAAK,CAACrY,KAAN,CAAY,CAAZ;AAAvC;AACD;AAEM,SAASwwL,kBAAT,CAA4Bn4K,KAA5B,EAAmC;AACxC,MAAIA,KAAK,IAAI,IAAb,EAAmB;AACjB,WAAO,IAAP;AACD;;AACD,SAAO0zI,mBAAmB,CAAC,CAAC1zI,KAAD,CAAD,CAA1B;AACD;AAEM,SAASo4K,oBAAT,CAA8BC,YAA9B,EAA4ClqL,IAA5C,EAAkD;AACvD,SAAO+pL,gBAAgB,CAACI,0DAAY,CAACnqL,IAAD,EAAOgqL,kBAAkB,CAACE,YAAD,CAAzB,CAAb,CAAvB;AACD;AAEM,SAASE,mBAAT,CAA6B5wD,YAA7B,EAA2CX,EAA3C,EAA+C5kG,IAA/C,EAAqD;AAC1D,MAAIyiH,GAAG,GAAGld,YAAY,CAAC//H,SAAb,CAAuBorB,CAAC,IAAIA,CAAC,CAACg0G,EAAF,KAASA,EAArC,CAAV;AACA,MAAIgV,KAAK,GAAGrU,YAAY,CAACkd,GAAD,CAAxB;AACA,MAAI2zC,gBAAgB,GAAG,CAAC,GAAG7wD,YAAJ,CAAvB;;AAEA,MAAIkd,GAAG,KAAK,CAAC,CAAb,EAAgB;AACd,UAAM,IAAI1gJ,KAAJ,CAAU,2CAA2C6iI,EAArD,CAAN;AACD;;AAED,MAAIgV,KAAK,CAAC4I,SAAN,IAAmB5I,KAAK,CAAC4U,QAA7B,EAAuC;AACrC,QAAIqnC,WAAW,GAAGF,eAAe,CAACpwD,YAAD,EAAekd,GAAf,CAAjC;;AACA,QAAIozC,WAAW,IAAI,IAAnB,EAAyB;AACvB59J,aAAO,CAACsrE,GAAR,CAAY,0BAAZ;AACA,aAAO;AAAEx3F,YAAI,EAAE;AAAEuhI,iBAAO,EAAE,EAAX;AAAeqX,iBAAO,EAAE;AAAxB;AAAR,OAAP;AACD;;AAED,QAAI/mI,KAAK,GAAGg4K,QAAQ,CAACrwD,YAAD,EAAeswD,WAAf,CAApB;AACA,QAAIpvD,OAAO,GAAGzmG,IAAI,CAAC81J,gBAAgB,CAACl4K,KAAD,CAAjB,CAAlB;AACA,QAAIy4K,QAAQ,GAAGN,kBAAkB,CAACtvD,OAAD,CAAjC;AAEA,QAAI16H,IAAJ;;AACA,QAAIsqL,QAAQ,IAAI,IAAhB,EAAsB;AACpB;AACA;AACAtqL,UAAI,GAAG;AAAEuhI,eAAO,EAAE,CAAC;AAAE1I,YAAE,EAAEhnH,KAAK,CAAC,CAAD,CAAL,CAASgnH;AAAf,SAAD,CAAX;AAAkC+f,eAAO,EAAE;AAA3C,OAAP;AACAle,aAAO,GAAG;AAAE7B,UAAE,EAAEhnH,KAAK,CAAC,CAAD,CAAL,CAASgnH,EAAf;AAAmB0xD,gBAAQ,EAAE;AAA7B,OAAV;AACAF,sBAAgB,CAAC1wL,MAAjB,CAAwBmwL,WAAxB,EAAqCj4K,KAAK,CAACra,MAA3C;AACD,KAND,MAMO;AACLwI,UAAI,GAAGwqL,uDAAS,CAAC34K,KAAD,EAAQy4K,QAAR,CAAhB;AACAD,sBAAgB,CAAC1wL,MAAjB,CAAwBmwL,WAAxB,EAAqCj4K,KAAK,CAACra,MAA3C,EAAmD,GAAG8yL,QAAtD;AACD;;AAED,WAAO;AAAEzxL,UAAI,EAAEwxL,gBAAR;AAA0B3rD,oBAAc,EAAEhE,OAA1C;AAAmD16H;AAAnD,KAAP;AACD,GAxBD,MAwBO;AACL,QAAI06H,OAAO,GAAGzmG,IAAI,CAAC45G,KAAD,CAAlB;AACA,QAAI48C,QAAQ,GAAGT,kBAAkB,CAACtvD,OAAD,CAAlB,IAA+B,EAA9C;;AACA,QAAIA,OAAJ,EAAa;AACXA,aAAO,CAACoE,eAAR,GAA0BpE,OAAO,CAACoE,eAAR,IAA2B,EAArD;AACD;;AACDurD,oBAAgB,CAAC1wL,MAAjB,CAAwB+8I,GAAxB,EAA6B,CAA7B,EAAgC,GAAG+zC,QAAnC;AAEA,WAAO;AACL5xL,UAAI,EAAEwxL,gBADD;AAEL3rD,oBAAc,EAAEhE,OAAO,IAAI;AAAE7B,UAAE,EAAEgV,KAAK,CAAChV,EAAZ;AAAgB0xD,gBAAQ,EAAE;AAA1B,OAFtB;AAGLvqL,UAAI,EAAEwqL,uDAAS,CAAC,CAAC38C,KAAD,CAAD,EAAU48C,QAAV;AAHV,KAAP;AAKD;AACF;AAEM,SAASC,mBAAT,CAA6BlxD,YAA7B,EAA2CX,EAA3C,EAA+C;AACpD,SAAOuxD,mBAAmB,CAAC5wD,YAAD,EAAeX,EAAf,EAAmBgV,KAAK,IAAI;AACpD,QAAI,CAACA,KAAK,CAAC4I,SAAX,EAAsB;AACpB,aAAO5I,KAAP;AACD;;AACD,QAAI88C,OAAO,GAAGlnL,kDAAI,CAACoqI,KAAK,CAAC/O,eAAP,CAAlB;AACA+O,SAAK,CAAC/O,eAAN,CAAsBzoI,IAAtB,CACEszL,SAAS,CAAC97C,KAAD,EAAQ;AACfpxI,YAAM,EAAE,CADO;AAEfm6I,gBAAU,EAAE1sI,GAAG,CAACygL,OAAO,IAAIA,OAAO,CAAC/zC,UAApB,CAAH,GAAqC;AAFlC,KAAR,CADX;AAMA,WAAO/I,KAAP;AACD,GAZyB,CAA1B;AAaD;AAEM,SAASjU,iBAAT,CAA2BJ,YAA3B,EAAyC4E,WAAzC,EAAsD;AAC3D,SAAOgsD,mBAAmB,CAAC5wD,YAAD,EAAe4E,WAAW,CAACvF,EAA3B,EAA+BgV,KAAK,IAAI;AAChE,QAAIA,KAAK,CAAC4I,SAAV,EAAqB;AACnB,UAAII,MAAM,GAAGhJ,KAAK,CAAChV,EAAN,KAAauF,WAAW,CAACvF,EAAzB,GAA8BuF,WAA9B,GAA4CyP,KAAzD;AACA,UAAItqC,GAAG,GAAGsqC,KAAK,CAAC/O,eAAN,CAAsBvqI,GAAtB,CAA0BswB,CAAC,IAAI;AACvC;AACA;AAEA,YAAIhL,KAAK,GAAGgL,CAAZ;;AACA,YAAIgpH,KAAK,CAAChV,EAAN,KAAauF,WAAW,CAACvF,EAA7B,EAAiC;AAC/Bh/G,eAAK,mCACAgL,CADA;AAEHy2G,iBAAK,EAAEz2G,CAAC,CAACy2G,KAAF,KAAYuS,KAAK,CAACvS,KAAlB,GAA0B8C,WAAW,CAAC9C,KAAtC,GAA8Cz2G,CAAC,CAACy2G;AAFpD,YAAL;AAID,SALD,MAKO,IAAIz2G,CAAC,CAACg0G,EAAF,KAASuF,WAAW,CAACvF,EAAzB,EAA6B;AAClCh/G,eAAK,GAAGukH,WAAR;AACD;;AAED,eAAOurD,SAAS,CAAC9yC,MAAD,EAASh9H,KAAT,CAAhB;AACD,OAfS,CAAV;AAiBA,aAAO28H,gBAAgB,iCAAMK,MAAN;AAAc/X,uBAAe,EAAEv7B;AAA/B,SAAvB;AACD,KApBD,MAoBO;AACL,aAAO66B,WAAP;AACD;AACF,GAxByB,CAA1B;AAyBD;AAEM,SAAStE,iBAAT,CAA2BN,YAA3B,EAAyCX,EAAzC,EAA6C;AAClD,SAAOuxD,mBAAmB,CAAC5wD,YAAD,EAAeX,EAAf,EAAmBgV,KAAK,IAAI;AACpD,QAAIA,KAAK,CAAC4I,SAAV,EAAqB;AACnB,UAAI5I,KAAK,CAAChV,EAAN,KAAaA,EAAjB,EAAqB;AACnB,eAAO,IAAP;AACD,OAFD,MAEO,IAAIgV,KAAK,CAAC/O,eAAN,CAAsBtnI,MAAtB,KAAiC,CAArC,EAAwC;AAC7C,+CACKq2I,KADL;AAEE/O,yBAAe,EAAE,IAFnB;AAGE2X,mBAAS,EAAE,KAHb;AAIEv8G,eAAK,EAAE;AAJT;AAMD,OAPM,MAOA;AACL,YAAIqpE,GAAG,GAAGsqC,KAAK,CAAC/O,eAAN,CAAsB7mI,MAAtB,CAA6B4sB,CAAC,IAAIA,CAAC,CAACg0G,EAAF,KAASA,EAA3C,CAAV;AACA,eAAO2d,gBAAgB,iCAAM3I,KAAN;AAAa/O,yBAAe,EAAEv7B;AAA9B,WAAvB;AACD;AACF,KAdD,MAcO;AACL,aAAO,IAAP;AACD;AACF,GAlByB,CAA1B;AAmBD;AAEM,SAASqnF,gBAAT,CAA0BpxD,YAA1B,EAAwCX,EAAxC,EAA4C;AACjD,SAAOuxD,mBAAmB,CAAC5wD,YAAD,EAAeX,EAAf,EAAmBgV,KAAK,IAAI;AACpD,QAAIA,KAAK,CAAC4I,SAAN,IAAmB5I,KAAK,CAAC4U,QAA7B,EAAuC;AACrC,aAAO5U,KAAP;AACD;;AAED,2CACKA,KADL;AAEE4I,eAAS,EAAE,IAFb;AAGEv8G,WAAK,EAAEhwB,GAAG,CAAC2jI,KAAK,CAACpxI,MAAP,CAAH,KAAsB,CAAtB,GAA0B,IAA1B,GAAiCitL,qBAAqB,CAAC,CAAD,EAAI77C,KAAJ,CAH/D;AAIE/O,qBAAe,EAAE,CAAC6qD,SAAS,CAAC97C,KAAD,EAAQ;AAAEpxI,cAAM,EAAE,CAAV;AAAam6I,kBAAU,EAAE,CAAC;AAA1B,OAAR,CAAV;AAJnB;AAMD,GAXyB,CAA1B;AAYD;AAEM,SAASi0C,uBAAT,CAAiCrxD,YAAjC,EAA+C;AACpD,MAAIqd,MAAM,GAAGrd,YAAY,CAACtsH,IAAb,CAAkB2X,CAAC,IAAI,CAACA,CAAC,CAAC49H,QAA1B,CAAb;AACA5L,QAAM,mCAAQA,MAAR;AAAgBhe,MAAE,EAAEpD,IAAI,CAACgX,MAAL;AAApB,IAAN;AAEA,MAAI9yH,QAAQ,GAAG6/G,YAAY,CAACvhI,MAAb,CAAoB4sB,CAAC,IAAIA,CAAC,CAAC49H,QAA3B,CAAf;AACA,SAAO,CACL5L,MADK,EAEL,GAAGl9H,QAAQ,CAACplB,GAAT,CAAaslB,KAAK,oCAChBA,KADgB;AAEnBg/G,MAAE,EAAEpD,IAAI,CAACgX,MAAL,EAFe;AAGnB4V,aAAS,EAAExL,MAAM,CAAChe;AAHC,IAAlB,CAFE,CAAP;AAQD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1PD,IAAIiyD,iBAAiB,GAAGl4K,mBAAO,CAAC,sEAAD,CAA/B;;AAEO,SAASm4K,SAAT,CAAmBt1D,IAAnB,EAAyB;AAC9B,SAAOA,IAAI,CAAC3kH,OAAL,CAAa,IAAb,EAAmB,EAAnB,CAAP;AACD;AAEM,SAASrN,IAAT,CAAcipD,GAAd,EAAmB;AACxB,SAAOA,GAAG,CAACA,GAAG,CAACl1D,MAAJ,GAAa,CAAd,CAAV;AACD;AAEM,SAASwzL,YAAT,CAAsBj2D,OAAtB,EAA+B;AACpC,SAAO3gI,MAAM,CAACC,MAAP,CAAcggC,KAAd,CAAoB,IAApB,EAA0B,CAAC,EAAD,EAAK,GAAG0gG,OAAR,CAA1B,CAAP;AACD;AAEM,SAASk2D,kBAAT,CAA4Bl2D,OAA5B,EAAqC;AAC1C,QAAM6hC,MAAM,GAAG,EAAf;AACAxiK,QAAM,CAACiS,IAAP,CAAY0uH,OAAZ,EAAqBrxH,OAArB,CAA6B4C,GAAG,IAAI;AAClC,QAAIswJ,MAAM,CAACtwJ,GAAD,CAAV,EAAiB;AACfswJ,YAAM,CAACtwJ,GAAD,CAAN,mCAAmBswJ,MAAM,CAACtwJ,GAAD,CAAzB,GAAmCyuH,OAAO,CAACzuH,GAAD,CAA1C;AACD,KAFD,MAEO;AACLswJ,YAAM,CAACtwJ,GAAD,CAAN,GAAcyuH,OAAO,CAACzuH,GAAD,CAArB;AACD;AACF,GAND;AAOD;AAEM,SAAS4kL,YAAT,CAAsBC,MAAtB,EAA8B;AACnC,SAAO71L,KAAK,CAACkY,SAAN,CAAgBghB,MAAhB,CAAuB6F,KAAvB,CAA6B,EAA7B,EAAiC82J,MAAjC,CAAP;AACD;AAEM,SAASC,YAAT,CAAsBxzL,CAAtB,EAAyBC,CAAzB,EAA4B;AACjC,MAAID,CAAC,KAAKC,CAAV,EAAa;AACX,WAAO,IAAP;AACD;;AAED,MAAIwzL,QAAQ,GAAG,CAAf;AAAA,MACEC,QAAQ,GAAG,CADb;AAAA,MAEEhlL,GAFF;;AAGA,OAAKA,GAAL,IAAYzO,CAAZ,EAAe;AACbyzL,YAAQ;;AACR,QAAI,CAAC1zL,CAAC,CAACsY,cAAF,CAAiB5J,GAAjB,CAAD,IAA0B1O,CAAC,CAAC0O,GAAD,CAAD,KAAWzO,CAAC,CAACyO,GAAD,CAA1C,EAAiD;AAC/C,aAAO,KAAP;AACD;AACF;;AACD,OAAKA,GAAL,IAAY1O,CAAZ,EAAe;AACbyzL,YAAQ;AACT;;AACD,SAAOA,QAAQ,KAAKC,QAApB;AACD;AAEM,SAASjzB,gBAAT,CAA0BkzB,IAA1B,EAAgCC,IAAhC,EAAsC;AAC3C;AACA;AACA,QAAMxrL,IAAI,GAAGurL,IAAI,CAAC1yD,EAAL,GAAU;AAAEA,MAAE,EAAE0yD,IAAI,CAAC1yD;AAAX,GAAV,GAA4B,EAAzC;AACA,QAAMxyH,IAAI,GAAGjS,MAAM,CAACiS,IAAP,CAAYmlL,IAAZ,CAAb;AACA,MAAIC,UAAU,GAAG,KAAjB;;AAEA,OAAK,IAAIp7K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGhK,IAAI,CAAC7O,MAAzB,EAAiC6Y,CAAC,EAAlC,EAAsC;AACpC,QAAI/J,GAAG,GAAGD,IAAI,CAACgK,CAAD,CAAd;;AAEA,QAAIk7K,IAAI,CAACjlL,GAAD,CAAJ,KAAcklL,IAAI,CAACllL,GAAD,CAAtB,EAA6B;AAC3BtG,UAAI,CAACsG,GAAD,CAAJ,GAAYklL,IAAI,CAACllL,GAAD,CAAhB;AACAmlL,gBAAU,GAAG,IAAb;AACD;AACF;;AAED,SAAOA,UAAU,GAAGzrL,IAAH,GAAU,IAA3B;AACD;AAEM,SAASm5I,gBAAT,CAA0BoyC,IAA1B,EAAgCC,IAAhC,EAAsC3xD,MAAtC,EAA8C;AACnD,MAAI9oG,OAAO,GAAG,KAAd;;AACA,OAAK,IAAI1gB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwpH,MAAM,CAACriI,MAA3B,EAAmC6Y,CAAC,EAApC,EAAwC;AACtC,QAAImqB,KAAK,GAAGq/F,MAAM,CAACxpH,CAAD,CAAlB;;AACA,QAAIk7K,IAAI,CAAC/wJ,KAAD,CAAJ,KAAgBgxJ,IAAI,CAAChxJ,KAAD,CAAxB,EAAiC;AAC/BzJ,aAAO,GAAG,IAAV;AACA;AACD;AACF;;AACD,SAAOA,OAAP;AACD;AAEM,SAASo5J,YAAT,CAAsBn+C,OAAtB,EAA+B/0H,KAA/B,EAAsC;AAC3CA,OAAK,GAAG,CAAC,GAAGA,KAAJ,CAAR;;AAEA,MAAI+0H,OAAO,CAAClG,KAAZ,EAAmB;AACjBkG,WAAO,CAAClG,KAAR,CAAcpiI,OAAd,CAAsBnQ,GAAG,IAAI;AAC3B0jB,WAAK,CAAC5gB,IAAN,CAAW9C,GAAX;AACD,KAFD;AAGD;;AAED,MAAIy4I,OAAO,CAAC4M,OAAZ,EAAqB;AACnB5M,WAAO,CAAC4M,OAAR,CAAgBl1I,OAAhB,CAAwB,QAAuB;AAAA,UAApBm1H,EAAoB,QAApBA,EAAoB;AAAA,UAAbgB,MAAa;;AAC7C,YAAM6c,GAAG,GAAGz/H,KAAK,CAACxd,SAAN,CAAgBorB,CAAC,IAAIA,CAAC,CAACg0G,EAAF,KAASA,EAA9B,CAAZ;AACA5hH,WAAK,CAACy/H,GAAD,CAAL,mCACKz/H,KAAK,CAACy/H,GAAD,CADV,GAEK7c,MAFL;AAID,KAND;AAOD;;AAED,MAAImS,OAAO,CAACzK,OAAZ,EAAqB;AACnByK,WAAO,CAACzK,OAAR,CAAgB79H,OAAhB,CAAwBmhB,CAAC,IAAI;AAC3B,YAAM6xH,GAAG,GAAGz/H,KAAK,CAACxd,SAAN,CAAgBskL,EAAE,IAAIl5J,CAAC,CAACg0G,EAAF,KAASklD,EAAE,CAACllD,EAAlC,CAAZ;;AACA,UAAI6d,GAAG,KAAK,CAAC,CAAb,EAAgB;AACdz/H,aAAK,CAACtd,MAAN,CAAa+8I,GAAb,EAAkB,CAAlB;AACD;AACF,KALD;AAMD;;AAED,SAAOz/H,KAAP;AACD;AAEM,SAASmoI,gBAAT,CAA0BvmJ,IAA1B,EAAgC2hC,KAAhC,EAAuC;AAC5C,MAAIysF,GAAG,GAAG,IAAI5hH,GAAJ,EAAV;;AACA,OAAK,IAAIgL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGxX,IAAI,CAACrB,MAAzB,EAAiC6Y,CAAC,EAAlC,EAAsC;AACpC,QAAIqE,IAAI,GAAG7b,IAAI,CAACwX,CAAD,CAAf;AACA,QAAI/J,GAAG,GAAGoO,IAAI,CAAC8lB,KAAD,CAAd;AAEA,QAAIvjB,KAAK,GAAGgwG,GAAG,CAACxzH,GAAJ,CAAQ6S,GAAR,KAAgB,EAA5B;AACA2Q,SAAK,CAAC5gB,IAAN,CAAWqe,IAAX;AAEAuyG,OAAG,CAACjwH,GAAJ,CAAQsP,GAAR,EAAa2Q,KAAb;AACD;;AACD,SAAOgwG,GAAP;AACD;AAEM,SAAS6Q,OAAT,CAAiBj/H,IAAjB,EAAuB2hC,KAAvB,EAA8Bw0H,MAA9B,EAAsC;AAC3C,MAAI/nC,GAAG,GAAG,IAAI5hH,GAAJ,EAAV;;AACA,OAAK,IAAIgL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGxX,IAAI,CAACrB,MAAzB,EAAiC6Y,CAAC,EAAlC,EAAsC;AACpC,QAAIqE,IAAI,GAAG7b,IAAI,CAACwX,CAAD,CAAf;AACA,QAAI/J,GAAG,GAAGoO,IAAI,CAAC8lB,KAAD,CAAd;AACA,QAAIy+G,QAAQ,GAAGhyB,GAAG,CAACxzH,GAAJ,CAAQ6S,GAAR,KAAgB,EAA/B;AACA2gH,OAAG,CAACjwH,GAAJ,CAAQsP,GAAR,EAAa2yI,QAAQ,CAACzqH,MAAT,CAAgB,CAACwgI,MAAM,GAAGA,MAAM,CAACt6I,IAAD,CAAT,GAAkB7b,IAAI,CAACwX,CAAD,CAA7B,CAAhB,CAAb;AACD;;AACD,SAAO42G,GAAP;AACD;AAEM,SAASykE,aAAT,CAAuB7yL,IAAvB,EAA6B2hC,KAA7B,EAAoCw0H,MAApC,EAA4C;AACjD,MAAI/nC,GAAG,GAAG,IAAI5hH,GAAJ,EAAV;;AACA,OAAK,IAAIgL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGxX,IAAI,CAACrB,MAAzB,EAAiC6Y,CAAC,EAAlC,EAAsC;AACpC,QAAIqE,IAAI,GAAG7b,IAAI,CAACwX,CAAD,CAAf;AACA,QAAI/J,GAAG,GAAGoO,IAAI,CAAC8lB,KAAD,CAAd;;AACA,QAAIysF,GAAG,CAACz9G,GAAJ,CAAQlD,GAAR,CAAJ,EAAkB;AAChB,YAAM,IAAItQ,KAAJ,CAAU,0CAA0CsQ,GAApD,CAAN;AACD;;AACD2gH,OAAG,CAACjwH,GAAJ,CAAQsP,GAAR,EAAa0oJ,MAAM,GAAGA,MAAM,CAACt6I,IAAD,CAAT,GAAkB7b,IAAI,CAACwX,CAAD,CAAzC;AACD;;AACD,SAAO42G,GAAP;AACD,C,CAED;AACA;AACA;AACA;;AACA,SAAS0kE,UAAT,CAAoB9yL,IAApB,EAA0B;AACxB,MAAIouH,GAAG,GAAG,IAAI5hH,GAAJ,EAAV;;AACA,OAAK,IAAIgL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGxX,IAAI,CAACrB,MAAzB,EAAiC6Y,CAAC,EAAlC,EAAsC;AACpC,QAAIqE,IAAI,GAAG7b,IAAI,CAACwX,CAAD,CAAf;AACA42G,OAAG,CAACjwH,GAAJ,CAAQ0d,IAAI,CAACmkH,EAAb,EAAiBnkH,IAAjB;AACD;;AACD,SAAOuyG,GAAP;AACD;;AAEM,SAASujE,SAAT,CAAmBvzK,KAAnB,EAA0B20K,QAA1B,EAAoC;AACzC,MAAIlxD,OAAO,GAAGixD,UAAU,CAAC10K,KAAD,CAAxB;;AACA,MAAI40K,UAAU,GAAGF,UAAU,CAACC,QAAD,CAA3B;;AACA,MAAI9lD,KAAK,GAAG,EAAZ;AACA,MAAI8S,OAAO,GAAG,EAAd;AAEA,MAAIrX,OAAO,GAAGtqH,KAAK,CAChBhf,MADW,CACJyc,IAAI,IAAI,CAACm3K,UAAU,CAACriL,GAAX,CAAekL,IAAI,CAACmkH,EAApB,CADL,EAEXtkI,GAFW,CAEPmgB,IAAI,KAAK;AAAEmkH,MAAE,EAAEnkH,IAAI,CAACmkH;AAAX,GAAL,CAFG,CAAd;AAIA+yD,UAAQ,CAACloL,OAAT,CAAiBooL,OAAO,IAAI;AAC1B,QAAIp3K,IAAI,GAAGgmH,OAAO,CAACjnI,GAAR,CAAYq4L,OAAO,CAACjzD,EAApB,CAAX;;AACA,QAAI,CAACnkH,IAAL,EAAW;AACToxH,WAAK,CAACzvI,IAAN,CAAWy1L,OAAX;AACD,KAFD,MAEO;AACL,YAAM9/C,OAAO,GAAGqsB,gBAAgB,CAAC3jJ,IAAD,EAAOo3K,OAAP,CAAhC;;AACA,UAAI9/C,OAAJ,EAAa;AACX4M,eAAO,CAACviJ,IAAR,CAAa21I,OAAb;AACD;AACF;AACF,GAVD;AAYA,SAAO;AAAElG,SAAF;AAAS8S,WAAT;AAAkBrX;AAAlB,GAAP;AACD;AAEM,SAASy+B,SAAT,CAAmBnnK,IAAnB,EAAyB;AAC9B,MAAIouH,GAAG,GAAG,EAAV;;AACA,OAAK,IAAI52G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGxX,IAAI,CAACrB,MAAzB,EAAiC6Y,CAAC,EAAlC,EAAsC;AACpC,QAAIqE,IAAI,GAAG7b,IAAI,CAACwX,CAAD,CAAf;AACA42G,OAAG,CAACvyG,IAAI,CAACmkH,EAAN,CAAH,GAAenkH,IAAf;AACD;;AACD,SAAOuyG,GAAP;AACD;AAEM,SAAS8kE,gBAAT,CAA0BC,SAA1B,EAAqCC,SAArC,EAAgD;AACrD,MAAIl7J,OAAO,GAAGsnI,gBAAgB,CAAC2zB,SAAD,EAAYC,SAAZ,CAA9B;;AACA,MAAIl7J,OAAO,KAAK,IAAhB,EAAsB;AACpB7E,WAAO,CAACsrE,GAAR,CAAYzmE,OAAZ;AACD;;AACD,SAAOA,OAAO,KAAK,IAAnB;AACD;AAEM,SAASmtJ,KAAT,CAAe3pL,GAAf,EAAoB8R,IAApB,EAA0BqO,IAA1B,EAAgC;AACrC,OAAK,IAAIrE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGhK,IAAI,CAAC7O,MAAzB,EAAiC6Y,CAAC,EAAlC,EAAsC;AACpC,QAAI/J,GAAG,GAAGD,IAAI,CAACgK,CAAD,CAAd;;AAEA,QAAIA,CAAC,KAAKhK,IAAI,CAAC7O,MAAL,GAAc,CAAxB,EAA2B;AACzBjD,SAAG,CAACyC,GAAJ,CAAQsP,GAAR,EAAaoO,IAAb;AACD,KAFD,MAEO;AACL,UAAI,CAACngB,GAAG,CAACiV,GAAJ,CAAQlD,GAAR,CAAL,EAAmB;AACjB/R,WAAG,CAACyC,GAAJ,CAAQsP,GAAR,EAAa,IAAIjB,GAAJ,EAAb;AACD;;AAED9Q,SAAG,GAAGA,GAAG,CAACd,GAAJ,CAAQ6S,GAAR,CAAN;AACD;AACF;AACF;AAEM,SAAS+3K,KAAT,CAAe9pL,GAAf,EAAoB8R,IAApB,EAA0B;AAC/B,MAAIqO,IAAI,GAAGngB,GAAX;;AACA,OAAK,IAAI8b,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGhK,IAAI,CAAC7O,MAAzB,EAAiC6Y,CAAC,EAAlC,EAAsC;AACpCqE,QAAI,GAAGA,IAAI,CAACjhB,GAAL,CAAS4S,IAAI,CAACgK,CAAD,CAAb,CAAP;;AAEA,QAAIqE,IAAI,IAAI,IAAZ,EAAkB;AAChB,aAAOA,IAAP;AACD;AACF;;AACD,SAAOA,IAAP;AACD,C,CAED;;AACO,SAASw3K,UAAT,CAAoBv2K,GAApB,EAAyB;AAC9B,QAAMA,GAAN;AACD;AAEM,SAAS2+H,YAAT,CAAsB63C,IAAtB,EAA4BC,IAA5B,EAAkC;AACvC,MAAIC,QAAQ,GAAG,IAAIxgL,GAAJ,CAAQsgL,IAAR,CAAf;AACA,MAAI7T,IAAI,GAAG8T,IAAI,CAAC9mL,MAAL,EAAX;AACA,MAAIvU,KAAK,GAAGunL,IAAI,CAACxnL,IAAL,EAAZ;;AACA,SAAO,CAACC,KAAK,CAACuG,IAAd,EAAoB;AAClB+0L,YAAQ,CAAC94L,GAAT,CAAaxC,KAAK,CAACA,KAAnB;AACAA,SAAK,GAAGunL,IAAI,CAACxnL,IAAL,EAAR;AACD;;AACD,SAAOu7L,QAAP;AACD;AAEM,SAASC,UAAT,CAAoB73J,GAApB,EAAyB;AAC9B,SAAOA,GAAG,CAAC,CAAD,CAAH,CAAOhT,WAAP,KAAuBgT,GAAG,CAACj7B,KAAJ,CAAU,CAAV,CAA9B;AACD;AAEM,IAAI+yL,aAAa,GAAG,CACzB;AAAEx7L,OAAK,EAAE,WAAT;AAAsBy7L,OAAK,EAAE;AAA7B,CADyB,EAEzB;AAAEz7L,OAAK,EAAE,WAAT;AAAsBy7L,OAAK,EAAE;AAA7B,CAFyB,EAGzB;AAAEz7L,OAAK,EAAE,aAAT;AAAwBy7L,OAAK,EAAE;AAA/B,CAHyB,CAApB;AAMP,IAAIC,YAAY,GAAG;AACjB17L,OAAK,EAAE,IADU;AAEjB+jD,WAAS,EAAE,IAFM;AAGjB7jC,OAAK,EAAE;AAHU,CAAnB;AAMO,SAASy7K,eAAT,CAAyBt9K,MAAzB,EAAiC;AACtC,MAAIm0B,MAAJ,EAAYtyB,KAAZ,EAAmB07K,SAAnB;;AAEA,UAAQv9K,MAAR;AACE,SAAK,aAAL;AACEm0B,YAAM,GAAG,OAAT;AACAtyB,WAAK,GAAG,WAAR;AACA07K,eAAS,GAAG,GAAZ;AACA;;AACF,SAAK,WAAL;AACEppJ,YAAM,GAAG,OAAT;AACAtyB,WAAK,GAAG,WAAR;AACA07K,eAAS,GAAG,GAAZ;AACA;;AACF,SAAK,WAAL;AACA;AACEppJ,YAAM,GAAG,OAAT;AACAtyB,WAAK,GAAG,WAAR;AACA07K,eAAS,GAAG,GAAZ;AAfJ;;AAkBAF,cAAY,GAAG;AACb17L,SAAK,EAAEqe,MADM;AAEbu9K,aAFa;AAGb;AACA;AACA73I,aAAS,EAAE;AACT1lC,YAAM,EAAEK,MAAM,IACZq7K,iBAAiB,CAAC17K,MAAlB,CAAyBK,MAAzB,EAAiC;AAAE8zB,cAAF;AAAUn0B,cAAM,EAAE;AAAlB,OAAjC;AAFO,KALE;AASb6B;AATa,GAAf;AAWD;AAEM,SAAS27K,eAAT,GAA2B;AAChC,SAAOH,YAAP;AACD;AAEDC,eAAe,CAAC,UAAD,CAAf;AAEO,SAASG,eAAT,CAAyB97L,KAAzB,EAAgC;AACrC,SAAOswI,eAAe,CAACyrD,iBAAiB,CAAC/7L,KAAD,CAAjB,IAA4B,CAA7B,CAAtB;AACD;AAEM,SAASg8L,gBAAT,CAA0Bh8L,KAA1B,EAAiC;AACtC,SAAO61K,eAAe,CAAC71K,KAAD,CAAf,IAA0B,CAAjC;AACD;AAEM,SAASi8L,iBAAT,CAA2Bp8J,CAA3B,EAA8B;AACnC;AACA,SAAO67J,YAAY,CAAC33I,SAAb,CAAuB1lC,MAAvB,CAA8BwhB,CAAC,GAAG,GAAlC,CAAP;AACD;AAEM,SAASq8J,gBAAT,CAA0Br8J,CAA1B,EAA6B;AAClC,SAAO67J,YAAY,CAAC33I,SAAb,CAAuB1lC,MAAvB,CAA8BwhB,CAA9B,CAAP;AACD;AAEM,SAASs8J,sBAAT,CAAgCt8J,CAAhC,EAAmCjZ,IAAnC,EAAyC;AAC9C,SAAOmzK,iBAAiB,CAAC17K,MAAlB,CAAyBwhB,CAAzB,EAA4B;AAAEjZ;AAAF,GAA5B,CAAP;AACD;AAEM,SAAS+wK,gBAAT,CAA0Bj0J,GAA1B,EAA+B;AACpC,MAAIh4B,MAAM,GAAG2U,UAAU,CACrBqjB,GAAG,CAAC3jB,OAAJ,CAAY27K,YAAY,CAACx7K,KAAzB,EAAgC,EAAhC,EAAoCH,OAApC,CAA4C27K,YAAY,CAACE,SAAzD,EAAoE,GAApE,CADqB,CAAvB;AAGA,SAAO1tL,KAAK,CAACxC,MAAD,CAAL,GAAgB,IAAhB,GAAuBA,MAA9B;AACD;AAEM,SAASqwL,iBAAT,CAA2Br4J,GAA3B,EAAgC;AACrC,MAAIh4B,MAAM,GAAGisL,gBAAgB,CAACj0J,GAAD,CAA7B;AACA,SAAOh4B,MAAM,GAAGw/H,eAAe,CAACx/H,MAAD,CAAlB,GAA6B,IAA1C;AACD;AAEM,SAASmqK,eAAT,CAAyBnyI,GAAzB,EAA8B;AACnC,MAAIh4B,MAAM,GAAGmV,QAAQ,CAAC6iB,GAAG,CAAC3jB,OAAJ,CAAY,YAAZ,EAA0B,EAA1B,CAAD,CAArB;;AACA,MAAI,CAAC7R,KAAK,CAACxC,MAAD,CAAV,EAAoB;AAClB,WAAOA,MAAP;AACD;;AACD,SAAO,IAAP;AACD;AAEM,SAASw/H,eAAT,CAAyBrrG,CAAzB,EAA4B;AACjC,SAAO3wB,IAAI,CAACwQ,KAAL,CAAWmgB,CAAC,GAAG,GAAf,CAAP;AACD;AAEM,SAASywG,eAAT,CAAyBzwG,CAAzB,EAA4B;AACjC,SAAOxf,UAAU,CAAC,CAACwf,CAAC,GAAG,GAAL,EAAUvf,OAAV,CAAkB,CAAlB,CAAD,CAAjB;AACD,C,CAED;AACA;AACA;AACA;;AACO,SAAS2+H,kBAAT,CAA4BvzI,MAA5B,EAAoC;AACzC,WAAS00I,UAAT,CAAoBh2G,CAApB,EAAuB;AACrB,WAAOl8B,KAAK,CAACk8B,CAAD,CAAL,GAAW,IAAX,GAAkBA,CAAzB;AACD;;AAED,MAAIuN,CAAC,GAAGjsC,MAAM,CAACkU,KAAP,CAAa,aAAb,CAAR;;AACA,MAAI,CAAC+3B,CAAD,IAAMA,CAAC,CAACnyC,KAAF,KAAY,CAAtB,EAAyB;AACvB,WAAO46I,UAAU,CAAC//H,UAAU,CAAC3U,MAAD,CAAX,CAAjB;AACD;;AAED,MAAIivJ,IAAI,GAAGjvJ,MAAM,CAACjD,KAAP,CAAa,CAAb,EAAgBkvC,CAAC,CAACnyC,KAAlB,CAAX;AACA,MAAIo1J,KAAK,GAAGlvJ,MAAM,CAACjD,KAAP,CAAakvC,CAAC,CAACnyC,KAAF,GAAU,CAAvB,CAAZ;AAEA,SAAO46I,UAAU,CAAC//H,UAAU,CAACs6I,IAAI,CAAC56I,OAAL,CAAa,UAAb,EAAyB,EAAzB,IAA+B,GAA/B,GAAqC66I,KAAtC,CAAX,CAAjB;AACD;AAEM,SAASwhC,cAAT,CAAwB14J,GAAxB,EAA6B;AAClC,SAAO7iB,QAAQ,CACb,MACE6iB,GAAG,CACA5iB,KADH,CACS,GADT,EAEGtd,GAFH,CAEO2K,CAAC,IAAI;AACR,WAAO,CAAC,QAAQA,CAAC,CAAC4R,OAAF,CAAU,SAAV,EAAqB,EAArB,CAAT,EAAmCtX,KAAnC,CAAyC,CAAC,CAA1C,CAAP;AACD,GAJH,EAKG+Y,IALH,CAKQ,EALR,CAFW,CAAf;AASD,C;;;;;;;;;;;AC/XD,2C;;;;;;;;;;;ACAA,mC;;;;;;;;;;;ACAA,+B;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,wC;;;;;;;;;;;ACAA,iC;;;;;;;;;;;ACAA,mC;;;;;;;;;;;ACAA,2C;;;;;;;;;;;ACAA,iC;;;;;;;;;;;ACAA,iC","file":"bundle.api.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded chunks\n \t// \"0\" means \"already loaded\"\n \tvar installedChunks = {\n \t\t\"main\": 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// uncaught error handler for webpack runtime\n \t__webpack_require__.oe = function(err) {\n \t\tprocess.nextTick(function() {\n \t\t\tthrow err; // catch this error by using import().catch()\n \t\t});\n \t};\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./packages/loot-core/src/server/main.js\");\n","import {\n ArgumentError,\n getDifferenceBetweenWeekdays,\n DateAdapterBase as DateAdapterBase$1,\n dateInputToDateTime,\n dateInputToDateAdapter,\n normalizeDateTimeTimezone as normalizeDateTimeTimezone$1,\n InfiniteLoopError,\n dateTimeSortComparer,\n cloneRuleOptions,\n normalizeRuleOptions,\n RecurrenceRulesIterator,\n recurrenceRulesReducer,\n DateTime as DateTime$1,\n} from '@rschedule/core';\n\nclass OccurrenceGenerator {\n constructor(args = {}) {\n this.timezone = args.timezone !== undefined ? args.timezone : null;\n this.maxDuration = args.maxDuration || 0;\n }\n /** Returns the first occurrence or, if there are no occurrences, null. */\n get firstDate() {\n if (this._firstDate !== undefined) return this._firstDate;\n const start = this._run().next().value;\n this._firstDate = start ? this.dateAdapter.fromDateTime(start) : null;\n return this._firstDate;\n }\n /** If generator is infinite, returns `null`. Otherwise returns the end date */\n get lastDate() {\n if (this._lastDate !== undefined) return this._lastDate;\n if (this.isInfinite) {\n this._lastDate = null;\n return null;\n }\n const end = this._run({ reverse: true }).next().value;\n this._lastDate = end ? this.dateAdapter.fromDateTime(end) : null;\n return this._lastDate;\n }\n pipe(...operators) {\n return operators.reduce((prev, curr) => curr({ base: prev, timezone: this.timezone }), this);\n }\n /**\n * Processes the object's rules/dates and returns an iterable for the occurrences.\n *\n * Options object:\n * - `start` the date to begin iteration on\n * - `end` the date to end iteration on\n * - `take` the max number of dates to take before ending iteration\n * - `reverse` whether to iterate in reverse or not\n *\n * Examples:\n *\n * ```\n * const iterator = schedule.occurrences({ start: new Date(), take: 5 });\n \n * for (const date of iterator) {\n * // do stuff\n * }\n \n * iterator.toArray() // returns Date array\n * iterator.next().value // returns next Date\n * ```\n *\n */\n occurrences(args = {}) {\n return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n }\n /**\n * Iterates over the object's occurrences and bundles them into collections\n * with a specified granularity (default is `\"YEARLY\"`). Make sure to\n * read about each option & combination of options below.\n *\n * Options object:\n * - start?: DateAdapter\n * - end?: DateAdapter\n * - take?: number\n * - reverse?: NOT SUPPORTED\n * - granularity?: CollectionsGranularity\n * - weekStart?: DateAdapter.Weekday\n * - skipEmptyPeriods?: boolean\n *\n * Returned `Collection` object:\n *\n * - `dates` property containing an array of DateAdapter objects.\n * - `granularity` property containing the granularity.\n * - `CollectionsGranularity` === `RuleOptions.Frequency`.\n * - default is `\"YEARLY\"`\n * - `periodStart` property containing a DateAdapter equal to the period's\n * start time.\n * - `periodEnd` property containing a DateAdapter equal to the period's\n * end time.\n *\n * #### Details:\n *\n * `collections()` always returns full periods. This means that the `start` argument is\n * transformed to be the start of whatever period the `start` argument is in, and the\n * `end` argument is transformed to be the end of whatever period the `end` argument is\n * in.\n *\n * - Example: with granularity `\"YEARLY\"`, the `start` argument will be transformed to be the\n * start of the year passed in the `start` argument, and the `end` argument will be transformed\n * to be the end of the year passed in the `end` argument.\n *\n * By default, the `periodStart` value of `Collection` objects produced by this method increments linearly.\n * This means the returned `Collection#dates` property may have length 0. This can be changed by\n * passing the `skipEmptyPeriods: true` option, in which case the `periodStart` from one collection to the\n * next can \"jump\".\n *\n * - Example 1: if your object's first occurrence is 2019/2/1 (February 1st) and you call\n * `collection({skipEmptyPeriods: true, granularity: 'DAILY', start: new Date(2019,0,1)})`\n * (so starting on January 1st), the first Collection produced will have a `periodStart` in February.\n *\n * - Example 2: if your object's first occurrence is 2019/2/1 (February 1st) and you call\n * `collection({granularity: 'DAILY', start: new Date(2019,0,1)})`\n * (so starting on January 1st), the first collection produced will have a `Collection#periodStart`\n * of January 1st and have `Collection#dates === []`. Similarly, the next 30 collections produced\n * (Jan 2nd - 31st) will all contain an empty array for the `dates` property. Then the February 1st\n * `Collection` will contain dates.\n *\n * When giving a `take` argument to `collections()`, you are specifying\n * the number of `Collection` objects to return (rather than occurrences).\n *\n * When choosing a granularity of `\"WEEKLY\"`, the `weekStart` option is required.\n *\n * When choosing a granularity of `\"MONTHLY\"`:\n *\n * - If the `weekStart` option *is not* present, will generate collections with\n * the `periodStart` and `periodEnd` at the beginning and end of each month.\n *\n * - If the `weekStart` option *is* present, will generate collections with the\n * `periodStart` equal to the start of the first week of the month, and the\n * `periodEnd` equal to the end of the last week of the month. This behavior could be\n * desired when rendering opportunities in a calendar view, where the calendar renders\n * full weeks (which may result in the calendar displaying dates in the\n * previous or next months).\n *\n */\n collections(args = {}) {\n return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n }\n /**\n * Returns true if an occurrence starts on or between the provided start/end\n * datetimes. If the `excludeEnds` option is provided, then occurrences\n * equal to the start/end times are ignored.\n *\n * If the occurrence generator has a duration, and `excludeEnds !== true`,\n * and a `maxDuration` argument is supplied (either in the constructor or\n * here), then any occurrence that's time overlaps with the start/end times\n * return true.\n */\n occursBetween(startInput, endInput, options = {}) {\n const start = this.normalizeDateInput(startInput);\n const end = this.normalizeDateInput(endInput);\n if (this.hasDuration && !options.excludeEnds) {\n const maxDuration = this.getMaxDuration('occursBetween', options);\n const iterator = this._run({\n start: start.subtract(maxDuration, 'millisecond'),\n end,\n reverse: true,\n });\n for (const day of iterator) {\n if (day.end.isBefore(start)) continue;\n return true;\n }\n return false;\n }\n for (const day of this._run({ start, end })) {\n if (options.excludeEnds) {\n if (day.isEqual(start)) {\n continue;\n }\n if (day.isEqual(end)) {\n break;\n }\n }\n return true;\n }\n return false;\n }\n occursOn(rawArgs) {\n const args = this.normalizeOccursOnArgs(rawArgs);\n if (args.weekday) {\n if (this.isInfinite && !args.before) {\n throw new ArgumentError(\n 'When calling `occursOn()` with a `weekday` argument ' +\n 'and an occurrence object that has infinite occurrences, ' +\n 'you must include a `before` argument as well.',\n );\n }\n const start = args.after && (args.excludeEnds ? args.after.add(1, 'day') : args.after);\n const end = args.before && (args.excludeEnds ? args.before.subtract(1, 'day') : args.before);\n const iterator = this._run({ start, end });\n let date = iterator.next().value;\n if (!date) return false;\n while (date) {\n if (date.get('weekday') === args.weekday) {\n return true;\n }\n date = iterator.next({\n skipToDate: date\n .add(getDifferenceBetweenWeekdays(date.get('weekday'), args.weekday), 'day')\n .granularity('day'),\n }).value;\n }\n return false;\n }\n if (!args.date) {\n throw new ArgumentError(\n `\"occursOn()\" must be called with either a \"date\" or \"weekday\" argument`,\n );\n }\n if (this.hasDuration) {\n const maxDuration = this.getMaxDuration('occursOn', args);\n const iterator = this._run({\n start: args.date.subtract(maxDuration, 'millisecond'),\n end: args.date,\n });\n for (const date of iterator) {\n if (date.end.isBefore(args.date)) continue;\n if (date.isAfter(args.date)) return false;\n return true;\n }\n return false;\n }\n for (const day of this._run({ start: args.date, end: args.date })) {\n return !!day;\n }\n return false;\n }\n /**\n * Returns true if an occurrence starts after the provided datetime.\n * If the `excludeStart` option is provided, then occurrences\n * equal to the provided datetime are ignored.\n *\n * If the occurrence generator has a duration, and `excludeStart !== true`,\n * and a `maxDuration` argument is supplied (either in the constructor or\n * here), then any occurrence that's end time is after/equal to the provided\n * datetime return true.\n */\n occursAfter(date, options = {}) {\n const adapter = this.normalizeDateInput(date);\n if (this.hasDuration && !options.excludeStart) {\n const maxDuration = this.getMaxDuration('occursAfter', options);\n const iterator = this._run({\n start: adapter.subtract(maxDuration, 'millisecond'),\n });\n for (const date of iterator) {\n if (date.end.isBefore(adapter)) continue;\n return true;\n }\n return false;\n }\n for (const day of this._run({ start: adapter })) {\n if (options.excludeStart && day.isEqual(adapter)) {\n continue;\n }\n return true;\n }\n return false;\n }\n /**\n * Returns true if an occurrence starts before the provided datetime.\n * If the `excludeStart` option is provided, then occurrences\n * equal to the provided datetime are ignored.\n *\n * If the occurrence generator has a duration, and `excludeStart` is\n * also provided, then this will only return true if an occurrence\n * both starts and ends before the provided datetime.\n */\n occursBefore(date, options = {}) {\n const adapter = this.normalizeDateInput(date);\n if (this.hasDuration && options.excludeStart) {\n for (const day of this._run({ end: adapter, reverse: true })) {\n if (day.end.isAfterOrEqual(adapter)) continue;\n return true;\n }\n return false;\n }\n for (const day of this._run({ end: adapter, reverse: true })) {\n if (options.excludeStart && day.isEqual(adapter)) {\n continue;\n }\n return true;\n }\n return false;\n }\n get dateAdapter() {\n return DateAdapterBase$1.adapter;\n }\n normalizeOccurrencesArgs(rawArgs) {\n return Object.assign(Object.assign({}, rawArgs), {\n start: this.normalizeDateInput(rawArgs.start),\n end: this.normalizeDateInput(rawArgs.end),\n });\n }\n normalizeCollectionsArgs(rawArgs) {\n if (rawArgs.reverse !== undefined) {\n throw new ArgumentError(\n '`collections()` does not support the `reverse` option at this time.',\n );\n }\n return Object.assign(Object.assign({}, rawArgs), {\n start: this.normalizeDateInput(rawArgs.start),\n end: this.normalizeDateInput(rawArgs.end),\n });\n }\n normalizeOccursOnArgs(rawArgs = {}) {\n return Object.assign(Object.assign({}, rawArgs), {\n date: this.normalizeDateInput(rawArgs.date),\n after: this.normalizeDateInput(rawArgs.after),\n before: this.normalizeDateInput(rawArgs.before),\n excludeDates:\n rawArgs.excludeDates && rawArgs.excludeDates.map(date => this.normalizeDateInput(date)),\n });\n }\n normalizeRunArgs(args) {\n return Object.assign(Object.assign({}, args), {\n start: this.normalizeDateInput(args.start),\n end: this.normalizeDateInput(args.end),\n });\n }\n normalizeDateInput(date) {\n return date ? dateInputToDateTime(date, this.timezone) : undefined;\n }\n normalizeDateInputToAdapter(date) {\n if (!date) return;\n return dateInputToDateAdapter(date);\n }\n normalizeRunOutput(date) {\n return normalizeDateTimeTimezone$1(date, this.timezone);\n }\n getMaxDuration(method, options) {\n const maxDuration = options.maxDuration || this.maxDuration;\n if (!Number.isInteger(maxDuration)) {\n throw new ArgumentError(\n `When an occurrence generator ` +\n `has a duration, a 'maxDuration' argument must be supplied ` +\n `to ${method}().`,\n );\n }\n return maxDuration;\n }\n}\nclass OccurrenceIterator {\n constructor(iterable, args) {\n this.iterable = iterable;\n this.args = args;\n // Need to assert the return type of these methods to prevent typescript from\n // incorrectly reducing them to `DateAdapterBase & { generators: G }`.\n this[Symbol.iterator] = () => this.occurrenceIterator();\n this.iterator = iterable._run(args);\n this.isInfinite = iterable.isInfinite;\n }\n next(args) {\n return this.occurrenceIterator(args).next();\n }\n toArray() {\n if (this.args.end || this.args.take || !this.isInfinite) {\n return Array.from(this.occurrenceIterator());\n }\n throw new InfiniteLoopError(\n 'OccurrenceIterator#toArray() can only be called if the iterator ' +\n 'is not infinite, or you provide and `end` argument, or you provide ' +\n 'a `take` argument.',\n );\n }\n *occurrenceIterator(rawArgs) {\n let args = this.normalizeRunArgs(rawArgs);\n let date = this.iterator.next(args).value;\n while (date) {\n const yieldArgs = yield this.normalizeDateOutput(date);\n args = this.normalizeRunArgs(yieldArgs);\n date = this.iterator.next(args).value;\n }\n return undefined;\n }\n normalizeRunArgs(args) {\n return {\n skipToDate: this.normalizeDateInput(args && args.skipToDate),\n };\n }\n normalizeDateInput(date) {\n return date ? dateInputToDateTime(date, this.iterable.timezone) : undefined;\n }\n normalizeDateOutput(date) {\n if (!date) return;\n return date ? DateAdapterBase$1.adapter.fromDateTime(date) : undefined;\n }\n}\nclass Collection {\n constructor(dates = [], granularity, periodStart, periodEnd) {\n this.dates = dates;\n this.granularity = granularity;\n this.periodStart = periodStart;\n this.periodEnd = periodEnd;\n }\n}\nclass CollectionIterator {\n constructor(iterable, args) {\n this.iterable = iterable;\n this.args = args;\n this.granularity = 'year';\n this[Symbol.iterator] = () => this.iterator;\n if (args.granularity) {\n this.granularity = args.granularity;\n if (this.granularity === 'week' && !args.weekStart) {\n throw new Error('\"week\" granularity requires `weekStart` arg');\n }\n }\n if (args.weekStart) {\n this.weekStart = args.weekStart;\n }\n if (args.reverse) {\n throw new Error(\n '`OccurrenceGenerator#collections()` does not support iterating in reverse. ' +\n 'Though `OccurrenceGenerator#occurrences()` does support iterating in reverse.',\n );\n }\n // Set the end arg, if present, to the end of the period.\n this.args = Object.assign(Object.assign({}, args), {\n start: args.start || iterable._run().next().value,\n end: args.end && this.getPeriod(args.end).end,\n });\n this.startDate =\n (this.args.start && this.normalizeDateOutput(this.getPeriod(this.args.start).start)) || null;\n this.iterator = this.collectionIterator();\n }\n next() {\n return this.iterator.next();\n }\n /**\n * While `next()` and `[Symbol.iterator]` both share state,\n * `toArray()` does not share state and always returns the whole\n * collections array.\n */\n toArray() {\n if (this.args.end || this.args.take || !this.iterable.isInfinite) {\n const collections = [];\n for (const collection of this.collectionIterator()) {\n collections.push(collection);\n }\n return collections;\n }\n throw new InfiniteLoopError(\n 'CollectionIterator#toArray() can only be called if the iterator ' +\n 'is not infinite, or you provide and `end` argument, or you provide ' +\n 'a `take` argument.',\n );\n }\n normalizeDateOutput(date) {\n if (!date) return;\n return DateAdapterBase$1.adapter.fromDateTime(date);\n }\n *collectionIterator() {\n if (!this.startDate) return;\n let iterator = this.occurrenceIterator();\n let date = iterator.next().value;\n if (!date) return;\n // `period` === `periodStart` unless the granularity\n // is `MONTHLY` and a `weekStart` param was provided. In this case,\n // period holds a date === the first of the current month while\n // periodStart holds a date === the beginning of the first week of the month\n // (which might be in the the previous month). Read the\n // `OccurrenceGenerator#collections()` description for more info.\n let period = this.getPeriod(this.args.start);\n let dates = [];\n let index = 0;\n while (date && (this.args.take === undefined || this.args.take > index)) {\n while (date && date.isBeforeOrEqual(period.end)) {\n dates.push(date);\n date = iterator.next().value;\n }\n yield new Collection(\n dates.map(date => this.normalizeDateOutput(date)),\n this.granularity,\n this.normalizeDateOutput(period.start),\n this.normalizeDateOutput(period.end),\n );\n if (!date) return;\n dates = [];\n period = !this.args.skipEmptyPeriods\n ? this.getPeriod(this.incrementPeriod(period.period))\n : this.getPeriod(date);\n // With these args, periods may overlap and the same date may show up\n // in two periods. Because of this, we need to reset the iterator\n // (otherwise it won't return a date it has already returned).\n if (this.granularity === 'month' && this.weekStart) {\n iterator = this.iterable._run({\n start: period.start,\n end: this.args.end,\n });\n date = iterator.next().value;\n }\n index++;\n }\n }\n getPeriod(date) {\n let start;\n let end;\n let period;\n if (this.granularity === 'month' && this.weekStart) {\n start = date.granularity('month').granularity('week', { weekStart: this.weekStart });\n end = date.endGranularity('month').endGranularity('week', { weekStart: this.weekStart });\n period = date.granularity('month');\n } else {\n start = date.granularity(this.granularity, { weekStart: this.weekStart });\n end = date.endGranularity(this.granularity, { weekStart: this.weekStart });\n period = start;\n }\n return { start, end, period };\n }\n incrementPeriod(date) {\n return date.add(1, this.granularity);\n }\n occurrenceIterator() {\n let start = this.args.start || this.iterable._run().next().value;\n if (!start) return this.iterable._run(this.args);\n start = this.getPeriod(start).start;\n return this.iterable._run({\n start,\n end: this.args.end,\n });\n }\n}\nclass Operator extends OccurrenceGenerator {\n constructor(streams, config) {\n super(config);\n this.streams = streams;\n this.config = config;\n this.timezone = config.timezone;\n this.streams = streams.map(stream =>\n stream instanceof Operator ? stream : stream.set('timezone', this.timezone),\n );\n this.isInfinite = this.calculateIsInfinite();\n this.hasDuration = this.calculateHasDuration();\n }\n normalizeDateInput(date) {\n if (!date) return;\n return dateInputToDateTime(date, this.timezone);\n }\n normalizeRunOutput(date) {\n return normalizeDateTimeTimezone$1(date, this.timezone);\n }\n}\n\n/**\n * Simple class that lets us access the `value`, `runArgs`, and `done`\n * status of an OccurrenceGenerator iterator\n */\nclass IterableWrapper {\n constructor(generator, runArgs) {\n this.runArgs = runArgs;\n this.stream = generator._run(this.runArgs);\n this.next();\n }\n next(args) {\n const { done, value } = this.stream.next(args);\n this.done = typeof done === 'boolean' ? done : true;\n this.value = value;\n return { done, value };\n }\n}\nfunction processYieldArgs(streams, options = {}, yieldArgs = {}) {\n if (!yieldArgs.skipToDate || streams.length === 0) return;\n // check for invalid `skipToDate` option\n if (\n options.reverse\n ? streams.every(s => s.value.isBeforeOrEqual(yieldArgs.skipToDate))\n : streams.every(s => s.value.isAfterOrEqual(yieldArgs.skipToDate))\n ) {\n throw new Error(\n 'A provided `skipToDate` option must be greater than the last yielded date ' +\n '(or smaller, in the case of reverse iteration)',\n );\n }\n for (const stream of streams) {\n if (stream.done) continue; // no point in calling `next()`\n if (\n options.reverse\n ? stream.value.isBeforeOrEqual(yieldArgs.skipToDate)\n : stream.value.isAfterOrEqual(yieldArgs.skipToDate)\n ) {\n // This can happen there are two streams and one stream starts after the other finishes.\n // Or, when iterating in reverse, when one stream ends before the other starts.\n // In this case we don't want to call `next()` because it will throw an error.\n // In both of these cases, calling `next()` won't do anything anyway.\n continue;\n }\n stream.next(yieldArgs);\n }\n}\n/** sorts ascending with completed iterables at the end */\nfunction streamsComparer(a, b) {\n if (a.done && b.done) return 0;\n if (a.done) return 1;\n if (b.done) return -1;\n if (a.value.isAfter(b.value)) return 1;\n return -1;\n}\n/** sorts descending with completed iterables at the start */\nfunction streamsReverseComparer(a, b) {\n if (a.done && b.done) return 0;\n if (a.done) return -1;\n if (b.done) return 1;\n if (a.value.isAfter(b.value)) return -1;\n return 1;\n}\nfunction selectNextIterable(streams, options = {}, yieldArgs = {}) {\n processYieldArgs(streams, options, yieldArgs);\n return streams\n .sort(options.reverse ? streamsReverseComparer : streamsComparer)\n .filter(s => !s.done)\n .shift();\n}\nfunction selectLastIterable(streams, options = {}, yieldArgs = {}) {\n processYieldArgs(streams, options, yieldArgs);\n return streams\n .sort(options.reverse ? streamsReverseComparer : streamsComparer)\n .filter(s => !s.done)\n .pop();\n}\n\n/**\n * An operator function which accepts a spread of occurrence generators\n * and adds their occurrences to the output.\n *\n * @param streams a spread of occurrence generators\n */\nfunction add(...streams) {\n return options => new AddOperator(streams, options);\n}\nclass AddOperator extends Operator {\n set(_, value) {\n return new AddOperator(\n this.streams.map(stream => stream.set('timezone', value)),\n Object.assign(Object.assign({}, this.config), {\n base: this.config.base && this.config.base.set('timezone', value),\n timezone: value,\n }),\n );\n }\n *_run(args = {}) {\n const wrappedStreams = this.streams.map(input => new IterableWrapper(input, args));\n if (this.config.base) {\n wrappedStreams.push(new IterableWrapper(this.config.base, args));\n }\n if (wrappedStreams.length === 0) return;\n let stream = selectNextIterable(wrappedStreams, args);\n while (stream && !stream.done) {\n // yield the current stream's value\n const yieldArgs = yield this.normalizeRunOutput(stream.value);\n if (!(yieldArgs && yieldArgs.skipToDate)) {\n // iterate the current stream\n stream.next();\n }\n // select the next stream\n stream = selectNextIterable(wrappedStreams, args, yieldArgs);\n }\n }\n calculateIsInfinite() {\n return (\n (this.config.base && this.config.base.isInfinite) ||\n this.streams.some(stream => stream.isInfinite)\n );\n }\n calculateHasDuration() {\n const streamsDuration = this.streams.every(stream => stream.hasDuration);\n if (!this.config.base) return streamsDuration;\n return this.config.base.hasDuration && streamsDuration;\n }\n}\n\nclass Calendar extends OccurrenceGenerator {\n /**\n *\n * Create a new Calendar object with the specified options.\n *\n * ### Options\n *\n * - **timezone**: The timezone that yielded occurrences should be *displayed* in.\n * Note, this one affects the *displayed* timezone of yielded occurrences.\n * For rules, occurrences are first found using the unmodified rule\n * config (including whatever timezone the `start` datetime is defined\n * in), and then converted to the timezone specified here before being\n * yielded. By default, the timezone is *local* time (`null`). So if you don't\n * want your rules to be displayed in local time, you must supply a\n * timezone argument.\n * - **data**: arbitrary data you can associate with this Calendar. This\n * is the only mutable property of `Calendar` objects.\n * - **maxDuration**: currently unused.\n * - **schedules**: either an occurrence generator, or an array of occurrence generators, which should\n * be used to build up this Calendar's occurrences. The Calendar will display the union of occurrences\n * its schedules produce.\n *\n */\n constructor(args = {}) {\n super(args);\n this.schedules = [];\n this.data = args.data;\n if (args.schedules) {\n this.schedules = Array.isArray(args.schedules) ? args.schedules : [args.schedules];\n this.schedules = this.schedules.map(schedule => schedule.set('timezone', this.timezone));\n }\n this.isInfinite = this.schedules.some(schedule => schedule.isInfinite);\n this.hasDuration = this.schedules.every(schedule => schedule.hasDuration);\n }\n occurrences(args = {}) {\n return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n }\n collections(args = {}) {\n return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n }\n set(prop, value, options) {\n if (prop === 'timezone') {\n return new Calendar({\n schedules: this.schedules.map(schedule => schedule.set(prop, value, options)),\n data: this.data,\n timezone: value,\n maxDuration: this.maxDuration,\n });\n } else if (prop === 'schedules') {\n return new Calendar({\n schedules: Array.isArray(value) ? value : [value],\n data: this.data,\n timezone: this.timezone,\n maxDuration: this.maxDuration,\n });\n }\n throw new ArgumentError('Unknown value for `prop`: ' + `\"${prop}\"`);\n }\n *_run(args = {}) {\n if (this.schedules.length === 0) return;\n const count = args.take;\n delete args.take;\n let iterator;\n if (this.schedules.length === 1) {\n iterator = this.schedules[0]._run(args);\n } else {\n iterator = new AddOperator(this.schedules, {\n timezone: this.timezone,\n })._run(args);\n }\n let date = iterator.next().value;\n let index = 0;\n while (date && (count === undefined || count > index)) {\n date = date.add(this, 'generator');\n const yieldArgs = yield this.normalizeRunOutput(date);\n date = iterator.next(yieldArgs).value;\n index++;\n }\n return undefined;\n }\n}\n\nclass Dates extends OccurrenceGenerator {\n constructor(args = {}) {\n super(args);\n this.adapters = [];\n this.isInfinite = false;\n this.maxDuration = 0;\n this.datetimes = [];\n this.data = args.data;\n if (args.dates) {\n this.adapters = args.dates.map(date => {\n let adapter = this.normalizeDateInputToAdapter(date);\n if (args.duration && !adapter.duration) {\n adapter = adapter.set('duration', args.duration);\n }\n return adapter.set('timezone', this.timezone);\n });\n this.datetimes = this.adapters.map(adapter => adapter.toDateTime());\n }\n this.hasDuration = this.datetimes.every(date => !!date.duration);\n if (this.hasDuration) {\n this.maxDuration = this.adapters.reduce(\n (prev, curr) => (curr.duration > prev ? curr.duration : prev),\n 0,\n );\n }\n }\n get length() {\n return this.adapters.length;\n }\n /** Returns the first occurrence or, if there are no occurrences, null. */\n get firstDate() {\n return this.adapters[0] || null;\n }\n /** Returns the last occurrence or, if there are no occurrences, null. */\n get lastDate() {\n return this.adapters[this.length - 1] || null;\n }\n occurrences(args = {}) {\n return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n }\n collections(args = {}) {\n return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n }\n add(value) {\n return new Dates({\n dates: [...this.adapters, value],\n timezone: this.timezone,\n data: this.data,\n });\n }\n remove(value) {\n const dates = this.adapters.slice();\n const input = this.normalizeDateInputToAdapter(value);\n const index = dates.findIndex(date => date.valueOf() === input.valueOf());\n if (index >= 0) {\n dates.splice(index, 1);\n }\n return new Dates({\n dates,\n timezone: this.timezone,\n data: this.data,\n });\n }\n set(prop, value, options = {}) {\n let timezone = this.timezone;\n let dates = this.adapters.slice();\n if (prop === 'timezone') {\n if (value === this.timezone) return this;\n else if (options.keepLocalTime) {\n dates = this.adapters.map(adapter => {\n const json = adapter.toJSON();\n json.timezone = value;\n return this.dateAdapter.fromJSON(json);\n });\n }\n timezone = value;\n } else if (prop === 'dates') {\n dates = value;\n } else if (prop === 'duration') {\n dates = dates.map(date => date.set('duration', value || 0));\n } else {\n throw new ArgumentError(\n `Unexpected prop argument \"${prop}\". Accepted values are \"timezone\" or \"dates\"`,\n );\n }\n return new Dates({\n dates,\n data: this.data,\n timezone,\n });\n }\n filter(fn) {\n return new Dates({\n dates: this.adapters.filter(fn),\n data: this.data,\n timezone: this.timezone,\n });\n }\n *_run(args = {}) {\n let dates = this.datetimes.sort(dateTimeSortComparer);\n if (args.start) {\n dates = dates.filter(date => date.isAfterOrEqual(args.start));\n }\n if (args.end) {\n dates = dates.filter(date => date.isBeforeOrEqual(args.end));\n }\n if (args.reverse) {\n dates = dates.slice().reverse();\n }\n if (args.take) {\n dates = dates.slice(0, args.take);\n }\n const dateCache = dates.slice();\n let date = dateCache.shift();\n let yieldArgs;\n while (date) {\n if (\n yieldArgs &&\n yieldArgs.skipToDate &&\n (args.reverse ? yieldArgs.skipToDate.isBefore(date) : yieldArgs.skipToDate.isAfter(date))\n ) {\n date = dateCache.shift();\n continue;\n }\n date = date.add(this, 'generator');\n yieldArgs = yield this.normalizeRunOutput(date);\n // Here, we are matching the behavior of the RecurrenceRulesIterator\n if (\n yieldArgs &&\n yieldArgs.skipToDate &&\n (args.reverse\n ? yieldArgs.skipToDate.isAfterOrEqual(date)\n : yieldArgs.skipToDate.isBeforeOrEqual(date))\n ) {\n throw new Error(\n 'A provided `skipToDate` option must be greater than the last yielded date ' +\n '(or smaller, in the case of reverse iteration)',\n );\n }\n date = dateCache.shift();\n }\n return undefined;\n }\n}\n\nclass InvalidDateAdapterError extends Error {}\nlet dateAdapterConfig;\nclass DateAdapterBase {\n constructor(_date, options) {\n this.duration = (options && options.duration) || 0;\n this.generators = (options && options.generators && options.generators.slice()) || [];\n if (!Number.isInteger(this.duration) || this.duration < 0) {\n throw new InvalidDateAdapterError('duration must be a non-negative integer');\n }\n }\n static set adapter(value) {\n if (dateAdapterConfig) {\n throw new Error(`\"${dateAdapterConfig.name}\" has already been configured.`);\n }\n dateAdapterConfig = value;\n }\n static get adapter() {\n if (!dateAdapterConfig) {\n throw new Error('No date adapter has been configured. See rSchedule docs.');\n }\n return dateAdapterConfig;\n }\n static isDate(_object) {\n throw unimplementedError('isDate()');\n }\n static fromDate(_date, _options) {\n throw unimplementedError('fromDate()');\n }\n static fromJSON(_json) {\n throw unimplementedError('fromJSON()');\n }\n static fromDateTime(_datetime) {\n throw unimplementedError('fromDateTime()');\n }\n /**\n * Returns a string in simplified extended ISO format (ISO 8601).\n *\n * _Note: this method is intended for testing and its\n * implementation isn't particularly performant._\n */\n toISOString() {\n return this.set('timezone', 'UTC')\n .toDateTime()\n .toISOString();\n }\n toDateTime() {\n const date = DateTime.fromJSON(\n Object.assign(Object.assign({}, this.toJSON()), { generators: this.generators }),\n );\n return date;\n }\n}\nDateAdapterBase.hasTimezoneSupport = false;\nfunction unimplementedError(name) {\n return new Error(`You must implement the \"${name}\" method for this DateAdapter class`);\n}\nvar DateAdapter;\n(function(DateAdapter) {\n DateAdapter.WEEKDAYS = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\n DateAdapter.MILLISECONDS_IN_SECOND = 1000;\n DateAdapter.MILLISECONDS_IN_MINUTE = DateAdapter.MILLISECONDS_IN_SECOND * 60;\n DateAdapter.MILLISECONDS_IN_HOUR = DateAdapter.MILLISECONDS_IN_MINUTE * 60;\n DateAdapter.MILLISECONDS_IN_DAY = DateAdapter.MILLISECONDS_IN_HOUR * 24;\n DateAdapter.MILLISECONDS_IN_WEEK = DateAdapter.MILLISECONDS_IN_DAY * 7;\n})(DateAdapter || (DateAdapter = {}));\nclass InvalidDateTimeError extends Error {}\nclass DateTime {\n constructor(date, timezone, duration, generators) {\n this.date = new Date(date);\n this.timezone = timezone || null;\n this.duration = duration || 0;\n this.generators = (generators && generators.slice()) || [];\n if (!Number.isInteger(this.duration) || this.duration < 0) {\n throw new InvalidDateTimeError('duration must be a non-negative integer');\n }\n this.assertIsValid();\n }\n // /**\n // * Similar to `Array.isArray()`, `isInstance()` provides a surefire method\n // * of determining if an object is a `DateTime` by checking against the\n // * global symbol registry.\n // */\n // static isInstance(object: any): object is DateTime {\n // return !!(object && object[DATETIME_ID]);\n // }\n static fromJSON(json) {\n const date = new Date(\n Date.UTC(\n json.year,\n json.month - 1,\n json.day,\n json.hour,\n json.minute,\n json.second,\n json.millisecond,\n ),\n );\n return new DateTime(date, json.timezone, json.duration, json.generators);\n }\n static fromDateAdapter(adapter) {\n return DateTime.fromJSON(\n Object.assign(Object.assign({}, adapter.toJSON()), { generators: adapter.generators }),\n );\n }\n /**\n * Returns `undefined` if `duration` is `0`. Else returns\n * the `end` date.\n */\n get end() {\n if (!this.duration) return;\n if (this._end) return this._end;\n this._end = this.add(this.duration, 'millisecond');\n return this._end;\n }\n // While we constrain the argument to be another DateAdapter in typescript\n // we handle the case of someone passing in another type of object in javascript\n isEqual(object) {\n if (!object) {\n return false;\n }\n assertSameTimeZone(this, object);\n return this.valueOf() === object.valueOf();\n }\n isBefore(object) {\n assertSameTimeZone(this, object);\n return this.valueOf() < object.valueOf();\n }\n isBeforeOrEqual(object) {\n assertSameTimeZone(this, object);\n return this.valueOf() <= object.valueOf();\n }\n isAfter(object) {\n assertSameTimeZone(this, object);\n return this.valueOf() > object.valueOf();\n }\n isAfterOrEqual(object) {\n assertSameTimeZone(this, object);\n return this.valueOf() >= object.valueOf();\n }\n isOccurring(object) {\n if (!this.duration) {\n throw new Error('DateTime#isOccurring() is only applicable to DateTimes with durations');\n }\n assertSameTimeZone(this, object);\n return (\n object.isAfterOrEqual(this) && object.isBeforeOrEqual(this.add(this.duration, 'millisecond'))\n );\n }\n add(amount, unit) {\n switch (unit) {\n case 'generator': {\n const generators = this.generators.slice();\n generators.unshift(amount);\n return new DateTime(this.date, this.timezone, this.duration, generators);\n }\n case 'year':\n return this.forkDateTime(addUTCYears(this.date, amount));\n case 'month':\n return this.forkDateTime(addUTCMonths(this.date, amount));\n case 'week':\n return this.forkDateTime(addUTCWeeks(this.date, amount));\n case 'day':\n return this.forkDateTime(addUTCDays(this.date, amount));\n case 'hour':\n return this.forkDateTime(addUTCHours(this.date, amount));\n case 'minute':\n return this.forkDateTime(addUTCMinutes(this.date, amount));\n case 'second':\n return this.forkDateTime(addUTCSeconds(this.date, amount));\n case 'millisecond':\n return this.forkDateTime(addUTCMilliseconds(this.date, amount));\n default:\n throw new Error('Invalid unit provided to `DateTime#add`');\n }\n }\n subtract(amount, unit) {\n switch (unit) {\n case 'year':\n return this.forkDateTime(subUTCYears(this.date, amount));\n case 'month':\n return this.forkDateTime(subUTCMonths(this.date, amount));\n case 'week':\n return this.forkDateTime(subUTCWeeks(this.date, amount));\n case 'day':\n return this.forkDateTime(subUTCDays(this.date, amount));\n case 'hour':\n return this.forkDateTime(subUTCHours(this.date, amount));\n case 'minute':\n return this.forkDateTime(subUTCMinutes(this.date, amount));\n case 'second':\n return this.forkDateTime(subUTCSeconds(this.date, amount));\n case 'millisecond':\n return this.forkDateTime(subUTCMilliseconds(this.date, amount));\n default:\n throw new Error('Invalid unit provided to `DateTime#subtract`');\n }\n }\n get(unit) {\n switch (unit) {\n case 'year':\n return this.date.getUTCFullYear();\n case 'month':\n return this.date.getUTCMonth() + 1;\n case 'yearday':\n return getUTCYearDay(this.date);\n case 'weekday':\n return DateAdapter.WEEKDAYS[this.date.getUTCDay()];\n case 'day':\n return this.date.getUTCDate();\n case 'hour':\n return this.date.getUTCHours();\n case 'minute':\n return this.date.getUTCMinutes();\n case 'second':\n return this.date.getUTCSeconds();\n case 'millisecond':\n return this.date.getUTCMilliseconds();\n default:\n throw new Error('Invalid unit provided to `DateTime#set`');\n }\n }\n set(unit, value) {\n if (unit === 'duration') {\n return new DateTime(this.date, this.timezone, value, this.generators);\n }\n if (unit === 'generators') {\n return new DateTime(this.date, this.timezone, this.duration, value);\n }\n let date = new Date(this.date);\n switch (unit) {\n case 'year':\n date.setUTCFullYear(value);\n break;\n case 'month': {\n // If the current day of the month\n // is greater than days in the month we are moving to, we need to also\n // set the day to the end of that month.\n const length = monthLength(value, date.getUTCFullYear());\n const day = date.getUTCDate();\n if (day > length) {\n date.setUTCDate(1);\n date.setUTCMonth(value);\n date = subUTCDays(date, 1);\n } else {\n date.setUTCMonth(value - 1);\n }\n break;\n }\n case 'day':\n date.setUTCDate(value);\n break;\n case 'hour':\n date.setUTCHours(value);\n break;\n case 'minute':\n date.setUTCMinutes(value);\n break;\n case 'second':\n date.setUTCSeconds(value);\n break;\n case 'millisecond':\n date.setUTCMilliseconds(value);\n break;\n default:\n throw new Error('Invalid unit provided to `DateTime#set`');\n }\n return this.forkDateTime(date);\n }\n granularity(granularity, opt = {}) {\n let date = this.forkDateTime(this.date);\n switch (granularity) {\n case 'year':\n date = date.set('month', 1);\n case 'month':\n date = date.set('day', 1);\n break;\n case 'week':\n date = setDateToStartOfWeek(date, opt.weekStart);\n }\n switch (granularity) {\n case 'year':\n case 'month':\n case 'week':\n case 'day':\n date = date.set('hour', 0);\n case 'hour':\n date = date.set('minute', 0);\n case 'minute':\n date = date.set('second', 0);\n case 'second':\n date = date.set('millisecond', 0);\n case 'millisecond':\n return date;\n default:\n throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);\n }\n }\n endGranularity(granularity, opt = {}) {\n let date = this.forkDateTime(this.date);\n switch (granularity) {\n case 'year':\n date = date.set('month', 12);\n case 'month':\n date = date.set('day', monthLength(date.get('month'), date.get('year')));\n break;\n case 'week':\n date = setDateToEndOfWeek(date, opt.weekStart);\n }\n switch (granularity) {\n case 'year':\n case 'month':\n case 'week':\n case 'day':\n date = date.set('hour', 23);\n case 'hour':\n date = date.set('minute', 59);\n case 'minute':\n date = date.set('second', 59);\n case 'second':\n date = date.set('millisecond', 999);\n case 'millisecond':\n return date;\n default:\n throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);\n }\n }\n toISOString() {\n return this.date.toISOString();\n }\n toDateTime() {\n return this;\n }\n toJSON() {\n const json = {\n timezone: this.timezone,\n year: this.get('year'),\n month: this.get('month'),\n day: this.get('day'),\n hour: this.get('hour'),\n minute: this.get('minute'),\n second: this.get('second'),\n millisecond: this.get('millisecond'),\n };\n if (this.duration) {\n json.duration = this.duration;\n }\n return json;\n }\n valueOf() {\n return this.date.valueOf();\n }\n assertIsValid() {\n if (isNaN(this.valueOf())) {\n throw new InvalidDateTimeError('DateTime has invalid date.');\n }\n return true;\n }\n forkDateTime(date) {\n return new DateTime(date, this.timezone, this.duration, this.generators);\n }\n}\nfunction assertSameTimeZone(x, y) {\n if (x.timezone !== y.timezone) {\n throw new InvalidDateTimeError(\n 'Attempted to compare a datetime to another date in a different timezone: ' +\n JSON.stringify(x) +\n ' and ' +\n JSON.stringify(y),\n );\n }\n return true;\n}\nfunction setDateToStartOfWeek(date, wkst) {\n const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));\n return date.subtract(index, 'day');\n}\nfunction setDateToEndOfWeek(date, wkst) {\n const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));\n return date.add(6 - index, 'day');\n}\nfunction orderedWeekdays(wkst = 'SU') {\n const wkdays = DateAdapter.WEEKDAYS.slice();\n let index = wkdays.indexOf(wkst);\n while (index !== 0) {\n shiftArray(wkdays);\n index--;\n }\n return wkdays;\n}\nfunction shiftArray(array, from = 'first') {\n if (array.length === 0) {\n return array;\n } else if (from === 'first') {\n array.push(array.shift());\n } else {\n array.unshift(array.pop());\n }\n return array;\n}\n/**\n * Returns the days in the given month.\n *\n * @param month base-1\n * @param year\n */\nfunction monthLength(month, year) {\n const block = {\n 1: 31,\n 2: getDaysInFebruary(year),\n 3: 31,\n 4: 30,\n 5: 31,\n 6: 30,\n 7: 31,\n 8: 31,\n 9: 30,\n 10: 31,\n 11: 30,\n 12: 31,\n };\n return block[month];\n}\nfunction getDaysInFebruary(year) {\n return isLeapYear(year) ? 29 : 28;\n}\n// taken from date-fn\nfunction isLeapYear(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\nfunction getUTCYearDay(now) {\n const start = new Date(Date.UTC(now.getUTCFullYear(), 0, 1));\n const diff = now.valueOf() - start.valueOf();\n return 1 + Math.floor(diff / DateAdapter.MILLISECONDS_IN_DAY);\n}\n/**\n * These functions are basically lifted from `date-fns`, but changed\n * to use the UTC date methods, which `date-fns` doesn't support.\n */\nfunction toInteger(input) {\n if (input === null || input === true || input === false) {\n return NaN;\n }\n const int = Number(input);\n if (isNaN(int)) {\n return int;\n }\n return int < 0 ? Math.ceil(int) : Math.floor(int);\n}\nfunction addMilliseconds(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError('2 arguments required, but only ' + arguments.length + ' present');\n }\n const timestamp = dirtyDate.valueOf();\n const amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}\nfunction addUTCYears(date, input) {\n const amount = toInteger(input);\n return addUTCMonths(date, amount * 12);\n}\nfunction addUTCMonths(date, input) {\n const amount = toInteger(input);\n date = new Date(date);\n const desiredMonth = date.getUTCMonth() + amount;\n const dateWithDesiredMonth = new Date(0);\n dateWithDesiredMonth.setUTCFullYear(date.getUTCFullYear(), desiredMonth, 1);\n dateWithDesiredMonth.setUTCHours(0, 0, 0, 0);\n const daysInMonth = monthLength(\n dateWithDesiredMonth.getUTCMonth() + 1,\n dateWithDesiredMonth.getUTCFullYear(),\n );\n // Set the last day of the new month\n // if the original date was the last day of the longer month\n date.setUTCMonth(desiredMonth, Math.min(daysInMonth, date.getUTCDate()));\n return date;\n}\nfunction addUTCWeeks(date, input) {\n const amount = toInteger(input);\n const days = amount * 7;\n return addUTCDays(date, days);\n}\nfunction addUTCDays(date, input) {\n // by adding milliseconds rather than days, we supress the native Date object's automatic\n // daylight savings time conversions which we don't want in UTC mode\n return addUTCMilliseconds(date, toInteger(input) * DateAdapter.MILLISECONDS_IN_DAY);\n}\nfunction addUTCHours(date, input) {\n const amount = toInteger(input);\n return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_HOUR);\n}\nfunction addUTCMinutes(date, input) {\n const amount = toInteger(input);\n return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_MINUTE);\n}\nfunction addUTCSeconds(date, input) {\n const amount = toInteger(input);\n return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_SECOND);\n}\nfunction addUTCMilliseconds(date, input) {\n const amount = toInteger(input);\n const timestamp = date.getTime();\n return new Date(timestamp + amount);\n}\nfunction subUTCYears(date, amount) {\n return addUTCYears(date, -amount);\n}\nfunction subUTCMonths(date, amount) {\n return addUTCMonths(date, -amount);\n}\nfunction subUTCWeeks(date, amount) {\n return addUTCWeeks(date, -amount);\n}\nfunction subUTCDays(date, amount) {\n return addUTCDays(date, -amount);\n}\nfunction subUTCHours(date, amount) {\n return addUTCHours(date, -amount);\n}\nfunction subUTCMinutes(date, amount) {\n return addUTCMinutes(date, -amount);\n}\nfunction subUTCSeconds(date, amount) {\n return addUTCSeconds(date, -amount);\n}\nfunction subUTCMilliseconds(date, amount) {\n return addUTCMilliseconds(date, -amount);\n}\n\n// export function normalizeDateInput<T extends DateAdapter>(\n// dateAdapter: DateAdapterConstructor<T>,\n// input: DateInput<T>,\n// timezone: string | null,\n// ): DateTime {\n// if (input instanceof DateTime) {\n// if (input.timezone !== timezone) {\n// return dateAdapter\n// .fromDateTime(input)\n// .set('timezone', timezone)\n// .toDateTime();\n// }\n// return input;\n// }\n// return input instanceof DateAdapter\n// ? input.set('timezone', timezone).toDateTime()\n// : new dateAdapter(input).toDateTime();\n// }\nfunction normalizeDateTimeTimezone(date, timezone) {\n if (date.timezone !== timezone) {\n return DateAdapterBase.adapter\n .fromDateTime(date)\n .set('timezone', timezone)\n .toDateTime();\n }\n return date;\n}\n\nclass RuleBase extends OccurrenceGenerator {\n constructor(recurrenceRules, config, options = {}) {\n super(options);\n this.recurrenceRules = recurrenceRules;\n this.options = cloneRuleOptions(config);\n this.normOptions = normalizeRuleOptions(this.recurrenceRules, this.options);\n this.timezone =\n options.timezone !== undefined ? options.timezone : this.normOptions.start.timezone;\n this.data = options.data;\n this.hasDuration = !!config.duration;\n if (this.hasDuration) this.duration = config.duration;\n this.isInfinite = this.normOptions.end === undefined && this.normOptions.count === undefined;\n }\n occurrences(args = {}) {\n return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n }\n collections(args = {}) {\n return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n }\n *_run(rawArgs = {}) {\n const args = this.normalizeRunArgs(rawArgs);\n const iterator = new RecurrenceRulesIterator(\n recurrenceRulesReducer(this.recurrenceRules),\n this.normOptions,\n args,\n );\n let date = iterator.next().value;\n let index = 0;\n while (date && (args.take === undefined || index < args.take)) {\n index++;\n date = date.add(this, 'generator');\n const yieldArgs = yield this.normalizeRunOutput(date);\n if (yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) {\n // The RecurrenceRuleIterator might have a different timezone from the rule.\n // Because of this, the yieldArgs will not properly be normalized by the\n // OccurrenceIterator, so we need to do it here\n date = iterator.next(\n Object.assign(Object.assign({}, yieldArgs), {\n skipToDate: normalizeDateTimeTimezone(yieldArgs.skipToDate, iterator.start.timezone),\n }),\n ).value;\n } else {\n // theoretically, the yieldArgs are undefined here\n // maybe in the future there will be other yieldArg options though\n date = iterator.next(yieldArgs).value;\n }\n }\n return undefined;\n }\n}\n\nclass Rule extends RuleBase {\n /**\n * Create a new Rule object with the specified rule config and options.\n *\n * ### Options\n *\n * - **timezone**: the timezone that yielded occurrences should be in. Note,\n * this does not change the rule config. Occurrences are first found using\n * the unmodified rule config, and then converted to the timezone specified\n * here before being yielded.\n * - **data**: arbitrary data you can associate with this rule. This\n * is the only mutable property of `Rule` objects.\n *\n * ### Rule Config\n *\n * - #### frequency\n *\n * The frequency rule part identifies the type of recurrence rule. Valid values\n * include `\"SECONDLY\"`, `\"MINUTELY\"`, `\"HOURLY\"`, `\"DAILY\"`, `\"WEEKLY\"`,\n * `\"MONTHLY\"`, or `\"YEARLY\"`.\n *\n * - #### start\n *\n * The start of the rule (not necessarily the first occurrence).\n * Either a `DateAdapter` instance, date object, or `DateTime` object.\n * The type of date object depends on the `DateAdapter` class used for this\n * `Rule`.\n *\n * - #### end?\n *\n * The end of the rule (not necessarily the last occurrence).\n * Either a `DateAdapter` instance, date object, or `DateTime` object.\n * The type of date object depends on the `DateAdapter` class used for this\n * `Rule`.\n *\n * - #### duration?\n *\n * A length of time expressed in milliseconds.\n *\n * - #### interval?\n *\n * The interval rule part contains a positive integer representing at\n * which intervals the recurrence rule repeats. The default value is\n * `1`, meaning every second for a SECONDLY rule, every minute for a\n * MINUTELY rule, every hour for an HOURLY rule, every day for a\n * DAILY rule, every week for a WEEKLY rule, every month for a\n * MONTHLY rule, and every year for a YEARLY rule. For example,\n * within a DAILY rule, a value of `8` means every eight days.\n *\n * - #### count?\n *\n * The count rule part defines the number of occurrences at which to\n * range-bound the recurrence. `count` and `end` are both two different\n * ways of specifying how a recurrence completes.\n *\n * - #### weekStart?\n *\n * The weekStart rule part specifies the day on which the workweek starts.\n * Valid values are `\"MO\"`, `\"TU\"`, `\"WE\"`, `\"TH\"`, `\"FR\"`, `\"SA\"`, and `\"SU\"`.\n * This is significant when a WEEKLY rule has an interval greater than 1,\n * and a `byDayOfWeek` rule part is specified. The\n * default value is `\"MO\"`.\n *\n * - #### bySecondOfMinute?\n *\n * The bySecondOfMinute rule part expects an array of seconds\n * within a minute. Valid values are 0 to 60.\n *\n * - #### byMinuteOfHour?\n *\n * The byMinuteOfHour rule part expects an array of minutes within an hour.\n * Valid values are 0 to 59.\n *\n * - #### byHourOfDay?\n *\n * The byHourOfDay rule part expects an array of hours of the day.\n * Valid values are 0 to 23.\n *\n * - #### byDayOfWeek?\n *\n * *note: the byDayOfWeek rule part is kinda complex. Blame the ICAL spec.*\n *\n * The byDayOfWeek rule part expects an array. Each array entry can\n * be a day of the week (`\"SU\"`, `\"MO\"` , `\"TU\"`, `\"WE\"`, `\"TH\"`,\n * `\"FR\"`, `\"SA\"`). If the rule's `frequency` is either MONTHLY or YEARLY,\n * Any entry can also be a tuple where the first value of the tuple is a\n * day of the week and the second value is an positive/negative integer\n * (e.g. `[\"SU\", 1]`). In this case, the number indicates the nth occurrence of\n * the specified day within the MONTHLY or YEARLY rule.\n *\n * The behavior of byDayOfWeek changes depending on the `frequency`\n * of the rule.\n *\n * Within a MONTHLY rule, `[\"MO\", 1]` represents the first Monday\n * within the month, whereas `[\"MO\", -1]` represents the last Monday\n * of the month.\n *\n * Within a YEARLY rule, the numeric value in a byDayOfWeek tuple entry\n * corresponds to an offset within the month when the byMonthOfYear rule part is\n * present, and corresponds to an offset within the year otherwise.\n *\n * Regardless of rule `frequency`, if a byDayOfWeek entry is a string\n * (rather than a tuple), it means \"all of these days\" within the specified\n * frequency (e.g. within a MONTHLY rule, `\"MO\"` represents all Mondays within\n * the month).\n *\n * - #### byDayOfMonth?\n *\n * The byDayOfMonth rule part expects an array of days\n * of the month. Valid values are 1 to 31 or -31 to -1.\n *\n * For example, -10 represents the tenth to the last day of the month.\n * The byDayOfMonth rule part *must not* be specified when the rule's\n * `frequency` is set to WEEKLY.\n *\n * - #### byMonthOfYear?\n *\n * The byMonthOfYear rule part expects an array of months\n * of the year. Valid values are 1 to 12.\n *\n */\n constructor(config, options = {}) {\n super(Rule.recurrenceRules, config, options);\n }\n set(prop, value, tzoptions = {}) {\n let options = cloneRuleOptions(this.options);\n let timezone = this.timezone;\n if (prop === 'timezone') {\n if (value === this.timezone && !tzoptions.keepLocalTime) return this;\n else if (tzoptions.keepLocalTime) {\n const json = this.normalizeDateInput(options.start).toJSON();\n json.timezone = value;\n const adapter = this.dateAdapter.fromJSON(json);\n // prettier-ignore\n options.start =\n options.start instanceof this.dateAdapter ? adapter :\n options.start instanceof DateTime$1 ? adapter.toDateTime() :\n adapter.date;\n }\n timezone = value;\n } else if (prop === 'options') {\n options = value;\n } else {\n options[prop] = value;\n }\n return new Rule(options, {\n data: this.data,\n maxDuration: this.maxDuration,\n timezone,\n });\n }\n}\nRule.recurrenceRules = [];\n\nclass ScheduleBase extends OccurrenceGenerator {\n /**\n * Create a new Schedule object with the specified options.\n *\n * The order of precidence for rrules, rdates, exrules, and exdates is:\n *\n * 1. rrules are included\n * 2. exrules are excluded\n * 3. rdates are included\n * 4. exdates are excluded\n *\n */\n constructor(options) {\n super(options);\n this.data = options.data;\n }\n occurrences(args = {}) {\n return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n }\n collections(args = {}) {\n return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n }\n *_run(args = {}) {\n const count = args.take;\n delete args.take;\n const iterator = this.occurrenceStream._run(args);\n let date = iterator.next().value;\n let index = 0;\n while (date && (count === undefined || count > index)) {\n date = date.add(this, 'generator');\n const yieldArgs = yield this.normalizeRunOutput(date);\n date = iterator.next(yieldArgs).value;\n index++;\n }\n return undefined;\n }\n}\n\n/**\n * An operator function which accepts a spread of occurrence generators\n * and removes their occurrences from the output.\n *\n * @param streams a spread of occurrence generators\n */\nfunction subtract(...streams) {\n return options => new SubtractOperator(streams, options);\n}\nclass SubtractOperator extends Operator {\n /** Not actually used but necessary for IRunnable interface */\n set(_, value) {\n return new SubtractOperator(\n this.streams.map(stream => stream.set('timezone', value)),\n Object.assign(Object.assign({}, this.config), {\n base: this.config.base && this.config.base.set('timezone', value),\n timezone: value,\n }),\n );\n }\n *_run(args = {}) {\n if (!this.config.base) return;\n const inclusion = new IterableWrapper(this.config.base, args);\n const exclusion = new IterableWrapper(\n new AddOperator(this.streams, {\n timezone: this.config.timezone,\n }),\n args,\n );\n cycleStreams(inclusion, exclusion, args);\n while (!inclusion.done) {\n const yieldArgs = yield this.normalizeRunOutput(inclusion.value);\n if (!(yieldArgs && yieldArgs.skipToDate)) {\n inclusion.next();\n }\n cycleStreams(inclusion, exclusion, args, yieldArgs);\n }\n }\n calculateIsInfinite() {\n return !!(this.config.base && this.config.base.isInfinite);\n }\n calculateHasDuration() {\n return !!(this.config.base && this.config.base.hasDuration);\n }\n}\nfunction cycleStreams(inclusion, exclusion, options = {}, yieldArgs = {}) {\n processYieldArgs([inclusion, exclusion], options, yieldArgs);\n iterateExclusion(inclusion, exclusion, options);\n while (!inclusion.done && !exclusion.done && inclusion.value.isEqual(exclusion.value)) {\n inclusion.next();\n iterateExclusion(inclusion, exclusion, options);\n }\n}\nfunction iterateExclusion(inclusion, exclusion, options = {}) {\n if (options.reverse) {\n while (!exclusion.done && !inclusion.done && exclusion.value.isAfter(inclusion.value)) {\n exclusion.next();\n }\n return;\n }\n while (!exclusion.done && !inclusion.done && exclusion.value.isBefore(inclusion.value)) {\n exclusion.next();\n }\n}\n\n/**\n * An operator function which deduplicates an occurrence stream. Occurrence\n * `duration` is currently ignored.\n */\nfunction unique() {\n return options => new UniqueOperator([], options);\n}\nclass UniqueOperator extends Operator {\n /** Not actually used but necessary for IRunnable interface */\n set(_, value) {\n return new UniqueOperator(\n [],\n Object.assign(Object.assign({}, this.config), {\n base: this.config.base && this.config.base.set('timezone', value),\n timezone: value,\n }),\n );\n }\n *_run(args = {}) {\n if (!this.config.base) return;\n const stream = new IterableWrapper(this.config.base, args);\n while (!stream.done) {\n const yieldArgs = yield this.normalizeRunOutput(stream.value);\n const lastValue = stream.value;\n // iterate the current stream\n stream.next(yieldArgs);\n while (\n !(yieldArgs && yieldArgs.skipToDate) &&\n !stream.done &&\n stream.value.isEqual(lastValue)\n ) {\n stream.next();\n }\n }\n }\n calculateIsInfinite() {\n return !!(this.config.base && this.config.base.isInfinite);\n }\n calculateHasDuration() {\n return !!(this.config.base && this.config.base.hasDuration);\n }\n}\n\nclass Schedule extends ScheduleBase {\n /**\n * Create a new Schedule object with the specified options.\n *\n * The order of precidence for rrules, rdates, exrules, and exdates is:\n *\n * 1. rrules are included\n * 2. exrules are excluded\n * 3. rdates are included\n * 4. exdates are excluded\n *\n * ### Options\n *\n * - **timezone**: The timezone that yielded occurrences should be *displayed* in.\n * Note, this one affects the *displayed* timezone of yielded occurrences.\n * For rules, occurrences are first found using the unmodified rule\n * config (including whatever timezone the `start` datetime is defined\n * in), and then converted to the timezone specified here before being\n * yielded. By default, the timezone is *local* time (`null`). So if you don't\n * want your rules to be displayed in local time, you must supply a\n * timezone argument.\n * - **data**: arbitrary data you can associate with this Schedule. This\n * is the only mutable property of `Schedule` objects.\n * - **maxDuration**: currently unused.\n * - **rrules**: rules specifying when occurrences happen. See the \"Rule Config\"\n * section below.\n * - **rdates**: individual dates that should be _included_ in the schedule.\n * - **exdates**: individual dates that should be _excluded_ from the schedule.\n * - **exrules**: rules specifying when occurrences shouldn't happen. See the\n * \"Rule Config\" section below.\n *\n * ### Rule Config\n *\n * - #### frequency\n *\n * The frequency rule part identifies the type of recurrence rule. Valid values\n * include `\"SECONDLY\"`, `\"MINUTELY\"`, `\"HOURLY\"`, `\"DAILY\"`, `\"WEEKLY\"`,\n * `\"MONTHLY\"`, or `\"YEARLY\"`.\n *\n * - #### start\n *\n * The start of the rule (not necessarily the first occurrence).\n * Either a `DateAdapter` instance, date object, or `DateTime` object.\n * The type of date object depends on the `DateAdapter` class used for this\n * `Rule`.\n *\n * - #### end?\n *\n * The end of the rule (not necessarily the last occurrence).\n * Either a `DateAdapter` instance, date object, or `DateTime` object.\n * The type of date object depends on the `DateAdapter` class used for this\n * `Rule`.\n *\n * - #### duration?\n *\n * A length of time expressed in milliseconds.\n *\n * - #### interval?\n *\n * The interval rule part contains a positive integer representing at\n * which intervals the recurrence rule repeats. The default value is\n * `1`, meaning every second for a SECONDLY rule, every minute for a\n * MINUTELY rule, every hour for an HOURLY rule, every day for a\n * DAILY rule, every week for a WEEKLY rule, every month for a\n * MONTHLY rule, and every year for a YEARLY rule. For example,\n * within a DAILY rule, a value of `8` means every eight days.\n *\n * - #### count?\n *\n * The count rule part defines the number of occurrences at which to\n * range-bound the recurrence. `count` and `end` are both two different\n * ways of specifying how a recurrence completes.\n *\n * - #### weekStart?\n *\n * The weekStart rule part specifies the day on which the workweek starts.\n * Valid values are `\"MO\"`, `\"TU\"`, `\"WE\"`, `\"TH\"`, `\"FR\"`, `\"SA\"`, and `\"SU\"`.\n * This is significant when a WEEKLY rule has an interval greater than 1,\n * and a `byDayOfWeek` rule part is specified. The\n * default value is `\"MO\"`.\n *\n * - #### bySecondOfMinute?\n *\n * The bySecondOfMinute rule part expects an array of seconds\n * within a minute. Valid values are 0 to 60.\n *\n * - #### byMinuteOfHour?\n *\n * The byMinuteOfHour rule part expects an array of minutes within an hour.\n * Valid values are 0 to 59.\n *\n * - #### byHourOfDay?\n *\n * The byHourOfDay rule part expects an array of hours of the day.\n * Valid values are 0 to 23.\n *\n * - #### byDayOfWeek?\n *\n * *note: the byDayOfWeek rule part is kinda complex. Blame the ICAL spec.*\n *\n * The byDayOfWeek rule part expects an array. Each array entry can\n * be a day of the week (`\"SU\"`, `\"MO\"` , `\"TU\"`, `\"WE\"`, `\"TH\"`,\n * `\"FR\"`, `\"SA\"`). If the rule's `frequency` is either MONTHLY or YEARLY,\n * Any entry can also be a tuple where the first value of the tuple is a\n * day of the week and the second value is an positive/negative integer\n * (e.g. `[\"SU\", 1]`). In this case, the number indicates the nth occurrence of\n * the specified day within the MONTHLY or YEARLY rule.\n *\n * The behavior of byDayOfWeek changes depending on the `frequency`\n * of the rule.\n *\n * Within a MONTHLY rule, `[\"MO\", 1]` represents the first Monday\n * within the month, whereas `[\"MO\", -1]` represents the last Monday\n * of the month.\n *\n * Within a YEARLY rule, the numeric value in a byDayOfWeek tuple entry\n * corresponds to an offset within the month when the byMonthOfYear rule part is\n * present, and corresponds to an offset within the year otherwise.\n *\n * Regardless of rule `frequency`, if a byDayOfWeek entry is a string\n * (rather than a tuple), it means \"all of these days\" within the specified\n * frequency (e.g. within a MONTHLY rule, `\"MO\"` represents all Mondays within\n * the month).\n *\n * - #### byDayOfMonth?\n *\n * The byDayOfMonth rule part expects an array of days\n * of the month. Valid values are 1 to 31 or -31 to -1.\n *\n * For example, -10 represents the tenth to the last day of the month.\n * The byDayOfMonth rule part *must not* be specified when the rule's\n * `frequency` is set to WEEKLY.\n *\n * - #### byMonthOfYear?\n *\n * The byMonthOfYear rule part expects an array of months\n * of the year. Valid values are 1 to 12.\n *\n */\n constructor(options = {}) {\n super(options);\n this.rrules = [];\n this.exrules = [];\n for (const prop of ['rrules', 'exrules']) {\n const arg = options[prop];\n if (arg) {\n this[prop] = arg.map(ruleArgs => {\n if (ruleArgs instanceof Rule) {\n return ruleArgs.set('timezone', this.timezone);\n } else {\n return new Rule(ruleArgs, {\n timezone: this.timezone,\n });\n }\n });\n }\n }\n for (const prop of ['rdates', 'exdates']) {\n const arg = options[prop];\n if (arg) {\n this[prop] =\n arg instanceof Dates\n ? arg.set('timezone', this.timezone)\n : new Dates({\n dates: arg,\n timezone: this.timezone,\n });\n } else {\n this[prop] = new Dates({\n timezone: this.timezone,\n });\n }\n }\n this.hasDuration =\n this.rrules.every(rule => rule.hasDuration) &&\n this.exrules.every(rule => rule.hasDuration) &&\n this.rdates.hasDuration &&\n this.exdates.hasDuration;\n this.isInfinite = this.rrules.some(rule => rule.isInfinite);\n this.occurrenceStream = [\n add(...this.rrules),\n subtract(...this.exrules),\n add(this.rdates),\n subtract(this.exdates),\n unique(),\n ].reduce((prev, curr) => curr({ base: prev, timezone: this.timezone }), undefined);\n }\n add(prop, value) {\n const rrules = this.rrules.slice();\n const exrules = this.exrules.slice();\n let rdates = this.rdates;\n let exdates = this.exdates;\n switch (prop) {\n case 'rrule':\n rrules.push(value);\n break;\n case 'exrule':\n exrules.push(value);\n break;\n case 'rdate':\n rdates = this.rdates.add(value);\n break;\n case 'exdate':\n exdates = this.exdates.add(value);\n break;\n }\n return new Schedule({\n timezone: this.timezone,\n data: this.data,\n rrules,\n exrules,\n rdates,\n exdates,\n });\n }\n remove(prop, value) {\n let rrules = this.rrules;\n let exrules = this.exrules;\n let rdates = this.rdates;\n let exdates = this.exdates;\n switch (prop) {\n case 'rrule':\n rrules = rrules.filter(rule => rule !== value);\n break;\n case 'exrule':\n exrules = exrules.filter(rule => rule !== value);\n break;\n case 'rdate':\n rdates = this.rdates.remove(value);\n break;\n case 'exdate':\n exdates = this.exdates.remove(value);\n break;\n }\n return new Schedule({\n timezone: this.timezone,\n data: this.data,\n rrules,\n exrules,\n rdates,\n exdates,\n });\n }\n set(prop, value, options = {}) {\n let timezone = this.timezone;\n let rrules = this.rrules;\n let exrules = this.exrules;\n let rdates = this.rdates;\n let exdates = this.exdates;\n switch (prop) {\n case 'timezone':\n if (value === this.timezone && !options.keepLocalTime) return this;\n else if (options.keepLocalTime) {\n rrules = rrules.map(rule => rule.set('timezone', value, options));\n exrules = exrules.map(rule => rule.set('timezone', value, options));\n rdates = rdates.set('timezone', value, options);\n exdates = exdates.set('timezone', value, options);\n }\n timezone = value;\n break;\n case 'rrules':\n rrules = value;\n break;\n case 'exrules':\n exrules = value;\n break;\n case 'rdates':\n rdates = value;\n break;\n case 'exdates':\n exdates = value;\n break;\n }\n return new Schedule({\n timezone,\n data: this.data,\n rrules,\n exrules,\n rdates,\n exdates,\n });\n }\n}\n\n/**\n * An operator function, which takes a spread of occurrence generators and only\n * returns the dates which intersect every occurrence generator.\n *\n * Because it's possible for all the generators to never intersect,\n * and because the intersection operator can't detect this lack of intersection,\n * you must call `intersection()` with a `{maxFailedIterations: number}` argument.\n * For convenience, you can globally set `RScheduleConfig.defaultMaxFailedIterations`.\n * Without further information, I'd probably set `defaultMaxFailedIterations = 50`.\n *\n * The `maxFailedIterations` argument caps the number of iterations the operator will\n * run through without finding a single valid occurrence. If this number is reached, the operator will\n * stop iterating (preventing a possible infinite loop).\n *\n * - Note: `maxFailedIterations` caps the number of iterations which\n * *fail to turn up a single valid occurrence*. Every time a valid occurrence is returned,\n * the current iteration count is reset to 0.\n *\n */\nfunction intersection(args) {\n return options => new IntersectionOperator(args, options);\n}\nclass IntersectionOperator extends Operator {\n constructor(args, config) {\n super(args.streams, config);\n if (this.isInfinite) {\n this.maxFailedIterations =\n args.maxFailedIterations || IntersectionOperator.defaultMaxFailedIterations;\n if (!this.maxFailedIterations) {\n throw new ArgumentError(\n 'The IntersectionOperator must be provided ' +\n 'a `maxFailedIterations` argument when it is built from schedules of infinite length. ' +\n 'This argument is used to ensure that the IntersectionOperator does not enter ' +\n 'an infinite loop because the underlying schedules never intersect. ' +\n 'If the `maxFailedIterations` count is reached it will be assumed that ' +\n 'all valid occurrences have been found and iteration will end without error.' +\n 'Without additional information, \"50\" is probably a good ' +\n '`maxFailedIterations` value. ' +\n 'If the schedules are not of infinite length, `maxFailedIterations` is ignored. ' +\n 'Note also that you can provide a `defaultMaxFailedIterations` number via ' +\n 'IntersectionOperator.defaultMaxFailedIterations.',\n );\n }\n }\n }\n set(_, value) {\n return new IntersectionOperator(\n {\n maxFailedIterations: this.maxFailedIterations,\n streams: this.streams.map(stream => stream.set('timezone', value)),\n },\n Object.assign(Object.assign({}, this.config), {\n base: this.config.base && this.config.base.set('timezone', value),\n timezone: value,\n }),\n );\n }\n *_run(args = {}) {\n const streams = this.streams.map(stream => new IterableWrapper(stream, args));\n if (this.config.base) {\n streams.push(new IterableWrapper(this.config.base, args));\n }\n if (streams.length === 0) return;\n const hasEndDate = !!(!this.isInfinite || args.reverse || args.end);\n if (\n !cycleStreams$1(\n streams,\n undefined,\n Object.assign(Object.assign({}, args), {\n hasEndDate,\n iteration: 0,\n maxIterations: this.maxFailedIterations,\n }),\n )\n ) {\n return;\n }\n let stream = selectNextIterable(streams, args);\n while (stream) {\n const yieldArgs = yield this.normalizeRunOutput(stream.value);\n const lastValidDate = stream.value;\n if (!(yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate)) {\n // iterate the current stream\n stream.next();\n }\n if (\n !cycleStreams$1(\n streams,\n lastValidDate,\n Object.assign(Object.assign({}, args), {\n hasEndDate,\n iteration: 0,\n maxIterations: this.maxFailedIterations,\n }),\n yieldArgs,\n )\n ) {\n return;\n }\n // The call to `cycleStreams()`, above, has already called\n // selectNextIterable with the `yieldArgs`\n stream = selectNextIterable(streams, args);\n }\n }\n calculateIsInfinite() {\n // Note: Array#every() === true when length === 0\n if (!this.config.base) {\n if (this.streams.length === 0) return false;\n return this.streams.every(stream => stream.isInfinite);\n } else if (this.streams.length === 0) return this.config.base.isInfinite;\n return this.config.base.isInfinite && this.streams.every(stream => stream.isInfinite);\n }\n calculateHasDuration() {\n const streamsDuration = this.streams.every(stream => stream.hasDuration);\n if (!this.config.base) return streamsDuration;\n return this.config.base.hasDuration && streamsDuration;\n }\n}\nfunction cycleStreams$1(streams, lastValidDate, options, yieldArgs) {\n const next = selectNextIterable(streams, options, yieldArgs);\n if (!next) return false;\n if (lastValidDate && next.value.isEqual(lastValidDate)) return true;\n if (streams.some(stream => stream.done)) return false;\n if (streams.every(stream => stream.value.isEqual(next.value))) return true;\n options.iteration++;\n if (options.maxIterations && !options.hasEndDate && options.iteration > options.maxIterations) {\n return false;\n }\n // Since not all of the streams are equal, we grab the last stream...\n const last = selectLastIterable(streams, options);\n // ...and skip all the other streams so they are equal or past the last one\n streams.forEach(stream => {\n // Because streams can have multiple, identical dates in a row,\n // we don't want to `skipToDate` if the provided date is equal to the current date.\n if (last.value.isEqual(stream.value)) return;\n stream.next({ skipToDate: last.value });\n });\n // then we repeat\n return cycleStreams$1(streams, lastValidDate, options);\n}\n\nclass DurationIterableWrapper extends IterableWrapper {\n constructor(generator, runArgs) {\n super(generator, runArgs);\n this.workingValue = this.value;\n this.next();\n }\n}\nclass MergeDurationOperatorError extends Error {}\n/**\n * An operator function which takes an occurrence stream with\n * `hasDuration === true` and merges occurrences which have overlapping\n * start and end times.\n *\n * Because it's possible for all the occurrences in the stream to have\n * overlapping start and end times, you must provide a `maxDuration`\n * argument that represents the maximum possible duration for a single\n * occurrence. If this duration is exceeded, a `MergeDurationOperatorError`\n * will be thrown.\n *\n * - For your convenience, you can globally set a default\n * `MergeDurationOperator#maxDuration` via\n * `RScheduleConfig.MergeDurationOperator.defaultMaxDuration`.\n *\n * Usage example:\n *\n * ```typescript\n * const MILLISECONDS_IN_HOUR = 1000 * 60 * 60;\n *\n * const dates = new Dates({\n * dates: [\n * new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 2 }),\n * new StandardDateAdapter(new Date(2010, 10, 11, 14), { duration: MILLISECONDS_IN_HOUR * 2 }),\n * new StandardDateAdapter(new Date(2010, 10, 12, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * ],\n * dateAdpter: StandardDateAdapter,\n * }).pipe(\n * mergeDuration({\n * maxDuration: MILLISECONDS_IN_HOUR * 24\n * })\n * )\n *\n * dates.occurrences().toArray() === [\n * new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 3 }),\n * new StandardDateAdapter(new Date(2010, 10, 12, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * ]\n * ```\n */\nfunction mergeDuration(args) {\n return options => new MergeDurationOperator(args, options);\n}\nclass MergeDurationOperator extends Operator {\n constructor(args, config) {\n super([], config);\n this.maxDuration = args.maxDuration;\n if (config.base && !config.base.hasDuration) {\n throw new ArgumentError(\n 'Base stream provided to MergeDurationOperator does not have an associated duration. ' +\n 'The MergeDurationOperator can only be used with streams which have a duration. ',\n );\n }\n }\n /** Not actually used but necessary for IRunnable interface */\n set(_, value) {\n return new MergeDurationOperator(\n {\n maxDuration: this.maxDuration,\n },\n Object.assign(Object.assign({}, this.config), {\n base: this.config.base && this.config.base.set('timezone', value),\n timezone: value,\n }),\n );\n }\n _run(args = {}) {\n return args.reverse ? this.reverseRun(args) : this.forwardRun(args);\n }\n calculateIsInfinite() {\n return !!(this.config.base && this.config.base.isInfinite);\n }\n calculateHasDuration() {\n return true;\n }\n *forwardRun(args = {}) {\n if (!this.config.base) return;\n // We want to find occurrences that end after the provided\n // `start` time even if they begin before the provided `start`\n // time. Because of this, we must begin iterating `maxDuration`\n // before the provided start time.\n let checkFromStart = args.start;\n if (args.start) {\n checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');\n }\n let checkFromEnd = args.end;\n if (args.end) {\n checkFromEnd = args.end.add(this.maxDuration, 'millisecond');\n }\n const stream = new DurationIterableWrapper(\n this.config.base,\n Object.assign(Object.assign({}, args), { start: checkFromStart, end: checkFromEnd }),\n );\n let yieldArgs;\n // checking `stream.workingValue` because when `stream.done === true`\n // `stream.workingValue` will not have been yielded yet\n while (stream.workingValue) {\n // TODO(@john.carroll.p): figure out how to handle `DateTime#generators` for merged `DateTimes`\n while (!stream.done && stream.workingValue.end.isAfterOrEqual(stream.value)) {\n if (stream.workingValue.duration > this.maxDuration) {\n throw new MergeDurationOperatorError(\n `MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n this.maxDuration,\n );\n }\n if (stream.value.end.isAfter(stream.workingValue.end)) {\n const diff = stream.value.end.valueOf() - stream.workingValue.end.valueOf();\n stream.workingValue = stream.workingValue.set(\n 'duration',\n stream.workingValue.duration + diff,\n );\n }\n stream.next();\n }\n // check to make sure the occurrence we are about to yield ends after the\n // provided start time.\n if (args.start && stream.workingValue.end.isBefore(args.start)) {\n stream.workingValue = stream.value;\n stream.next();\n continue;\n }\n // make sure the occurrence we are about to yield ends after the\n // provided skipToDate\n if (\n (yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) &&\n stream.workingValue.end.isBefore(yieldArgs.skipToDate)\n ) {\n stream.workingValue = stream.value;\n stream.next();\n continue;\n }\n // make sure we are not after the user requested `end` time.\n if (args.end && stream.workingValue && stream.workingValue.isAfter(args.end)) {\n break;\n }\n if (stream.workingValue.duration > this.maxDuration) {\n throw new MergeDurationOperatorError(\n `MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n this.maxDuration,\n );\n }\n yieldArgs = yield this.normalizeRunOutput(stream.workingValue);\n if (\n (yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) &&\n stream.workingValue.isAfterOrEqual(yieldArgs.skipToDate)\n ) {\n throw new Error(\n 'A provided `skipToDate` option must be greater than the last yielded date ' +\n '(or smaller, in the case of reverse iteration)',\n );\n }\n stream.workingValue = stream.value;\n stream.next();\n }\n }\n *reverseRun(args = {}) {\n if (!this.config.base) return;\n // We want to find occurrences that end after the provided\n // `start` time even if they begin before the provided `start`\n // time. Because of this, we must begin iterating `maxDuration`\n // before the provided start time.\n let checkFromStart = args.start;\n if (args.start) {\n checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');\n }\n let checkFromEnd = args.end;\n if (args.end) {\n checkFromEnd = args.end.add(this.maxDuration, 'millisecond');\n }\n const stream = new DurationIterableWrapper(\n this.config.base,\n Object.assign(Object.assign({}, args), { start: checkFromStart, end: checkFromEnd }),\n );\n let yieldArgs;\n // checking `stream.workingValue` because when `stream.done === true`\n // `stream.workingValue` will not have been yielded yet\n while (stream.workingValue) {\n // TODO(@john.carroll.p): figure out how to handle `DateTime#generators` for merged `DateTimes`\n while (!stream.done && stream.workingValue.isBeforeOrEqual(stream.value.end)) {\n if (stream.workingValue.duration > this.maxDuration) {\n throw new MergeDurationOperatorError(\n `MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n this.maxDuration,\n );\n }\n if (\n stream.value.isBefore(stream.workingValue) ||\n stream.value.end.isAfter(stream.workingValue.end)\n ) {\n if (stream.value.end.isAfter(stream.workingValue.end)) {\n // `stream.workingValue` is a subset of `stream.value`\n // so simply replace `stream.workingValue` with `stream.value`\n stream.workingValue = stream.value;\n } else {\n const diff = stream.workingValue.valueOf() - stream.value.valueOf();\n stream.workingValue = stream.value.set('duration', stream.workingValue.duration + diff);\n }\n }\n stream.next();\n }\n // check to make sure the occurrence we are about to yield starts before the\n // provided start time.\n if (args.start && stream.workingValue.end.isBefore(args.start)) {\n break;\n }\n if (\n yieldArgs &&\n yieldArgs.skipToDate &&\n stream.workingValue.end.isBefore(yieldArgs.skipToDate)\n ) {\n stream.workingValue = stream.value;\n stream.next();\n continue;\n }\n // make sure we are not after the user requested `end` time.\n if (args.end && stream.workingValue && stream.workingValue.isAfter(args.end)) {\n stream.workingValue = stream.value;\n stream.next();\n continue;\n }\n if (stream.workingValue.duration > this.maxDuration) {\n throw new MergeDurationOperatorError(\n `MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n this.maxDuration,\n );\n }\n yieldArgs = yield this.normalizeRunOutput(stream.workingValue);\n if (\n yieldArgs &&\n yieldArgs.skipToDate &&\n stream.workingValue.end.isBeforeOrEqual(yieldArgs.skipToDate)\n ) {\n throw new Error(\n 'A provided `skipToDate` option must be greater than the last yielded date ' +\n '(or smaller, in the case of reverse iteration)',\n );\n }\n stream.workingValue = stream.value;\n stream.next();\n }\n }\n}\n\nclass SplitDurationOperatorError extends Error {}\n/**\n * An operator function which takes an occurrence stream with\n * `hasDuration === true` and passes occurrences through a splitting\n * function. One usecase for this operator is to dynamically break up\n * occurrences with a large duration into several smaller occurrences.\n *\n * You must provide a `maxDuration` argument that represents the\n * maximum possible duration for a single occurrence. If this\n * duration is exceeded, a `SplitDurationOperatorError` will be\n * thrown.\n *\n * - For your convenience, you can globally set a default\n * `SplitDurationOperator#maxDuration` via\n * `RScheduleConfig.SplitDurationOperator.defaultMaxDuration`.\n *\n * Usage example:\n *\n * ```typescript\n * const MILLISECONDS_IN_HOUR = 1000 * 60 * 60;\n *\n * const splitFn = (date: DateTime) => {\n * if (date.duration > MILLISECONDS_IN_HOUR) {\n * const diff = date.duration! / 2;\n *\n * return [\n * date.set('duration', diff),\n * date.add(diff, 'millisecond').set('duration', diff),\n * ];\n * }\n *\n * return [date];\n * };\n *\n * const dates = new Dates({\n * dates: [\n * new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 2 }),\n * ],\n * dateAdpter: StandardDateAdapter,\n * }).pipe(\n * splitDuration({\n * splitFn,\n * maxDuration: MILLISECONDS_IN_HOUR * 1\n * })\n * )\n *\n * expect(dates.occurrences().toArray()).toEqual([\n * new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * new StandardDateAdapter(new Date(2010, 10, 11, 14), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * ])\n * ```\n */\nfunction splitDuration(args) {\n return options => new SplitDurationOperator(args, options);\n}\nclass SplitDurationOperator extends Operator {\n constructor(args, config) {\n super([], config);\n this.splitFn = args.splitFn;\n this.maxDuration = args.maxDuration;\n if (config.base && !config.base.hasDuration) {\n throw new ArgumentError(\n 'Base stream provided to SplitDurationOperator does not have an associated duration. ' +\n 'The SplitDurationOperator can only be used with streams which have a duration.',\n );\n }\n }\n /** Not actually used but necessary for IRunnable interface */\n set(_, value) {\n return new SplitDurationOperator(\n {\n maxDuration: this.maxDuration,\n splitFn: this.splitFn,\n },\n Object.assign(Object.assign({}, this.config), {\n base: this.config.base && this.config.base.set('timezone', value),\n timezone: value,\n }),\n );\n }\n *_run(args = {}) {\n if (!this.config.base) return;\n const reverse = args.reverse || false;\n // We want to find occurrences that end after the provided\n // `start` time even if they begin before the provided `start`\n // time. Because of this, we add `maxDuration` to\n // the provided start time.\n let checkFromStart = args.start;\n if (args.start) {\n checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');\n }\n // same goes for `end` time as with `start` time.\n let checkFromEnd = args.end;\n if (args.end) {\n checkFromEnd = args.end.add(this.maxDuration, 'millisecond');\n }\n const stream = new IterableWrapper(\n this.config.base,\n Object.assign(Object.assign({}, args), { start: checkFromStart, end: checkFromEnd }),\n );\n let yieldArgs;\n const datesBucket = [];\n while (!stream.done || (datesBucket[0] && datesBucket[0][0])) {\n /**\n * Example:\n * 10am - 2pm -> 10am - 12pm, 12pm - 2pm\n * 11am - 3pm -> 11am - 1pm, 1pm - 3pm\n * 2pm - 4pm -> 2pm - 3pm, 3pm - 4pm\n */\n if (!(datesBucket[0] && datesBucket[0][0])) {\n // we're out of dates\n datesBucket.push(this.splitDate(stream.value, reverse));\n stream.next();\n }\n while (\n !stream.done &&\n (reverse\n ? datesBucket[0].some(date => date.isBeforeOrEqual(stream.value.end))\n : datesBucket[0].some(date => date.isAfterOrEqual(stream.value)))\n ) {\n datesBucket.push(this.splitDate(stream.value, reverse));\n stream.next();\n }\n let selectedDate = datesBucket[0] && datesBucket[0][0];\n let bucketIndex = -1;\n let selectedBucketIndex = 0;\n let dateIndex = -1;\n let selectedDateIndex = 0;\n // find the next date as well as its location in the datesBucket\n for (const bucket of datesBucket) {\n bucketIndex++;\n dateIndex = -1;\n for (const date of bucket) {\n dateIndex++;\n let dateShouldComeNext;\n if (reverse) {\n dateShouldComeNext =\n date.isAfter(selectedDate) ||\n (date.isEqual(selectedDate) && date.duration > selectedDate.duration);\n } else {\n dateShouldComeNext =\n date.isBefore(selectedDate) ||\n (date.isEqual(selectedDate) && date.duration < selectedDate.duration);\n }\n if (dateShouldComeNext) {\n selectedDate = date;\n selectedBucketIndex = bucketIndex;\n selectedDateIndex = dateIndex;\n break;\n }\n }\n }\n datesBucket[selectedBucketIndex].splice(selectedDateIndex, 1);\n if (datesBucket[selectedBucketIndex].length === 0) {\n datesBucket.splice(selectedBucketIndex, 1);\n }\n // If we've been yieldedArgs from the last cycle, check to see\n // that the selectedDate honors the `skipToDate` requirement\n // if not, discard this selectedDate\n if (\n yieldArgs &&\n yieldArgs.skipToDate &&\n selectedDate &&\n !datePastEnd(selectedDate, args) &&\n !datePastSkipToDate(selectedDate, yieldArgs.skipToDate, args)\n ) {\n continue;\n }\n // because we subtracted `maxDuration` to the base iterator's start time,\n // check to make sure the selectedDate we are about to yield should\n // actually be yielded (it may be before the provided `start` time).\n // If not, discard the selectedDate.\n if (args.start && selectedDate.end.isBefore(args.start)) {\n if (reverse) break;\n continue;\n }\n // because we added `maxDuration` to the base iterator's end time,\n // check to make sure the selectedDate we are about to yield should\n // actually be yielded (it may be after the provided `end` time).\n // If not, end iteration.\n if (args.end && selectedDate.isAfter(args.end)) {\n if (reverse) continue;\n break;\n }\n if (selectedDate.duration > this.maxDuration) {\n throw new SplitDurationOperatorError(\n `SplitDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n this.maxDuration,\n );\n }\n yieldArgs = yield this.normalizeRunOutput(selectedDate);\n if (\n yieldArgs &&\n yieldArgs.skipToDate &&\n (args.reverse\n ? selectedDate.isBeforeOrEqual(yieldArgs.skipToDate)\n : selectedDate.isAfterOrEqual(yieldArgs.skipToDate))\n ) {\n throw new Error(\n 'A provided `skipToDate` option must be greater than the last yielded date ' +\n '(or smaller, in the case of reverse iteration)',\n );\n }\n }\n }\n calculateIsInfinite() {\n return !!(this.config.base && this.config.base.isInfinite);\n }\n calculateHasDuration() {\n return true;\n }\n splitDate(date, reverse) {\n const dates = this.splitFn(date);\n let valid;\n if (dates.length === 0) {\n valid = false;\n } else if (dates.length === 1) {\n valid = date.duration === dates[0].duration;\n } else {\n valid = date.duration === dates.reduce((prev, curr) => prev + curr.duration, 0);\n }\n if (!valid) {\n throw new Error(\n 'The provided SplitDurationOperator split function ' +\n 'must return an array of DateTimes with length > 0 ' +\n 'where the total duration of the new dates equals the duration of ' +\n 'the original date.',\n );\n }\n dates.sort(dateTimeSortComparer);\n if (reverse) {\n dates.reverse();\n }\n return dates;\n }\n}\nfunction datePastEnd(date, options) {\n return !!(options.reverse\n ? options.start && date.isBefore(options.start)\n : options.end && date.isAfter(options.end));\n}\nfunction datePastSkipToDate(date, skipToDate, options) {\n return !!(options.reverse ? skipToDate.isAfterOrEqual(date) : skipToDate.isBeforeOrEqual(date));\n}\n\nexport {\n AddOperator,\n Calendar,\n Collection,\n CollectionIterator,\n Dates,\n IntersectionOperator,\n MergeDurationOperator,\n MergeDurationOperatorError,\n OccurrenceGenerator,\n OccurrenceIterator,\n Operator,\n Rule,\n RuleBase,\n Schedule,\n ScheduleBase,\n SplitDurationOperator,\n SplitDurationOperatorError,\n SubtractOperator,\n UniqueOperator,\n add,\n intersection,\n mergeDuration,\n splitDuration,\n subtract,\n unique,\n};\n","class InvalidDateAdapterError extends Error {}\nlet dateAdapterConfig;\nclass DateAdapterBase {\n constructor(_date, options) {\n this.duration = (options && options.duration) || 0;\n this.generators = (options && options.generators && options.generators.slice()) || [];\n if (!Number.isInteger(this.duration) || this.duration < 0) {\n throw new InvalidDateAdapterError('duration must be a non-negative integer');\n }\n }\n static set adapter(value) {\n if (dateAdapterConfig) {\n throw new Error(`\"${dateAdapterConfig.name}\" has already been configured.`);\n }\n dateAdapterConfig = value;\n }\n static get adapter() {\n if (!dateAdapterConfig) {\n throw new Error('No date adapter has been configured. See rSchedule docs.');\n }\n return dateAdapterConfig;\n }\n static isDate(_object) {\n throw unimplementedError('isDate()');\n }\n static fromDate(_date, _options) {\n throw unimplementedError('fromDate()');\n }\n static fromJSON(_json) {\n throw unimplementedError('fromJSON()');\n }\n static fromDateTime(_datetime) {\n throw unimplementedError('fromDateTime()');\n }\n /**\n * Returns a string in simplified extended ISO format (ISO 8601).\n *\n * _Note: this method is intended for testing and its\n * implementation isn't particularly performant._\n */\n toISOString() {\n return this.set('timezone', 'UTC')\n .toDateTime()\n .toISOString();\n }\n toDateTime() {\n const date = DateTime.fromJSON(\n Object.assign(Object.assign({}, this.toJSON()), { generators: this.generators }),\n );\n return date;\n }\n}\nDateAdapterBase.hasTimezoneSupport = false;\nfunction unimplementedError(name) {\n return new Error(`You must implement the \"${name}\" method for this DateAdapter class`);\n}\nvar DateAdapter;\n(function(DateAdapter) {\n DateAdapter.WEEKDAYS = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\n DateAdapter.MILLISECONDS_IN_SECOND = 1000;\n DateAdapter.MILLISECONDS_IN_MINUTE = DateAdapter.MILLISECONDS_IN_SECOND * 60;\n DateAdapter.MILLISECONDS_IN_HOUR = DateAdapter.MILLISECONDS_IN_MINUTE * 60;\n DateAdapter.MILLISECONDS_IN_DAY = DateAdapter.MILLISECONDS_IN_HOUR * 24;\n DateAdapter.MILLISECONDS_IN_WEEK = DateAdapter.MILLISECONDS_IN_DAY * 7;\n})(DateAdapter || (DateAdapter = {}));\nclass InvalidDateTimeError extends Error {}\nclass DateTime {\n constructor(date, timezone, duration, generators) {\n this.date = new Date(date);\n this.timezone = timezone || null;\n this.duration = duration || 0;\n this.generators = (generators && generators.slice()) || [];\n if (!Number.isInteger(this.duration) || this.duration < 0) {\n throw new InvalidDateTimeError('duration must be a non-negative integer');\n }\n this.assertIsValid();\n }\n // /**\n // * Similar to `Array.isArray()`, `isInstance()` provides a surefire method\n // * of determining if an object is a `DateTime` by checking against the\n // * global symbol registry.\n // */\n // static isInstance(object: any): object is DateTime {\n // return !!(object && object[DATETIME_ID]);\n // }\n static fromJSON(json) {\n const date = new Date(\n Date.UTC(\n json.year,\n json.month - 1,\n json.day,\n json.hour,\n json.minute,\n json.second,\n json.millisecond,\n ),\n );\n return new DateTime(date, json.timezone, json.duration, json.generators);\n }\n static fromDateAdapter(adapter) {\n return DateTime.fromJSON(\n Object.assign(Object.assign({}, adapter.toJSON()), { generators: adapter.generators }),\n );\n }\n /**\n * Returns `undefined` if `duration` is `0`. Else returns\n * the `end` date.\n */\n get end() {\n if (!this.duration) return;\n if (this._end) return this._end;\n this._end = this.add(this.duration, 'millisecond');\n return this._end;\n }\n // While we constrain the argument to be another DateAdapter in typescript\n // we handle the case of someone passing in another type of object in javascript\n isEqual(object) {\n if (!object) {\n return false;\n }\n assertSameTimeZone(this, object);\n return this.valueOf() === object.valueOf();\n }\n isBefore(object) {\n assertSameTimeZone(this, object);\n return this.valueOf() < object.valueOf();\n }\n isBeforeOrEqual(object) {\n assertSameTimeZone(this, object);\n return this.valueOf() <= object.valueOf();\n }\n isAfter(object) {\n assertSameTimeZone(this, object);\n return this.valueOf() > object.valueOf();\n }\n isAfterOrEqual(object) {\n assertSameTimeZone(this, object);\n return this.valueOf() >= object.valueOf();\n }\n isOccurring(object) {\n if (!this.duration) {\n throw new Error('DateTime#isOccurring() is only applicable to DateTimes with durations');\n }\n assertSameTimeZone(this, object);\n return (\n object.isAfterOrEqual(this) && object.isBeforeOrEqual(this.add(this.duration, 'millisecond'))\n );\n }\n add(amount, unit) {\n switch (unit) {\n case 'generator': {\n const generators = this.generators.slice();\n generators.unshift(amount);\n return new DateTime(this.date, this.timezone, this.duration, generators);\n }\n case 'year':\n return this.forkDateTime(addUTCYears(this.date, amount));\n case 'month':\n return this.forkDateTime(addUTCMonths(this.date, amount));\n case 'week':\n return this.forkDateTime(addUTCWeeks(this.date, amount));\n case 'day':\n return this.forkDateTime(addUTCDays(this.date, amount));\n case 'hour':\n return this.forkDateTime(addUTCHours(this.date, amount));\n case 'minute':\n return this.forkDateTime(addUTCMinutes(this.date, amount));\n case 'second':\n return this.forkDateTime(addUTCSeconds(this.date, amount));\n case 'millisecond':\n return this.forkDateTime(addUTCMilliseconds(this.date, amount));\n default:\n throw new Error('Invalid unit provided to `DateTime#add`');\n }\n }\n subtract(amount, unit) {\n switch (unit) {\n case 'year':\n return this.forkDateTime(subUTCYears(this.date, amount));\n case 'month':\n return this.forkDateTime(subUTCMonths(this.date, amount));\n case 'week':\n return this.forkDateTime(subUTCWeeks(this.date, amount));\n case 'day':\n return this.forkDateTime(subUTCDays(this.date, amount));\n case 'hour':\n return this.forkDateTime(subUTCHours(this.date, amount));\n case 'minute':\n return this.forkDateTime(subUTCMinutes(this.date, amount));\n case 'second':\n return this.forkDateTime(subUTCSeconds(this.date, amount));\n case 'millisecond':\n return this.forkDateTime(subUTCMilliseconds(this.date, amount));\n default:\n throw new Error('Invalid unit provided to `DateTime#subtract`');\n }\n }\n get(unit) {\n switch (unit) {\n case 'year':\n return this.date.getUTCFullYear();\n case 'month':\n return this.date.getUTCMonth() + 1;\n case 'yearday':\n return getUTCYearDay(this.date);\n case 'weekday':\n return DateAdapter.WEEKDAYS[this.date.getUTCDay()];\n case 'day':\n return this.date.getUTCDate();\n case 'hour':\n return this.date.getUTCHours();\n case 'minute':\n return this.date.getUTCMinutes();\n case 'second':\n return this.date.getUTCSeconds();\n case 'millisecond':\n return this.date.getUTCMilliseconds();\n default:\n throw new Error('Invalid unit provided to `DateTime#set`');\n }\n }\n set(unit, value) {\n if (unit === 'duration') {\n return new DateTime(this.date, this.timezone, value, this.generators);\n }\n if (unit === 'generators') {\n return new DateTime(this.date, this.timezone, this.duration, value);\n }\n let date = new Date(this.date);\n switch (unit) {\n case 'year':\n date.setUTCFullYear(value);\n break;\n case 'month': {\n // If the current day of the month\n // is greater than days in the month we are moving to, we need to also\n // set the day to the end of that month.\n const length = monthLength(value, date.getUTCFullYear());\n const day = date.getUTCDate();\n if (day > length) {\n date.setUTCDate(1);\n date.setUTCMonth(value);\n date = subUTCDays(date, 1);\n } else {\n date.setUTCMonth(value - 1);\n }\n break;\n }\n case 'day':\n date.setUTCDate(value);\n break;\n case 'hour':\n date.setUTCHours(value);\n break;\n case 'minute':\n date.setUTCMinutes(value);\n break;\n case 'second':\n date.setUTCSeconds(value);\n break;\n case 'millisecond':\n date.setUTCMilliseconds(value);\n break;\n default:\n throw new Error('Invalid unit provided to `DateTime#set`');\n }\n return this.forkDateTime(date);\n }\n granularity(granularity, opt = {}) {\n let date = this.forkDateTime(this.date);\n switch (granularity) {\n case 'year':\n date = date.set('month', 1);\n case 'month':\n date = date.set('day', 1);\n break;\n case 'week':\n date = setDateToStartOfWeek(date, opt.weekStart);\n }\n switch (granularity) {\n case 'year':\n case 'month':\n case 'week':\n case 'day':\n date = date.set('hour', 0);\n case 'hour':\n date = date.set('minute', 0);\n case 'minute':\n date = date.set('second', 0);\n case 'second':\n date = date.set('millisecond', 0);\n case 'millisecond':\n return date;\n default:\n throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);\n }\n }\n endGranularity(granularity, opt = {}) {\n let date = this.forkDateTime(this.date);\n switch (granularity) {\n case 'year':\n date = date.set('month', 12);\n case 'month':\n date = date.set('day', monthLength(date.get('month'), date.get('year')));\n break;\n case 'week':\n date = setDateToEndOfWeek(date, opt.weekStart);\n }\n switch (granularity) {\n case 'year':\n case 'month':\n case 'week':\n case 'day':\n date = date.set('hour', 23);\n case 'hour':\n date = date.set('minute', 59);\n case 'minute':\n date = date.set('second', 59);\n case 'second':\n date = date.set('millisecond', 999);\n case 'millisecond':\n return date;\n default:\n throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);\n }\n }\n toISOString() {\n return this.date.toISOString();\n }\n toDateTime() {\n return this;\n }\n toJSON() {\n const json = {\n timezone: this.timezone,\n year: this.get('year'),\n month: this.get('month'),\n day: this.get('day'),\n hour: this.get('hour'),\n minute: this.get('minute'),\n second: this.get('second'),\n millisecond: this.get('millisecond'),\n };\n if (this.duration) {\n json.duration = this.duration;\n }\n return json;\n }\n valueOf() {\n return this.date.valueOf();\n }\n assertIsValid() {\n if (isNaN(this.valueOf())) {\n throw new InvalidDateTimeError('DateTime has invalid date.');\n }\n return true;\n }\n forkDateTime(date) {\n return new DateTime(date, this.timezone, this.duration, this.generators);\n }\n}\nfunction assertSameTimeZone(x, y) {\n if (x.timezone !== y.timezone) {\n throw new InvalidDateTimeError(\n 'Attempted to compare a datetime to another date in a different timezone: ' +\n JSON.stringify(x) +\n ' and ' +\n JSON.stringify(y),\n );\n }\n return true;\n}\nfunction setDateToStartOfWeek(date, wkst) {\n const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));\n return date.subtract(index, 'day');\n}\nfunction setDateToEndOfWeek(date, wkst) {\n const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));\n return date.add(6 - index, 'day');\n}\nfunction dateTimeSortComparer(a, b) {\n if (a.isAfter(b)) return 1;\n if (a.isBefore(b)) return -1;\n if (a.duration && b.duration) {\n if (a.duration > b.duration) return 1;\n if (a.duration < b.duration) return -1;\n }\n return 0;\n}\nfunction uniqDateTimes(dates) {\n return Array.from(new Map(dates.map(date => [date.toISOString(), date])).values());\n}\nfunction orderedWeekdays(wkst = 'SU') {\n const wkdays = DateAdapter.WEEKDAYS.slice();\n let index = wkdays.indexOf(wkst);\n while (index !== 0) {\n shiftArray(wkdays);\n index--;\n }\n return wkdays;\n}\nfunction shiftArray(array, from = 'first') {\n if (array.length === 0) {\n return array;\n } else if (from === 'first') {\n array.push(array.shift());\n } else {\n array.unshift(array.pop());\n }\n return array;\n}\nfunction getDifferenceBetweenWeekdays(x, y) {\n if (x === y) return 0;\n const result = DateAdapter.WEEKDAYS.indexOf(x) - DateAdapter.WEEKDAYS.indexOf(y);\n return result > 0 ? 7 - result : Math.abs(result);\n}\n/**\n * Returns the days in the given month.\n *\n * @param month base-1\n * @param year\n */\nfunction monthLength(month, year) {\n const block = {\n 1: 31,\n 2: getDaysInFebruary(year),\n 3: 31,\n 4: 30,\n 5: 31,\n 6: 30,\n 7: 31,\n 8: 31,\n 9: 30,\n 10: 31,\n 11: 30,\n 12: 31,\n };\n return block[month];\n}\nfunction getDaysInFebruary(year) {\n return isLeapYear(year) ? 29 : 28;\n}\n// taken from date-fn\nfunction isLeapYear(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\nfunction getDaysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\nfunction getUTCYearDay(now) {\n const start = new Date(Date.UTC(now.getUTCFullYear(), 0, 1));\n const diff = now.valueOf() - start.valueOf();\n return 1 + Math.floor(diff / DateAdapter.MILLISECONDS_IN_DAY);\n}\n/**\n * These functions are basically lifted from `date-fns`, but changed\n * to use the UTC date methods, which `date-fns` doesn't support.\n */\nfunction toInteger(input) {\n if (input === null || input === true || input === false) {\n return NaN;\n }\n const int = Number(input);\n if (isNaN(int)) {\n return int;\n }\n return int < 0 ? Math.ceil(int) : Math.floor(int);\n}\nfunction addMilliseconds(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError('2 arguments required, but only ' + arguments.length + ' present');\n }\n const timestamp = dirtyDate.valueOf();\n const amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}\nfunction addUTCYears(date, input) {\n const amount = toInteger(input);\n return addUTCMonths(date, amount * 12);\n}\nfunction addUTCMonths(date, input) {\n const amount = toInteger(input);\n date = new Date(date);\n const desiredMonth = date.getUTCMonth() + amount;\n const dateWithDesiredMonth = new Date(0);\n dateWithDesiredMonth.setUTCFullYear(date.getUTCFullYear(), desiredMonth, 1);\n dateWithDesiredMonth.setUTCHours(0, 0, 0, 0);\n const daysInMonth = monthLength(\n dateWithDesiredMonth.getUTCMonth() + 1,\n dateWithDesiredMonth.getUTCFullYear(),\n );\n // Set the last day of the new month\n // if the original date was the last day of the longer month\n date.setUTCMonth(desiredMonth, Math.min(daysInMonth, date.getUTCDate()));\n return date;\n}\nfunction addUTCWeeks(date, input) {\n const amount = toInteger(input);\n const days = amount * 7;\n return addUTCDays(date, days);\n}\nfunction addUTCDays(date, input) {\n // by adding milliseconds rather than days, we supress the native Date object's automatic\n // daylight savings time conversions which we don't want in UTC mode\n return addUTCMilliseconds(date, toInteger(input) * DateAdapter.MILLISECONDS_IN_DAY);\n}\nfunction addUTCHours(date, input) {\n const amount = toInteger(input);\n return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_HOUR);\n}\nfunction addUTCMinutes(date, input) {\n const amount = toInteger(input);\n return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_MINUTE);\n}\nfunction addUTCSeconds(date, input) {\n const amount = toInteger(input);\n return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_SECOND);\n}\nfunction addUTCMilliseconds(date, input) {\n const amount = toInteger(input);\n const timestamp = date.getTime();\n return new Date(timestamp + amount);\n}\nfunction subUTCYears(date, amount) {\n return addUTCYears(date, -amount);\n}\nfunction subUTCMonths(date, amount) {\n return addUTCMonths(date, -amount);\n}\nfunction subUTCWeeks(date, amount) {\n return addUTCWeeks(date, -amount);\n}\nfunction subUTCDays(date, amount) {\n return addUTCDays(date, -amount);\n}\nfunction subUTCHours(date, amount) {\n return addUTCHours(date, -amount);\n}\nfunction subUTCMinutes(date, amount) {\n return addUTCMinutes(date, -amount);\n}\nfunction subUTCSeconds(date, amount) {\n return addUTCSeconds(date, -amount);\n}\nfunction subUTCMilliseconds(date, amount) {\n return addUTCMilliseconds(date, -amount);\n}\n\nclass ArgumentError extends Error {}\nclass InfiniteLoopError extends Error {}\nfunction numberSortComparer(a, b) {\n if (a > b) {\n return 1;\n } else if (b > a) {\n return -1;\n } else {\n return 0;\n }\n}\nfunction freqToGranularity(freq) {\n switch (freq) {\n case 'YEARLY':\n return 'year';\n case 'MONTHLY':\n return 'month';\n case 'WEEKLY':\n return 'week';\n case 'DAILY':\n return 'day';\n case 'HOURLY':\n return 'hour';\n case 'MINUTELY':\n return 'minute';\n case 'SECONDLY':\n return 'second';\n case 'MILLISECONDLY':\n return 'millisecond';\n default:\n throw new Error('unknown freq passed to freqToGranularity()');\n }\n}\nfunction cloneJSON(json) {\n return JSON.parse(JSON.stringify(json));\n}\nfunction dateInputToDateAdapter(date) {\n // prettier-ignore\n return date instanceof DateTime ? DateAdapterBase.adapter.fromDateTime(date) :\n date instanceof DateAdapterBase ? date :\n DateAdapterBase.adapter.fromDate(date);\n}\nfunction dateInputToDateTime(date, timezone) {\n if (date instanceof DateTime) {\n if (date.timezone !== timezone) {\n return DateAdapterBase.adapter\n .fromDateTime(date)\n .set('timezone', timezone)\n .toDateTime();\n }\n return date;\n }\n return date instanceof DateAdapterBase\n ? date.set('timezone', timezone).toDateTime()\n : DateAdapterBase.adapter\n .fromDate(date)\n .set('timezone', timezone)\n .toDateTime();\n}\n// export function normalizeDateInput<T extends DateAdapter>(\n// dateAdapter: DateAdapterConstructor<T>,\n// input: DateInput<T>,\n// timezone: string | null,\n// ): DateTime {\n// if (input instanceof DateTime) {\n// if (input.timezone !== timezone) {\n// return dateAdapter\n// .fromDateTime(input)\n// .set('timezone', timezone)\n// .toDateTime();\n// }\n// return input;\n// }\n// return input instanceof DateAdapter\n// ? input.set('timezone', timezone).toDateTime()\n// : new dateAdapter(input).toDateTime();\n// }\nfunction normalizeDateTimeTimezone(date, timezone) {\n if (date.timezone !== timezone) {\n return DateAdapterBase.adapter\n .fromDateTime(date)\n .set('timezone', timezone)\n .toDateTime();\n }\n return date;\n}\n\nclass RuleOptionError extends Error {}\nfunction normalizeDefaultOptions(options) {\n let start;\n if (options.start instanceof DateTime) {\n start = options.start;\n } else if (options.start instanceof DateAdapterBase) {\n start = options.start.toDateTime();\n } else if (DateAdapterBase.adapter.isDate(options.start)) {\n start = DateAdapterBase.adapter.fromDate(options.start).toDateTime();\n } else {\n throw new RuleOptionError(\n '\"start\" must be either a `DateAdapter` instance or an instance of the ' +\n 'date a DateAdapter is wrapping (e.g. `StandardDateAdapter` wraps a `Date`)',\n );\n }\n let end;\n if (options.end) {\n if (options.end instanceof DateTime) {\n end = options.end;\n } else if (options.end instanceof DateAdapterBase) {\n end = options.end.toDateTime();\n } else if (DateAdapterBase.adapter.isDate(options.end)) {\n end = DateAdapterBase.adapter.fromDate(options.end).toDateTime();\n } else {\n throw new RuleOptionError(\n '\"end\" must be either be `undefined`, a `DateAdapter` instance, or an instance of the ' +\n 'date a DateAdapter is wrapping (e.g. `StandardDateAdapter` wraps a `Date`)',\n );\n }\n }\n if (options.duration !== undefined) {\n if (!Number.isInteger(options.duration)) {\n throw new RuleOptionError('\"duration\" expects a whole number');\n }\n if (options.duration <= 0) {\n throw new RuleOptionError('\"duration\" must be greater than 0');\n }\n }\n if (options.count !== undefined) {\n if (!Number.isInteger(options.count)) {\n throw new RuleOptionError('\"count\" must be a whole number');\n }\n if (options.count < 0) {\n throw new RuleOptionError('\"count\" must be greater than 0');\n }\n }\n if (options.end !== undefined && options.count !== undefined) {\n throw new RuleOptionError('\"end\" and \"count\" cannot both be present');\n }\n return {\n start,\n end,\n count: options.count,\n duration: options.duration,\n };\n}\nfunction normalizeRuleOptions(recurrenceModules, options) {\n const normOptions = normalizeDefaultOptions(options);\n const startOptions = cloneJSON(options);\n recurrenceModules.forEach(mod => {\n mod.normalizeOptions(startOptions, normOptions);\n });\n Object.keys(normOptions).forEach(key => {\n if (normOptions[key] === undefined) {\n delete normOptions[key];\n }\n });\n return normOptions;\n}\nfunction cloneRuleOptions(options) {\n const obj = cloneJSON(options);\n obj.start = options.start;\n if (options.end) obj.end = options.end;\n return obj;\n}\n\nclass RecurrenceRuleError extends Error {}\nclass ValidDateTime {\n constructor(date) {\n this.date = date;\n }\n}\nclass InvalidDateTime {\n constructor(date) {\n this.date = date;\n }\n}\nfunction recurrenceRulesReducer(rules) {\n return iterator =>\n rules.reduce((prev, curr) => {\n const rule = curr.get(iterator);\n if (rule) prev.push(rule);\n return prev;\n }, []);\n}\n\nclass RecurrenceRulesIterator {\n constructor(recurrenceRules, options, args) {\n this.options = options;\n this.args = args;\n this.rules = [];\n this.iterator =\n // prettier-ignore\n this.options.count === undefined ? this.iterate() :\n this.args.reverse ? this.iterateWithReverseCount() :\n this.iterateWithCount();\n this.options = Object.assign(Object.assign({}, cloneJSON(options)), {\n start: options.start,\n end: options.end,\n });\n this.reverse = (this.options.count === undefined && args.reverse) || false;\n const { start, end } = this.normalizeDateTimeArgs(args);\n if (options.count !== undefined) {\n this.start = options.start;\n } else if (start && options.start) {\n this.start = start.isAfterOrEqual(options.start) ? start : options.start;\n } else {\n this.start = start || options.start;\n }\n if (end && options.end) {\n this.end = end.isBeforeOrEqual(options.end) ? end : options.end;\n } else {\n this.end = end || options.end;\n }\n if (this.args.reverse && !(options.count !== undefined || this.end)) {\n throw new Error(\n 'When iterating in reverse, the rule must have an `end` or `count` ' +\n 'property or you must provide an `end` argument.',\n );\n }\n this.isInfinite = !this.end && this.options.count === undefined;\n this.hasDuration = !!this.options.duration;\n this.rules = Array.isArray(recurrenceRules) ? recurrenceRules : recurrenceRules(this);\n }\n [Symbol.iterator]() {\n return this.iterator;\n }\n next(args) {\n return this.iterator.next(args);\n }\n /**\n * In the pipe controller, we have an extra level of indirection with\n * the `run()` and `iterate()` methods. The `iterate()` method is the\n * method which actually runs the logic in the pipes. If we didn't\n * need to account for the `count` property of a rule, we would *only*\n * need the iterate method... so much simpler. But we do need to account\n * for rules with a `count` property.\n *\n * Rules with a `count` property need to begin iteration at the beginning\n * because the `count` is always from the rule's start time. So if someone\n * passes in a new start time as an argument to a rule with `count`, we\n * need to secretly iterate from the beginning, tracking the number of\n * iterations, and then only start yielding dates when we reach the section\n * the user cares about (or, if we hit our `count` quota, cancel iterating).\n *\n * Additionally, we need to handle iterating in reverse. In this case, we build\n * up a cache of dates between the rule's start time and the reverse iteration\n * start date. Once we hit the reverse iteration start date, we start\n * yielding dates in the cache, in reverse order.\n *\n * In general, I imagine the count number, if used, will be small. But a large\n * count will definitely have a negative performance affect. I don't think\n * there's anything to be done about this.\n */\n *iterateWithReverseCount() {\n const dates = Array.from(this.iterateWithCount()).reverse();\n let yieldArgs;\n const dateCache = dates.slice();\n let date = dateCache.shift();\n while (date) {\n if (yieldArgs && yieldArgs.skipToDate && date.isAfter(yieldArgs.skipToDate)) {\n date = dateCache.shift();\n continue;\n }\n yieldArgs = yield date;\n if (yieldArgs && yieldArgs.skipToDate && yieldArgs.skipToDate.isAfterOrEqual(date)) {\n throw new Error(\n 'A provided `skipToDate` option must be greater than the last yielded date ' +\n '(or smaller, in the case of reverse iteration)',\n );\n }\n date = dateCache.shift();\n }\n return undefined;\n }\n *iterateWithCount() {\n if (this.options.count === 0) return;\n const iterable = this.iterate();\n const start = this.args.start || this.start;\n let date = iterable.next().value;\n let index = 1;\n let yieldArgs;\n while (date && index <= this.options.count) {\n index++;\n if (date.isBefore(start)) {\n date = iterable.next().value;\n continue;\n }\n if (yieldArgs && yieldArgs.skipToDate && date.isBefore(yieldArgs.skipToDate)) {\n date = iterable.next().value;\n continue;\n }\n yieldArgs = yield date;\n if (yieldArgs && yieldArgs.skipToDate && yieldArgs.skipToDate.isBeforeOrEqual(date)) {\n throw new Error(\n 'A provided `skipToDate` option must be greater than the last yielded date ' +\n '(or smaller, in the case of reverse iteration)',\n );\n }\n date = iterable.next().value;\n }\n return undefined;\n }\n *iterate() {\n let startingDate = this.start;\n if (this.reverse) startingDate = this.end;\n let date = this.nextDate(startingDate);\n while (date) {\n const args = yield this.normalizeRunOutput(date);\n if (args && args.skipToDate) {\n if (\n this.reverse\n ? args.skipToDate.isAfterOrEqual(date)\n : args.skipToDate.isBeforeOrEqual(date)\n ) {\n // We cannot consistently skip backwards because after an iterator is \"done\"\n // it always returns undefined and you cannot reset it. Theoretically, it would be\n // fine to skip backwards if the iterator wasn't already \"done\", but this\n // would be prone to user error so we simply disallow skipping backwards altogether.\n throw new Error(\n 'A provided `skipToDate` option must be greater than the last yielded date ' +\n '(or smaller, in the case of reverse iteration)',\n );\n }\n date = this.nextDate(args.skipToDate);\n } else {\n date = this.nextDate(\n this.reverse ? date.subtract(1, 'millisecond') : date.add(1, 'millisecond'),\n );\n }\n }\n return undefined;\n }\n /**\n * Loops through the recurrence rules until a valid date is found.\n */\n nextDate(start) {\n let result = this.runRules(start.set('generators', []));\n if (this.isDatePastEnd(result.date)) return null;\n let index = 0;\n while (result instanceof InvalidDateTime && index < 50) {\n result = this.runRules(result.date);\n if (this.isDatePastEnd(result.date)) return null;\n index++;\n }\n if (result instanceof InvalidDateTime) {\n throw new RecurrenceRuleError(\n `Failed to find a matching occurrence in ${index} iterations. ` +\n `Last iterated date: \"${result.date.toISOString()}\"`,\n );\n }\n if (this.reverse ? start.isBefore(result.date) : start.isAfter(result.date)) {\n throw new RecurrenceRuleError(\n 'An error occurred in a recurrence rule. If this happened using ' +\n 'the rSchedule provided recurrence rules, you should ' +\n 'open an issue in the rSchedule repo. The maintainer is going to ' +\n 'want to know how to recreate the error.',\n );\n }\n return result.date;\n }\n /**\n * Performs one run of the recurrence rules and returns the result.\n * It's a slightly optimized reducer function.\n */\n runRules(start) {\n let result = new ValidDateTime(start);\n for (const rule of this.rules) {\n if (result instanceof InvalidDateTime) {\n return result;\n }\n result = rule.run(result.date);\n }\n return result;\n }\n isDatePastEnd(date) {\n return this.reverse ? date.isBefore(this.start) : this.end && date.isAfter(this.end);\n }\n normalizeRunOutput(date) {\n return this.hasDuration ? date.set('duration', this.options.duration) : date;\n }\n normalizeDateTimeArgs(args) {\n return {\n start: args.start && normalizeDateTimeTimezone(args.start, this.options.start.timezone),\n end: args.end && normalizeDateTimeTimezone(args.end, this.options.start.timezone),\n };\n }\n}\n\nexport {\n ArgumentError,\n DateAdapter,\n DateAdapterBase,\n DateTime,\n InfiniteLoopError,\n InvalidDateAdapterError,\n InvalidDateTime,\n InvalidDateTimeError,\n RecurrenceRuleError,\n RecurrenceRulesIterator,\n RuleOptionError,\n ValidDateTime,\n cloneJSON,\n cloneRuleOptions,\n dateInputToDateAdapter,\n dateInputToDateTime,\n dateTimeSortComparer,\n freqToGranularity,\n getDaysInYear,\n getDifferenceBetweenWeekdays,\n isLeapYear,\n normalizeDateTimeTimezone,\n normalizeRuleOptions,\n numberSortComparer,\n orderedWeekdays,\n recurrenceRulesReducer,\n uniqDateTimes,\n};\n","import {\n freqToGranularity,\n ValidDateTime,\n InvalidDateTime,\n DateAdapter,\n RuleOptionError,\n numberSortComparer,\n getDifferenceBetweenWeekdays,\n RecurrenceRuleError,\n uniqDateTimes,\n dateTimeSortComparer,\n} from '@rschedule/core';\n\nclass RecurrenceRule {\n constructor(processor) {\n this.processor = processor;\n this.start = processor.start;\n this.end = processor.end;\n this.options = processor.options;\n }\n}\n\nclass FrequencyRule extends RecurrenceRule {\n constructor(processor, initDate) {\n super(processor);\n this.initDate = initDate;\n this.intervalUnit = freqToGranularity(this.options.frequency);\n this.firstIntervalStartDate = this.normalizedStartDate(this.options.start);\n this.intervalStartDate = this.firstIntervalStartDate;\n this.intervalEndDate = this.normalizedEndDate(this.firstIntervalStartDate);\n this.skipToInterval(this.initDate);\n }\n run(date) {\n return this.validateDate(new ValidDateTime(date));\n }\n validateDate(arg) {\n const { date } = arg;\n if (arg instanceof ValidDateTime && this.dateIsWithinInterval(date)) {\n return arg;\n }\n this.skipToInterval(date);\n return new InvalidDateTime(\n // if the interval is 1, date will always be within the interval\n this.dateIsWithinInterval(date) ? date : this.setToCurrentInterval(),\n );\n }\n setToCurrentInterval() {\n return this.intervalStartDate;\n }\n normalizedStartDate(date) {\n if (this.options.frequency === 'WEEKLY') {\n return date.granularity('week', { weekStart: this.options.weekStart });\n }\n return date.granularity(this.intervalUnit);\n }\n normalizedEndDate(start) {\n switch (this.options.frequency) {\n case 'YEARLY':\n return start.add(1, 'year');\n case 'MONTHLY':\n return start.add(1, 'month');\n case 'WEEKLY':\n return start.add(1, 'week');\n case 'DAILY':\n return start.add(1, 'day');\n case 'HOURLY':\n return start.add(1, 'hour');\n case 'MINUTELY':\n return start.add(1, 'minute');\n case 'SECONDLY':\n return start.add(1, 'second');\n case 'MILLISECONDLY':\n return start.add(1, 'millisecond');\n default:\n throw new Error(`Unknown frequency ${this.options.frequency}`);\n }\n }\n skipToInterval(date) {\n const amount = this.intervalDifference(date);\n this.intervalStartDate = this.firstIntervalStartDate.add(amount, this.intervalUnit);\n this.intervalEndDate = this.normalizedEndDate(this.intervalStartDate);\n }\n dateIsWithinInterval(date) {\n return this.intervalStartDate.isBeforeOrEqual(date) && this.intervalEndDate.isAfter(date);\n }\n intervalDifference(date) {\n return intervalDifferenceBetweenDates({\n first: this.firstIntervalStartDate,\n second: date,\n unit: this.intervalUnit,\n interval: this.options.interval,\n weekStart: this.options.weekStart,\n direction: 'after',\n });\n }\n}\n/**\n * Given the frequency (unit) and interval, this function finds\n * how many jumps forward the first date needs in order to equal\n * or exceed the second date.\n *\n * For example:\n *\n * 1. Unit is daily and interval is 1. The second date is 3 days\n * after the first. This will return 3.\n * 2. Unit is yearly and interval is 1. The second date is 3 days\n * after the first. This will return 0.\n * 3. Unit is yearly and interval is 3. The second date is 4 years\n * after the first. This will return 6.\n */\nfunction intervalDifferenceBetweenDates({ first, second, unit, interval, weekStart, direction }) {\n let difference = (() => {\n let intervalDuration;\n let months;\n switch (unit) {\n case 'year':\n months = (second.get('year') - first.get('year')) * 12;\n months = months + second.get('month') - first.get('month');\n return Math.floor(months / 12);\n case 'month':\n months = (second.get('year') - first.get('year')) * 12;\n months = months + second.get('month') - first.get('month');\n return months;\n case 'week':\n first = first.granularity('week', { weekStart });\n intervalDuration = DateAdapter.MILLISECONDS_IN_WEEK;\n break;\n case 'day':\n intervalDuration = DateAdapter.MILLISECONDS_IN_DAY;\n break;\n case 'hour':\n intervalDuration = DateAdapter.MILLISECONDS_IN_HOUR;\n break;\n case 'minute':\n intervalDuration = DateAdapter.MILLISECONDS_IN_MINUTE;\n break;\n case 'second':\n intervalDuration = DateAdapter.MILLISECONDS_IN_SECOND;\n break;\n case 'millisecond':\n intervalDuration = 1;\n break;\n default:\n throw new Error('Unexpected `unit` value');\n }\n const diff = second.valueOf() - first.valueOf();\n return Math.floor(diff / intervalDuration);\n })();\n const fn = direction === 'after' ? Math.ceil : Math.floor;\n difference = fn(difference / interval) * interval;\n return difference;\n}\n\nclass RevFrequencyRule extends FrequencyRule {\n setToCurrentInterval() {\n return this.intervalEndDate.subtract(1, 'millisecond');\n }\n intervalDifference(date) {\n return intervalDifferenceBetweenDates({\n first: this.firstIntervalStartDate,\n second: date,\n unit: this.intervalUnit,\n interval: this.options.interval,\n weekStart: this.options.weekStart,\n direction: 'before',\n });\n }\n}\n\nconst FREQUENCIES = [\n 'MILLISECONDLY',\n 'SECONDLY',\n 'MINUTELY',\n 'HOURLY',\n 'DAILY',\n 'WEEKLY',\n 'MONTHLY',\n 'YEARLY',\n];\nconst FrequencyRuleModule = {\n name: 'FrequencyRule',\n get: processor => {\n if (\n processor.options.byMillisecondOfSecond !== undefined ||\n processor.options.frequency !== 'MILLISECONDLY'\n ) {\n return null;\n }\n if (processor.reverse) return new RevFrequencyRule(processor, processor.end);\n return new FrequencyRule(processor, processor.start);\n },\n normalizeOptions: (options, norm) => {\n if (!FREQUENCIES.includes(options.frequency)) {\n throw new RuleOptionError(`\"frequency\" must be one of ${JSON.stringify(FREQUENCIES)}`);\n }\n if (options.interval !== undefined) {\n if (!Number.isInteger(options.interval)) {\n throw new RuleOptionError('\"interval\" expects a whole number');\n }\n if (options.interval < 1) {\n throw new RuleOptionError('\"interval\" cannot be less than 1');\n }\n }\n if (options.weekStart !== undefined) {\n if (!DateAdapter.WEEKDAYS.includes(options.weekStart)) {\n throw new RuleOptionError(\n `\"weekStart\" must be one of ${JSON.stringify(DateAdapter.WEEKDAYS)}`,\n );\n }\n }\n norm.frequency = options.frequency;\n norm.interval = options.interval || 1;\n norm.weekStart = options.weekStart || 'MO';\n },\n deps: () => [FrequencyRuleModule],\n};\n\nfunction ruleOptionFilled(option) {\n return Array.isArray(option) && option.length > 0;\n}\n\nconst freqCache = new WeakMap();\nclass RecurrenceRuleBase extends RecurrenceRule {\n constructor(processor) {\n super(processor);\n if (!freqCache.has(this.processor)) {\n freqCache.set(this.processor, new FrequencyRule(processor, processor.start));\n }\n this.frequency = freqCache.get(this.processor);\n }\n validateDate(arg) {\n return this.frequency.validateDate(arg);\n }\n}\nclass RevRecurrenceRuleBase extends RecurrenceRule {\n constructor(processor) {\n super(processor);\n if (!freqCache.has(this.processor)) {\n freqCache.set(this.processor, new RevFrequencyRule(processor, processor.end));\n }\n this.frequency = freqCache.get(this.processor);\n }\n validateDate(arg) {\n return this.frequency.validateDate(arg);\n }\n}\n\n/**\n * Contains shared logic for ByHourOfDay, ByMinuteOfHour,\n * BySecondOfMinute, and ByMillisecondOfSecond reverse rule pipes\n */\nclass RevByTimeOfUnitRule extends RevRecurrenceRuleBase {\n run(date) {\n // e.g. const currentTime = date.get('hour');\n const currentTime = date.get(this.granularity);\n // e.g. for (const time of this.options.byHourOfDay) {\n for (const time of this.option) {\n if (currentTime < time) continue;\n if (currentTime === time) {\n return this.validateDate(new ValidDateTime(date));\n }\n // e.g. return this.nextValidDate(args, date.endGranularity('day').set('hour', time));\n return this.validateDate(\n new InvalidDateTime(date.endGranularity(this.baseGranularity).set(this.granularity, time)),\n );\n }\n return this.validateDate(\n new InvalidDateTime(\n date\n // e.g. .endGranularity('day')\n .endGranularity(this.baseGranularity)\n // e.g. .subtract(1, 'day')\n .subtract(1, this.baseGranularity)\n // e.g. .set('hour', this.options.byHourOfDay[0]);\n .set(this.granularity, this.option[0]),\n ),\n );\n }\n}\n\nclass RevByMillisecondOfSecondRule extends RevByTimeOfUnitRule {\n constructor() {\n super(...arguments);\n this.baseGranularity = 'second';\n this.granularity = 'millisecond';\n this.option = this.options.byMillisecondOfSecond.slice().reverse();\n }\n}\n\n/**\n * Contains shared logic for ByHourOfDay, ByMinuteOfHour,\n * BySecondOfMinute, and ByMillisecondOfSecond rule pipes\n */\nclass ByTimeOfUnitRule extends RecurrenceRuleBase {\n run(date) {\n // e.g. const currentTime = date.get('hour');\n const currentTime = date.get(this.granularity);\n // e.g. for (const time of this.options.byHourOfDay) {\n for (const time of this.option) {\n if (currentTime > time) continue;\n if (currentTime === time) {\n return this.validateDate(new ValidDateTime(date));\n }\n // e.g. return this.nextValidDate(args, date.granularity('day').set('hour', time));\n return this.validateDate(\n new InvalidDateTime(date.granularity(this.baseGranularity).set(this.granularity, time)),\n );\n }\n return this.validateDate(\n new InvalidDateTime(\n date\n // e.g. .granularity('day')\n .granularity(this.baseGranularity)\n // e.g. .add(1, 'day')\n .add(1, this.baseGranularity)\n // e.g. .set('hour', this.options.byHourOfDay[0]);\n .set(this.granularity, this.option[0]),\n ),\n );\n }\n}\n\nclass ByMillisecondOfSecondRule extends ByTimeOfUnitRule {\n constructor() {\n super(...arguments);\n this.baseGranularity = 'second';\n this.granularity = 'millisecond';\n this.option = this.options.byMillisecondOfSecond;\n }\n}\n\nconst ByMillisecondOfSecondRuleModule = {\n name: 'ByMillisecondOfSecond',\n get: processor => {\n if (processor.options.byMillisecondOfSecond === undefined) return null;\n if (processor.reverse) return new RevByMillisecondOfSecondRule(processor);\n return new ByMillisecondOfSecondRule(processor);\n },\n normalizeOptions: (options, norm) => {\n if (options.byMillisecondOfSecond !== undefined) {\n if (!ruleOptionFilled(options.byMillisecondOfSecond)) {\n throw new RuleOptionError('\"byMillisecondOfSecond\" expects a non-empty array');\n }\n if (options.byMillisecondOfSecond.some(num => num < 0 || num > 999)) {\n throw new RuleOptionError('\"byMillisecondOfSecond\" values must be >= 0 && <= 999');\n }\n norm.byMillisecondOfSecond = options.byMillisecondOfSecond;\n norm.byMillisecondOfSecond.sort(numberSortComparer);\n } else if (options.frequency !== 'MILLISECONDLY') {\n norm.byMillisecondOfSecond = [norm.start.get('millisecond')];\n }\n },\n deps: () => [FrequencyRuleModule, ByMillisecondOfSecondRuleModule],\n};\n\nclass RevBySecondOfMinuteRule extends RevByTimeOfUnitRule {\n constructor() {\n super(...arguments);\n this.baseGranularity = 'minute';\n this.granularity = 'second';\n this.option = this.options.bySecondOfMinute.slice().reverse();\n }\n}\n\nclass BySecondOfMinuteRule extends ByTimeOfUnitRule {\n constructor() {\n super(...arguments);\n this.baseGranularity = 'minute';\n this.granularity = 'second';\n this.option = this.options.bySecondOfMinute;\n }\n}\n\nconst BySecondOfMinuteRuleModule = {\n name: 'BySecondOfMinute',\n get: processor => {\n if (processor.options.bySecondOfMinute === undefined) return null;\n if (processor.reverse) return new RevBySecondOfMinuteRule(processor);\n return new BySecondOfMinuteRule(processor);\n },\n normalizeOptions: (options, norm) => {\n if (options.bySecondOfMinute !== undefined) {\n if (!ruleOptionFilled(options.bySecondOfMinute)) {\n throw new RuleOptionError('\"bySecondOfMinute\" expects a non-empty array');\n }\n if (options.bySecondOfMinute.some(num => num < 0 || num > 60)) {\n throw new RuleOptionError('\"bySecondOfMinute\" values must be >= 0 && <= 60');\n }\n norm.bySecondOfMinute = options.bySecondOfMinute;\n norm.bySecondOfMinute.sort(numberSortComparer);\n } else if (!['SECONDLY', 'MILLISECONDLY'].includes(options.frequency)) {\n norm.bySecondOfMinute = [norm.start.get('second')];\n }\n },\n deps: () => [FrequencyRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule],\n};\n\nclass RevByMinuteOfHourRule extends RevByTimeOfUnitRule {\n constructor() {\n super(...arguments);\n this.baseGranularity = 'hour';\n this.granularity = 'minute';\n this.option = this.options.byMinuteOfHour.slice().reverse();\n }\n}\n\nclass ByMinuteOfHourRule extends ByTimeOfUnitRule {\n constructor() {\n super(...arguments);\n this.baseGranularity = 'hour';\n this.granularity = 'minute';\n this.option = this.options.byMinuteOfHour;\n }\n}\n\nconst ByMinuteOfHourRuleModule = {\n name: 'ByMinuteOfHour',\n get: processor => {\n if (processor.options.byMinuteOfHour === undefined) return null;\n if (processor.reverse) return new RevByMinuteOfHourRule(processor);\n return new ByMinuteOfHourRule(processor);\n },\n normalizeOptions: (options, norm) => {\n if (options.byMinuteOfHour !== undefined) {\n if (!ruleOptionFilled(options.byMinuteOfHour)) {\n throw new RuleOptionError('\"byMinuteOfHour\" expects a non-empty array');\n }\n if (options.byMinuteOfHour.some(num => num < 0 || num > 59)) {\n throw new RuleOptionError('\"byMinuteOfHour\" values must be >= 0 && <= 59');\n }\n norm.byMinuteOfHour = options.byMinuteOfHour;\n norm.byMinuteOfHour.sort(numberSortComparer);\n } else if (!['MINUTELY', 'SECONDLY', 'MILLISECONDLY'].includes(options.frequency)) {\n norm.byMinuteOfHour = [norm.start.get('minute')];\n }\n },\n deps: () => [\n FrequencyRuleModule,\n ByMinuteOfHourRuleModule,\n BySecondOfMinuteRuleModule,\n ByMillisecondOfSecondRuleModule,\n ],\n};\n\nclass RevByHourOfDayRule extends RevByTimeOfUnitRule {\n constructor() {\n super(...arguments);\n this.baseGranularity = 'day';\n this.granularity = 'hour';\n this.option = this.options.byHourOfDay.slice().reverse();\n }\n}\n\nclass ByHourOfDayRule extends ByTimeOfUnitRule {\n constructor() {\n super(...arguments);\n this.baseGranularity = 'day';\n this.granularity = 'hour';\n this.option = this.options.byHourOfDay;\n }\n}\n\nconst ByHourOfDayRuleModule = {\n name: 'ByHourOfDay',\n get: processor => {\n if (processor.options.byHourOfDay === undefined) return null;\n if (processor.reverse) return new RevByHourOfDayRule(processor);\n return new ByHourOfDayRule(processor);\n },\n normalizeOptions: (options, norm) => {\n if (options.byHourOfDay !== undefined) {\n if (!ruleOptionFilled(options.byHourOfDay)) {\n throw new RuleOptionError('\"byHourOfDay\" expects a non-empty array');\n }\n if (options.byHourOfDay.some(num => num < 0 || num > 23)) {\n throw new RuleOptionError('\"byHourOfDay\" values must be >= 0 && <= 23');\n }\n norm.byHourOfDay = options.byHourOfDay;\n norm.byHourOfDay.sort(numberSortComparer);\n } else if (['YEARLY', 'MONTHLY', 'WEEKLY', 'DAILY'].includes(options.frequency)) {\n norm.byHourOfDay = [norm.start.get('hour')];\n }\n },\n deps: () => [\n FrequencyRuleModule,\n ByHourOfDayRuleModule,\n ByMinuteOfHourRuleModule,\n BySecondOfMinuteRuleModule,\n ByMillisecondOfSecondRuleModule,\n ],\n};\n\nfunction getNextWeekday(date, weekday) {\n return date.add(getDifferenceBetweenWeekdays(date.get('weekday'), weekday), 'day');\n}\n\nfunction getNthWeekdayOfMonth(date, weekday, nth) {\n let base = date.set('day', 1);\n if (nth < 0) {\n base = base.add(1, 'month');\n }\n base = getNextWeekday(base, weekday);\n // when nth is negative, adding it will act as subtraction\n return nth < 0 ? base.add(nth, 'week') : base.add(nth - 1, 'week');\n}\n\nclass ByDayOfMonthRule extends RecurrenceRuleBase {\n run(date) {\n const normalizedByDayOfMonth = normalizeByDayOfMonth(\n date,\n this.options.byDayOfMonth,\n this.options.byDayOfWeek,\n );\n const currentDay = date.get('day');\n for (const day of normalizedByDayOfMonth) {\n if (currentDay > day) continue;\n if (currentDay === day) {\n return this.validateDate(new ValidDateTime(date));\n }\n return this.validateDate(new InvalidDateTime(date.granularity('month').set('day', day)));\n }\n let next;\n let nextMonth = date;\n let index = 0;\n while (!next && index < 30) {\n nextMonth = nextMonth.granularity('month').add(1, 'month');\n next = normalizeByDayOfMonth(\n nextMonth,\n this.options.byDayOfMonth,\n this.options.byDayOfWeek,\n )[0];\n index++;\n }\n if (index >= 13) {\n throw new RecurrenceRuleError('byDayOfMonth Infinite while loop');\n }\n return this.validateDate(new InvalidDateTime(nextMonth.set('day', next)));\n }\n}\n/**\n * Does a few things:\n *\n * 1. filters out byDayOfMonth entries which are not applicable\n * to current month\n * 2. negative entries to positive ones\n * 3. if a byDayOfWeek option is given, removes days which are\n * not on the correct day of the week\n */\nfunction normalizeByDayOfMonth(date, byDayOfMonth, byDayOfWeek) {\n const lengthOfMonth = date.endGranularity('month').get('day');\n let normalizedByDayOfMonth = byDayOfMonth\n .filter(day => lengthOfMonth >= Math.abs(day))\n .map(day => (day > 0 ? day : lengthOfMonth + day + 1));\n if (byDayOfWeek) {\n const base = date.granularity('month');\n const filteredByDayOfMonth = [];\n byDayOfWeek.forEach(entry => {\n if (typeof entry === 'string') {\n filteredByDayOfMonth.push(\n ...normalizedByDayOfMonth.filter(day => base.set('day', day).get('weekday') === entry),\n );\n return;\n }\n const nthWeekdayOfMonth = getNthWeekdayOfMonth(date, ...entry).get('day');\n if (normalizedByDayOfMonth.includes(nthWeekdayOfMonth)) {\n filteredByDayOfMonth.push(nthWeekdayOfMonth);\n }\n });\n normalizedByDayOfMonth = Array.from(new Set(filteredByDayOfMonth));\n }\n return normalizedByDayOfMonth.sort((a, b) => {\n if (a > b) return 1;\n if (a < b) return -1;\n else return 0;\n });\n}\n\nclass RevByDayOfMonthRule extends RevRecurrenceRuleBase {\n run(date) {\n const normalizedByDayOfMonth = normalizeByDayOfMonth(\n date,\n this.options.byDayOfMonth,\n this.options.byDayOfWeek,\n ).reverse();\n const currentDay = date.get('day');\n for (const day of normalizedByDayOfMonth) {\n if (currentDay < day) continue;\n if (currentDay === day) {\n return this.validateDate(new ValidDateTime(date));\n }\n return this.validateDate(new InvalidDateTime(date.endGranularity('month').set('day', day)));\n }\n let next;\n let nextMonth = date;\n let index = 0;\n while (!next && index < 30) {\n nextMonth = nextMonth.endGranularity('month').subtract(1, 'month');\n next = normalizeByDayOfMonth(\n nextMonth,\n this.options.byDayOfMonth,\n this.options.byDayOfWeek,\n ).pop();\n index++;\n }\n if (index >= 13) {\n throw new RecurrenceRuleError('byDayOfMonth Infinite while loop');\n }\n return this.validateDate(new InvalidDateTime(nextMonth.set('day', next)));\n }\n}\n\nconst ByDayOfMonthRuleModule = {\n name: 'ByDayOfMonth',\n get: processor => {\n if (processor.options.byDayOfMonth === undefined) return null;\n if (processor.reverse) return new RevByDayOfMonthRule(processor);\n return new ByDayOfMonthRule(processor);\n },\n normalizeOptions: (options, norm) => {\n if (options.byDayOfMonth !== undefined) {\n if (options.frequency === 'WEEKLY') {\n throw new RuleOptionError('when \"frequency\" is \"WEEKLY\", \"byDayOfMonth\" cannot be present');\n }\n if (!ruleOptionFilled(options.byDayOfMonth)) {\n throw new RuleOptionError('\"byDayOfMonth\" expects a non-empty array');\n }\n if (options.byDayOfMonth.some(num => num === 0 || num < -31 || num > 31)) {\n throw new RuleOptionError(\n '\"byDayOfMonth\" values must be `num !== 0 && num <= 31 && num >= -31`',\n );\n }\n norm.byDayOfMonth = options.byDayOfMonth.slice();\n } else if (\n !(ruleOptionFilled(options.byDayOfWeek) || ruleOptionFilled(options.byDayOfYear)) &&\n ['YEARLY', 'MONTHLY'].includes(options.frequency)\n ) {\n norm.byDayOfMonth = [norm.start.get('day')];\n }\n },\n deps: () => [\n FrequencyRuleModule,\n ByDayOfMonthRuleModule,\n ByHourOfDayRuleModule,\n ByMinuteOfHourRuleModule,\n BySecondOfMinuteRuleModule,\n ByMillisecondOfSecondRuleModule,\n ],\n};\n\nfunction getNthWeekdayOfYear(date, weekday, nth) {\n let base = date.set('month', 1).set('day', 1);\n if (nth < 0) {\n base = base.add(1, 'year');\n }\n base = getNextWeekday(base, weekday);\n // when nth is negative, adding it will act as subtraction\n return nth < 0 ? base.add(nth, 'week') : base.add(nth - 1, 'week');\n}\n\nfunction getPreviousWeekday(date, weekday) {\n const diff = getDifferenceBetweenWeekdays(date.get('weekday'), weekday);\n return date.subtract(diff === 0 ? 0 : 7 - diff, 'day');\n}\n\nclass RevByDayOfWeekRule extends RevRecurrenceRuleBase {\n run(date) {\n if (this.options.frequency === 'YEARLY') {\n return this.options.byMonthOfYear === undefined\n ? this.expandYearly(date)\n : this.expandMonthly(date);\n } else if (this.options.frequency === 'MONTHLY') {\n return this.expandMonthly(date);\n }\n return this.expand(date);\n }\n expandYearly(date) {\n let next = getPrevWeekdaysOfYear(date, this.options.byDayOfWeek)[0];\n let index = 0;\n let base = date;\n // If we can't find a valid date this year,\n // search the previous year. Only search the past 28 years.\n // (the calendar repeats on a 28 year cycle, according\n // to the internet).\n while (!next && index < 28) {\n index++;\n base = base.granularity('year').subtract(1, 'millisecond');\n next = getPrevWeekdaysOfYear(base, this.options.byDayOfWeek)[0];\n }\n if (!next) {\n throw new RecurrenceRuleError(\n 'The byDayOfWeek rule appears to contain an impossible combination',\n );\n }\n return this.result(date, next);\n }\n expandMonthly(date) {\n let next = getPrevWeekdaysOfMonth(date, this.options.byDayOfWeek)[0];\n let index = 0;\n let base = date;\n // TODO: performance improvment\n // If, in the first year, a match isn't found, we should be able to\n // jumpt to the previous leap year and check that. Or, if already on\n // a leap year, we can just error immediately.\n // If we can't find a valid date this month,\n // search the previous month. Only search the past 4 years\n // (to account for leap year).\n while (!next && index < 50) {\n index++;\n base = base.granularity('month').subtract(1, 'millisecond');\n next = getPrevWeekdaysOfMonth(base, this.options.byDayOfWeek)[0];\n }\n if (!next) {\n throw new RecurrenceRuleError(\n 'The byDayOfWeek rule appears to contain an impossible combination',\n );\n }\n return this.result(date, next);\n }\n expand(date) {\n const next = this.options.byDayOfWeek\n .map(weekday => getPreviousWeekday(date, weekday))\n .sort(dateTimeSortComparer)\n .pop();\n return this.result(date, next);\n }\n result(date, next) {\n if (next.isEqual(date)) {\n return this.validateDate(new ValidDateTime(date));\n }\n return this.validateDate(new InvalidDateTime(next.endGranularity('day')));\n }\n}\n/** For each byDayOfWeek entry, find the previous DateTime */\nfunction getPrevWeekdaysOfYear(date, byDayOfWeek) {\n const normalizedNthWeekdaysOfYear = byDayOfWeek\n .filter(entry => Array.isArray(entry))\n .map(entry => getNthWeekdayOfYear(date, ...entry));\n const normalizedNextWeekdays = byDayOfWeek\n .filter(entry => typeof entry === 'string')\n .map(weekday => getPreviousWeekday(date, weekday))\n .filter(entry => entry.get('year') === date.get('year'));\n return uniqDateTimes([...normalizedNthWeekdaysOfYear, ...normalizedNextWeekdays])\n .filter(entry => entry.isBeforeOrEqual(date))\n .sort(dateTimeSortComparer)\n .reverse();\n}\n/** For each byDayOfWeek entry, find the previous DateTime */\nfunction getPrevWeekdaysOfMonth(date, byDayOfWeek) {\n const normalizedNthWeekdaysOfMonth = byDayOfWeek\n .filter(entry => Array.isArray(entry))\n .map(entry => getNthWeekdayOfMonth(date, ...entry));\n const normalizedNextWeekdays = byDayOfWeek\n .filter(entry => typeof entry === 'string')\n .map(weekday => getPreviousWeekday(date, weekday))\n .filter(\n entry => entry.get('year') === date.get('year') && entry.get('month') === date.get('month'),\n );\n return uniqDateTimes([...normalizedNthWeekdaysOfMonth, ...normalizedNextWeekdays])\n .filter(entry => entry.isBeforeOrEqual(date))\n .sort(dateTimeSortComparer)\n .reverse();\n}\n\nclass ByDayOfWeekRule extends RecurrenceRuleBase {\n run(date) {\n if (this.options.frequency === 'YEARLY') {\n return this.options.byMonthOfYear === undefined\n ? this.expandYearly(date)\n : this.expandMonthly(date);\n } else if (this.options.frequency === 'MONTHLY') {\n return this.expandMonthly(date);\n }\n return this.expand(date);\n }\n expandYearly(date) {\n let next = getNextWeekdaysOfYear(date, this.options.byDayOfWeek)[0];\n let index = 0;\n let base = date;\n // If we can't find a valid date this year,\n // search next year. Only search the next 28 years.\n // (the calendar repeats on a 28 year cycle, according\n // to the internet).\n while (!next && index < 28) {\n index++;\n base = base.granularity('year').add(1, 'year');\n next = getNextWeekdaysOfYear(base, this.options.byDayOfWeek)[0];\n }\n if (!next) {\n throw new RecurrenceRuleError(\n 'The byDayOfWeek rule appears to contain an impossible combination',\n );\n }\n return this.result(date, next);\n }\n expandMonthly(date) {\n let next = getNextWeekdaysOfMonth(date, this.options.byDayOfWeek)[0];\n let index = 0;\n let base = date;\n // TODO: performance improvment\n // If, in the first year, a match isn't found, we should be able to\n // jumpt to the next leap year and check that. Or, if already on\n // a leap year, we can just error immediately.\n // If we can't find a valid date this month,\n // search the next month. Only search the next 4 years\n // (to account for leap year).\n while (!next && index < 50) {\n index++;\n base = base.granularity('month').add(1, 'month');\n next = getNextWeekdaysOfMonth(base, this.options.byDayOfWeek)[0];\n }\n if (!next) {\n throw new RecurrenceRuleError(\n 'The byDayOfWeek rule appears to contain an impossible combination',\n );\n }\n return this.result(date, next);\n }\n expand(date) {\n const next = this.options.byDayOfWeek\n .map(weekday => getNextWeekday(date, weekday))\n .sort(dateTimeSortComparer)[0];\n return this.result(date, next);\n }\n result(date, next) {\n if (next.isEqual(date)) {\n return this.validateDate(new ValidDateTime(date));\n }\n return this.validateDate(new InvalidDateTime(next.granularity('day')));\n }\n}\n/** For each byDayOfWeek entry, find the next DateTime */\nfunction getNextWeekdaysOfYear(date, byDayOfWeek) {\n const normalizedNthWeekdaysOfYear = byDayOfWeek\n .filter(entry => Array.isArray(entry))\n .map(entry => getNthWeekdayOfYear(date, ...entry));\n const normalizedNextWeekdays = byDayOfWeek\n .filter(entry => typeof entry === 'string')\n .map(weekday => getNextWeekday(date, weekday))\n .filter(entry => entry.get('year') === date.get('year'));\n return uniqDateTimes([...normalizedNthWeekdaysOfYear, ...normalizedNextWeekdays])\n .filter(entry => entry.isAfterOrEqual(date))\n .sort(dateTimeSortComparer);\n}\n/** For each byDayOfWeek entry, find the next DateTime */\nfunction getNextWeekdaysOfMonth(date, byDayOfWeek) {\n const normalizedNthWeekdaysOfMonth = byDayOfWeek\n .filter(entry => Array.isArray(entry))\n .map(entry => getNthWeekdayOfMonth(date, ...entry));\n const normalizedNextWeekdays = byDayOfWeek\n .filter(entry => typeof entry === 'string')\n .map(weekday => getNextWeekday(date, weekday))\n .filter(\n entry => entry.get('year') === date.get('year') && entry.get('month') === date.get('month'),\n );\n return uniqDateTimes([...normalizedNthWeekdaysOfMonth, ...normalizedNextWeekdays])\n .filter(entry => entry.isAfterOrEqual(date))\n .sort(dateTimeSortComparer);\n}\n\nconst ByDayOfWeekRuleModule = {\n name: 'ByDayOfWeek',\n get: processor => {\n if (processor.options.byDayOfWeek === undefined) return null;\n if (processor.reverse) return new RevByDayOfWeekRule(processor);\n return new ByDayOfWeekRule(processor);\n },\n normalizeOptions: (options, norm) => {\n if (options.byDayOfWeek !== undefined) {\n if (!ruleOptionFilled(options.byDayOfWeek)) {\n throw new RuleOptionError('\"byDayOfWeek\" expects a non-empty array');\n }\n const invalidWeeday = options.byDayOfWeek.find(day =>\n Array.isArray(day)\n ? !DateAdapter.WEEKDAYS.includes(day[0])\n : !DateAdapter.WEEKDAYS.includes(day),\n );\n if (invalidWeeday) {\n throw new RuleOptionError(\n `\"byDayOfWeek\" expects weedays in the form ` +\n `${JSON.stringify(DateAdapter.WEEKDAYS)} but \"${invalidWeeday}\" was provided`,\n );\n }\n if (\n !['YEARLY', 'MONTHLY'].includes(options.frequency) &&\n options.byDayOfWeek.some(weekday => Array.isArray(weekday))\n ) {\n throw new RuleOptionError(\n '\"byDayOfWeek\" can only include a numeric value (i.e. `[string, number]`) when the \"frequency\" is ' +\n 'either \"MONTHLY\" or \"YEARLY\"',\n );\n }\n if (\n options.frequency === 'MONTHLY' &&\n options.byDayOfWeek.some(\n weekday =>\n Array.isArray(weekday) && (weekday[1] < -31 || weekday[1] === 0 || weekday[1] > 31),\n )\n ) {\n throw new RuleOptionError(\n 'when \"frequency\" is \"MONTHLY\", each \"byDayOfWeek\" can optionally only' +\n ' have a numeric value >= -31 and <= 31 and !== 0',\n );\n }\n if (\n options.frequency === 'YEARLY' &&\n options.byDayOfWeek.some(\n weekday =>\n Array.isArray(weekday) && (weekday[1] < -366 || weekday[1] === 0 || weekday[1] > 366),\n )\n ) {\n throw new RuleOptionError(\n 'when \"frequency\" is \"YEARLY\", each \"byDayOfWeek\" can optionally only' +\n ' have a numeric value >= -366 and <= 366 and !== 0',\n );\n }\n norm.byDayOfWeek = options.byDayOfWeek;\n } else if (!ruleOptionFilled(options.byDayOfMonth) && options.frequency === 'WEEKLY') {\n norm.byDayOfWeek = [norm.start.get('weekday')];\n }\n },\n deps: () => [\n FrequencyRuleModule,\n ByDayOfWeekRuleModule,\n ByHourOfDayRuleModule,\n ByMinuteOfHourRuleModule,\n BySecondOfMinuteRuleModule,\n ByMillisecondOfSecondRuleModule,\n ],\n};\n\nclass RevByMonthOfYearRule extends RevRecurrenceRuleBase {\n constructor() {\n super(...arguments);\n this.option = this.processor.options.byMonthOfYear.slice().reverse();\n }\n run(date) {\n const currentMonth = date.get('month');\n for (const month of this.option) {\n if (currentMonth < month) continue;\n if (currentMonth === month) {\n return this.validateDate(new ValidDateTime(date));\n }\n return this.validateDate(\n new InvalidDateTime(date.endGranularity('year').set('month', month)),\n );\n }\n return this.validateDate(\n new InvalidDateTime(\n date\n .endGranularity('year')\n .subtract(1, 'year')\n .set('month', this.option[0]),\n ),\n );\n }\n}\n\nclass ByMonthOfYearRule extends RecurrenceRuleBase {\n run(date) {\n const currentMonth = date.get('month');\n for (const month of this.options.byMonthOfYear) {\n if (currentMonth > month) continue;\n if (currentMonth === month) {\n return this.validateDate(new ValidDateTime(date));\n }\n return this.validateDate(new InvalidDateTime(date.granularity('year').set('month', month)));\n }\n return this.validateDate(\n new InvalidDateTime(\n date\n .granularity('year')\n .add(1, 'year')\n .set('month', this.options.byMonthOfYear[0]),\n ),\n );\n }\n}\n\nconst ByMonthOfYearRuleModule = {\n name: 'ByMonthOfYear',\n get: processor => {\n if (processor.options.byMonthOfYear === undefined) return null;\n if (processor.reverse) {\n return new RevByMonthOfYearRule(processor);\n }\n return new ByMonthOfYearRule(processor);\n },\n normalizeOptions: (options, norm) => {\n if (options.byMonthOfYear !== undefined) {\n if (!ruleOptionFilled(options.byMonthOfYear)) {\n throw new RuleOptionError('\"byMonthOfYear\" expects a non-empty array');\n }\n if (options.byMonthOfYear.some(num => num < 1 || num > 12)) {\n throw new RuleOptionError('\"byMonthOfYear\" values must be `num >= 1 && num >= 12`');\n }\n norm.byMonthOfYear = options.byMonthOfYear.slice();\n norm.byMonthOfYear.sort(numberSortComparer);\n } else if (\n !(\n ruleOptionFilled(options.byDayOfMonth) ||\n ruleOptionFilled(options.byDayOfWeek) ||\n ruleOptionFilled(options.byDayOfYear)\n ) &&\n options.frequency === 'YEARLY'\n ) {\n norm.byMonthOfYear = [norm.start.get('month')];\n }\n },\n deps: () => [\n FrequencyRuleModule,\n ByMonthOfYearRuleModule,\n ByDayOfMonthRuleModule,\n ByHourOfDayRuleModule,\n ByMinuteOfHourRuleModule,\n BySecondOfMinuteRuleModule,\n ByMillisecondOfSecondRuleModule,\n ],\n};\n\nconst ICAL_RULES = [\n FrequencyRuleModule,\n ByMonthOfYearRuleModule,\n ByDayOfMonthRuleModule,\n ByDayOfWeekRuleModule,\n ByHourOfDayRuleModule,\n ByMinuteOfHourRuleModule,\n BySecondOfMinuteRuleModule,\n ByMillisecondOfSecondRuleModule,\n];\n\nexport {\n ByDayOfMonthRule,\n ByDayOfMonthRuleModule,\n ByDayOfWeekRule,\n ByDayOfWeekRuleModule,\n ByHourOfDayRule,\n ByHourOfDayRuleModule,\n ByMillisecondOfSecondRule,\n ByMillisecondOfSecondRuleModule,\n ByMinuteOfHourRule,\n ByMinuteOfHourRuleModule,\n ByMonthOfYearRule,\n ByMonthOfYearRuleModule,\n BySecondOfMinuteRule,\n BySecondOfMinuteRuleModule,\n FrequencyRule,\n FrequencyRuleModule,\n ICAL_RULES,\n RevByDayOfMonthRule,\n RevByDayOfWeekRule,\n RevByHourOfDayRule,\n RevByMillisecondOfSecondRule,\n RevByMinuteOfHourRule,\n RevByMonthOfYearRule,\n RevBySecondOfMinuteRule,\n RevFrequencyRule,\n getPrevWeekdaysOfMonth,\n getPrevWeekdaysOfYear,\n};\n","import { Dates, Rule, Schedule } from '@rschedule/core/generators';\nimport {\n serializeDataToJSON,\n ParseJSONError,\n registerJSONSerializerFn,\n} from '@rschedule/json-tools';\nimport { DateAdapterBase, cloneJSON } from '@rschedule/core';\n\nDates.prototype.toJSON = function serialize(opts = {}) {\n const json = {\n type: 'Dates',\n dates: this.adapters.map(adapter => adapter.toJSON()),\n };\n if (!opts.nested) json.timezone = this.timezone;\n serializeDataToJSON(this, json, opts);\n return json;\n};\nDates.fromJSON = function parse(json, options = {}) {\n if (json.type !== 'Dates') {\n throw new ParseJSONError('Invalid Dates JSON');\n }\n return new Dates({\n dates: json.dates.map(date => DateAdapterBase.adapter.fromJSON(date)),\n data: typeof options.data === 'function' ? options.data(json) : json.data,\n timezone: options.timezone || json.timezone,\n });\n};\nregisterJSONSerializerFn('Dates', Dates.fromJSON);\n\nRule.prototype.toJSON = function serialize(opts = {}) {\n const json = {\n type: 'Rule',\n config: Object.assign(Object.assign({}, cloneJSON(this.options)), {\n start: this.normalizeDateInput(this.options.start).toJSON(),\n }),\n };\n if (this.options.end) {\n json.config.end = this.normalizeDateInput(this.options.end).toJSON();\n }\n if (!opts.nested) json.timezone = this.timezone;\n serializeDataToJSON(this, json, opts);\n return json;\n};\nRule.fromJSON = function fromJSON(json, options = {}) {\n const config = Object.assign(Object.assign({}, json.config), {\n start: DateAdapterBase.adapter.fromJSON(json.config.start),\n end: json.config.end && DateAdapterBase.adapter.fromJSON(json.config.end),\n });\n return new Rule(config, {\n data: typeof options.data === 'function' ? options.data(json) : json.data,\n timezone: options.timezone || json.timezone,\n });\n};\nregisterJSONSerializerFn('Rule', Rule.fromJSON);\n\nSchedule.prototype.toJSON = function serialize(opts = {}) {\n const json = {\n type: 'Schedule',\n rrules: this.rrules.map(rule =>\n rule.toJSON(Object.assign(Object.assign({}, opts), { nested: true })),\n ),\n exrules: this.exrules.map(rule =>\n rule.toJSON(Object.assign(Object.assign({}, opts), { nested: true })),\n ),\n rdates: this.rdates.toJSON(Object.assign(Object.assign({}, opts), { nested: true })),\n exdates: this.exdates.toJSON(Object.assign(Object.assign({}, opts), { nested: true })),\n };\n if (!opts.nested) json.timezone = this.timezone;\n serializeDataToJSON(this, json, opts);\n return json;\n};\nSchedule.fromJSON = function parse(json, options = {}) {\n if (json.type !== 'Schedule') {\n throw new ParseJSONError('Invalid Schedule JSON');\n }\n return new Schedule({\n rrules: json.rrules.map(rule =>\n Rule.fromJSON(rule, Object.assign({ timezone: json.timezone }, options)),\n ),\n exrules: json.exrules.map(rule =>\n Rule.fromJSON(rule, Object.assign({ timezone: json.timezone }, options)),\n ),\n rdates: Dates.fromJSON(json.rdates, Object.assign({ timezone: json.timezone }, options)),\n exdates: Dates.fromJSON(json.exdates, Object.assign({ timezone: json.timezone }, options)),\n data: typeof options.data === 'function' ? options.data(json) : json.data,\n timezone: options.timezone || json.timezone,\n });\n};\nregisterJSONSerializerFn('Schedule', Schedule.fromJSON);\n","import { OccurrenceGenerator } from '@rschedule/core/generators';\n\nclass ParseJSONError extends Error {}\nclass SerializeJSONError extends Error {}\nOccurrenceGenerator.JSON_FN_MAP = new Map();\nOccurrenceGenerator.prototype.toJSON = function serialize(opts) {\n throw new SerializeJSONError(\n `To support smaller bundles, ${this.constructor.name}#toJSON() ` +\n `must be manually added. See \"@rschedule/json-tools\" in the rSchedule docs.`,\n );\n};\nOccurrenceGenerator.fromJSON = function parse(json, options) {\n if (typeof json !== 'object' || json === null) {\n throw new ParseJSONError(`Invalid json \"${json}\"`);\n }\n const fn = OccurrenceGenerator.JSON_FN_MAP.get(json.type);\n if (!fn) {\n throw new ParseJSONError(\n `Unknown rSchedule object type \"${json.type}\". Have you added a json serializer ` +\n `for \"${json.type}\"? ` +\n `See \"@rschedule/json-tools\" in the rSchedule docs.`,\n );\n }\n return fn(json, options);\n};\nfunction serializeDataToJSON(gen, json, opt) {\n if (!opt.data) return;\n if (opt.data === true) {\n json.data = gen.data;\n } else {\n json.data = opt.data(gen);\n }\n if (json.data === undefined) delete json.data;\n}\nfunction registerJSONSerializerFn(name, fn) {\n OccurrenceGenerator.JSON_FN_MAP.set(name, fn);\n}\n\nexport { ParseJSONError, SerializeJSONError, registerJSONSerializerFn, serializeDataToJSON };\n","import { DateAdapterBase, InvalidDateAdapterError, ArgumentError } from '@rschedule/core';\n\nclass StandardDateAdapter extends DateAdapterBase {\n constructor(date, options = {}) {\n super(undefined, options);\n if (!['UTC', null, undefined].includes(options.timezone)) {\n throw new InvalidDateAdapterError(\n `StandardDateAdapter only supports \"UTC\" and ` +\n `local time zones but \"${options.timezone}\" was provided.`,\n );\n }\n this._date = new Date(date);\n this.timezone = options.timezone !== undefined ? options.timezone : null;\n this.assertIsValid();\n }\n static isDate(object) {\n return Object.prototype.toString.call(object) === '[object Date]';\n }\n static fromDate(date, options) {\n return new StandardDateAdapter(date, options);\n }\n static fromJSON(json) {\n const args = [\n json.year,\n json.month - 1,\n json.day,\n json.hour,\n json.minute,\n json.second,\n json.millisecond,\n ];\n switch (json.timezone) {\n case 'UTC': {\n return new StandardDateAdapter(new Date(Date.UTC(...args)), {\n timezone: 'UTC',\n duration: json.duration,\n });\n }\n case null: {\n return new StandardDateAdapter(new Date(...args), {\n timezone: null,\n duration: json.duration,\n });\n }\n default:\n throw new InvalidDateAdapterError(\n 'The `StandardDateAdapter` only supports datetimes in ' +\n `UTC or LOCAL (null) time. You provided a JSON object ` +\n `with timezone \"${json.timezone}\".`,\n );\n }\n }\n static fromDateTime(datetime) {\n const date = StandardDateAdapter.fromJSON(datetime.toJSON());\n date.generators.push(...datetime.generators);\n return date;\n }\n get date() {\n return new Date(this._date);\n }\n get end() {\n if (!this.duration) return;\n if (this._end) return this._end;\n this._end = StandardDateAdapter.fromDateTime(\n this.toDateTime().add(this.duration, 'millisecond'),\n ).date;\n return this._end;\n }\n set(prop, value) {\n if (prop === 'timezone') {\n if (this.timezone === value) return this;\n else {\n return new StandardDateAdapter(this._date, {\n timezone: value,\n duration: this.duration,\n generators: this.generators,\n });\n }\n } else if (prop === 'duration') {\n if (this.duration === value) return this;\n else {\n return new StandardDateAdapter(this._date, {\n timezone: this.timezone,\n duration: value,\n generators: this.generators,\n });\n }\n }\n throw new ArgumentError(`Unknown prop \"${prop}\" for StandardDateAdapter#set()`);\n }\n valueOf() {\n return this._date.valueOf();\n }\n toJSON() {\n let json;\n if (this.timezone === 'UTC') {\n json = {\n timezone: this.timezone,\n year: this._date.getUTCFullYear(),\n month: this._date.getUTCMonth() + 1,\n day: this._date.getUTCDate(),\n hour: this._date.getUTCHours(),\n minute: this._date.getUTCMinutes(),\n second: this._date.getUTCSeconds(),\n millisecond: this._date.getUTCMilliseconds(),\n };\n } else {\n json = {\n timezone: this.timezone,\n year: this._date.getFullYear(),\n month: this._date.getMonth() + 1,\n day: this._date.getDate(),\n hour: this._date.getHours(),\n minute: this._date.getMinutes(),\n second: this._date.getSeconds(),\n millisecond: this._date.getMilliseconds(),\n };\n }\n if (this.duration) {\n json.duration = this.duration;\n }\n return json;\n }\n assertIsValid() {\n if (!StandardDateAdapter.isDate(this._date) || isNaN(this._date.valueOf())) {\n throw new InvalidDateAdapterError('StandardDateAdapter has invalid date.');\n } else if (![null, 'UTC'].includes(this.timezone)) {\n throw new InvalidDateAdapterError(\n 'StandardDateAdapter only supports local (null) and UTC timezones but ' +\n `\"${this.timezone}\" was specified.`,\n );\n } else if (this.duration && this.duration <= 0) {\n throw new InvalidDateAdapterError('If provided, duration must be greater than 0.');\n }\n return true;\n }\n}\nStandardDateAdapter.hasTimezoneSupport = false;\n\nexport { StandardDateAdapter };\n","import { DateAdapterBase } from '@rschedule/core';\nimport { Rule } from '@rschedule/core/generators';\nimport { ICAL_RULES } from '@rschedule/core/rules/ICAL_RULES';\nimport { StandardDateAdapter } from '@rschedule/standard-date-adapter';\n\nDateAdapterBase.adapter = StandardDateAdapter;\nRule.recurrenceRules = ICAL_RULES;\n","/*!\n * accounting.js v0.4.2\n * Copyright 2014 Open Exchange Rates\n *\n * Freely distributable under the MIT license.\n * Portions of accounting.js are inspired or borrowed from underscore.js\n *\n * Full details and documentation:\n * http://openexchangerates.github.io/accounting.js/\n */\n\n(function(root, undefined) {\n\n\t/* --- Setup --- */\n\n\t// Create the local library object, to be exported or referenced globally later\n\tvar lib = {};\n\n\t// Current version\n\tlib.version = '0.4.2';\n\n\n\t/* --- Exposed settings --- */\n\n\t// The library's settings configuration object. Contains default parameters for\n\t// currency and number formatting\n\tlib.settings = {\n\t\tcurrency: {\n\t\t\tsymbol : \"$\",\t\t// default currency symbol is '$'\n\t\t\tformat : \"%s%v\",\t// controls output: %s = symbol, %v = value (can be object, see docs)\n\t\t\tdecimal : \".\",\t\t// decimal point separator\n\t\t\tthousand : \",\",\t\t// thousands separator\n\t\t\tprecision : 2,\t\t// decimal places\n\t\t\tgrouping : 3\t\t// digit grouping (not implemented yet)\n\t\t},\n\t\tnumber: {\n\t\t\tprecision : 0,\t\t// default precision on numbers is 0\n\t\t\tgrouping : 3,\t\t// digit grouping (not implemented yet)\n\t\t\tthousand : \",\",\n\t\t\tdecimal : \".\"\n\t\t}\n\t};\n\n\n\t/* --- Internal Helper Methods --- */\n\n\t// Store reference to possibly-available ECMAScript 5 methods for later\n\tvar nativeMap = Array.prototype.map,\n\t\tnativeIsArray = Array.isArray,\n\t\ttoString = Object.prototype.toString;\n\n\t/**\n\t * Tests whether supplied parameter is a string\n\t * from underscore.js\n\t */\n\tfunction isString(obj) {\n\t\treturn !!(obj === '' || (obj && obj.charCodeAt && obj.substr));\n\t}\n\n\t/**\n\t * Tests whether supplied parameter is an array\n\t * from underscore.js, delegates to ECMA5's native Array.isArray\n\t */\n\tfunction isArray(obj) {\n\t\treturn nativeIsArray ? nativeIsArray(obj) : toString.call(obj) === '[object Array]';\n\t}\n\n\t/**\n\t * Tests whether supplied parameter is a true object\n\t */\n\tfunction isObject(obj) {\n\t\treturn obj && toString.call(obj) === '[object Object]';\n\t}\n\n\t/**\n\t * Extends an object with a defaults object, similar to underscore's _.defaults\n\t *\n\t * Used for abstracting parameter handling from API methods\n\t */\n\tfunction defaults(object, defs) {\n\t\tvar key;\n\t\tobject = object || {};\n\t\tdefs = defs || {};\n\t\t// Iterate over object non-prototype properties:\n\t\tfor (key in defs) {\n\t\t\tif (defs.hasOwnProperty(key)) {\n\t\t\t\t// Replace values with defaults only if undefined (allow empty/zero values):\n\t\t\t\tif (object[key] == null) object[key] = defs[key];\n\t\t\t}\n\t\t}\n\t\treturn object;\n\t}\n\n\t/**\n\t * Implementation of `Array.map()` for iteration loops\n\t *\n\t * Returns a new Array as a result of calling `iterator` on each array value.\n\t * Defers to native Array.map if available\n\t */\n\tfunction map(obj, iterator, context) {\n\t\tvar results = [], i, j;\n\n\t\tif (!obj) return results;\n\n\t\t// Use native .map method if it exists:\n\t\tif (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n\n\t\t// Fallback for native .map:\n\t\tfor (i = 0, j = obj.length; i < j; i++ ) {\n\t\t\tresults[i] = iterator.call(context, obj[i], i, obj);\n\t\t}\n\t\treturn results;\n\t}\n\n\t/**\n\t * Check and normalise the value of precision (must be positive integer)\n\t */\n\tfunction checkPrecision(val, base) {\n\t\tval = Math.round(Math.abs(val));\n\t\treturn isNaN(val)? base : val;\n\t}\n\n\n\t/**\n\t * Parses a format string or object and returns format obj for use in rendering\n\t *\n\t * `format` is either a string with the default (positive) format, or object\n\t * containing `pos` (required), `neg` and `zero` values (or a function returning\n\t * either a string or object)\n\t *\n\t * Either string or format.pos must contain \"%v\" (value) to be valid\n\t */\n\tfunction checkCurrencyFormat(format) {\n\t\tvar defaults = lib.settings.currency.format;\n\n\t\t// Allow function as format parameter (should return string or object):\n\t\tif ( typeof format === \"function\" ) format = format();\n\n\t\t// Format can be a string, in which case `value` (\"%v\") must be present:\n\t\tif ( isString( format ) && format.match(\"%v\") ) {\n\n\t\t\t// Create and return positive, negative and zero formats:\n\t\t\treturn {\n\t\t\t\tpos : format,\n\t\t\t\tneg : format.replace(\"-\", \"\").replace(\"%v\", \"-%v\"),\n\t\t\t\tzero : format\n\t\t\t};\n\n\t\t// If no format, or object is missing valid positive value, use defaults:\n\t\t} else if ( !format || !format.pos || !format.pos.match(\"%v\") ) {\n\n\t\t\t// If defaults is a string, casts it to an object for faster checking next time:\n\t\t\treturn ( !isString( defaults ) ) ? defaults : lib.settings.currency.format = {\n\t\t\t\tpos : defaults,\n\t\t\t\tneg : defaults.replace(\"%v\", \"-%v\"),\n\t\t\t\tzero : defaults\n\t\t\t};\n\n\t\t}\n\t\t// Otherwise, assume format was fine:\n\t\treturn format;\n\t}\n\n\n\t/* --- API Methods --- */\n\n\t/**\n\t * Takes a string/array of strings, removes all formatting/cruft and returns the raw float value\n\t * Alias: `accounting.parse(string)`\n\t *\n\t * Decimal must be included in the regular expression to match floats (defaults to\n\t * accounting.settings.number.decimal), so if the number uses a non-standard decimal \n\t * separator, provide it as the second argument.\n\t *\n\t * Also matches bracketed negatives (eg. \"$ (1.99)\" => -1.99)\n\t *\n\t * Doesn't throw any errors (`NaN`s become 0) but this may change in future\n\t */\n\tvar unformat = lib.unformat = lib.parse = function(value, decimal) {\n\t\t// Recursively unformat arrays:\n\t\tif (isArray(value)) {\n\t\t\treturn map(value, function(val) {\n\t\t\t\treturn unformat(val, decimal);\n\t\t\t});\n\t\t}\n\n\t\t// Fails silently (need decent errors):\n\t\tvalue = value || 0;\n\n\t\t// Return the value as-is if it's already a number:\n\t\tif (typeof value === \"number\") return value;\n\n\t\t// Default decimal point comes from settings, but could be set to eg. \",\" in opts:\n\t\tdecimal = decimal || lib.settings.number.decimal;\n\n\t\t // Build regex to strip out everything except digits, decimal point and minus sign:\n\t\tvar regex = new RegExp(\"[^0-9-\" + decimal + \"]\", [\"g\"]),\n\t\t\tunformatted = parseFloat(\n\t\t\t\t(\"\" + value)\n\t\t\t\t.replace(/\\((?=\\d+)(.*)\\)/, \"-$1\") // replace bracketed values with negatives\n\t\t\t\t.replace(regex, '') // strip out any cruft\n\t\t\t\t.replace(decimal, '.') // make sure decimal point is standard\n\t\t\t);\n\n\t\t// This will fail silently which may cause trouble, let's wait and see:\n\t\treturn !isNaN(unformatted) ? unformatted : 0;\n\t};\n\n\n\t/**\n\t * Implementation of toFixed() that treats floats more like decimals\n\t *\n\t * Fixes binary rounding issues (eg. (0.615).toFixed(2) === \"0.61\") that present\n\t * problems for accounting- and finance-related software.\n\t */\n\tvar toFixed = lib.toFixed = function(value, precision) {\n\t\tprecision = checkPrecision(precision, lib.settings.number.precision);\n\n\t\tvar exponentialForm = Number(lib.unformat(value) + 'e' + precision);\n\t\tvar rounded = Math.round(exponentialForm);\n\t\tvar finalResult = Number(rounded + 'e-' + precision).toFixed(precision);\n\t\treturn finalResult;\n\t};\n\n\n\t/**\n\t * Format a number, with comma-separated thousands and custom precision/decimal places\n\t * Alias: `accounting.format()`\n\t *\n\t * Localise by overriding the precision and thousand / decimal separators\n\t * 2nd parameter `precision` can be an object matching `settings.number`\n\t */\n\tvar formatNumber = lib.formatNumber = lib.format = function(number, precision, thousand, decimal) {\n\t\t// Resursively format arrays:\n\t\tif (isArray(number)) {\n\t\t\treturn map(number, function(val) {\n\t\t\t\treturn formatNumber(val, precision, thousand, decimal);\n\t\t\t});\n\t\t}\n\n\t\t// Clean up number:\n\t\tnumber = unformat(number);\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(precision) ? precision : {\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal\n\t\t\t\t}),\n\t\t\t\tlib.settings.number\n\t\t\t),\n\n\t\t\t// Clean up precision\n\t\t\tusePrecision = checkPrecision(opts.precision),\n\n\t\t\t// Do some calc:\n\t\t\tnegative = number < 0 ? \"-\" : \"\",\n\t\t\tbase = parseInt(toFixed(Math.abs(number || 0), usePrecision), 10) + \"\",\n\t\t\tmod = base.length > 3 ? base.length % 3 : 0;\n\n\t\t// Format the number:\n\t\treturn negative + (mod ? base.substr(0, mod) + opts.thousand : \"\") + base.substr(mod).replace(/(\\d{3})(?=\\d)/g, \"$1\" + opts.thousand) + (usePrecision ? opts.decimal + toFixed(Math.abs(number), usePrecision).split('.')[1] : \"\");\n\t};\n\n\n\t/**\n\t * Format a number into currency\n\t *\n\t * Usage: accounting.formatMoney(number, symbol, precision, thousandsSep, decimalSep, format)\n\t * defaults: (0, \"$\", 2, \",\", \".\", \"%s%v\")\n\t *\n\t * Localise by overriding the symbol, precision, thousand / decimal separators and format\n\t * Second param can be an object matching `settings.currency` which is the easiest way.\n\t *\n\t * To do: tidy up the parameters\n\t */\n\tvar formatMoney = lib.formatMoney = function(number, symbol, precision, thousand, decimal, format) {\n\t\t// Resursively format arrays:\n\t\tif (isArray(number)) {\n\t\t\treturn map(number, function(val){\n\t\t\t\treturn formatMoney(val, symbol, precision, thousand, decimal, format);\n\t\t\t});\n\t\t}\n\n\t\t// Clean up number:\n\t\tnumber = unformat(number);\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(symbol) ? symbol : {\n\t\t\t\t\tsymbol : symbol,\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal,\n\t\t\t\t\tformat : format\n\t\t\t\t}),\n\t\t\t\tlib.settings.currency\n\t\t\t),\n\n\t\t\t// Check format (returns object with pos, neg and zero):\n\t\t\tformats = checkCurrencyFormat(opts.format),\n\n\t\t\t// Choose which format to use for this value:\n\t\t\tuseFormat = number > 0 ? formats.pos : number < 0 ? formats.neg : formats.zero;\n\n\t\t// Return with currency symbol added:\n\t\treturn useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(number), checkPrecision(opts.precision), opts.thousand, opts.decimal));\n\t};\n\n\n\t/**\n\t * Format a list of numbers into an accounting column, padding with whitespace\n\t * to line up currency symbols, thousand separators and decimals places\n\t *\n\t * List should be an array of numbers\n\t * Second parameter can be an object containing keys that match the params\n\t *\n\t * Returns array of accouting-formatted number strings of same length\n\t *\n\t * NB: `white-space:pre` CSS rule is required on the list container to prevent\n\t * browsers from collapsing the whitespace in the output strings.\n\t */\n\tlib.formatColumn = function(list, symbol, precision, thousand, decimal, format) {\n\t\tif (!list || !isArray(list)) return [];\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(symbol) ? symbol : {\n\t\t\t\t\tsymbol : symbol,\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal,\n\t\t\t\t\tformat : format\n\t\t\t\t}),\n\t\t\t\tlib.settings.currency\n\t\t\t),\n\n\t\t\t// Check format (returns object with pos, neg and zero), only need pos for now:\n\t\t\tformats = checkCurrencyFormat(opts.format),\n\n\t\t\t// Whether to pad at start of string or after currency symbol:\n\t\t\tpadAfterSymbol = formats.pos.indexOf(\"%s\") < formats.pos.indexOf(\"%v\") ? true : false,\n\n\t\t\t// Store value for the length of the longest string in the column:\n\t\t\tmaxLength = 0,\n\n\t\t\t// Format the list according to options, store the length of the longest string:\n\t\t\tformatted = map(list, function(val, i) {\n\t\t\t\tif (isArray(val)) {\n\t\t\t\t\t// Recursively format columns if list is a multi-dimensional array:\n\t\t\t\t\treturn lib.formatColumn(val, opts);\n\t\t\t\t} else {\n\t\t\t\t\t// Clean up the value\n\t\t\t\t\tval = unformat(val);\n\n\t\t\t\t\t// Choose which format to use for this value (pos, neg or zero):\n\t\t\t\t\tvar useFormat = val > 0 ? formats.pos : val < 0 ? formats.neg : formats.zero,\n\n\t\t\t\t\t\t// Format this value, push into formatted list and save the length:\n\t\t\t\t\t\tfVal = useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(val), checkPrecision(opts.precision), opts.thousand, opts.decimal));\n\n\t\t\t\t\tif (fVal.length > maxLength) maxLength = fVal.length;\n\t\t\t\t\treturn fVal;\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Pad each number in the list and send back the column of numbers:\n\t\treturn map(formatted, function(val, i) {\n\t\t\t// Only if this is a string (not a nested array, which would have already been padded):\n\t\t\tif (isString(val) && val.length < maxLength) {\n\t\t\t\t// Depending on symbol position, pad after symbol or at index 0:\n\t\t\t\treturn padAfterSymbol ? val.replace(opts.symbol, opts.symbol+(new Array(maxLength - val.length + 1).join(\" \"))) : (new Array(maxLength - val.length + 1).join(\" \")) + val;\n\t\t\t}\n\t\t\treturn val;\n\t\t});\n\t};\n\n\n\t/* --- Module Definition --- */\n\n\t// Export accounting for CommonJS. If being loaded as an AMD module, define it as such.\n\t// Otherwise, just add `accounting` to the global object\n\tif (typeof exports !== 'undefined') {\n\t\tif (typeof module !== 'undefined' && module.exports) {\n\t\t\texports = module.exports = lib;\n\t\t}\n\t\texports.accounting = lib;\n\t} else if (typeof define === 'function' && define.amd) {\n\t\t// Return the library as an AMD module:\n\t\tdefine([], function() {\n\t\t\treturn lib;\n\t\t});\n\t} else {\n\t\t// Use accounting.noConflict to restore `accounting` back to its original value.\n\t\t// Returns a reference to the library's `accounting` object;\n\t\t// e.g. `var numbers = accounting.noConflict();`\n\t\tlib.noConflict = (function(oldAccounting) {\n\t\t\treturn function() {\n\t\t\t\t// Reset the value of the root's `accounting` variable:\n\t\t\t\troot.accounting = oldAccounting;\n\t\t\t\t// Delete the noConflict method:\n\t\t\t\tlib.noConflict = undefined;\n\t\t\t\t// Return reference to the library to re-assign it:\n\t\t\t\treturn lib;\n\t\t\t};\n\t\t})(root.accounting);\n\n\t\t// Declare `fx` on the root (global/window) object:\n\t\troot['accounting'] = lib;\n\t}\n\n\t// Root will be `window` in browser or `global` on the server:\n}(this));\n","const Utils = require(\"./util\");\nconst pth = require(\"path\");\nconst ZipEntry = require(\"./zipEntry\");\nconst ZipFile = require(\"./zipFile\");\n\nconst get_Bool = (val, def) => (typeof val === \"boolean\" ? val : def);\nconst get_Str = (val, def) => (typeof val === \"string\" ? val : def);\n\nconst defaultOptions = {\n // option \"noSort\" : if true it disables files sorting\n noSort: false,\n // read entries during load (initial loading may be slower)\n readEntries: false,\n // default method is none\n method: Utils.Constants.NONE,\n // file system\n fs: null\n};\n\nmodule.exports = function (/**String*/ input, /** object */ options) {\n let inBuffer = null;\n\n // create object based default options, allowing them to be overwritten\n const opts = Object.assign(Object.create(null), defaultOptions);\n\n // test input variable\n if (input && \"object\" === typeof input) {\n // if value is not buffer we accept it to be object with options\n if (!(input instanceof Uint8Array)) {\n Object.assign(opts, input);\n input = opts.input ? opts.input : undefined;\n if (opts.input) delete opts.input;\n }\n\n // if input is buffer\n if (Buffer.isBuffer(input)) {\n inBuffer = input;\n opts.method = Utils.Constants.BUFFER;\n input = undefined;\n }\n }\n\n // assign options\n Object.assign(opts, options);\n\n // instanciate utils filesystem\n const filetools = new Utils(opts);\n\n // if input is file name we retrieve its content\n if (input && \"string\" === typeof input) {\n // load zip file\n if (filetools.fs.existsSync(input)) {\n opts.method = Utils.Constants.FILE;\n opts.filename = input;\n inBuffer = filetools.fs.readFileSync(input);\n } else {\n throw new Error(Utils.Errors.INVALID_FILENAME);\n }\n }\n\n // create variable\n const _zip = new ZipFile(inBuffer, opts);\n\n const { canonical, sanitize } = Utils;\n\n function getEntry(/**Object*/ entry) {\n if (entry && _zip) {\n var item;\n // If entry was given as a file name\n if (typeof entry === \"string\") item = _zip.getEntry(entry);\n // if entry was given as a ZipEntry object\n if (typeof entry === \"object\" && typeof entry.entryName !== \"undefined\" && typeof entry.header !== \"undefined\") item = _zip.getEntry(entry.entryName);\n\n if (item) {\n return item;\n }\n }\n return null;\n }\n\n function fixPath(zipPath) {\n const { join, normalize, sep } = pth.posix;\n // convert windows file separators and normalize\n return join(\".\", normalize(sep + zipPath.split(\"\\\\\").join(sep) + sep));\n }\n\n return {\n /**\n * Extracts the given entry from the archive and returns the content as a Buffer object\n * @param entry ZipEntry object or String with the full path of the entry\n *\n * @return Buffer or Null in case of error\n */\n readFile: function (/**Object*/ entry, /*String, Buffer*/ pass) {\n var item = getEntry(entry);\n return (item && item.getData(pass)) || null;\n },\n\n /**\n * Asynchronous readFile\n * @param entry ZipEntry object or String with the full path of the entry\n * @param callback\n *\n * @return Buffer or Null in case of error\n */\n readFileAsync: function (/**Object*/ entry, /**Function*/ callback) {\n var item = getEntry(entry);\n if (item) {\n item.getDataAsync(callback);\n } else {\n callback(null, \"getEntry failed for:\" + entry);\n }\n },\n\n /**\n * Extracts the given entry from the archive and returns the content as plain text in the given encoding\n * @param entry ZipEntry object or String with the full path of the entry\n * @param encoding Optional. If no encoding is specified utf8 is used\n *\n * @return String\n */\n readAsText: function (/**Object*/ entry, /**String=*/ encoding) {\n var item = getEntry(entry);\n if (item) {\n var data = item.getData();\n if (data && data.length) {\n return data.toString(encoding || \"utf8\");\n }\n }\n return \"\";\n },\n\n /**\n * Asynchronous readAsText\n * @param entry ZipEntry object or String with the full path of the entry\n * @param callback\n * @param encoding Optional. If no encoding is specified utf8 is used\n *\n * @return String\n */\n readAsTextAsync: function (/**Object*/ entry, /**Function*/ callback, /**String=*/ encoding) {\n var item = getEntry(entry);\n if (item) {\n item.getDataAsync(function (data, err) {\n if (err) {\n callback(data, err);\n return;\n }\n\n if (data && data.length) {\n callback(data.toString(encoding || \"utf8\"));\n } else {\n callback(\"\");\n }\n });\n } else {\n callback(\"\");\n }\n },\n\n /**\n * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory\n *\n * @param entry\n */\n deleteFile: function (/**Object*/ entry) {\n // @TODO: test deleteFile\n var item = getEntry(entry);\n if (item) {\n _zip.deleteEntry(item.entryName);\n }\n },\n\n /**\n * Adds a comment to the zip. The zip must be rewritten after adding the comment.\n *\n * @param comment\n */\n addZipComment: function (/**String*/ comment) {\n // @TODO: test addZipComment\n _zip.comment = comment;\n },\n\n /**\n * Returns the zip comment\n *\n * @return String\n */\n getZipComment: function () {\n return _zip.comment || \"\";\n },\n\n /**\n * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment\n * The comment cannot exceed 65535 characters in length\n *\n * @param entry\n * @param comment\n */\n addZipEntryComment: function (/**Object*/ entry, /**String*/ comment) {\n var item = getEntry(entry);\n if (item) {\n item.comment = comment;\n }\n },\n\n /**\n * Returns the comment of the specified entry\n *\n * @param entry\n * @return String\n */\n getZipEntryComment: function (/**Object*/ entry) {\n var item = getEntry(entry);\n if (item) {\n return item.comment || \"\";\n }\n return \"\";\n },\n\n /**\n * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content\n *\n * @param entry\n * @param content\n */\n updateFile: function (/**Object*/ entry, /**Buffer*/ content) {\n var item = getEntry(entry);\n if (item) {\n item.setData(content);\n }\n },\n\n /**\n * Adds a file from the disk to the archive\n *\n * @param localPath File to add to zip\n * @param zipPath Optional path inside the zip\n * @param zipName Optional name for the file\n */\n addLocalFile: function (/**String*/ localPath, /**String=*/ zipPath, /**String=*/ zipName, /**String*/ comment) {\n if (filetools.fs.existsSync(localPath)) {\n // fix ZipPath\n zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n // p - local file name\n var p = localPath.split(\"\\\\\").join(\"/\").split(\"/\").pop();\n\n // add file name into zippath\n zipPath += zipName ? zipName : p;\n\n // read file attributes\n const _attr = filetools.fs.statSync(localPath);\n\n // add file into zip file\n this.addFile(zipPath, filetools.fs.readFileSync(localPath), comment, _attr);\n } else {\n throw new Error(Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath));\n }\n },\n\n /**\n * Adds a local directory and all its nested files and directories to the archive\n *\n * @param localPath\n * @param zipPath optional path inside zip\n * @param filter optional RegExp or Function if files match will\n * be included.\n */\n addLocalFolder: function (/**String*/ localPath, /**String=*/ zipPath, /**=RegExp|Function*/ filter) {\n // Prepare filter\n if (filter instanceof RegExp) {\n // if filter is RegExp wrap it\n filter = (function (rx) {\n return function (filename) {\n return rx.test(filename);\n };\n })(filter);\n } else if (\"function\" !== typeof filter) {\n // if filter is not function we will replace it\n filter = function () {\n return true;\n };\n }\n\n // fix ZipPath\n zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n // normalize the path first\n localPath = pth.normalize(localPath);\n\n if (filetools.fs.existsSync(localPath)) {\n const items = filetools.findFiles(localPath);\n const self = this;\n\n if (items.length) {\n items.forEach(function (filepath) {\n var p = pth.relative(localPath, filepath).split(\"\\\\\").join(\"/\"); //windows fix\n if (filter(p)) {\n var stats = filetools.fs.statSync(filepath);\n if (stats.isFile()) {\n self.addFile(zipPath + p, filetools.fs.readFileSync(filepath), \"\", stats);\n } else {\n self.addFile(zipPath + p + \"/\", Buffer.alloc(0), \"\", stats);\n }\n }\n });\n }\n } else {\n throw new Error(Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath));\n }\n },\n\n /**\n * Asynchronous addLocalFile\n * @param localPath\n * @param callback\n * @param zipPath optional path inside zip\n * @param filter optional RegExp or Function if files match will\n * be included.\n */\n addLocalFolderAsync: function (/*String*/ localPath, /*Function*/ callback, /*String*/ zipPath, /*RegExp|Function*/ filter) {\n if (filter instanceof RegExp) {\n filter = (function (rx) {\n return function (filename) {\n return rx.test(filename);\n };\n })(filter);\n } else if (\"function\" !== typeof filter) {\n filter = function () {\n return true;\n };\n }\n\n // fix ZipPath\n zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n // normalize the path first\n localPath = pth.normalize(localPath);\n\n var self = this;\n filetools.fs.open(localPath, \"r\", function (err) {\n if (err && err.code === \"ENOENT\") {\n callback(undefined, Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath));\n } else if (err) {\n callback(undefined, err);\n } else {\n var items = filetools.findFiles(localPath);\n var i = -1;\n\n var next = function () {\n i += 1;\n if (i < items.length) {\n var filepath = items[i];\n var p = pth.relative(localPath, filepath).split(\"\\\\\").join(\"/\"); //windows fix\n p = p\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^\\x20-\\x7E]/g, \"\"); // accent fix\n if (filter(p)) {\n filetools.fs.stat(filepath, function (er0, stats) {\n if (er0) callback(undefined, er0);\n if (stats.isFile()) {\n filetools.fs.readFile(filepath, function (er1, data) {\n if (er1) {\n callback(undefined, er1);\n } else {\n self.addFile(zipPath + p, data, \"\", stats);\n next();\n }\n });\n } else {\n self.addFile(zipPath + p + \"/\", Buffer.alloc(0), \"\", stats);\n next();\n }\n });\n } else {\n next();\n }\n } else {\n callback(true, undefined);\n }\n };\n\n next();\n }\n });\n },\n\n /**\n *\n * @param {string} localPath - path where files will be extracted\n * @param {object} props - optional properties\n * @param {string} props.zipPath - optional path inside zip\n * @param {regexp, function} props.filter - RegExp or Function if files match will be included.\n */\n addLocalFolderPromise: function (/*String*/ localPath, /* object */ props) {\n return new Promise((resolve, reject) => {\n const { filter, zipPath } = Object.assign({}, props);\n this.addLocalFolderAsync(\n localPath,\n (done, err) => {\n if (err) reject(err);\n if (done) resolve(this);\n },\n zipPath,\n filter\n );\n });\n },\n\n /**\n * Allows you to create a entry (file or directory) in the zip file.\n * If you want to create a directory the entryName must end in / and a null buffer should be provided.\n * Comment and attributes are optional\n *\n * @param {string} entryName\n * @param {Buffer | string} content - file content as buffer or utf8 coded string\n * @param {string} comment - file comment\n * @param {number | object} attr - number as unix file permissions, object as filesystem Stats object\n */\n addFile: function (/**String*/ entryName, /**Buffer*/ content, /**String*/ comment, /**Number*/ attr) {\n let entry = getEntry(entryName);\n const update = entry != null;\n\n // prepare new entry\n if (!update) {\n entry = new ZipEntry();\n entry.entryName = entryName;\n }\n entry.comment = comment || \"\";\n\n const isStat = \"object\" === typeof attr && attr instanceof filetools.fs.Stats;\n\n // last modification time from file stats\n if (isStat) {\n entry.header.time = attr.mtime;\n }\n\n // Set file attribute\n var fileattr = entry.isDirectory ? 0x10 : 0; // (MS-DOS directory flag)\n\n // extended attributes field for Unix\n if (!Utils.isWin) {\n // set file type either S_IFDIR / S_IFREG\n let unix = entry.isDirectory ? 0x4000 : 0x8000;\n\n if (isStat) {\n // File attributes from file stats\n unix |= 0xfff & attr.mode;\n } else if (\"number\" === typeof attr) {\n // attr from given attr values\n unix |= 0xfff & attr;\n } else {\n // Default values:\n unix |= entry.isDirectory ? 0o755 : 0o644; // permissions (drwxr-xr-x) or (-r-wr--r--)\n }\n\n fileattr = (fileattr | (unix << 16)) >>> 0; // add attributes\n }\n\n entry.attr = fileattr;\n\n entry.setData(content);\n if (!update) _zip.setEntry(entry);\n },\n\n /**\n * Returns an array of ZipEntry objects representing the files and folders inside the archive\n *\n * @return Array\n */\n getEntries: function () {\n return _zip ? _zip.entries : [];\n },\n\n /**\n * Returns a ZipEntry object representing the file or folder specified by ``name``.\n *\n * @param name\n * @return ZipEntry\n */\n getEntry: function (/**String*/ name) {\n return getEntry(name);\n },\n\n getEntryCount: function () {\n return _zip.getEntryCount();\n },\n\n forEach: function (callback) {\n return _zip.forEach(callback);\n },\n\n /**\n * Extracts the given entry to the given targetPath\n * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted\n *\n * @param entry ZipEntry object or String with the full path of the entry\n * @param targetPath Target folder where to write the file\n * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder\n * will be created in targetPath as well. Default is TRUE\n * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n * Default is FALSE\n * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.\n * Default is FALSE\n * @param outFileName String If set will override the filename of the extracted file (Only works if the entry is a file)\n *\n * @return Boolean\n */\n extractEntryTo: function (\n /**Object*/ entry,\n /**String*/ targetPath,\n /**Boolean*/ maintainEntryPath,\n /**Boolean*/ overwrite,\n /**Boolean*/ keepOriginalPermission,\n /**String**/ outFileName\n ) {\n overwrite = get_Bool(overwrite, false);\n keepOriginalPermission = get_Bool(keepOriginalPermission, false);\n maintainEntryPath = get_Bool(maintainEntryPath, true);\n outFileName = get_Str(outFileName, get_Str(keepOriginalPermission, undefined));\n\n var item = getEntry(entry);\n if (!item) {\n throw new Error(Utils.Errors.NO_ENTRY);\n }\n\n var entryName = canonical(item.entryName);\n\n var target = sanitize(targetPath, outFileName && !item.isDirectory ? outFileName : maintainEntryPath ? entryName : pth.basename(entryName));\n\n if (item.isDirectory) {\n var children = _zip.getEntryChildren(item);\n children.forEach(function (child) {\n if (child.isDirectory) return;\n var content = child.getData();\n if (!content) {\n throw new Error(Utils.Errors.CANT_EXTRACT_FILE);\n }\n var name = canonical(child.entryName);\n var childName = sanitize(targetPath, maintainEntryPath ? name : pth.basename(name));\n // The reverse operation for attr depend on method addFile()\n const fileAttr = keepOriginalPermission ? child.header.fileAttr : undefined;\n filetools.writeFileTo(childName, content, overwrite, fileAttr);\n });\n return true;\n }\n\n var content = item.getData();\n if (!content) throw new Error(Utils.Errors.CANT_EXTRACT_FILE);\n\n if (filetools.fs.existsSync(target) && !overwrite) {\n throw new Error(Utils.Errors.CANT_OVERRIDE);\n }\n // The reverse operation for attr depend on method addFile()\n const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n filetools.writeFileTo(target, content, overwrite, fileAttr);\n\n return true;\n },\n\n /**\n * Test the archive\n *\n */\n test: function (pass) {\n if (!_zip) {\n return false;\n }\n\n for (var entry in _zip.entries) {\n try {\n if (entry.isDirectory) {\n continue;\n }\n var content = _zip.entries[entry].getData(pass);\n if (!content) {\n return false;\n }\n } catch (err) {\n return false;\n }\n }\n return true;\n },\n\n /**\n * Extracts the entire archive to the given location\n *\n * @param targetPath Target location\n * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n * Default is FALSE\n * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.\n * Default is FALSE\n */\n extractAllTo: function (/**String*/ targetPath, /**Boolean*/ overwrite, /**Boolean*/ keepOriginalPermission, /*String, Buffer*/ pass) {\n overwrite = get_Bool(overwrite, false);\n pass = get_Str(keepOriginalPermission, pass);\n keepOriginalPermission = get_Bool(keepOriginalPermission, false);\n if (!_zip) {\n throw new Error(Utils.Errors.NO_ZIP);\n }\n _zip.entries.forEach(function (entry) {\n var entryName = sanitize(targetPath, canonical(entry.entryName.toString()));\n if (entry.isDirectory) {\n filetools.makeDir(entryName);\n return;\n }\n var content = entry.getData(pass);\n if (!content) {\n throw new Error(Utils.Errors.CANT_EXTRACT_FILE);\n }\n // The reverse operation for attr depend on method addFile()\n const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n filetools.writeFileTo(entryName, content, overwrite, fileAttr);\n try {\n filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time);\n } catch (err) {\n throw new Error(Utils.Errors.CANT_EXTRACT_FILE);\n }\n });\n },\n\n /**\n * Asynchronous extractAllTo\n *\n * @param targetPath Target location\n * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n * Default is FALSE\n * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.\n * Default is FALSE\n * @param callback The callback will be executed when all entries are extracted successfully or any error is thrown.\n */\n extractAllToAsync: function (/**String*/ targetPath, /**Boolean*/ overwrite, /**Boolean*/ keepOriginalPermission, /**Function*/ callback) {\n if (!callback) {\n callback = function () {};\n }\n overwrite = get_Bool(overwrite, false);\n if (typeof keepOriginalPermission === \"function\" && !callback) callback = keepOriginalPermission;\n keepOriginalPermission = get_Bool(keepOriginalPermission, false);\n if (!_zip) {\n callback(new Error(Utils.Errors.NO_ZIP));\n return;\n }\n\n targetPath = pth.resolve(targetPath);\n // convert entryName to\n const getPath = (entry) => sanitize(targetPath, pth.normalize(canonical(entry.entryName.toString())));\n const getError = (msg, file) => new Error(msg + ': \"' + file + '\"');\n\n // separate directories from files\n const dirEntries = [];\n const fileEntries = new Set();\n _zip.entries.forEach((e) => {\n if (e.isDirectory) {\n dirEntries.push(e);\n } else {\n fileEntries.add(e);\n }\n });\n\n // Create directory entries first synchronously\n // this prevents race condition and assures folders are there before writing files\n for (const entry of dirEntries) {\n const dirPath = getPath(entry);\n // The reverse operation for attr depend on method addFile()\n const dirAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n try {\n filetools.makeDir(dirPath);\n if (dirAttr) filetools.fs.chmodSync(dirPath, dirAttr);\n // in unix timestamp will change if files are later added to folder, but still\n filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time);\n } catch (er) {\n callback(getError(\"Unable to create folder\", dirPath));\n }\n }\n\n // callback wrapper, for some house keeping\n const done = () => {\n if (fileEntries.size === 0) {\n callback();\n }\n };\n\n // Extract file entries asynchronously\n for (const entry of fileEntries.values()) {\n const entryName = pth.normalize(canonical(entry.entryName.toString()));\n const filePath = sanitize(targetPath, entryName);\n entry.getDataAsync(function (content, err_1) {\n if (err_1) {\n callback(new Error(err_1));\n return;\n }\n if (!content) {\n callback(new Error(Utils.Errors.CANT_EXTRACT_FILE));\n } else {\n // The reverse operation for attr depend on method addFile()\n const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function (succ) {\n if (!succ) {\n callback(getError(\"Unable to write file\", filePath));\n return;\n }\n filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function (err_2) {\n if (err_2) {\n callback(getError(\"Unable to set times\", filePath));\n return;\n }\n fileEntries.delete(entry);\n // call the callback if it was last entry\n done();\n });\n });\n }\n });\n }\n // call the callback if fileEntries was empty\n done();\n },\n\n /**\n * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip\n *\n * @param targetFileName\n * @param callback\n */\n writeZip: function (/**String*/ targetFileName, /**Function*/ callback) {\n if (arguments.length === 1) {\n if (typeof targetFileName === \"function\") {\n callback = targetFileName;\n targetFileName = \"\";\n }\n }\n\n if (!targetFileName && opts.filename) {\n targetFileName = opts.filename;\n }\n if (!targetFileName) return;\n\n var zipData = _zip.compressToBuffer();\n if (zipData) {\n var ok = filetools.writeFileTo(targetFileName, zipData, true);\n if (typeof callback === \"function\") callback(!ok ? new Error(\"failed\") : null, \"\");\n }\n },\n\n writeZipPromise: function (/**String*/ targetFileName, /* object */ props) {\n const { overwrite, perm } = Object.assign({ overwrite: true }, props);\n\n return new Promise((resolve, reject) => {\n // find file name\n if (!targetFileName && opts.filename) targetFileName = opts.filename;\n if (!targetFileName) reject(\"ADM-ZIP: ZIP File Name Missing\");\n\n this.toBufferPromise().then((zipData) => {\n const ret = (done) => (done ? resolve(done) : reject(\"ADM-ZIP: Wasn't able to write zip file\"));\n filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret);\n }, reject);\n });\n },\n\n toBufferPromise: function () {\n return new Promise((resolve, reject) => {\n _zip.toAsyncBuffer(resolve, reject);\n });\n },\n\n /**\n * Returns the content of the entire zip file as a Buffer object\n *\n * @return Buffer\n */\n toBuffer: function (/**Function=*/ onSuccess, /**Function=*/ onFail, /**Function=*/ onItemStart, /**Function=*/ onItemEnd) {\n this.valueOf = 2;\n if (typeof onSuccess === \"function\") {\n _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);\n return null;\n }\n return _zip.compressToBuffer();\n }\n };\n};\n","var Utils = require(\"../util\"),\n Constants = Utils.Constants;\n\n/* The central directory file header */\nmodule.exports = function () {\n var _verMade = 20, // v2.0\n _version = 10, // v1.0\n _flags = 0,\n _method = 0,\n _time = 0,\n _crc = 0,\n _compressedSize = 0,\n _size = 0,\n _fnameLen = 0,\n _extraLen = 0,\n _comLen = 0,\n _diskStart = 0,\n _inattr = 0,\n _attr = 0,\n _offset = 0;\n\n _verMade |= Utils.isWin ? 0x0a00 : 0x0300;\n\n // Set EFS flag since filename and comment fields are all by default encoded using UTF-8.\n // Without it file names may be corrupted for other apps when file names use unicode chars\n _flags |= Constants.FLG_EFS;\n\n var _dataHeader = {};\n\n function setTime(val) {\n val = new Date(val);\n _time =\n (((val.getFullYear() - 1980) & 0x7f) << 25) | // b09-16 years from 1980\n ((val.getMonth() + 1) << 21) | // b05-08 month\n (val.getDate() << 16) | // b00-04 hour\n // 2 bytes time\n (val.getHours() << 11) | // b11-15 hour\n (val.getMinutes() << 5) | // b05-10 minute\n (val.getSeconds() >> 1); // b00-04 seconds divided by 2\n }\n\n setTime(+new Date());\n\n return {\n get made() {\n return _verMade;\n },\n set made(val) {\n _verMade = val;\n },\n\n get version() {\n return _version;\n },\n set version(val) {\n _version = val;\n },\n\n get flags() {\n return _flags;\n },\n set flags(val) {\n _flags = val;\n },\n\n get method() {\n return _method;\n },\n set method(val) {\n switch (val) {\n case Constants.STORED:\n this.version = 10;\n case Constants.DEFLATED:\n default:\n this.version = 20;\n }\n _method = val;\n },\n\n get time() {\n return new Date(((_time >> 25) & 0x7f) + 1980, ((_time >> 21) & 0x0f) - 1, (_time >> 16) & 0x1f, (_time >> 11) & 0x1f, (_time >> 5) & 0x3f, (_time & 0x1f) << 1);\n },\n set time(val) {\n setTime(val);\n },\n\n get crc() {\n return _crc;\n },\n set crc(val) {\n _crc = Math.max(0, val) >>> 0;\n },\n\n get compressedSize() {\n return _compressedSize;\n },\n set compressedSize(val) {\n _compressedSize = Math.max(0, val) >>> 0;\n },\n\n get size() {\n return _size;\n },\n set size(val) {\n _size = Math.max(0, val) >>> 0;\n },\n\n get fileNameLength() {\n return _fnameLen;\n },\n set fileNameLength(val) {\n _fnameLen = val;\n },\n\n get extraLength() {\n return _extraLen;\n },\n set extraLength(val) {\n _extraLen = val;\n },\n\n get commentLength() {\n return _comLen;\n },\n set commentLength(val) {\n _comLen = val;\n },\n\n get diskNumStart() {\n return _diskStart;\n },\n set diskNumStart(val) {\n _diskStart = Math.max(0, val) >>> 0;\n },\n\n get inAttr() {\n return _inattr;\n },\n set inAttr(val) {\n _inattr = Math.max(0, val) >>> 0;\n },\n\n get attr() {\n return _attr;\n },\n set attr(val) {\n _attr = Math.max(0, val) >>> 0;\n },\n\n // get Unix file permissions\n get fileAttr() {\n return _attr ? (((_attr >>> 0) | 0) >> 16) & 0xfff : 0;\n },\n\n get offset() {\n return _offset;\n },\n set offset(val) {\n _offset = Math.max(0, val) >>> 0;\n },\n\n get encripted() {\n return (_flags & 1) === 1;\n },\n\n get entryHeaderSize() {\n return Constants.CENHDR + _fnameLen + _extraLen + _comLen;\n },\n\n get realDataOffset() {\n return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen;\n },\n\n get dataHeader() {\n return _dataHeader;\n },\n\n loadDataHeaderFromBinary: function (/*Buffer*/ input) {\n var data = input.slice(_offset, _offset + Constants.LOCHDR);\n // 30 bytes and should start with \"PK\\003\\004\"\n if (data.readUInt32LE(0) !== Constants.LOCSIG) {\n throw new Error(Utils.Errors.INVALID_LOC);\n }\n _dataHeader = {\n // version needed to extract\n version: data.readUInt16LE(Constants.LOCVER),\n // general purpose bit flag\n flags: data.readUInt16LE(Constants.LOCFLG),\n // compression method\n method: data.readUInt16LE(Constants.LOCHOW),\n // modification time (2 bytes time, 2 bytes date)\n time: data.readUInt32LE(Constants.LOCTIM),\n // uncompressed file crc-32 value\n crc: data.readUInt32LE(Constants.LOCCRC),\n // compressed size\n compressedSize: data.readUInt32LE(Constants.LOCSIZ),\n // uncompressed size\n size: data.readUInt32LE(Constants.LOCLEN),\n // filename length\n fnameLen: data.readUInt16LE(Constants.LOCNAM),\n // extra field length\n extraLen: data.readUInt16LE(Constants.LOCEXT)\n };\n },\n\n loadFromBinary: function (/*Buffer*/ data) {\n // data should be 46 bytes and start with \"PK 01 02\"\n if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {\n throw new Error(Utils.Errors.INVALID_CEN);\n }\n // version made by\n _verMade = data.readUInt16LE(Constants.CENVEM);\n // version needed to extract\n _version = data.readUInt16LE(Constants.CENVER);\n // encrypt, decrypt flags\n _flags = data.readUInt16LE(Constants.CENFLG);\n // compression method\n _method = data.readUInt16LE(Constants.CENHOW);\n // modification time (2 bytes time, 2 bytes date)\n _time = data.readUInt32LE(Constants.CENTIM);\n // uncompressed file crc-32 value\n _crc = data.readUInt32LE(Constants.CENCRC);\n // compressed size\n _compressedSize = data.readUInt32LE(Constants.CENSIZ);\n // uncompressed size\n _size = data.readUInt32LE(Constants.CENLEN);\n // filename length\n _fnameLen = data.readUInt16LE(Constants.CENNAM);\n // extra field length\n _extraLen = data.readUInt16LE(Constants.CENEXT);\n // file comment length\n _comLen = data.readUInt16LE(Constants.CENCOM);\n // volume number start\n _diskStart = data.readUInt16LE(Constants.CENDSK);\n // internal file attributes\n _inattr = data.readUInt16LE(Constants.CENATT);\n // external file attributes\n _attr = data.readUInt32LE(Constants.CENATX);\n // LOC header offset\n _offset = data.readUInt32LE(Constants.CENOFF);\n },\n\n dataHeaderToBinary: function () {\n // LOC header size (30 bytes)\n var data = Buffer.alloc(Constants.LOCHDR);\n // \"PK\\003\\004\"\n data.writeUInt32LE(Constants.LOCSIG, 0);\n // version needed to extract\n data.writeUInt16LE(_version, Constants.LOCVER);\n // general purpose bit flag\n data.writeUInt16LE(_flags, Constants.LOCFLG);\n // compression method\n data.writeUInt16LE(_method, Constants.LOCHOW);\n // modification time (2 bytes time, 2 bytes date)\n data.writeUInt32LE(_time, Constants.LOCTIM);\n // uncompressed file crc-32 value\n data.writeUInt32LE(_crc, Constants.LOCCRC);\n // compressed size\n data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);\n // uncompressed size\n data.writeUInt32LE(_size, Constants.LOCLEN);\n // filename length\n data.writeUInt16LE(_fnameLen, Constants.LOCNAM);\n // extra field length\n data.writeUInt16LE(_extraLen, Constants.LOCEXT);\n return data;\n },\n\n entryHeaderToBinary: function () {\n // CEN header size (46 bytes)\n var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen);\n // \"PK\\001\\002\"\n data.writeUInt32LE(Constants.CENSIG, 0);\n // version made by\n data.writeUInt16LE(_verMade, Constants.CENVEM);\n // version needed to extract\n data.writeUInt16LE(_version, Constants.CENVER);\n // encrypt, decrypt flags\n data.writeUInt16LE(_flags, Constants.CENFLG);\n // compression method\n data.writeUInt16LE(_method, Constants.CENHOW);\n // modification time (2 bytes time, 2 bytes date)\n data.writeUInt32LE(_time, Constants.CENTIM);\n // uncompressed file crc-32 value\n data.writeUInt32LE(_crc, Constants.CENCRC);\n // compressed size\n data.writeUInt32LE(_compressedSize, Constants.CENSIZ);\n // uncompressed size\n data.writeUInt32LE(_size, Constants.CENLEN);\n // filename length\n data.writeUInt16LE(_fnameLen, Constants.CENNAM);\n // extra field length\n data.writeUInt16LE(_extraLen, Constants.CENEXT);\n // file comment length\n data.writeUInt16LE(_comLen, Constants.CENCOM);\n // volume number start\n data.writeUInt16LE(_diskStart, Constants.CENDSK);\n // internal file attributes\n data.writeUInt16LE(_inattr, Constants.CENATT);\n // external file attributes\n data.writeUInt32LE(_attr, Constants.CENATX);\n // LOC header offset\n data.writeUInt32LE(_offset, Constants.CENOFF);\n // fill all with\n data.fill(0x00, Constants.CENHDR);\n return data;\n },\n\n toJSON: function () {\n const bytes = function (nr) {\n return nr + \" bytes\";\n };\n\n return {\n made: _verMade,\n version: _version,\n flags: _flags,\n method: Utils.methodToString(_method),\n time: this.time,\n crc: \"0x\" + _crc.toString(16).toUpperCase(),\n compressedSize: bytes(_compressedSize),\n size: bytes(_size),\n fileNameLength: bytes(_fnameLen),\n extraLength: bytes(_extraLen),\n commentLength: bytes(_comLen),\n diskNumStart: _diskStart,\n inAttr: _inattr,\n attr: _attr,\n offset: _offset,\n entryHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen)\n };\n },\n\n toString: function () {\n return JSON.stringify(this.toJSON(), null, \"\\t\");\n }\n };\n};\n","exports.EntryHeader = require(\"./entryHeader\");\nexports.MainHeader = require(\"./mainHeader\");\n","var Utils = require(\"../util\"),\n Constants = Utils.Constants;\n\n/* The entries in the end of central directory */\nmodule.exports = function () {\n var _volumeEntries = 0,\n _totalEntries = 0,\n _size = 0,\n _offset = 0,\n _commentLength = 0;\n\n return {\n get diskEntries() {\n return _volumeEntries;\n },\n set diskEntries(/*Number*/ val) {\n _volumeEntries = _totalEntries = val;\n },\n\n get totalEntries() {\n return _totalEntries;\n },\n set totalEntries(/*Number*/ val) {\n _totalEntries = _volumeEntries = val;\n },\n\n get size() {\n return _size;\n },\n set size(/*Number*/ val) {\n _size = val;\n },\n\n get offset() {\n return _offset;\n },\n set offset(/*Number*/ val) {\n _offset = val;\n },\n\n get commentLength() {\n return _commentLength;\n },\n set commentLength(/*Number*/ val) {\n _commentLength = val;\n },\n\n get mainHeaderSize() {\n return Constants.ENDHDR + _commentLength;\n },\n\n loadFromBinary: function (/*Buffer*/ data) {\n // data should be 22 bytes and start with \"PK 05 06\"\n // or be 56+ bytes and start with \"PK 06 06\" for Zip64\n if (\n (data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) &&\n (data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)\n ) {\n throw new Error(Utils.Errors.INVALID_END);\n }\n\n if (data.readUInt32LE(0) === Constants.ENDSIG) {\n // number of entries on this volume\n _volumeEntries = data.readUInt16LE(Constants.ENDSUB);\n // total number of entries\n _totalEntries = data.readUInt16LE(Constants.ENDTOT);\n // central directory size in bytes\n _size = data.readUInt32LE(Constants.ENDSIZ);\n // offset of first CEN header\n _offset = data.readUInt32LE(Constants.ENDOFF);\n // zip file comment length\n _commentLength = data.readUInt16LE(Constants.ENDCOM);\n } else {\n // number of entries on this volume\n _volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB);\n // total number of entries\n _totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT);\n // central directory size in bytes\n _size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZ);\n // offset of first CEN header\n _offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF);\n\n _commentLength = 0;\n }\n },\n\n toBinary: function () {\n var b = Buffer.alloc(Constants.ENDHDR + _commentLength);\n // \"PK 05 06\" signature\n b.writeUInt32LE(Constants.ENDSIG, 0);\n b.writeUInt32LE(0, 4);\n // number of entries on this volume\n b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);\n // total number of entries\n b.writeUInt16LE(_totalEntries, Constants.ENDTOT);\n // central directory size in bytes\n b.writeUInt32LE(_size, Constants.ENDSIZ);\n // offset of first CEN header\n b.writeUInt32LE(_offset, Constants.ENDOFF);\n // zip file comment length\n b.writeUInt16LE(_commentLength, Constants.ENDCOM);\n // fill comment memory with spaces so no garbage is left there\n b.fill(\" \", Constants.ENDHDR);\n\n return b;\n },\n\n toJSON: function () {\n // creates 0x0000 style output\n const offset = function (nr, len) {\n let offs = nr.toString(16).toUpperCase();\n while (offs.length < len) offs = \"0\" + offs;\n return \"0x\" + offs;\n };\n\n return {\n diskEntries: _volumeEntries,\n totalEntries: _totalEntries,\n size: _size + \" bytes\",\n offset: offset(_offset, 4),\n commentLength: _commentLength\n };\n },\n\n toString: function () {\n return JSON.stringify(this.toJSON(), null, \"\\t\");\n }\n };\n};\n","module.exports = function (/*Buffer*/ inbuf) {\n var zlib = require(\"zlib\");\n\n var opts = { chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024 };\n\n return {\n deflate: function () {\n return zlib.deflateRawSync(inbuf, opts);\n },\n\n deflateAsync: function (/*Function*/ callback) {\n var tmp = zlib.createDeflateRaw(opts),\n parts = [],\n total = 0;\n tmp.on(\"data\", function (data) {\n parts.push(data);\n total += data.length;\n });\n tmp.on(\"end\", function () {\n var buf = Buffer.alloc(total),\n written = 0;\n buf.fill(0);\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i];\n part.copy(buf, written);\n written += part.length;\n }\n callback && callback(buf);\n });\n tmp.end(inbuf);\n }\n };\n};\n","exports.Deflater = require(\"./deflater\");\nexports.Inflater = require(\"./inflater\");\nexports.ZipCrypto = require(\"./zipcrypto\");\n","module.exports = function (/*Buffer*/ inbuf) {\n var zlib = require(\"zlib\");\n\n return {\n inflate: function () {\n return zlib.inflateRawSync(inbuf);\n },\n\n inflateAsync: function (/*Function*/ callback) {\n var tmp = zlib.createInflateRaw(),\n parts = [],\n total = 0;\n tmp.on(\"data\", function (data) {\n parts.push(data);\n total += data.length;\n });\n tmp.on(\"end\", function () {\n var buf = Buffer.alloc(total),\n written = 0;\n buf.fill(0);\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i];\n part.copy(buf, written);\n written += part.length;\n }\n callback && callback(buf);\n });\n tmp.end(inbuf);\n }\n };\n};\n","\"use strict\";\n\n// node crypt, we use it for generate salt\n// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst { randomFillSync } = require(\"crypto\");\n\n// generate CRC32 lookup table\nconst crctable = new Uint32Array(256).map((t, crc) => {\n for (let j = 0; j < 8; j++) {\n if (0 !== (crc & 1)) {\n crc = (crc >>> 1) ^ 0xedb88320;\n } else {\n crc >>>= 1;\n }\n }\n return crc >>> 0;\n});\n\n// C-style uInt32 Multiply (discards higher bits, when JS multiply discards lower bits)\nconst uMul = (a, b) => Math.imul(a, b) >>> 0;\n\n// crc32 byte single update (actually same function is part of utils.crc32 function :) )\nconst crc32update = (pCrc32, bval) => {\n return crctable[(pCrc32 ^ bval) & 0xff] ^ (pCrc32 >>> 8);\n};\n\n// function for generating salt for encrytion header\nconst genSalt = () => {\n if (\"function\" === typeof randomFillSync) {\n return randomFillSync(Buffer.alloc(12));\n } else {\n // fallback if function is not defined\n return genSalt.node();\n }\n};\n\n// salt generation with node random function (mainly as fallback)\ngenSalt.node = () => {\n const salt = Buffer.alloc(12);\n const len = salt.length;\n for (let i = 0; i < len; i++) salt[i] = (Math.random() * 256) & 0xff;\n return salt;\n};\n\n// general config\nconst config = {\n genSalt\n};\n\n// Class Initkeys handles same basic ops with keys\nfunction Initkeys(pw) {\n const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw);\n this.keys = new Uint32Array([0x12345678, 0x23456789, 0x34567890]);\n for (let i = 0; i < pass.length; i++) {\n this.updateKeys(pass[i]);\n }\n}\n\nInitkeys.prototype.updateKeys = function (byteValue) {\n const keys = this.keys;\n keys[0] = crc32update(keys[0], byteValue);\n keys[1] += keys[0] & 0xff;\n keys[1] = uMul(keys[1], 134775813) + 1;\n keys[2] = crc32update(keys[2], keys[1] >>> 24);\n return byteValue;\n};\n\nInitkeys.prototype.next = function () {\n const k = (this.keys[2] | 2) >>> 0; // key\n return (uMul(k, k ^ 1) >> 8) & 0xff; // decode\n};\n\nfunction make_decrypter(/*Buffer*/ pwd) {\n // 1. Stage initialize key\n const keys = new Initkeys(pwd);\n\n // return decrypter function\n return function (/*Buffer*/ data) {\n // result - we create new Buffer for results\n const result = Buffer.alloc(data.length);\n let pos = 0;\n // process input data\n for (let c of data) {\n //c ^= keys.next();\n //result[pos++] = c; // decode & Save Value\n result[pos++] = keys.updateKeys(c ^ keys.next()); // update keys with decoded byte\n }\n return result;\n };\n}\n\nfunction make_encrypter(/*Buffer*/ pwd) {\n // 1. Stage initialize key\n const keys = new Initkeys(pwd);\n\n // return encrypting function, result and pos is here so we dont have to merge buffers later\n return function (/*Buffer*/ data, /*Buffer*/ result, /* Number */ pos = 0) {\n // result - we create new Buffer for results\n if (!result) result = Buffer.alloc(data.length);\n // process input data\n for (let c of data) {\n const k = keys.next(); // save key byte\n result[pos++] = c ^ k; // save val\n keys.updateKeys(c); // update keys with decoded byte\n }\n return result;\n };\n}\n\nfunction decrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd) {\n if (!data || !Buffer.isBuffer(data) || data.length < 12) {\n return Buffer.alloc(0);\n }\n\n // 1. We Initialize and generate decrypting function\n const decrypter = make_decrypter(pwd);\n\n // 2. decrypt salt what is always 12 bytes and is a part of file content\n const salt = decrypter(data.slice(0, 12));\n\n // 3. does password meet expectations\n if (salt[11] !== header.crc >>> 24) {\n throw \"ADM-ZIP: Wrong Password\";\n }\n\n // 4. decode content\n return decrypter(data.slice(12));\n}\n\n// lets add way to populate salt, NOT RECOMMENDED for production but maybe useful for testing general functionality\nfunction _salter(data) {\n if (Buffer.isBuffer(data) && data.length >= 12) {\n // be aware - currently salting buffer data is modified\n config.genSalt = function () {\n return data.slice(0, 12);\n };\n } else if (data === \"node\") {\n // test salt generation with node random function\n config.genSalt = genSalt.node;\n } else {\n // if value is not acceptable config gets reset.\n config.genSalt = genSalt;\n }\n}\n\nfunction encrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd, /*Boolean*/ oldlike = false) {\n // 1. test data if data is not Buffer we make buffer from it\n if (data == null) data = Buffer.alloc(0);\n // if data is not buffer be make buffer from it\n if (!Buffer.isBuffer(data)) data = Buffer.from(data.toString());\n\n // 2. We Initialize and generate encrypting function\n const encrypter = make_encrypter(pwd);\n\n // 3. generate salt (12-bytes of random data)\n const salt = config.genSalt();\n salt[11] = (header.crc >>> 24) & 0xff;\n\n // old implementations (before PKZip 2.04g) used two byte check\n if (oldlike) salt[10] = (header.crc >>> 16) & 0xff;\n\n // 4. create output\n const result = Buffer.alloc(data.length + 12);\n encrypter(salt, result);\n\n // finally encode content\n return encrypter(data, result, 12);\n}\n\nmodule.exports = { decrypt, encrypt, _salter };\n","module.exports = {\n /* The local file header */\n LOCHDR : 30, // LOC header size\n LOCSIG : 0x04034b50, // \"PK\\003\\004\"\n LOCVER : 4,\t// version needed to extract\n LOCFLG : 6, // general purpose bit flag\n LOCHOW : 8, // compression method\n LOCTIM : 10, // modification time (2 bytes time, 2 bytes date)\n LOCCRC : 14, // uncompressed file crc-32 value\n LOCSIZ : 18, // compressed size\n LOCLEN : 22, // uncompressed size\n LOCNAM : 26, // filename length\n LOCEXT : 28, // extra field length\n\n /* The Data descriptor */\n EXTSIG : 0x08074b50, // \"PK\\007\\008\"\n EXTHDR : 16, // EXT header size\n EXTCRC : 4, // uncompressed file crc-32 value\n EXTSIZ : 8, // compressed size\n EXTLEN : 12, // uncompressed size\n\n /* The central directory file header */\n CENHDR : 46, // CEN header size\n CENSIG : 0x02014b50, // \"PK\\001\\002\"\n CENVEM : 4, // version made by\n CENVER : 6, // version needed to extract\n CENFLG : 8, // encrypt, decrypt flags\n CENHOW : 10, // compression method\n CENTIM : 12, // modification time (2 bytes time, 2 bytes date)\n CENCRC : 16, // uncompressed file crc-32 value\n CENSIZ : 20, // compressed size\n CENLEN : 24, // uncompressed size\n CENNAM : 28, // filename length\n CENEXT : 30, // extra field length\n CENCOM : 32, // file comment length\n CENDSK : 34, // volume number start\n CENATT : 36, // internal file attributes\n CENATX : 38, // external file attributes (host system dependent)\n CENOFF : 42, // LOC header offset\n\n /* The entries in the end of central directory */\n ENDHDR : 22, // END header size\n ENDSIG : 0x06054b50, // \"PK\\005\\006\"\n ENDSUB : 8, // number of entries on this disk\n ENDTOT : 10, // total number of entries\n ENDSIZ : 12, // central directory size in bytes\n ENDOFF : 16, // offset of first CEN header\n ENDCOM : 20, // zip file comment length\n\n END64HDR : 20, // zip64 END header size\n END64SIG : 0x07064b50, // zip64 Locator signature, \"PK\\006\\007\"\n END64START : 4, // number of the disk with the start of the zip64\n END64OFF : 8, // relative offset of the zip64 end of central directory\n END64NUMDISKS : 16, // total number of disks\n\n ZIP64SIG : 0x06064b50, // zip64 signature, \"PK\\006\\006\"\n ZIP64HDR : 56, // zip64 record minimum size\n ZIP64LEAD : 12, // leading bytes at the start of the record, not counted by the value stored in ZIP64SIZE\n ZIP64SIZE : 4, // zip64 size of the central directory record\n ZIP64VEM : 12, // zip64 version made by\n ZIP64VER : 14, // zip64 version needed to extract\n ZIP64DSK : 16, // zip64 number of this disk\n ZIP64DSKDIR : 20, // number of the disk with the start of the record directory\n ZIP64SUB : 24, // number of entries on this disk\n ZIP64TOT : 32, // total number of entries\n ZIP64SIZB : 40, // zip64 central directory size in bytes\n ZIP64OFF : 48, // offset of start of central directory with respect to the starting disk number\n ZIP64EXTRA : 56, // extensible data sector\n\n /* Compression methods */\n STORED : 0, // no compression\n SHRUNK : 1, // shrunk\n REDUCED1 : 2, // reduced with compression factor 1\n REDUCED2 : 3, // reduced with compression factor 2\n REDUCED3 : 4, // reduced with compression factor 3\n REDUCED4 : 5, // reduced with compression factor 4\n IMPLODED : 6, // imploded\n // 7 reserved for Tokenizing compression algorithm\n DEFLATED : 8, // deflated\n ENHANCED_DEFLATED: 9, // enhanced deflated\n PKWARE : 10,// PKWare DCL imploded\n // 11 reserved by PKWARE\n BZIP2 : 12, // compressed using BZIP2\n // 13 reserved by PKWARE\n LZMA : 14, // LZMA\n // 15-17 reserved by PKWARE\n IBM_TERSE : 18, // compressed using IBM TERSE\n IBM_LZ77 : 19, // IBM LZ77 z\n AES_ENCRYPT : 99, // WinZIP AES encryption method\n\n /* General purpose bit flag */\n // values can obtained with expression 2**bitnr\n FLG_ENC : 1, // Bit 0: encrypted file\n FLG_COMP1 : 2, // Bit 1, compression option\n FLG_COMP2 : 4, // Bit 2, compression option\n FLG_DESC : 8, // Bit 3, data descriptor\n FLG_ENH : 16, // Bit 4, enhanced deflating\n FLG_PATCH : 32, // Bit 5, indicates that the file is compressed patched data.\n FLG_STR : 64, // Bit 6, strong encryption (patented)\n // Bits 7-10: Currently unused.\n FLG_EFS : 2048, // Bit 11: Language encoding flag (EFS)\n // Bit 12: Reserved by PKWARE for enhanced compression.\n // Bit 13: encrypted the Central Directory (patented).\n // Bits 14-15: Reserved by PKWARE.\n FLG_MSK : 4096, // mask header values\n\n /* Load type */\n FILE : 2,\n BUFFER : 1,\n NONE : 0,\n\n /* 4.5 Extensible data fields */\n EF_ID : 0,\n EF_SIZE : 2,\n\n /* Header IDs */\n ID_ZIP64 : 0x0001,\n ID_AVINFO : 0x0007,\n ID_PFS : 0x0008,\n ID_OS2 : 0x0009,\n ID_NTFS : 0x000a,\n ID_OPENVMS : 0x000c,\n ID_UNIX : 0x000d,\n ID_FORK : 0x000e,\n ID_PATCH : 0x000f,\n ID_X509_PKCS7 : 0x0014,\n ID_X509_CERTID_F : 0x0015,\n ID_X509_CERTID_C : 0x0016,\n ID_STRONGENC : 0x0017,\n ID_RECORD_MGT : 0x0018,\n ID_X509_PKCS7_RL : 0x0019,\n ID_IBM1 : 0x0065,\n ID_IBM2 : 0x0066,\n ID_POSZIP : 0x4690,\n\n EF_ZIP64_OR_32 : 0xffffffff,\n EF_ZIP64_OR_16 : 0xffff,\n EF_ZIP64_SUNCOMP : 0,\n EF_ZIP64_SCOMP : 8,\n EF_ZIP64_RHO : 16,\n EF_ZIP64_DSN : 24\n};\n","module.exports = {\n /* Header error messages */\n INVALID_LOC: \"Invalid LOC header (bad signature)\",\n INVALID_CEN: \"Invalid CEN header (bad signature)\",\n INVALID_END: \"Invalid END header (bad signature)\",\n\n /* ZipEntry error messages*/\n NO_DATA: \"Nothing to decompress\",\n BAD_CRC: \"CRC32 checksum failed\",\n FILE_IN_THE_WAY: \"There is a file in the way: %s\",\n UNKNOWN_METHOD: \"Invalid/unsupported compression method\",\n\n /* Inflater error messages */\n AVAIL_DATA: \"inflate::Available inflate data did not terminate\",\n INVALID_DISTANCE: \"inflate::Invalid literal/length or distance code in fixed or dynamic block\",\n TO_MANY_CODES: \"inflate::Dynamic block code description: too many length or distance codes\",\n INVALID_REPEAT_LEN: \"inflate::Dynamic block code description: repeat more than specified lengths\",\n INVALID_REPEAT_FIRST: \"inflate::Dynamic block code description: repeat lengths with no first length\",\n INCOMPLETE_CODES: \"inflate::Dynamic block code description: code lengths codes incomplete\",\n INVALID_DYN_DISTANCE: \"inflate::Dynamic block code description: invalid distance code lengths\",\n INVALID_CODES_LEN: \"inflate::Dynamic block code description: invalid literal/length code lengths\",\n INVALID_STORE_BLOCK: \"inflate::Stored block length did not match one's complement\",\n INVALID_BLOCK_TYPE: \"inflate::Invalid block type (type == 3)\",\n\n /* ADM-ZIP error messages */\n CANT_EXTRACT_FILE: \"Could not extract the file\",\n CANT_OVERRIDE: \"Target file already exists\",\n NO_ZIP: \"No zip file was loaded\",\n NO_ENTRY: \"Entry doesn't exist\",\n DIRECTORY_CONTENT_ERROR: \"A directory cannot have content\",\n FILE_NOT_FOUND: \"File not found: %s\",\n NOT_IMPLEMENTED: \"Not implemented\",\n INVALID_FILENAME: \"Invalid filename\",\n INVALID_FORMAT: \"Invalid or unsupported zip format. No END header found\"\n};\n","const fs = require(\"./fileSystem\").require();\nconst pth = require(\"path\");\n\nfs.existsSync = fs.existsSync || pth.existsSync;\n\nmodule.exports = function (/*String*/ path) {\n var _path = path || \"\",\n _obj = newAttr(),\n _stat = null;\n\n function newAttr() {\n return {\n directory: false,\n readonly: false,\n hidden: false,\n executable: false,\n mtime: 0,\n atime: 0\n };\n }\n\n if (_path && fs.existsSync(_path)) {\n _stat = fs.statSync(_path);\n _obj.directory = _stat.isDirectory();\n _obj.mtime = _stat.mtime;\n _obj.atime = _stat.atime;\n _obj.executable = (0o111 & _stat.mode) !== 0; // file is executable who ever har right not just owner\n _obj.readonly = (0o200 & _stat.mode) === 0; // readonly if owner has no write right\n _obj.hidden = pth.basename(_path)[0] === \".\";\n } else {\n console.warn(\"Invalid path: \" + _path);\n }\n\n return {\n get directory() {\n return _obj.directory;\n },\n\n get readOnly() {\n return _obj.readonly;\n },\n\n get hidden() {\n return _obj.hidden;\n },\n\n get mtime() {\n return _obj.mtime;\n },\n\n get atime() {\n return _obj.atime;\n },\n\n get executable() {\n return _obj.executable;\n },\n\n decodeAttributes: function () {},\n\n encodeAttributes: function () {},\n\n toJSON: function () {\n return {\n path: _path,\n isDirectory: _obj.directory,\n isReadOnly: _obj.readonly,\n isHidden: _obj.hidden,\n isExecutable: _obj.executable,\n mTime: _obj.mtime,\n aTime: _obj.atime\n };\n },\n\n toString: function () {\n return JSON.stringify(this.toJSON(), null, \"\\t\");\n }\n };\n};\n","exports.require = function () {\n if (typeof process === \"object\" && process.versions && process.versions[\"electron\"]) {\n try {\n const originalFs = require(\"original-fs\");\n if (Object.keys(originalFs).length > 0) {\n return originalFs;\n }\n } catch (e) {}\n }\n return require(\"fs\");\n};\n","module.exports = require(\"./utils\");\nmodule.exports.Constants = require(\"./constants\");\nmodule.exports.Errors = require(\"./errors\");\nmodule.exports.FileAttr = require(\"./fattr\");\n","const fsystem = require(\"./fileSystem\").require();\nconst pth = require(\"path\");\nconst Constants = require(\"./constants\");\nconst isWin = typeof process === \"object\" && \"win32\" === process.platform;\n\nconst is_Obj = (obj) => obj && typeof obj === \"object\";\n\n// generate CRC32 lookup table\nconst crcTable = new Uint32Array(256).map((t, c) => {\n for (let k = 0; k < 8; k++) {\n if ((c & 1) !== 0) {\n c = 0xedb88320 ^ (c >>> 1);\n } else {\n c >>>= 1;\n }\n }\n return c >>> 0;\n});\n\n// UTILS functions\n\nfunction Utils(opts) {\n this.sep = pth.sep;\n this.fs = fsystem;\n\n if (is_Obj(opts)) {\n // custom filesystem\n if (is_Obj(opts.fs) && typeof opts.fs.statSync === \"function\") {\n this.fs = opts.fs;\n }\n }\n}\n\nmodule.exports = Utils;\n\n// INSTANCED functions\n\nUtils.prototype.makeDir = function (/*String*/ folder) {\n const self = this;\n\n // Sync - make directories tree\n function mkdirSync(/*String*/ fpath) {\n let resolvedPath = fpath.split(self.sep)[0];\n fpath.split(self.sep).forEach(function (name) {\n if (!name || name.substr(-1, 1) === \":\") return;\n resolvedPath += self.sep + name;\n var stat;\n try {\n stat = self.fs.statSync(resolvedPath);\n } catch (e) {\n self.fs.mkdirSync(resolvedPath);\n }\n if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY.replace(\"%s\", resolvedPath);\n });\n }\n\n mkdirSync(folder);\n};\n\nUtils.prototype.writeFileTo = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr) {\n const self = this;\n if (self.fs.existsSync(path)) {\n if (!overwrite) return false; // cannot overwrite\n\n var stat = self.fs.statSync(path);\n if (stat.isDirectory()) {\n return false;\n }\n }\n var folder = pth.dirname(path);\n if (!self.fs.existsSync(folder)) {\n self.makeDir(folder);\n }\n\n var fd;\n try {\n fd = self.fs.openSync(path, \"w\", 438); // 0666\n } catch (e) {\n self.fs.chmodSync(path, 438);\n fd = self.fs.openSync(path, \"w\", 438);\n }\n if (fd) {\n try {\n self.fs.writeSync(fd, content, 0, content.length, 0);\n } finally {\n self.fs.closeSync(fd);\n }\n }\n self.fs.chmodSync(path, attr || 438);\n return true;\n};\n\nUtils.prototype.writeFileToAsync = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr, /*Function*/ callback) {\n if (typeof attr === \"function\") {\n callback = attr;\n attr = undefined;\n }\n\n const self = this;\n\n self.fs.exists(path, function (exist) {\n if (exist && !overwrite) return callback(false);\n\n self.fs.stat(path, function (err, stat) {\n if (exist && stat.isDirectory()) {\n return callback(false);\n }\n\n var folder = pth.dirname(path);\n self.fs.exists(folder, function (exists) {\n if (!exists) self.makeDir(folder);\n\n self.fs.open(path, \"w\", 438, function (err, fd) {\n if (err) {\n self.fs.chmod(path, 438, function () {\n self.fs.open(path, \"w\", 438, function (err, fd) {\n self.fs.write(fd, content, 0, content.length, 0, function () {\n self.fs.close(fd, function () {\n self.fs.chmod(path, attr || 438, function () {\n callback(true);\n });\n });\n });\n });\n });\n } else if (fd) {\n self.fs.write(fd, content, 0, content.length, 0, function () {\n self.fs.close(fd, function () {\n self.fs.chmod(path, attr || 438, function () {\n callback(true);\n });\n });\n });\n } else {\n self.fs.chmod(path, attr || 438, function () {\n callback(true);\n });\n }\n });\n });\n });\n });\n};\n\nUtils.prototype.findFiles = function (/*String*/ path) {\n const self = this;\n\n function findSync(/*String*/ dir, /*RegExp*/ pattern, /*Boolean*/ recursive) {\n if (typeof pattern === \"boolean\") {\n recursive = pattern;\n pattern = undefined;\n }\n let files = [];\n self.fs.readdirSync(dir).forEach(function (file) {\n var path = pth.join(dir, file);\n\n if (self.fs.statSync(path).isDirectory() && recursive) files = files.concat(findSync(path, pattern, recursive));\n\n if (!pattern || pattern.test(path)) {\n files.push(pth.normalize(path) + (self.fs.statSync(path).isDirectory() ? self.sep : \"\"));\n }\n });\n return files;\n }\n\n return findSync(path, undefined, true);\n};\n\nUtils.prototype.getAttributes = function () {};\n\nUtils.prototype.setAttributes = function () {};\n\n// STATIC functions\n\n// crc32 single update (it is part of crc32)\nUtils.crc32update = function (crc, byte) {\n return crcTable[(crc ^ byte) & 0xff] ^ (crc >>> 8);\n};\n\nUtils.crc32 = function (buf) {\n if (typeof buf === \"string\") {\n buf = Buffer.from(buf, \"utf8\");\n }\n // Generate crcTable\n if (!crcTable.length) genCRCTable();\n\n let len = buf.length;\n let crc = ~0;\n for (let off = 0; off < len; ) crc = Utils.crc32update(crc, buf[off++]);\n // xor and cast as uint32 number\n return ~crc >>> 0;\n};\n\nUtils.methodToString = function (/*Number*/ method) {\n switch (method) {\n case Constants.STORED:\n return \"STORED (\" + method + \")\";\n case Constants.DEFLATED:\n return \"DEFLATED (\" + method + \")\";\n default:\n return \"UNSUPPORTED (\" + method + \")\";\n }\n};\n\n// removes \"..\" style path elements\nUtils.canonical = function (/*string*/ path) {\n if (!path) return \"\";\n // trick normalize think path is absolute\n var safeSuffix = pth.posix.normalize(\"/\" + path.split(\"\\\\\").join(\"/\"));\n return pth.join(\".\", safeSuffix);\n};\n\n// make abolute paths taking prefix as root folder\nUtils.sanitize = function (/*string*/ prefix, /*string*/ name) {\n prefix = pth.resolve(pth.normalize(prefix));\n var parts = name.split(\"/\");\n for (var i = 0, l = parts.length; i < l; i++) {\n var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));\n if (path.indexOf(prefix) === 0) {\n return path;\n }\n }\n return pth.normalize(pth.join(prefix, pth.basename(name)));\n};\n\n// converts buffer, Uint8Array, string types to buffer\nUtils.toBuffer = function toBuffer(/*buffer, Uint8Array, string*/ input) {\n if (Buffer.isBuffer(input)) {\n return input;\n } else if (input instanceof Uint8Array) {\n return Buffer.from(input);\n } else {\n // expect string all other values are invalid and return empty buffer\n return typeof input === \"string\" ? Buffer.from(input, \"utf8\") : Buffer.alloc(0);\n }\n};\n\nUtils.readBigUInt64LE = function (/*Buffer*/ buffer, /*int*/ index) {\n var slice = Buffer.from(buffer.slice(index, index + 8));\n slice.swap64();\n\n return parseInt(`0x${slice.toString(\"hex\")}`);\n};\n\nUtils.isWin = isWin; // Do we have windows system\nUtils.crcTable = crcTable;\n","var Utils = require(\"./util\"),\n Headers = require(\"./headers\"),\n Constants = Utils.Constants,\n Methods = require(\"./methods\");\n\nmodule.exports = function (/*Buffer*/ input) {\n var _entryHeader = new Headers.EntryHeader(),\n _entryName = Buffer.alloc(0),\n _comment = Buffer.alloc(0),\n _isDirectory = false,\n uncompressedData = null,\n _extra = Buffer.alloc(0);\n\n function getCompressedDataFromZip() {\n if (!input || !Buffer.isBuffer(input)) {\n return Buffer.alloc(0);\n }\n _entryHeader.loadDataHeaderFromBinary(input);\n return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize);\n }\n\n function crc32OK(data) {\n // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written\n if ((_entryHeader.flags & 0x8) !== 0x8) {\n if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) {\n return false;\n }\n } else {\n // @TODO: load and check data descriptor header\n // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure\n // (optionally preceded by a 4-byte signature) immediately after the compressed data:\n }\n return true;\n }\n\n function decompress(/*Boolean*/ async, /*Function*/ callback, /*String, Buffer*/ pass) {\n if (typeof callback === \"undefined\" && typeof async === \"string\") {\n pass = async;\n async = void 0;\n }\n if (_isDirectory) {\n if (async && callback) {\n callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.\n }\n return Buffer.alloc(0);\n }\n\n var compressedData = getCompressedDataFromZip();\n\n if (compressedData.length === 0) {\n // File is empty, nothing to decompress.\n if (async && callback) callback(compressedData);\n return compressedData;\n }\n\n if (_entryHeader.encripted) {\n if (\"string\" !== typeof pass && !Buffer.isBuffer(pass)) {\n throw new Error(\"ADM-ZIP: Incompatible password parameter\");\n }\n compressedData = Methods.ZipCrypto.decrypt(compressedData, _entryHeader, pass);\n }\n\n var data = Buffer.alloc(_entryHeader.size);\n\n switch (_entryHeader.method) {\n case Utils.Constants.STORED:\n compressedData.copy(data);\n if (!crc32OK(data)) {\n if (async && callback) callback(data, Utils.Errors.BAD_CRC); //si added error\n throw new Error(Utils.Errors.BAD_CRC);\n } else {\n //si added otherwise did not seem to return data.\n if (async && callback) callback(data);\n return data;\n }\n case Utils.Constants.DEFLATED:\n var inflater = new Methods.Inflater(compressedData);\n if (!async) {\n const result = inflater.inflate(data);\n result.copy(data, 0);\n if (!crc32OK(data)) {\n throw new Error(Utils.Errors.BAD_CRC + \" \" + _entryName.toString());\n }\n return data;\n } else {\n inflater.inflateAsync(function (result) {\n result.copy(result, 0);\n if (callback) {\n if (!crc32OK(result)) {\n callback(result, Utils.Errors.BAD_CRC); //si added error\n } else {\n callback(result);\n }\n }\n });\n }\n break;\n default:\n if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);\n throw new Error(Utils.Errors.UNKNOWN_METHOD);\n }\n }\n\n function compress(/*Boolean*/ async, /*Function*/ callback) {\n if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {\n // no data set or the data wasn't changed to require recompression\n if (async && callback) callback(getCompressedDataFromZip());\n return getCompressedDataFromZip();\n }\n\n if (uncompressedData.length && !_isDirectory) {\n var compressedData;\n // Local file header\n switch (_entryHeader.method) {\n case Utils.Constants.STORED:\n _entryHeader.compressedSize = _entryHeader.size;\n\n compressedData = Buffer.alloc(uncompressedData.length);\n uncompressedData.copy(compressedData);\n\n if (async && callback) callback(compressedData);\n return compressedData;\n default:\n case Utils.Constants.DEFLATED:\n var deflater = new Methods.Deflater(uncompressedData);\n if (!async) {\n var deflated = deflater.deflate();\n _entryHeader.compressedSize = deflated.length;\n return deflated;\n } else {\n deflater.deflateAsync(function (data) {\n compressedData = Buffer.alloc(data.length);\n _entryHeader.compressedSize = data.length;\n data.copy(compressedData);\n callback && callback(compressedData);\n });\n }\n deflater = null;\n break;\n }\n } else if (async && callback) {\n callback(Buffer.alloc(0));\n } else {\n return Buffer.alloc(0);\n }\n }\n\n function readUInt64LE(buffer, offset) {\n return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);\n }\n\n function parseExtra(data) {\n var offset = 0;\n var signature, size, part;\n while (offset < data.length) {\n signature = data.readUInt16LE(offset);\n offset += 2;\n size = data.readUInt16LE(offset);\n offset += 2;\n part = data.slice(offset, offset + size);\n offset += size;\n if (Constants.ID_ZIP64 === signature) {\n parseZip64ExtendedInformation(part);\n }\n }\n }\n\n //Override header field values with values from the ZIP64 extra field\n function parseZip64ExtendedInformation(data) {\n var size, compressedSize, offset, diskNumStart;\n\n if (data.length >= Constants.EF_ZIP64_SCOMP) {\n size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);\n if (_entryHeader.size === Constants.EF_ZIP64_OR_32) {\n _entryHeader.size = size;\n }\n }\n if (data.length >= Constants.EF_ZIP64_RHO) {\n compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);\n if (_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {\n _entryHeader.compressedSize = compressedSize;\n }\n }\n if (data.length >= Constants.EF_ZIP64_DSN) {\n offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);\n if (_entryHeader.offset === Constants.EF_ZIP64_OR_32) {\n _entryHeader.offset = offset;\n }\n }\n if (data.length >= Constants.EF_ZIP64_DSN + 4) {\n diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);\n if (_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {\n _entryHeader.diskNumStart = diskNumStart;\n }\n }\n }\n\n return {\n get entryName() {\n return _entryName.toString();\n },\n get rawEntryName() {\n return _entryName;\n },\n set entryName(val) {\n _entryName = Utils.toBuffer(val);\n var lastChar = _entryName[_entryName.length - 1];\n _isDirectory = lastChar === 47 || lastChar === 92;\n _entryHeader.fileNameLength = _entryName.length;\n },\n\n get extra() {\n return _extra;\n },\n set extra(val) {\n _extra = val;\n _entryHeader.extraLength = val.length;\n parseExtra(val);\n },\n\n get comment() {\n return _comment.toString();\n },\n set comment(val) {\n _comment = Utils.toBuffer(val);\n _entryHeader.commentLength = _comment.length;\n },\n\n get name() {\n var n = _entryName.toString();\n return _isDirectory\n ? n\n .substr(n.length - 1)\n .split(\"/\")\n .pop()\n : n.split(\"/\").pop();\n },\n get isDirectory() {\n return _isDirectory;\n },\n\n getCompressedData: function () {\n return compress(false, null);\n },\n\n getCompressedDataAsync: function (/*Function*/ callback) {\n compress(true, callback);\n },\n\n setData: function (value) {\n uncompressedData = Utils.toBuffer(value);\n if (!_isDirectory && uncompressedData.length) {\n _entryHeader.size = uncompressedData.length;\n _entryHeader.method = Utils.Constants.DEFLATED;\n _entryHeader.crc = Utils.crc32(value);\n _entryHeader.changed = true;\n } else {\n // folders and blank files should be stored\n _entryHeader.method = Utils.Constants.STORED;\n }\n },\n\n getData: function (pass) {\n if (_entryHeader.changed) {\n return uncompressedData;\n } else {\n return decompress(false, null, pass);\n }\n },\n\n getDataAsync: function (/*Function*/ callback, pass) {\n if (_entryHeader.changed) {\n callback(uncompressedData);\n } else {\n decompress(true, callback, pass);\n }\n },\n\n set attr(attr) {\n _entryHeader.attr = attr;\n },\n get attr() {\n return _entryHeader.attr;\n },\n\n set header(/*Buffer*/ data) {\n _entryHeader.loadFromBinary(data);\n },\n\n get header() {\n return _entryHeader;\n },\n\n packHeader: function () {\n // 1. create header (buffer)\n var header = _entryHeader.entryHeaderToBinary();\n var addpos = Utils.Constants.CENHDR;\n // 2. add file name\n _entryName.copy(header, addpos);\n addpos += _entryName.length;\n // 3. add extra data\n if (_entryHeader.extraLength) {\n _extra.copy(header, addpos);\n addpos += _entryHeader.extraLength;\n }\n // 4. add file comment\n if (_entryHeader.commentLength) {\n _comment.copy(header, addpos);\n }\n return header;\n },\n\n toJSON: function () {\n const bytes = function (nr) {\n return \"<\" + ((nr && nr.length + \" bytes buffer\") || \"null\") + \">\";\n };\n\n return {\n entryName: this.entryName,\n name: this.name,\n comment: this.comment,\n isDirectory: this.isDirectory,\n header: _entryHeader.toJSON(),\n compressedData: bytes(input),\n data: bytes(uncompressedData)\n };\n },\n\n toString: function () {\n return JSON.stringify(this.toJSON(), null, \"\\t\");\n }\n };\n};\n","const ZipEntry = require(\"./zipEntry\");\nconst Headers = require(\"./headers\");\nconst Utils = require(\"./util\");\n\nmodule.exports = function (/*Buffer|null*/ inBuffer, /** object */ options) {\n var entryList = [],\n entryTable = {},\n _comment = Buffer.alloc(0),\n mainHeader = new Headers.MainHeader(),\n loadedEntries = false;\n\n // assign options\n const opts = Object.assign(Object.create(null), options);\n\n const { noSort } = opts;\n\n if (inBuffer) {\n // is a memory buffer\n readMainHeader(opts.readEntries);\n } else {\n // none. is a new file\n loadedEntries = true;\n }\n\n function iterateEntries(callback) {\n const totalEntries = mainHeader.diskEntries; // total number of entries\n let index = mainHeader.offset; // offset of first CEN header\n\n for (let i = 0; i < totalEntries; i++) {\n let tmp = index;\n const entry = new ZipEntry(inBuffer);\n\n entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));\n entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));\n\n index += entry.header.entryHeaderSize;\n\n callback(entry);\n }\n }\n\n function readEntries() {\n loadedEntries = true;\n entryTable = {};\n entryList = new Array(mainHeader.diskEntries); // total number of entries\n var index = mainHeader.offset; // offset of first CEN header\n for (var i = 0; i < entryList.length; i++) {\n var tmp = index,\n entry = new ZipEntry(inBuffer);\n entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));\n\n entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));\n\n if (entry.header.extraLength) {\n entry.extra = inBuffer.slice(tmp, (tmp += entry.header.extraLength));\n }\n\n if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);\n\n index += entry.header.entryHeaderSize;\n\n entryList[i] = entry;\n entryTable[entry.entryName] = entry;\n }\n }\n\n function readMainHeader(/*Boolean*/ readNow) {\n var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size\n max = Math.max(0, i - 0xffff), // 0xFFFF is the max zip file comment length\n n = max,\n endStart = inBuffer.length,\n endOffset = -1, // Start offset of the END header\n commentEnd = 0;\n\n for (i; i >= n; i--) {\n if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'\n if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {\n // \"PK\\005\\006\"\n endOffset = i;\n commentEnd = i;\n endStart = i + Utils.Constants.ENDHDR;\n // We already found a regular signature, let's look just a bit further to check if there's any zip64 signature\n n = i - Utils.Constants.END64HDR;\n continue;\n }\n\n if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) {\n // Found a zip64 signature, let's continue reading the whole zip64 record\n n = max;\n continue;\n }\n\n if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) {\n // Found the zip64 record, let's determine it's size\n endOffset = i;\n endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD;\n break;\n }\n }\n\n if (!~endOffset) throw new Error(Utils.Errors.INVALID_FORMAT);\n\n mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart));\n if (mainHeader.commentLength) {\n _comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR);\n }\n if (readNow) readEntries();\n }\n\n function sortEntries() {\n if (entryList.length > 1 && !noSort) {\n entryList.sort((a, b) => a.entryName.toLowerCase().localeCompare(b.entryName.toLowerCase()));\n }\n }\n\n return {\n /**\n * Returns an array of ZipEntry objects existent in the current opened archive\n * @return Array\n */\n get entries() {\n if (!loadedEntries) {\n readEntries();\n }\n return entryList;\n },\n\n /**\n * Archive comment\n * @return {String}\n */\n get comment() {\n return _comment.toString();\n },\n set comment(val) {\n _comment = Utils.toBuffer(val);\n mainHeader.commentLength = _comment.length;\n },\n\n getEntryCount: function () {\n if (!loadedEntries) {\n return mainHeader.diskEntries;\n }\n\n return entryList.length;\n },\n\n forEach: function (callback) {\n if (!loadedEntries) {\n iterateEntries(callback);\n return;\n }\n\n entryList.forEach(callback);\n },\n\n /**\n * Returns a reference to the entry with the given name or null if entry is inexistent\n *\n * @param entryName\n * @return ZipEntry\n */\n getEntry: function (/*String*/ entryName) {\n if (!loadedEntries) {\n readEntries();\n }\n return entryTable[entryName] || null;\n },\n\n /**\n * Adds the given entry to the entry list\n *\n * @param entry\n */\n setEntry: function (/*ZipEntry*/ entry) {\n if (!loadedEntries) {\n readEntries();\n }\n entryList.push(entry);\n entryTable[entry.entryName] = entry;\n mainHeader.totalEntries = entryList.length;\n },\n\n /**\n * Removes the entry with the given name from the entry list.\n *\n * If the entry is a directory, then all nested files and directories will be removed\n * @param entryName\n */\n deleteEntry: function (/*String*/ entryName) {\n if (!loadedEntries) {\n readEntries();\n }\n var entry = entryTable[entryName];\n if (entry && entry.isDirectory) {\n var _self = this;\n this.getEntryChildren(entry).forEach(function (child) {\n if (child.entryName !== entryName) {\n _self.deleteEntry(child.entryName);\n }\n });\n }\n entryList.splice(entryList.indexOf(entry), 1);\n delete entryTable[entryName];\n mainHeader.totalEntries = entryList.length;\n },\n\n /**\n * Iterates and returns all nested files and directories of the given entry\n *\n * @param entry\n * @return Array\n */\n getEntryChildren: function (/*ZipEntry*/ entry) {\n if (!loadedEntries) {\n readEntries();\n }\n if (entry && entry.isDirectory) {\n const list = [];\n const name = entry.entryName;\n const len = name.length;\n\n entryList.forEach(function (zipEntry) {\n if (zipEntry.entryName.substr(0, len) === name) {\n list.push(zipEntry);\n }\n });\n return list;\n }\n return [];\n },\n\n /**\n * Returns the zip file\n *\n * @return Buffer\n */\n compressToBuffer: function () {\n if (!loadedEntries) {\n readEntries();\n }\n sortEntries();\n\n const dataBlock = [];\n const entryHeaders = [];\n let totalSize = 0;\n let dindex = 0;\n\n mainHeader.size = 0;\n mainHeader.offset = 0;\n\n for (const entry of entryList) {\n // compress data and set local and entry header accordingly. Reason why is called first\n const compressedData = entry.getCompressedData();\n // 1. construct data header\n entry.header.offset = dindex;\n const dataHeader = entry.header.dataHeaderToBinary();\n const entryNameLen = entry.rawEntryName.length;\n // 1.2. postheader - data after data header\n const postHeader = Buffer.alloc(entryNameLen + entry.extra.length);\n entry.rawEntryName.copy(postHeader, 0);\n postHeader.copy(entry.extra, entryNameLen);\n\n // 2. offsets\n const dataLength = dataHeader.length + postHeader.length + compressedData.length;\n dindex += dataLength;\n\n // 3. store values in sequence\n dataBlock.push(dataHeader);\n dataBlock.push(postHeader);\n dataBlock.push(compressedData);\n\n // 4. construct entry header\n const entryHeader = entry.packHeader();\n entryHeaders.push(entryHeader);\n // 5. update main header\n mainHeader.size += entryHeader.length;\n totalSize += dataLength + entryHeader.length;\n }\n\n totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n // point to end of data and beginning of central directory first record\n mainHeader.offset = dindex;\n\n dindex = 0;\n const outBuffer = Buffer.alloc(totalSize);\n // write data blocks\n for (const content of dataBlock) {\n content.copy(outBuffer, dindex);\n dindex += content.length;\n }\n\n // write central directory entries\n for (const content of entryHeaders) {\n content.copy(outBuffer, dindex);\n dindex += content.length;\n }\n\n // write main header\n const mh = mainHeader.toBinary();\n if (_comment) {\n _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n }\n mh.copy(outBuffer, dindex);\n\n return outBuffer;\n },\n\n toAsyncBuffer: function (/*Function*/ onSuccess, /*Function*/ onFail, /*Function*/ onItemStart, /*Function*/ onItemEnd) {\n try {\n if (!loadedEntries) {\n readEntries();\n }\n sortEntries();\n\n const dataBlock = [];\n const entryHeaders = [];\n let totalSize = 0;\n let dindex = 0;\n\n mainHeader.size = 0;\n mainHeader.offset = 0;\n\n const compress2Buffer = function (entryLists) {\n if (entryLists.length) {\n const entry = entryLists.pop();\n const name = entry.entryName + entry.extra.toString();\n if (onItemStart) onItemStart(name);\n entry.getCompressedDataAsync(function (compressedData) {\n if (onItemEnd) onItemEnd(name);\n\n entry.header.offset = dindex;\n // data header\n const dataHeader = entry.header.dataHeaderToBinary();\n const postHeader = Buffer.alloc(name.length, name);\n const dataLength = dataHeader.length + postHeader.length + compressedData.length;\n\n dindex += dataLength;\n\n dataBlock.push(dataHeader);\n dataBlock.push(postHeader);\n dataBlock.push(compressedData);\n\n const entryHeader = entry.packHeader();\n entryHeaders.push(entryHeader);\n mainHeader.size += entryHeader.length;\n totalSize += dataLength + entryHeader.length;\n\n compress2Buffer(entryLists);\n });\n } else {\n totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n // point to end of data and beginning of central directory first record\n mainHeader.offset = dindex;\n\n dindex = 0;\n const outBuffer = Buffer.alloc(totalSize);\n dataBlock.forEach(function (content) {\n content.copy(outBuffer, dindex); // write data blocks\n dindex += content.length;\n });\n entryHeaders.forEach(function (content) {\n content.copy(outBuffer, dindex); // write central directory entries\n dindex += content.length;\n });\n\n const mh = mainHeader.toBinary();\n if (_comment) {\n _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n }\n\n mh.copy(outBuffer, dindex); // write main header\n\n onSuccess(outBuffer);\n }\n };\n\n compress2Buffer(entryList);\n } catch (e) {\n onFail(e);\n }\n }\n };\n};\n","'use strict';\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","var charenc = {\n // UTF-8 encoding\n utf8: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n }\n },\n\n // Binary encoding\n bin: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n for (var bytes = [], i = 0; i < str.length; i++)\n bytes.push(str.charCodeAt(i) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n for (var str = [], i = 0; i < bytes.length; i++)\n str.push(String.fromCharCode(bytes[i]));\n return str.join('');\n }\n }\n};\n\nmodule.exports = charenc;\n","(function() {\n var base64map\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n crypt = {\n // Bit-wise rotation left\n rotl: function(n, b) {\n return (n << b) | (n >>> (32 - b));\n },\n\n // Bit-wise rotation right\n rotr: function(n, b) {\n return (n << (32 - b)) | (n >>> b);\n },\n\n // Swap big-endian to little-endian and vice versa\n endian: function(n) {\n // If number given, swap endian\n if (n.constructor == Number) {\n return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n }\n\n // Else, assume array and swap all items\n for (var i = 0; i < n.length; i++)\n n[i] = crypt.endian(n[i]);\n return n;\n },\n\n // Generate an array of any length of random bytes\n randomBytes: function(n) {\n for (var bytes = []; n > 0; n--)\n bytes.push(Math.floor(Math.random() * 256));\n return bytes;\n },\n\n // Convert a byte array to big-endian 32-bit words\n bytesToWords: function(bytes) {\n for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n words[b >>> 5] |= bytes[i] << (24 - b % 32);\n return words;\n },\n\n // Convert big-endian 32-bit words to a byte array\n wordsToBytes: function(words) {\n for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a hex string\n bytesToHex: function(bytes) {\n for (var hex = [], i = 0; i < bytes.length; i++) {\n hex.push((bytes[i] >>> 4).toString(16));\n hex.push((bytes[i] & 0xF).toString(16));\n }\n return hex.join('');\n },\n\n // Convert a hex string to a byte array\n hexToBytes: function(hex) {\n for (var bytes = [], c = 0; c < hex.length; c += 2)\n bytes.push(parseInt(hex.substr(c, 2), 16));\n return bytes;\n },\n\n // Convert a byte array to a base-64 string\n bytesToBase64: function(bytes) {\n for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n for (var j = 0; j < 4; j++)\n if (i * 8 + j * 6 <= bytes.length * 8)\n base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n else\n base64.push('=');\n }\n return base64.join('');\n },\n\n // Convert a base-64 string to a byte array\n base64ToBytes: function(base64) {\n // Remove non-base-64 characters\n base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n imod4 = ++i % 4) {\n if (imod4 == 0) continue;\n bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n }\n return bytes;\n }\n };\n\n module.exports = crypt;\n})();\n","\n\nclass ResizeableBuffer{\n constructor(size=100){\n this.size = size\n this.length = 0\n this.buf = Buffer.alloc(size)\n }\n prepend(val){\n if(Buffer.isBuffer(val)){\n const length = this.length + val.length\n if(length >= this.size){\n this.resize()\n if(length >= this.size){\n throw Error('INVALID_BUFFER_STATE')\n }\n }\n const buf = this.buf\n this.buf = Buffer.alloc(this.size)\n val.copy(this.buf, 0)\n buf.copy(this.buf, val.length)\n this.length += val.length\n }else{\n const length = this.length++\n if(length === this.size){\n this.resize()\n }\n const buf = this.clone()\n this.buf[0] = val\n buf.copy(this.buf,1, 0, length)\n }\n }\n append(val){\n const length = this.length++\n if(length === this.size){\n this.resize()\n }\n this.buf[length] = val\n }\n clone(){\n return Buffer.from(this.buf.slice(0, this.length))\n }\n resize(){\n const length = this.length\n this.size = this.size * 2\n const buf = Buffer.alloc(this.size)\n this.buf.copy(buf,0, 0, length)\n this.buf = buf\n }\n toString(encoding){\n if(encoding){\n return this.buf.slice(0, this.length).toString(encoding)\n }else{\n return Uint8Array.prototype.slice.call(this.buf.slice(0, this.length))\n }\n }\n toJSON(){\n return this.toString('utf8')\n }\n reset(){\n this.length = 0\n }\n}\n\nmodule.exports = ResizeableBuffer\n","\n/*\nCSV Parse\n\nPlease look at the [project documentation](https://csv.js.org/parse/) for\nadditional information.\n*/\n\nconst { Transform } = require('stream')\nconst ResizeableBuffer = require('./ResizeableBuffer')\n\n// white space characters\n// https://en.wikipedia.org/wiki/Whitespace_character\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes#Types\n// \\f\\n\\r\\t\\v\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff\nconst tab = 9\nconst nl = 10 // \\n, 0x0A in hexadecimal, 10 in decimal\nconst np = 12\nconst cr = 13 // \\r, 0x0D in hexadécimal, 13 in decimal\nconst space = 32\nconst boms = {\n // Note, the following are equals:\n // Buffer.from(\"\\ufeff\")\n // Buffer.from([239, 187, 191])\n // Buffer.from('EFBBBF', 'hex')\n 'utf8': Buffer.from([239, 187, 191]),\n // Note, the following are equals:\n // Buffer.from \"\\ufeff\", 'utf16le\n // Buffer.from([255, 254])\n 'utf16le': Buffer.from([255, 254])\n}\n\nclass Parser extends Transform {\n constructor(opts = {}){\n super({...{readableObjectMode: true}, ...opts, encoding: null})\n this.__originalOptions = opts\n this.__normalizeOptions(opts)\n }\n __normalizeOptions(opts){\n const options = {}\n // Merge with user options\n for(let opt in opts){\n options[underscore(opt)] = opts[opt]\n }\n // Normalize option `encoding`\n // Note: defined first because other options depends on it\n // to convert chars/strings into buffers.\n if(options.encoding === undefined || options.encoding === true){\n options.encoding = 'utf8'\n }else if(options.encoding === null || options.encoding === false){\n options.encoding = null\n }else if(typeof options.encoding !== 'string' && options.encoding !== null){\n throw new CsvError('CSV_INVALID_OPTION_ENCODING', [\n 'Invalid option encoding:',\n 'encoding must be a string or null to return a buffer,',\n `got ${JSON.stringify(options.encoding)}`\n ], options)\n }\n // Normalize option `bom`\n if(options.bom === undefined || options.bom === null || options.bom === false){\n options.bom = false\n }else if(options.bom !== true){\n throw new CsvError('CSV_INVALID_OPTION_BOM', [\n 'Invalid option bom:', 'bom must be true,',\n `got ${JSON.stringify(options.bom)}`\n ], options)\n }\n // Normalize option `cast`\n let fnCastField = null\n if(options.cast === undefined || options.cast === null || options.cast === false || options.cast === ''){\n options.cast = undefined\n }else if(typeof options.cast === 'function'){\n fnCastField = options.cast\n options.cast = true\n }else if(options.cast !== true){\n throw new CsvError('CSV_INVALID_OPTION_CAST', [\n 'Invalid option cast:', 'cast must be true or a function,',\n `got ${JSON.stringify(options.cast)}`\n ], options)\n }\n // Normalize option `cast_date`\n if(options.cast_date === undefined || options.cast_date === null || options.cast_date === false || options.cast_date === ''){\n options.cast_date = false\n }else if(options.cast_date === true){\n options.cast_date = function(value){\n const date = Date.parse(value)\n return !isNaN(date) ? new Date(date) : value\n }\n }else{\n throw new CsvError('CSV_INVALID_OPTION_CAST_DATE', [\n 'Invalid option cast_date:', 'cast_date must be true or a function,',\n `got ${JSON.stringify(options.cast_date)}`\n ], options)\n }\n // Normalize option `columns`\n let fnFirstLineToHeaders = null\n if(options.columns === true){\n // Fields in the first line are converted as-is to columns\n fnFirstLineToHeaders = undefined\n }else if(typeof options.columns === 'function'){\n fnFirstLineToHeaders = options.columns\n options.columns = true\n }else if(Array.isArray(options.columns)){\n options.columns = normalizeColumnsArray(options.columns)\n }else if(options.columns === undefined || options.columns === null || options.columns === false){\n options.columns = false\n }else{\n throw new CsvError('CSV_INVALID_OPTION_COLUMNS', [\n 'Invalid option columns:',\n 'expect an array, a function or true,',\n `got ${JSON.stringify(options.columns)}`\n ], options)\n }\n // Normalize option `columns_duplicates_to_array`\n if(options.columns_duplicates_to_array === undefined || options.columns_duplicates_to_array === null || options.columns_duplicates_to_array === false){\n options.columns_duplicates_to_array = false\n }else if(options.columns_duplicates_to_array !== true){\n throw new CsvError('CSV_INVALID_OPTION_COLUMNS_DUPLICATES_TO_ARRAY', [\n 'Invalid option columns_duplicates_to_array:',\n 'expect an boolean,',\n `got ${JSON.stringify(options.columns_duplicates_to_array)}`\n ], options)\n }else if(options.columns === false){\n throw new CsvError('CSV_INVALID_OPTION_COLUMNS_DUPLICATES_TO_ARRAY', [\n 'Invalid option columns_duplicates_to_array:',\n 'the `columns` mode must be activated.'\n ], options)\n }\n // Normalize option `comment`\n if(options.comment === undefined || options.comment === null || options.comment === false || options.comment === ''){\n options.comment = null\n }else{\n if(typeof options.comment === 'string'){\n options.comment = Buffer.from(options.comment, options.encoding)\n }\n if(!Buffer.isBuffer(options.comment)){\n throw new CsvError('CSV_INVALID_OPTION_COMMENT', [\n 'Invalid option comment:',\n 'comment must be a buffer or a string,',\n `got ${JSON.stringify(options.comment)}`\n ], options)\n }\n }\n // Normalize option `delimiter`\n const delimiter_json = JSON.stringify(options.delimiter)\n if(!Array.isArray(options.delimiter)) options.delimiter = [options.delimiter]\n if(options.delimiter.length === 0){\n throw new CsvError('CSV_INVALID_OPTION_DELIMITER', [\n 'Invalid option delimiter:',\n 'delimiter must be a non empty string or buffer or array of string|buffer,',\n `got ${delimiter_json}`\n ], options)\n }\n options.delimiter = options.delimiter.map(function(delimiter){\n if(delimiter === undefined || delimiter === null || delimiter === false){\n return Buffer.from(',', options.encoding)\n }\n if(typeof delimiter === 'string'){\n delimiter = Buffer.from(delimiter, options.encoding)\n }\n if( !Buffer.isBuffer(delimiter) || delimiter.length === 0){\n throw new CsvError('CSV_INVALID_OPTION_DELIMITER', [\n 'Invalid option delimiter:',\n 'delimiter must be a non empty string or buffer or array of string|buffer,',\n `got ${delimiter_json}`\n ], options)\n }\n return delimiter\n })\n // Normalize option `escape`\n if(options.escape === undefined || options.escape === true){\n options.escape = Buffer.from('\"', options.encoding)\n }else if(typeof options.escape === 'string'){\n options.escape = Buffer.from(options.escape, options.encoding)\n }else if (options.escape === null || options.escape === false){\n options.escape = null\n }\n if(options.escape !== null){\n if(!Buffer.isBuffer(options.escape)){\n throw new Error(`Invalid Option: escape must be a buffer, a string or a boolean, got ${JSON.stringify(options.escape)}`)\n }\n }\n // Normalize option `from`\n if(options.from === undefined || options.from === null){\n options.from = 1\n }else{\n if(typeof options.from === 'string' && /\\d+/.test(options.from)){\n options.from = parseInt(options.from)\n }\n if(Number.isInteger(options.from)){\n if(options.from < 0){\n throw new Error(`Invalid Option: from must be a positive integer, got ${JSON.stringify(opts.from)}`)\n }\n }else{\n throw new Error(`Invalid Option: from must be an integer, got ${JSON.stringify(options.from)}`)\n }\n }\n // Normalize option `from_line`\n if(options.from_line === undefined || options.from_line === null){\n options.from_line = 1\n }else{\n if(typeof options.from_line === 'string' && /\\d+/.test(options.from_line)){\n options.from_line = parseInt(options.from_line)\n }\n if(Number.isInteger(options.from_line)){\n if(options.from_line <= 0){\n throw new Error(`Invalid Option: from_line must be a positive integer greater than 0, got ${JSON.stringify(opts.from_line)}`)\n }\n }else{\n throw new Error(`Invalid Option: from_line must be an integer, got ${JSON.stringify(opts.from_line)}`)\n }\n }\n // Normalize options `ignore_last_delimiters`\n if(options.ignore_last_delimiters === undefined || options.ignore_last_delimiters === null){\n options.ignore_last_delimiters = false\n }else if(typeof options.ignore_last_delimiters === 'number'){\n options.ignore_last_delimiters = Math.floor(options.ignore_last_delimiters)\n if(options.ignore_last_delimiters === 0){\n options.ignore_last_delimiters = false\n }\n }else if(typeof options.ignore_last_delimiters !== 'boolean'){\n throw new CsvError('CSV_INVALID_OPTION_IGNORE_LAST_DELIMITERS', [\n 'Invalid option `ignore_last_delimiters`:',\n 'the value must be a boolean value or an integer,',\n `got ${JSON.stringify(options.ignore_last_delimiters)}`\n ], options)\n }\n if(options.ignore_last_delimiters === true && options.columns === false){\n throw new CsvError('CSV_IGNORE_LAST_DELIMITERS_REQUIRES_COLUMNS', [\n 'The option `ignore_last_delimiters`',\n 'requires the activation of the `columns` option'\n ], options)\n }\n // Normalize option `info`\n if(options.info === undefined || options.info === null || options.info === false){\n options.info = false\n }else if(options.info !== true){\n throw new Error(`Invalid Option: info must be true, got ${JSON.stringify(options.info)}`)\n }\n // Normalize option `max_record_size`\n if(options.max_record_size === undefined || options.max_record_size === null || options.max_record_size === false){\n options.max_record_size = 0\n }else if(Number.isInteger(options.max_record_size) && options.max_record_size >= 0){\n // Great, nothing to do\n }else if(typeof options.max_record_size === 'string' && /\\d+/.test(options.max_record_size)){\n options.max_record_size = parseInt(options.max_record_size)\n }else{\n throw new Error(`Invalid Option: max_record_size must be a positive integer, got ${JSON.stringify(options.max_record_size)}`)\n }\n // Normalize option `objname`\n if(options.objname === undefined || options.objname === null || options.objname === false){\n options.objname = undefined\n }else if(Buffer.isBuffer(options.objname)){\n if(options.objname.length === 0){\n throw new Error(`Invalid Option: objname must be a non empty buffer`)\n }\n if(options.encoding === null){\n // Don't call `toString`, leave objname as a buffer\n }else{\n options.objname = options.objname.toString(options.encoding)\n }\n }else if(typeof options.objname === 'string'){\n if(options.objname.length === 0){\n throw new Error(`Invalid Option: objname must be a non empty string`)\n }\n // Great, nothing to do\n }else{\n throw new Error(`Invalid Option: objname must be a string or a buffer, got ${options.objname}`)\n }\n // Normalize option `on_record`\n if(options.on_record === undefined || options.on_record === null){\n options.on_record = undefined\n }else if(typeof options.on_record !== 'function'){\n throw new CsvError('CSV_INVALID_OPTION_ON_RECORD', [\n 'Invalid option `on_record`:',\n 'expect a function,',\n `got ${JSON.stringify(options.on_record)}`\n ], options)\n }\n // Normalize option `quote`\n if(options.quote === null || options.quote === false || options.quote === ''){\n options.quote = null\n }else{\n if(options.quote === undefined || options.quote === true){\n options.quote = Buffer.from('\"', options.encoding)\n }else if(typeof options.quote === 'string'){\n options.quote = Buffer.from(options.quote, options.encoding)\n }\n if(!Buffer.isBuffer(options.quote)){\n throw new Error(`Invalid Option: quote must be a buffer or a string, got ${JSON.stringify(options.quote)}`)\n }\n }\n // Normalize option `raw`\n if(options.raw === undefined || options.raw === null || options.raw === false){\n options.raw = false\n }else if(options.raw !== true){\n throw new Error(`Invalid Option: raw must be true, got ${JSON.stringify(options.raw)}`)\n }\n // Normalize option `record_delimiter`\n if(!options.record_delimiter){\n options.record_delimiter = []\n }else if(!Array.isArray(options.record_delimiter)){\n options.record_delimiter = [options.record_delimiter]\n }\n options.record_delimiter = options.record_delimiter.map( function(rd){\n if(typeof rd === 'string'){\n rd = Buffer.from(rd, options.encoding)\n }\n return rd\n })\n // Normalize option `relax`\n if(typeof options.relax === 'boolean'){\n // Great, nothing to do\n }else if(options.relax === undefined || options.relax === null){\n options.relax = false\n }else{\n throw new Error(`Invalid Option: relax must be a boolean, got ${JSON.stringify(options.relax)}`)\n }\n // Normalize option `relax_column_count`\n if(typeof options.relax_column_count === 'boolean'){\n // Great, nothing to do\n }else if(options.relax_column_count === undefined || options.relax_column_count === null){\n options.relax_column_count = false\n }else{\n throw new Error(`Invalid Option: relax_column_count must be a boolean, got ${JSON.stringify(options.relax_column_count)}`)\n }\n if(typeof options.relax_column_count_less === 'boolean'){\n // Great, nothing to do\n }else if(options.relax_column_count_less === undefined || options.relax_column_count_less === null){\n options.relax_column_count_less = false\n }else{\n throw new Error(`Invalid Option: relax_column_count_less must be a boolean, got ${JSON.stringify(options.relax_column_count_less)}`)\n }\n if(typeof options.relax_column_count_more === 'boolean'){\n // Great, nothing to do\n }else if(options.relax_column_count_more === undefined || options.relax_column_count_more === null){\n options.relax_column_count_more = false\n }else{\n throw new Error(`Invalid Option: relax_column_count_more must be a boolean, got ${JSON.stringify(options.relax_column_count_more)}`)\n }\n // Normalize option `skip_empty_lines`\n if(typeof options.skip_empty_lines === 'boolean'){\n // Great, nothing to do\n }else if(options.skip_empty_lines === undefined || options.skip_empty_lines === null){\n options.skip_empty_lines = false\n }else{\n throw new Error(`Invalid Option: skip_empty_lines must be a boolean, got ${JSON.stringify(options.skip_empty_lines)}`)\n }\n // Normalize option `skip_lines_with_empty_values`\n if(typeof options.skip_lines_with_empty_values === 'boolean'){\n // Great, nothing to do\n }else if(options.skip_lines_with_empty_values === undefined || options.skip_lines_with_empty_values === null){\n options.skip_lines_with_empty_values = false\n }else{\n throw new Error(`Invalid Option: skip_lines_with_empty_values must be a boolean, got ${JSON.stringify(options.skip_lines_with_empty_values)}`)\n }\n // Normalize option `skip_lines_with_error`\n if(typeof options.skip_lines_with_error === 'boolean'){\n // Great, nothing to do\n }else if(options.skip_lines_with_error === undefined || options.skip_lines_with_error === null){\n options.skip_lines_with_error = false\n }else{\n throw new Error(`Invalid Option: skip_lines_with_error must be a boolean, got ${JSON.stringify(options.skip_lines_with_error)}`)\n }\n // Normalize option `rtrim`\n if(options.rtrim === undefined || options.rtrim === null || options.rtrim === false){\n options.rtrim = false\n }else if(options.rtrim !== true){\n throw new Error(`Invalid Option: rtrim must be a boolean, got ${JSON.stringify(options.rtrim)}`)\n }\n // Normalize option `ltrim`\n if(options.ltrim === undefined || options.ltrim === null || options.ltrim === false){\n options.ltrim = false\n }else if(options.ltrim !== true){\n throw new Error(`Invalid Option: ltrim must be a boolean, got ${JSON.stringify(options.ltrim)}`)\n }\n // Normalize option `trim`\n if(options.trim === undefined || options.trim === null || options.trim === false){\n options.trim = false\n }else if(options.trim !== true){\n throw new Error(`Invalid Option: trim must be a boolean, got ${JSON.stringify(options.trim)}`)\n }\n // Normalize options `trim`, `ltrim` and `rtrim`\n if(options.trim === true && opts.ltrim !== false){\n options.ltrim = true\n }else if(options.ltrim !== true){\n options.ltrim = false\n }\n if(options.trim === true && opts.rtrim !== false){\n options.rtrim = true\n }else if(options.rtrim !== true){\n options.rtrim = false\n }\n // Normalize option `to`\n if(options.to === undefined || options.to === null){\n options.to = -1\n }else{\n if(typeof options.to === 'string' && /\\d+/.test(options.to)){\n options.to = parseInt(options.to)\n }\n if(Number.isInteger(options.to)){\n if(options.to <= 0){\n throw new Error(`Invalid Option: to must be a positive integer greater than 0, got ${JSON.stringify(opts.to)}`)\n }\n }else{\n throw new Error(`Invalid Option: to must be an integer, got ${JSON.stringify(opts.to)}`)\n }\n }\n // Normalize option `to_line`\n if(options.to_line === undefined || options.to_line === null){\n options.to_line = -1\n }else{\n if(typeof options.to_line === 'string' && /\\d+/.test(options.to_line)){\n options.to_line = parseInt(options.to_line)\n }\n if(Number.isInteger(options.to_line)){\n if(options.to_line <= 0){\n throw new Error(`Invalid Option: to_line must be a positive integer greater than 0, got ${JSON.stringify(opts.to_line)}`)\n }\n }else{\n throw new Error(`Invalid Option: to_line must be an integer, got ${JSON.stringify(opts.to_line)}`)\n }\n }\n this.info = {\n bytes: 0,\n comment_lines: 0,\n empty_lines: 0,\n invalid_field_length: 0,\n lines: 1,\n records: 0\n }\n this.options = options\n this.state = {\n bomSkipped: false,\n bufBytesStart: 0,\n castField: fnCastField,\n commenting: false,\n // Current error encountered by a record\n error: undefined,\n enabled: options.from_line === 1,\n escaping: false,\n // escapeIsQuote: options.escape === options.quote,\n escapeIsQuote: Buffer.isBuffer(options.escape) && Buffer.isBuffer(options.quote) && Buffer.compare(options.escape, options.quote) === 0,\n // columns can be `false`, `true`, `Array`\n expectedRecordLength: Array.isArray(options.columns) ? options.columns.length : undefined,\n field: new ResizeableBuffer(20),\n firstLineToHeaders: fnFirstLineToHeaders,\n needMoreDataSize: Math.max(\n // Skip if the remaining buffer smaller than comment\n options.comment !== null ? options.comment.length : 0,\n // Skip if the remaining buffer can be delimiter\n ...options.delimiter.map( (delimiter) => delimiter.length),\n // Skip if the remaining buffer can be escape sequence\n options.quote !== null ? options.quote.length : 0,\n ),\n previousBuf: undefined,\n quoting: false,\n stop: false,\n rawBuffer: new ResizeableBuffer(100),\n record: [],\n recordHasError: false,\n record_length: 0,\n recordDelimiterMaxLength: options.record_delimiter.length === 0 ? 2 : Math.max(...options.record_delimiter.map( (v) => v.length)),\n trimChars: [Buffer.from(' ', options.encoding)[0], Buffer.from('\\t', options.encoding)[0]],\n wasQuoting: false,\n wasRowDelimiter: false\n }\n }\n // Implementation of `Transform._transform`\n _transform(buf, encoding, callback){\n if(this.state.stop === true){\n return\n }\n const err = this.__parse(buf, false)\n if(err !== undefined){\n this.state.stop = true\n }\n callback(err)\n }\n // Implementation of `Transform._flush`\n _flush(callback){\n if(this.state.stop === true){\n return\n }\n const err = this.__parse(undefined, true)\n callback(err)\n }\n // Central parser implementation\n __parse(nextBuf, end){\n const {bom, comment, escape, from_line, ltrim, max_record_size, quote, raw, relax, rtrim, skip_empty_lines, to, to_line} = this.options\n let {record_delimiter} = this.options\n const {bomSkipped, previousBuf, rawBuffer, escapeIsQuote} = this.state\n let buf\n if(previousBuf === undefined){\n if(nextBuf === undefined){\n // Handle empty string\n this.push(null)\n return\n }else{\n buf = nextBuf\n }\n }else if(previousBuf !== undefined && nextBuf === undefined){\n buf = previousBuf\n }else{\n buf = Buffer.concat([previousBuf, nextBuf])\n }\n // Handle UTF BOM\n if(bomSkipped === false){\n if(bom === false){\n this.state.bomSkipped = true\n }else if(buf.length < 3){\n // No enough data\n if(end === false){\n // Wait for more data\n this.state.previousBuf = buf\n return\n }\n }else{\n for(let encoding in boms){\n if(boms[encoding].compare(buf, 0, boms[encoding].length) === 0){\n // Skip BOM\n let bomLength = boms[encoding].length\n this.state.bufBytesStart += bomLength\n buf = buf.slice(bomLength)\n // Renormalize original options with the new encoding\n this.__normalizeOptions({...this.__originalOptions, encoding: encoding})\n break\n }\n }\n this.state.bomSkipped = true\n }\n }\n const bufLen = buf.length\n let pos\n for(pos = 0; pos < bufLen; pos++){\n // Ensure we get enough space to look ahead\n // There should be a way to move this out of the loop\n if(this.__needMoreData(pos, bufLen, end)){\n break\n }\n if(this.state.wasRowDelimiter === true){\n this.info.lines++\n this.state.wasRowDelimiter = false\n }\n if(to_line !== -1 && this.info.lines > to_line){\n this.state.stop = true\n this.push(null)\n return\n }\n // Auto discovery of record_delimiter, unix, mac and windows supported\n if(this.state.quoting === false && record_delimiter.length === 0){\n const record_delimiterCount = this.__autoDiscoverRecordDelimiter(buf, pos)\n if(record_delimiterCount){\n record_delimiter = this.options.record_delimiter\n }\n }\n const chr = buf[pos]\n if(raw === true){\n rawBuffer.append(chr)\n }\n if((chr === cr || chr === nl) && this.state.wasRowDelimiter === false ){\n this.state.wasRowDelimiter = true\n }\n // Previous char was a valid escape char\n // treat the current char as a regular char\n if(this.state.escaping === true){\n this.state.escaping = false\n }else{\n // Escape is only active inside quoted fields\n // We are quoting, the char is an escape chr and there is a chr to escape\n // if(escape !== null && this.state.quoting === true && chr === escape && pos + 1 < bufLen){\n if(escape !== null && this.state.quoting === true && this.__isEscape(buf, pos, chr) && pos + escape.length < bufLen){\n if(escapeIsQuote){\n if(this.__isQuote(buf, pos+escape.length)){\n this.state.escaping = true\n pos += escape.length - 1\n continue\n }\n }else{\n this.state.escaping = true\n pos += escape.length - 1\n continue\n }\n }\n // Not currently escaping and chr is a quote\n // TODO: need to compare bytes instead of single char\n if(this.state.commenting === false && this.__isQuote(buf, pos)){\n if(this.state.quoting === true){\n const nextChr = buf[pos+quote.length]\n const isNextChrTrimable = rtrim && this.__isCharTrimable(nextChr)\n const isNextChrComment = comment !== null && this.__compareBytes(comment, buf, pos+quote.length, nextChr)\n const isNextChrDelimiter = this.__isDelimiter(buf, pos+quote.length, nextChr)\n const isNextChrRecordDelimiter = record_delimiter.length === 0 ? this.__autoDiscoverRecordDelimiter(buf, pos+quote.length) : this.__isRecordDelimiter(nextChr, buf, pos+quote.length)\n // Escape a quote\n // Treat next char as a regular character\n if(escape !== null && this.__isEscape(buf, pos, chr) && this.__isQuote(buf, pos + escape.length)){\n pos += escape.length - 1\n }else if(!nextChr || isNextChrDelimiter || isNextChrRecordDelimiter || isNextChrComment || isNextChrTrimable){\n this.state.quoting = false\n this.state.wasQuoting = true\n pos += quote.length - 1\n continue\n }else if(relax === false){\n const err = this.__error(\n new CsvError('CSV_INVALID_CLOSING_QUOTE', [\n 'Invalid Closing Quote:',\n `got \"${String.fromCharCode(nextChr)}\"`,\n `at line ${this.info.lines}`,\n 'instead of delimiter, record delimiter, trimable character',\n '(if activated) or comment',\n ], this.options, this.__infoField())\n )\n if(err !== undefined) return err\n }else{\n this.state.quoting = false\n this.state.wasQuoting = true\n this.state.field.prepend(quote)\n pos += quote.length - 1\n }\n }else{\n if(this.state.field.length !== 0){\n // In relax mode, treat opening quote preceded by chrs as regular\n if( relax === false ){\n const err = this.__error(\n new CsvError('INVALID_OPENING_QUOTE', [\n 'Invalid Opening Quote:',\n `a quote is found inside a field at line ${this.info.lines}`,\n ], this.options, this.__infoField(), {\n field: this.state.field,\n })\n )\n if(err !== undefined) return err\n }\n }else{\n this.state.quoting = true\n pos += quote.length - 1\n continue\n }\n }\n }\n if(this.state.quoting === false){\n let recordDelimiterLength = this.__isRecordDelimiter(chr, buf, pos)\n if(recordDelimiterLength !== 0){\n // Do not emit comments which take a full line\n const skipCommentLine = this.state.commenting && (this.state.wasQuoting === false && this.state.record.length === 0 && this.state.field.length === 0)\n if(skipCommentLine){\n this.info.comment_lines++\n // Skip full comment line\n }else{\n // Activate records emition if above from_line\n if(this.state.enabled === false && this.info.lines + (this.state.wasRowDelimiter === true ? 1: 0) >= from_line){\n this.state.enabled = true\n this.__resetField()\n this.__resetRecord()\n pos += recordDelimiterLength - 1\n continue\n }\n // Skip if line is empty and skip_empty_lines activated\n if(skip_empty_lines === true && this.state.wasQuoting === false && this.state.record.length === 0 && this.state.field.length === 0){\n this.info.empty_lines++\n pos += recordDelimiterLength - 1\n continue\n }\n this.info.bytes = this.state.bufBytesStart + pos;\n const errField = this.__onField()\n if(errField !== undefined) return errField\n this.info.bytes = this.state.bufBytesStart + pos + recordDelimiterLength;\n const errRecord = this.__onRecord()\n if(errRecord !== undefined) return errRecord\n if(to !== -1 && this.info.records >= to){\n this.state.stop = true\n this.push(null)\n return\n }\n }\n this.state.commenting = false\n pos += recordDelimiterLength - 1\n continue\n }\n if(this.state.commenting){\n continue\n }\n const commentCount = comment === null ? 0 : this.__compareBytes(comment, buf, pos, chr)\n if(commentCount !== 0){\n this.state.commenting = true\n continue\n }\n let delimiterLength = this.__isDelimiter(buf, pos, chr)\n if(delimiterLength !== 0){\n this.info.bytes = this.state.bufBytesStart + pos;\n const errField = this.__onField()\n if(errField !== undefined) return errField\n pos += delimiterLength - 1\n continue\n }\n }\n }\n if(this.state.commenting === false){\n if(max_record_size !== 0 && this.state.record_length + this.state.field.length > max_record_size){\n const err = this.__error(\n new CsvError('CSV_MAX_RECORD_SIZE', [\n 'Max Record Size:',\n 'record exceed the maximum number of tolerated bytes',\n `of ${max_record_size}`,\n `at line ${this.info.lines}`,\n ], this.options, this.__infoField())\n )\n if(err !== undefined) return err\n }\n }\n const lappend = ltrim === false || this.state.quoting === true || this.state.field.length !== 0 || !this.__isCharTrimable(chr)\n // rtrim in non quoting is handle in __onField\n const rappend = rtrim === false || this.state.wasQuoting === false\n if( lappend === true && rappend === true ){\n this.state.field.append(chr)\n }else if(rtrim === true && !this.__isCharTrimable(chr)){\n const err = this.__error(\n new CsvError('CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE', [\n 'Invalid Closing Quote:',\n 'found non trimable byte after quote',\n `at line ${this.info.lines}`,\n ], this.options, this.__infoField())\n )\n if(err !== undefined) return err\n }\n }\n if(end === true){\n // Ensure we are not ending in a quoting state\n if(this.state.quoting === true){\n const err = this.__error(\n new CsvError('CSV_QUOTE_NOT_CLOSED', [\n 'Quote Not Closed:',\n `the parsing is finished with an opening quote at line ${this.info.lines}`,\n ], this.options, this.__infoField())\n )\n if(err !== undefined) return err\n }else{\n // Skip last line if it has no characters\n if(this.state.wasQuoting === true || this.state.record.length !== 0 || this.state.field.length !== 0){\n this.info.bytes = this.state.bufBytesStart + pos;\n const errField = this.__onField()\n if(errField !== undefined) return errField\n const errRecord = this.__onRecord()\n if(errRecord !== undefined) return errRecord\n }else if(this.state.wasRowDelimiter === true){\n this.info.empty_lines++\n }else if(this.state.commenting === true){\n this.info.comment_lines++\n }\n }\n }else{\n this.state.bufBytesStart += pos\n this.state.previousBuf = buf.slice(pos)\n }\n if(this.state.wasRowDelimiter === true){\n this.info.lines++\n this.state.wasRowDelimiter = false\n }\n }\n __onRecord(){\n const {columns, columns_duplicates_to_array, encoding, info, from, relax_column_count, relax_column_count_less, relax_column_count_more, raw, skip_lines_with_empty_values} = this.options\n const {enabled, record} = this.state\n if(enabled === false){\n return this.__resetRecord()\n }\n // Convert the first line into column names\n const recordLength = record.length\n if(columns === true){\n if(skip_lines_with_empty_values === true && isRecordEmpty(record)){\n this.__resetRecord()\n return\n }\n return this.__firstLineToColumns(record)\n }\n if(columns === false && this.info.records === 0){\n this.state.expectedRecordLength = recordLength\n }\n if(recordLength !== this.state.expectedRecordLength){\n const err = columns === false ?\n // Todo: rename CSV_INCONSISTENT_RECORD_LENGTH to\n // CSV_RECORD_INCONSISTENT_FIELDS_LENGTH\n new CsvError('CSV_INCONSISTENT_RECORD_LENGTH', [\n 'Invalid Record Length:',\n `expect ${this.state.expectedRecordLength},`,\n `got ${recordLength} on line ${this.info.lines}`,\n ], this.options, this.__infoField(), {\n record: record,\n })\n :\n // Todo: rename CSV_RECORD_DONT_MATCH_COLUMNS_LENGTH to\n // CSV_RECORD_INCONSISTENT_COLUMNS\n new CsvError('CSV_RECORD_DONT_MATCH_COLUMNS_LENGTH', [\n 'Invalid Record Length:',\n `columns length is ${columns.length},`, // rename columns\n `got ${recordLength} on line ${this.info.lines}`,\n ], this.options, this.__infoField(), {\n record: record,\n })\n if(relax_column_count === true ||\n (relax_column_count_less === true && recordLength < this.state.expectedRecordLength) ||\n (relax_column_count_more === true && recordLength > this.state.expectedRecordLength) ){\n this.info.invalid_field_length++\n this.state.error = err\n // Error is undefined with skip_lines_with_error\n }else{\n const finalErr = this.__error(err)\n if(finalErr) return finalErr\n }\n }\n if(skip_lines_with_empty_values === true && isRecordEmpty(record)){\n this.__resetRecord()\n return\n }\n if(this.state.recordHasError === true){\n this.__resetRecord()\n this.state.recordHasError = false\n return\n }\n this.info.records++\n if(from === 1 || this.info.records >= from){\n // With columns, records are object\n if(columns !== false){\n const obj = {}\n // Transform record array to an object\n for(let i = 0, l = record.length; i < l; i++){\n if(columns[i] === undefined || columns[i].disabled) continue\n // Turn duplicate columns into an array\n if (columns_duplicates_to_array === true && obj[columns[i].name] !== undefined) {\n if (Array.isArray(obj[columns[i].name])) {\n obj[columns[i].name] = obj[columns[i].name].concat(record[i])\n } else {\n obj[columns[i].name] = [obj[columns[i].name], record[i]]\n }\n } else {\n obj[columns[i].name] = record[i]\n }\n }\n const {objname} = this.options\n // Without objname (default)\n if(objname === undefined){\n if(raw === true || info === true){\n const err = this.__push(Object.assign(\n {record: obj},\n (raw === true ? {raw: this.state.rawBuffer.toString(encoding)}: {}),\n (info === true ? {info: this.__infoRecord()}: {})\n ))\n if(err){\n return err\n }\n }else{\n const err = this.__push(obj)\n if(err){\n return err\n }\n }\n // With objname (default)\n }else{\n if(raw === true || info === true){\n const err = this.__push(Object.assign(\n {record: [obj[objname], obj]},\n raw === true ? {raw: this.state.rawBuffer.toString(encoding)}: {},\n info === true ? {info: this.__infoRecord()}: {}\n ))\n if(err){\n return err\n }\n }else{\n const err = this.__push([obj[objname], obj])\n if(err){\n return err\n }\n }\n }\n // Without columns, records are array\n }else{\n if(raw === true || info === true){\n const err = this.__push(Object.assign(\n {record: record},\n raw === true ? {raw: this.state.rawBuffer.toString(encoding)}: {},\n info === true ? {info: this.__infoRecord()}: {}\n ))\n if(err){\n return err\n }\n }else{\n const err = this.__push(record)\n if(err){\n return err\n }\n }\n }\n }\n this.__resetRecord()\n }\n __firstLineToColumns(record){\n const {firstLineToHeaders} = this.state\n try{\n const headers = firstLineToHeaders === undefined ? record : firstLineToHeaders.call(null, record)\n if(!Array.isArray(headers)){\n return this.__error(\n new CsvError('CSV_INVALID_COLUMN_MAPPING', [\n 'Invalid Column Mapping:',\n 'expect an array from column function,',\n `got ${JSON.stringify(headers)}`\n ], this.options, this.__infoField(), {\n headers: headers,\n })\n )\n }\n const normalizedHeaders = normalizeColumnsArray(headers)\n this.state.expectedRecordLength = normalizedHeaders.length\n this.options.columns = normalizedHeaders\n this.__resetRecord()\n return\n }catch(err){\n return err\n }\n }\n __resetRecord(){\n if(this.options.raw === true){\n this.state.rawBuffer.reset()\n }\n this.state.error = undefined\n this.state.record = []\n this.state.record_length = 0\n }\n __onField(){\n const {cast, encoding, rtrim, max_record_size} = this.options\n const {enabled, wasQuoting} = this.state\n // Short circuit for the from_line options\n if(enabled === false){\n return this.__resetField()\n }\n let field = this.state.field.toString(encoding)\n if(rtrim === true && wasQuoting === false){\n field = field.trimRight()\n }\n if(cast === true){\n const [err, f] = this.__cast(field)\n if(err !== undefined) return err\n field = f\n }\n this.state.record.push(field)\n // Increment record length if record size must not exceed a limit\n if(max_record_size !== 0 && typeof field === 'string'){\n this.state.record_length += field.length\n }\n this.__resetField()\n }\n __resetField(){\n this.state.field.reset()\n this.state.wasQuoting = false\n }\n __push(record){\n const {on_record} = this.options\n if(on_record !== undefined){\n const info = this.__infoRecord()\n try{\n record = on_record.call(null, record, info)\n }catch(err){\n return err\n }\n if(record === undefined || record === null){ return }\n }\n this.push(record)\n }\n // Return a tuple with the error and the casted value\n __cast(field){\n const {columns, relax_column_count} = this.options\n const isColumns = Array.isArray(columns)\n // Dont loose time calling cast\n // because the final record is an object\n // and this field can't be associated to a key present in columns\n if( isColumns === true && relax_column_count && this.options.columns.length <= this.state.record.length ){\n return [undefined, undefined]\n }\n if(this.state.castField !== null){\n try{\n const info = this.__infoField()\n return [undefined, this.state.castField.call(null, field, info)]\n }catch(err){\n return [err]\n }\n }\n if(this.__isFloat(field)){\n return [undefined, parseFloat(field)]\n }else if(this.options.cast_date !== false){\n const info = this.__infoField()\n return [undefined, this.options.cast_date.call(null, field, info)]\n }\n return [undefined, field]\n }\n // Helper to test if a character is a space or a line delimiter\n __isCharTrimable(chr){\n return chr === space || chr === tab || chr === cr || chr === nl || chr === np\n }\n // Keep it in case we implement the `cast_int` option\n // __isInt(value){\n // // return Number.isInteger(parseInt(value))\n // // return !isNaN( parseInt( obj ) );\n // return /^(\\-|\\+)?[1-9][0-9]*$/.test(value)\n // }\n __isFloat(value){\n return (value - parseFloat( value ) + 1) >= 0 // Borrowed from jquery\n }\n __compareBytes(sourceBuf, targetBuf, targetPos, firstByte){\n if(sourceBuf[0] !== firstByte) return 0\n const sourceLength = sourceBuf.length\n for(let i = 1; i < sourceLength; i++){\n if(sourceBuf[i] !== targetBuf[targetPos+i]) return 0\n }\n return sourceLength\n }\n __needMoreData(i, bufLen, end){\n if(end) return false\n const {quote} = this.options\n const {quoting, needMoreDataSize, recordDelimiterMaxLength} = this.state\n const numOfCharLeft = bufLen - i - 1\n const requiredLength = Math.max(\n needMoreDataSize,\n // Skip if the remaining buffer smaller than record delimiter\n recordDelimiterMaxLength,\n // Skip if the remaining buffer can be record delimiter following the closing quote\n // 1 is for quote.length\n quoting ? (quote.length + recordDelimiterMaxLength) : 0,\n )\n return numOfCharLeft < requiredLength\n }\n __isDelimiter(buf, pos, chr){\n const {delimiter, ignore_last_delimiters} = this.options\n if(ignore_last_delimiters === true && this.state.record.length === this.options.columns.length - 1){\n return 0\n }else if(ignore_last_delimiters !== false && typeof ignore_last_delimiters === 'number' && this.state.record.length === ignore_last_delimiters - 1){\n return 0\n }\n loop1: for(let i = 0; i < delimiter.length; i++){\n const del = delimiter[i]\n if(del[0] === chr){\n for(let j = 1; j < del.length; j++){\n if(del[j] !== buf[pos+j]) continue loop1\n }\n return del.length\n }\n }\n return 0\n }\n __isRecordDelimiter(chr, buf, pos){\n const {record_delimiter} = this.options\n const recordDelimiterLength = record_delimiter.length\n loop1: for(let i = 0; i < recordDelimiterLength; i++){\n const rd = record_delimiter[i]\n const rdLength = rd.length\n if(rd[0] !== chr){\n continue\n }\n for(let j = 1; j < rdLength; j++){\n if(rd[j] !== buf[pos+j]){\n continue loop1\n }\n }\n return rd.length\n }\n return 0\n }\n __isEscape(buf, pos, chr){\n const {escape} = this.options\n if(escape === null) return false\n const l = escape.length\n if(escape[0] === chr){\n for(let i = 0; i < l; i++){\n if(escape[i] !== buf[pos+i]){\n return false\n }\n }\n return true\n }\n return false\n }\n __isQuote(buf, pos){\n const {quote} = this.options\n if(quote === null) return false\n const l = quote.length\n for(let i = 0; i < l; i++){\n if(quote[i] !== buf[pos+i]){\n return false\n }\n }\n return true\n }\n __autoDiscoverRecordDelimiter(buf, pos){\n const {encoding} = this.options\n const chr = buf[pos]\n if(chr === cr){\n if(buf[pos+1] === nl){\n this.options.record_delimiter.push(Buffer.from('\\r\\n', encoding))\n this.state.recordDelimiterMaxLength = 2\n return 2\n }else{\n this.options.record_delimiter.push(Buffer.from('\\r', encoding))\n this.state.recordDelimiterMaxLength = 1\n return 1\n }\n }else if(chr === nl){\n this.options.record_delimiter.push(Buffer.from('\\n', encoding))\n this.state.recordDelimiterMaxLength = 1\n return 1\n }\n return 0\n }\n __error(msg){\n const {skip_lines_with_error} = this.options\n const err = typeof msg === 'string' ? new Error(msg) : msg\n if(skip_lines_with_error){\n this.state.recordHasError = true\n this.emit('skip', err)\n return undefined\n }else{\n return err\n }\n }\n __infoDataSet(){\n return {\n ...this.info,\n columns: this.options.columns\n }\n }\n __infoRecord(){\n const {columns} = this.options\n return {\n ...this.__infoDataSet(),\n error: this.state.error,\n header: columns === true,\n index: this.state.record.length,\n }\n }\n __infoField(){\n const {columns} = this.options\n const isColumns = Array.isArray(columns)\n return {\n ...this.__infoRecord(),\n column: isColumns === true ?\n ( columns.length > this.state.record.length ?\n columns[this.state.record.length].name :\n null\n ) :\n this.state.record.length,\n quoting: this.state.wasQuoting,\n }\n }\n}\n\nconst parse = function(){\n let data, options, callback\n for(let i in arguments){\n const argument = arguments[i]\n const type = typeof argument\n if(data === undefined && (typeof argument === 'string' || Buffer.isBuffer(argument))){\n data = argument\n }else if(options === undefined && isObject(argument)){\n options = argument\n }else if(callback === undefined && type === 'function'){\n callback = argument\n }else{\n throw new CsvError('CSV_INVALID_ARGUMENT', [\n 'Invalid argument:',\n `got ${JSON.stringify(argument)} at index ${i}`\n ], options || {})\n }\n }\n const parser = new Parser(options)\n if(callback){\n const records = options === undefined || options.objname === undefined ? [] : {}\n parser.on('readable', function(){\n let record\n while((record = this.read()) !== null){\n if(options === undefined || options.objname === undefined){\n records.push(record)\n }else{\n records[record[0]] = record[1]\n }\n }\n })\n parser.on('error', function(err){\n callback(err, undefined, parser.__infoDataSet())\n })\n parser.on('end', function(){\n callback(undefined, records, parser.__infoDataSet())\n })\n }\n if(data !== undefined){\n // Give a chance for events to be registered later\n if(typeof setImmediate === 'function'){\n setImmediate(function(){\n parser.write(data)\n parser.end()\n })\n }else{\n parser.write(data)\n parser.end()\n }\n }\n return parser\n}\n\nclass CsvError extends Error {\n constructor(code, message, options, ...contexts) {\n if(Array.isArray(message)) message = message.join(' ')\n super(message)\n if(Error.captureStackTrace !== undefined){\n Error.captureStackTrace(this, CsvError)\n }\n this.code = code\n for(const context of contexts){\n for(const key in context){\n const value = context[key]\n this[key] = Buffer.isBuffer(value) ? value.toString(options.encoding) : value == null ? value : JSON.parse(JSON.stringify(value))\n }\n }\n }\n}\n\nparse.Parser = Parser\n\nparse.CsvError = CsvError\n\nmodule.exports = parse\n\nconst underscore = function(str){\n return str.replace(/([A-Z])/g, function(_, match){\n return '_' + match.toLowerCase()\n })\n}\n\nconst isObject = function(obj){\n return (typeof obj === 'object' && obj !== null && !Array.isArray(obj))\n}\n\nconst isRecordEmpty = function(record){\n return record.every( (field) => field == null || field.toString && field.toString().trim() === '' )\n}\n\nconst normalizeColumnsArray = function(columns){\n const normalizedColumns = [];\n for(let i = 0, l = columns.length; i < l; i++){\n const column = columns[i]\n if(column === undefined || column === null || column === false){\n normalizedColumns[i] = { disabled: true }\n }else if(typeof column === 'string'){\n normalizedColumns[i] = { name: column }\n }else if(isObject(column)){\n if(typeof column.name !== 'string'){\n throw new CsvError('CSV_OPTION_COLUMNS_MISSING_NAME', [\n 'Option columns missing name:',\n `property \"name\" is required at position ${i}`,\n 'when column is an object literal'\n ])\n }\n normalizedColumns[i] = column\n }else{\n throw new CsvError('CSV_INVALID_COLUMN_DEFINITION', [\n 'Invalid column definition:',\n 'expect a string or a literal object,',\n `got ${JSON.stringify(column)} at position ${i}`\n ])\n }\n }\n return normalizedColumns;\n}\n","\nconst parse = require('.')\n\nmodule.exports = function(data, options={}){\n if(typeof data === 'string'){\n data = Buffer.from(data)\n }\n const records = options && options.objname ? {} : []\n const parser = new parse.Parser(options)\n parser.push = function(record){\n if(record === null){\n return\n }\n if(options.objname === undefined)\n records.push(record)\n else{\n records[record[0]] = record[1]\n }\n }\n const err1 = parser.__parse(data, false)\n if(err1 !== undefined) throw err1\n const err2 = parser.__parse(undefined, true)\n if(err2 !== undefined) throw err2\n return records\n}\n","\n/*\nCSV Stringify\n\nPlease look at the [project documentation](https://csv.js.org/stringify/) for\nadditional information.\n*/\n\nconst { Transform } = require('stream')\nconst bom_utf8 = Buffer.from([239, 187, 191])\n\nclass Stringifier extends Transform {\n constructor(opts = {}){\n super({...{writableObjectMode: true}, ...opts})\n const options = {}\n let err\n // Merge with user options\n for(let opt in opts){\n options[underscore(opt)] = opts[opt]\n }\n if(err = this.normalize(options)) throw err\n switch(options.record_delimiter){\n case 'auto':\n options.record_delimiter = null\n break\n case 'unix':\n options.record_delimiter = \"\\n\"\n break\n case 'mac':\n options.record_delimiter = \"\\r\"\n break\n case 'windows':\n options.record_delimiter = \"\\r\\n\"\n break\n case 'ascii':\n options.record_delimiter = \"\\u001e\"\n break\n case 'unicode':\n options.record_delimiter = \"\\u2028\"\n break\n }\n // Expose options\n this.options = options\n // Internal state\n this.state = {\n stop: false\n }\n // Information\n this.info = {\n records: 0\n }\n }\n normalize(options){\n // Normalize option `bom`\n if(options.bom === undefined || options.bom === null || options.bom === false){\n options.bom = false\n }else if(options.bom !== true){\n return new CsvError('CSV_OPTION_BOOLEAN_INVALID_TYPE', [\n 'option `bom` is optional and must be a boolean value,',\n `got ${JSON.stringify(options.bom)}`\n ])\n }\n // Normalize option `delimiter`\n if(options.delimiter === undefined || options.delimiter === null){\n options.delimiter = ','\n }else if(Buffer.isBuffer(options.delimiter)){\n options.delimiter = options.delimiter.toString()\n }else if(typeof options.delimiter !== 'string'){\n return new CsvError('CSV_OPTION_DELIMITER_INVALID_TYPE', [\n 'option `delimiter` must be a buffer or a string,',\n `got ${JSON.stringify(options.delimiter)}`\n ])\n }\n // Normalize option `quote`\n if(options.quote === undefined || options.quote === null){\n options.quote = '\"'\n }else if(options.quote === true){\n options.quote = '\"'\n }else if(options.quote === false){\n options.quote = ''\n }else if (Buffer.isBuffer(options.quote)){\n options.quote = options.quote.toString()\n }else if(typeof options.quote !== 'string'){\n return new CsvError('CSV_OPTION_QUOTE_INVALID_TYPE', [\n 'option `quote` must be a boolean, a buffer or a string,',\n `got ${JSON.stringify(options.quote)}`\n ])\n }\n // Normalize option `quoted`\n if(options.quoted === undefined || options.quoted === null){\n options.quoted = false\n }else{\n // todo\n }\n // Normalize option `quoted_empty`\n if(options.quoted_empty === undefined || options.quoted_empty === null){\n options.quoted_empty = undefined\n }else{\n // todo\n }\n // Normalize option `quoted_match`\n if(options.quoted_match === undefined || options.quoted_match === null || options.quoted_match === false){\n options.quoted_match = null\n }else if(!Array.isArray(options.quoted_match)){\n options.quoted_match = [options.quoted_match]\n }\n if(options.quoted_match){\n for(let quoted_match of options.quoted_match){\n const isString = typeof quoted_match === 'string'\n const isRegExp = quoted_match instanceof RegExp\n if(!isString && !isRegExp){\n return Error(`Invalid Option: quoted_match must be a string or a regex, got ${JSON.stringify(quoted_match)}`)\n }\n }\n }\n // Normalize option `quoted_string`\n if(options.quoted_string === undefined || options.quoted_string === null){\n options.quoted_string = false\n }else{\n // todo\n }\n // Normalize option `eof`\n if(options.eof === undefined || options.eof === null){\n options.eof = true\n }else{\n // todo\n }\n // Normalize option `escape`\n if(options.escape === undefined || options.escape === null){\n options.escape = '\"'\n }else if(Buffer.isBuffer(options.escape)){\n options.escape = options.escape.toString()\n }else if(typeof options.escape !== 'string'){\n return Error(`Invalid Option: escape must be a buffer or a string, got ${JSON.stringify(options.escape)}`)\n }\n if (options.escape.length > 1){\n return Error(`Invalid Option: escape must be one character, got ${options.escape.length} characters`)\n }\n // Normalize option `header`\n if(options.header === undefined || options.header === null){\n options.header = false\n }else{\n // todo\n }\n // Normalize option `columns`\n options.columns = this.normalize_columns(options.columns)\n // Normalize option `quoted`\n if(options.quoted === undefined || options.quoted === null){\n options.quoted = false\n }else{\n // todo\n }\n // Normalize option `cast`\n if(options.cast === undefined || options.cast === null){\n options.cast = {}\n }else{\n // todo\n }\n // Normalize option cast.bigint\n if(options.cast.bigint === undefined || options.cast.bigint === null){\n // Cast boolean to string by default\n options.cast.bigint = value => '' + value\n }\n // Normalize option cast.boolean\n if(options.cast.boolean === undefined || options.cast.boolean === null){\n // Cast boolean to string by default\n options.cast.boolean = value => value ? '1' : ''\n }\n // Normalize option cast.date\n if(options.cast.date === undefined || options.cast.date === null){\n // Cast date to timestamp string by default\n options.cast.date = value => '' + value.getTime()\n }\n // Normalize option cast.number\n if(options.cast.number === undefined || options.cast.number === null){\n // Cast number to string using native casting by default\n options.cast.number = value => '' + value\n }\n // Normalize option cast.object\n if(options.cast.object === undefined || options.cast.object === null){\n // Stringify object as JSON by default\n options.cast.object = value => JSON.stringify(value)\n }\n // Normalize option cast.string\n if(options.cast.string === undefined || options.cast.string === null){\n // Leave string untouched\n options.cast.string = function(value){return value}\n }\n // Normalize option `record_delimiter`\n if(options.record_delimiter === undefined || options.record_delimiter === null){\n options.record_delimiter = '\\n'\n }else if(Buffer.isBuffer(options.record_delimiter)){\n options.record_delimiter = options.record_delimiter.toString()\n }else if(typeof options.record_delimiter !== 'string'){\n return Error(`Invalid Option: record_delimiter must be a buffer or a string, got ${JSON.stringify(options.record_delimiter)}`)\n }\n }\n _transform(chunk, encoding, callback){\n if(this.state.stop === true){\n return\n }\n // Chunk validation\n if(!Array.isArray(chunk) && typeof chunk !== 'object'){\n this.state.stop = true\n return callback(Error(`Invalid Record: expect an array or an object, got ${JSON.stringify(chunk)}`))\n }\n // Detect columns from the first record\n if(this.info.records === 0){\n if(Array.isArray(chunk)){\n if(this.options.header === true && !this.options.columns){\n this.state.stop = true\n return callback(Error('Undiscoverable Columns: header option requires column option or object records'))\n }\n }else if(this.options.columns === undefined || this.options.columns === null){\n this.options.columns = this.normalize_columns(Object.keys(chunk))\n }\n }\n // Emit the header\n if(this.info.records === 0){\n this.bom()\n this.headers()\n }\n // Emit and stringify the record if an object or an array\n try{\n this.emit('record', chunk, this.info.records)\n }catch(err){\n this.state.stop = true\n return this.emit('error', err)\n }\n // Convert the record into a string\n let chunk_string\n if(this.options.eof){\n chunk_string = this.stringify(chunk)\n if(chunk_string === undefined){\n return\n }else{\n chunk_string = chunk_string + this.options.record_delimiter\n }\n }else{\n chunk_string = this.stringify(chunk)\n if(chunk_string === undefined){\n return\n }else{\n if(this.options.header || this.info.records){\n chunk_string = this.options.record_delimiter + chunk_string\n }\n }\n }\n // Emit the csv\n this.info.records++\n this.push(chunk_string)\n callback()\n }\n _flush(callback){\n if(this.info.records === 0){\n this.bom()\n this.headers()\n }\n callback()\n }\n stringify(chunk, chunkIsHeader=false){\n if(typeof chunk !== 'object'){\n return chunk\n }\n const {columns, header} = this.options\n const record = []\n // Record is an array\n if(Array.isArray(chunk)){\n // We are getting an array but the user has specified output columns. In\n // this case, we respect the columns indexes\n if(columns){\n chunk.splice(columns.length)\n }\n // Cast record elements\n for(let i=0; i<chunk.length; i++){\n const field = chunk[i]\n const [err, value] = this.__cast(field, {\n index: i, column: i, records: this.info.records, header: chunkIsHeader\n })\n if(err){\n this.emit('error', err)\n return\n }\n record[i] = [value, field]\n }\n // Record is a literal object\n }else{\n if(columns){\n for(let i=0; i<columns.length; i++){\n const field = get(chunk, columns[i].key)\n const [err, value] = this.__cast(field, {\n index: i, column: columns[i].key, records: this.info.records, header: chunkIsHeader\n })\n if(err){\n this.emit('error', err)\n return\n }\n record[i] = [value, field]\n }\n }else{\n for(let column of chunk){\n const field = chunk[column]\n const [err, value] = this.__cast(field, {\n index: i, column: columns[i].key, records: this.info.records, header: chunkIsHeader\n })\n if(err){\n this.emit('error', err)\n return\n }\n record.push([value, field])\n }\n }\n }\n let csvrecord = ''\n for(let i=0; i<record.length; i++){\n let options, err\n let [value, field] = record[i]\n if(typeof value === \"string\"){\n options = this.options\n }else if(isObject(value)){\n // let { value, ...options } = value\n options = value\n value = options.value\n delete options.value\n if(typeof value !== \"string\" && value !== undefined && value !== null){\n this.emit(\"error\", Error(`Invalid Casting Value: returned value must return a string, null or undefined, got ${JSON.stringify(value)}`))\n return\n }\n options = {...this.options, ...options}\n if(err = this.normalize(options)){\n this.emit(\"error\", err)\n return\n }\n }else if(value === undefined || value === null){\n options = this.options\n }else{\n this.emit(\"error\", Error(`Invalid Casting Value: returned value must return a string, an object, null or undefined, got ${JSON.stringify(value)}`))\n return\n }\n const {delimiter, escape, quote, quoted, quoted_empty, quoted_string, quoted_match, record_delimiter} = options\n if(value){\n if(typeof value !== 'string'){\n this.emit(\"error\", Error(`Formatter must return a string, null or undefined, got ${JSON.stringify(value)}`))\n return null\n }\n const containsdelimiter = delimiter.length && value.indexOf(delimiter) >= 0\n const containsQuote = (quote !== '') && value.indexOf(quote) >= 0\n const containsEscape = value.indexOf(escape) >= 0 && (escape !== quote)\n const containsRecordDelimiter = value.indexOf(record_delimiter) >= 0\n const quotedString = quoted_string && typeof field === 'string'\n let quotedMatch = quoted_match && quoted_match.filter( quoted_match => {\n if(typeof quoted_match === 'string'){\n return value.indexOf(quoted_match) !== -1\n }else{\n return quoted_match.test(value)\n }\n })\n quotedMatch = quotedMatch && quotedMatch.length > 0\n const shouldQuote = containsQuote === true || containsdelimiter || containsRecordDelimiter || quoted || quotedString || quotedMatch\n if(shouldQuote === true && containsEscape === true){\n const regexp = escape === '\\\\'\n ? new RegExp(escape + escape, 'g')\n : new RegExp(escape, 'g')\n value = value.replace(regexp, escape + escape)\n }\n if(containsQuote === true){\n const regexp = new RegExp(quote,'g')\n value = value.replace(regexp, escape + quote)\n }\n if(shouldQuote === true){\n value = quote + value + quote\n }\n csvrecord += value\n }else if(quoted_empty === true || (field === '' && quoted_string === true && quoted_empty !== false)){\n csvrecord += quote + quote\n }\n if(i !== record.length - 1){\n csvrecord += delimiter\n }\n }\n return csvrecord\n }\n bom(){\n if(this.options.bom !== true){\n return\n }\n this.push(bom_utf8)\n }\n headers(){\n if(this.options.header === false){\n return\n }\n if(this.options.columns === undefined){\n return\n }\n let headers = this.options.columns.map(column => column.header)\n if(this.options.eof){\n headers = this.stringify(headers, true) + this.options.record_delimiter\n }else{\n headers = this.stringify(headers)\n }\n this.push(headers)\n }\n __cast(value, context){\n const type = typeof value\n try{\n if(type === 'string'){ // Fine for 99% of the cases\n return [undefined, this.options.cast.string(value, context)]\n }else if(type === 'bigint'){\n return [undefined, this.options.cast.bigint(value, context)]\n }else if(type === 'number'){\n return [undefined, this.options.cast.number(value, context)]\n }else if(type === 'boolean'){\n return [undefined, this.options.cast.boolean(value, context)]\n }else if(value instanceof Date){\n return [undefined, this.options.cast.date(value, context)]\n }else if(type === 'object' && value !== null){\n return [undefined, this.options.cast.object(value, context)]\n }else{\n return [undefined, value, value]\n }\n }catch(err){\n return [err]\n }\n }\n normalize_columns(columns){\n if(columns === undefined || columns === null){\n return undefined\n }\n if(typeof columns !== 'object'){\n throw Error('Invalid option \"columns\": expect an array or an object')\n }\n if(!Array.isArray(columns)){\n const newcolumns = []\n for(let k in columns){\n newcolumns.push({\n key: k,\n header: columns[k]\n })\n }\n columns = newcolumns\n }else{\n const newcolumns = []\n for(let column of columns){\n if(typeof column === 'string'){\n newcolumns.push({\n key: column,\n header: column\n })\n }else if(typeof column === 'object' && column !== undefined && !Array.isArray(column)){\n if(!column.key){\n throw Error('Invalid column definition: property \"key\" is required')\n }\n if(column.header === undefined){\n column.header = column.key\n }\n newcolumns.push(column)\n }else{\n throw Error('Invalid column definition: expect a string or an object')\n }\n }\n columns = newcolumns\n }\n return columns\n }\n}\n\nconst stringify = function(){\n let data, options, callback\n for(let i in arguments){\n const argument = arguments[i]\n const type = typeof argument\n if(data === undefined && (Array.isArray(argument))){\n data = argument\n }else if(options === undefined && isObject(argument)){\n options = argument\n }else if(callback === undefined && type === 'function'){\n callback = argument\n }else{\n throw new CsvError('CSV_INVALID_ARGUMENT', [\n 'Invalid argument:',\n `got ${JSON.stringify(argument)} at index ${i}`\n ])\n }\n }\n const stringifier = new Stringifier(options)\n if(callback){\n const chunks = []\n stringifier.on('readable', function(){\n let chunk\n while((chunk = this.read()) !== null){\n chunks.push(chunk)\n }\n })\n stringifier.on('error', function(err){\n callback(err)\n })\n stringifier.on('end', function(){\n callback(undefined, chunks.join(''))\n })\n }\n if(data !== undefined){\n // Give a chance for events to be registered later\n if(typeof setImmediate === 'function'){\n setImmediate(function(){\n for(let record of data){\n stringifier.write(record)\n }\n stringifier.end()\n })\n }else{\n for(let record of data){\n stringifier.write(record)\n }\n stringifier.end()\n }\n }\n return stringifier\n}\n\nclass CsvError extends Error {\n constructor(code, message, ...contexts) {\n if(Array.isArray(message)) message = message.join(' ')\n super(message)\n if(Error.captureStackTrace !== undefined){\n Error.captureStackTrace(this, CsvError)\n }\n this.code = code\n for(const context of contexts){\n for(const key in context){\n const value = context[key]\n this[key] = Buffer.isBuffer(value) ? value.toString() : value == null ? value : JSON.parse(JSON.stringify(value))\n }\n }\n }\n}\n\nstringify.Stringifier = Stringifier\n\nstringify.CsvError = CsvError\n\nmodule.exports = stringify\n\nconst isObject = function(obj){\n return typeof obj === 'object' && obj !== null && ! Array.isArray(obj)\n}\n\nconst underscore = function(str){\n return str.replace(/([A-Z])/g, function(_, match){\n return '_' + match.toLowerCase()\n })\n}\n\n// Lodash implementation of `get`\n\nconst charCodeOfDot = '.'.charCodeAt(0)\nconst reEscapeChar = /\\\\(\\\\)?/g\nconst rePropName = RegExp(\n // Match anything that isn't a dot or bracket.\n '[^.[\\\\]]+' + '|' +\n // Or match property names within brackets.\n '\\\\[(?:' +\n // Match a non-string expression.\n '([^\"\\'][^[]*)' + '|' +\n // Or match strings (supports escaping characters).\n '([\"\\'])((?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\.)*?)\\\\2' +\n ')\\\\]'+ '|' +\n // Or match \"\" as the space between consecutive dots or empty brackets.\n '(?=(?:\\\\.|\\\\[\\\\])(?:\\\\.|\\\\[\\\\]|$))'\n, 'g')\nconst reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/\nconst reIsPlainProp = /^\\w*$/\nconst getTag = function(value){\n if(!value)\n value === undefined ? '[object Undefined]' : '[object Null]'\n return Object.prototype.toString.call(value)\n}\nconst isKey = function(value, object){\n if(Array.isArray(value)){\n return false\n }\n const type = typeof value\n if(type === 'number' || type === 'symbol' || type === 'boolean' || !value || isSymbol(value)){\n return true\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object))\n}\nconst isSymbol = function(value){\n const type = typeof value\n return type === 'symbol' || (type === 'object' && value && getTag(value) === '[object Symbol]')\n}\nconst stringToPath = function(string){\n const result = []\n if(string.charCodeAt(0) === charCodeOfDot){\n result.push('')\n }\n string.replace(rePropName, function(match, expression, quote, subString){\n let key = match\n if(quote){\n key = subString.replace(reEscapeChar, '$1')\n }else if(expression){\n key = expression.trim()\n }\n result.push(key)\n })\n return result\n}\nconst castPath = function(value, object){\n if(Array.isArray(value)){\n return value\n } else {\n return isKey(value, object) ? [value] : stringToPath(value)\n }\n}\nconst toKey = function(value){\n if(typeof value === 'string' || isSymbol(value))\n return value\n const result = `${value}`\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result\n}\nconst get = function(object, path){\n path = castPath(path, object)\n let index = 0\n const length = path.length\n while(object != null && index < length){\n object = object[toKey(path[index++])]\n }\n return (index && index === length) ? object : undefined\n}\n","\nconst stringify = require('.')\nconst {StringDecoder} = require('string_decoder')\n\nmodule.exports = function(records, options={}){\n const data = []\n if(Buffer.isBuffer(records)){\n const decoder = new StringDecoder()\n records = decoder.write(records)\n }\n function onData(record){\n if(record){\n data.push(record.toString())\n }\n }\n let stringifier = new stringify.Stringifier(options)\n stringifier.on('data', onData);\n for(let record of records){\n stringifier.write(record) \n }\n stringifier.end()\n stringifier.off('data', onData);\n return data.join('')\n}\n","var accounting = require('accounting')\nvar assign = require('object-assign')\nvar localeCurrency = require('locale-currency')\nvar currencies = require('./currencies.json')\nvar localeFormats = require('./localeFormats.json')\n\nvar defaultCurrency = {\n symbol: '',\n thousandsSeparator: ',',\n decimalSeparator: '.',\n symbolOnLeft: true,\n spaceBetweenAmountAndSymbol: false,\n decimalDigits: 2\n}\n\nvar defaultLocaleFormat = {}\n\nvar formatMapping = [\n {\n symbolOnLeft: true,\n spaceBetweenAmountAndSymbol: false,\n format: {\n pos: '%s%v',\n neg: '-%s%v',\n zero: '%s%v'\n }\n },\n {\n symbolOnLeft: true,\n spaceBetweenAmountAndSymbol: true,\n format: {\n pos: '%s %v',\n neg: '-%s %v',\n zero: '%s %v'\n }\n },\n {\n symbolOnLeft: false,\n spaceBetweenAmountAndSymbol: false,\n format: {\n pos: '%v%s',\n neg: '-%v%s',\n zero: '%v%s'\n }\n },\n {\n symbolOnLeft: false,\n spaceBetweenAmountAndSymbol: true,\n format: {\n pos: '%v %s',\n neg: '-%v %s',\n zero: '%v %s'\n }\n }\n]\n\nfunction format(value, options) {\n var code = options.code || (options.locale && localeCurrency.getCurrency(options.locale))\n var localeMatch = /^([a-z]+)([_-]([a-z]+))?$/i.exec(options.locale) || []\n var language = localeMatch[1]\n var region = localeMatch[3]\n var localeFormat = assign({}, defaultLocaleFormat,\n localeFormats[language] || {},\n localeFormats[language + '-' + region] || {})\n var currency = assign({}, defaultCurrency, findCurrency(code), localeFormat)\n \n var symbolOnLeft = currency.symbolOnLeft\n var spaceBetweenAmountAndSymbol = currency.spaceBetweenAmountAndSymbol\n\n var format = formatMapping.filter(function(f) {\n return f.symbolOnLeft == symbolOnLeft && f.spaceBetweenAmountAndSymbol == spaceBetweenAmountAndSymbol\n })[0].format\n\n return accounting.formatMoney(value, {\n symbol: isUndefined(options.symbol)\n ? currency.symbol\n : options.symbol,\n\n decimal: isUndefined(options.decimal)\n ? currency.decimalSeparator\n : options.decimal,\n\n thousand: isUndefined(options.thousand)\n ? currency.thousandsSeparator\n : options.thousand,\n\n precision: typeof options.precision === 'number'\n ? options.precision\n : currency.decimalDigits,\n\n format: ['string', 'object'].indexOf(typeof options.format) > -1\n ? options.format\n : format\n })\n}\n\nfunction findCurrency (currencyCode) {\n return currencies[currencyCode]\n}\n\nfunction isUndefined (val) {\n return typeof val === 'undefined'\n}\n\nfunction unformat(value, options) {\n var code = options.code || (options.locale && localeCurrency.getCurrency(options.locale))\n var localeFormat = localeFormats[options.locale] || defaultLocaleFormat\n var currency = assign({}, defaultCurrency, findCurrency(code), localeFormat)\n var decimal = isUndefined(options.decimal) ? currency.decimalSeparator : options.decimal\n return accounting.unformat(value, decimal)\n}\n\nmodule.exports = {\n defaultCurrency: defaultCurrency,\n get currencies() {\n // In favor of backwards compatibility, the currencies map is converted to an array here\n return Object.keys(currencies).map(function(key) {\n return currencies[key]\n })\n },\n findCurrency: findCurrency,\n format: format,\n unformat: unformat\n}","// TheSpanishInquisition\n\n// Cache the matrix. Note that if you not pass a limit this implementation will use a dynamically calculate one.\n\nmodule.exports = function(__this, that, limit) {\n\n var thisLength = __this.length,\n thatLength = that.length,\n matrix = [];\n\n // If the limit is not defined it will be calculate from this and that args.\n limit = (limit || ((thatLength > thisLength ? thatLength : thisLength)))+1;\n\n for (var i = 0; i < limit; i++) {\n matrix[i] = [i];\n matrix[i].length = limit;\n }\n for (i = 0; i < limit; i++) {\n matrix[0][i] = i;\n }\n\n if (Math.abs(thisLength - thatLength) > (limit || 100)){\n return prepare (limit || 100);\n }\n if (thisLength === 0){\n return prepare (thatLength);\n }\n if (thatLength === 0){\n return prepare (thisLength);\n }\n\n // Calculate matrix.\n var j, this_i, that_j, cost, min, t;\n for (i = 1; i <= thisLength; ++i) {\n this_i = __this[i-1];\n\n // Step 4\n for (j = 1; j <= thatLength; ++j) {\n // Check the jagged ld total so far\n if (i === j && matrix[i][j] > 4) return prepare (thisLength);\n\n that_j = that[j-1];\n cost = (this_i === that_j) ? 0 : 1; // Step 5\n // Calculate the minimum (much faster than Math.min(...)).\n min = matrix[i - 1][j ] + 1; // Deletion.\n if ((t = matrix[i ][j - 1] + 1 ) < min) min = t; // Insertion.\n if ((t = matrix[i - 1][j - 1] + cost) < min) min = t; // Substitution.\n\n // Update matrix.\n matrix[i][j] = (i > 1 && j > 1 && this_i === that[j-2] && __this[i-2] === that_j && (t = matrix[i-2][j-2]+cost) < min) ? t : min; // Transposition.\n }\n }\n\n return prepare (matrix[thisLength][thatLength]);\n\n/**\n *\n */\n function prepare(steps) {\n var length = Math.max(thisLength, thatLength)\n var relative = length === 0\n ? 0\n : (steps / length);\n var similarity = 1 - relative\n return {\n steps: steps,\n relative: relative,\n similarity: similarity\n };\n }\n\n};\n","export default function addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : ''\n var output = Math.abs(number).toString()\n while (output.length < targetLength) {\n output = '0' + output\n }\n return sign + output\n}\n","export default function assign(target, dirtyObject) {\n if (target == null) {\n throw new TypeError(\n 'assign requires that input parameter not be null or undefined'\n )\n }\n\n dirtyObject = dirtyObject || {}\n\n for (var property in dirtyObject) {\n if (dirtyObject.hasOwnProperty(property)) {\n target[property] = dirtyObject[property]\n }\n }\n\n return target\n}\n","import assign from '../assign/index.js'\n\nexport default function cloneObject(dirtyObject) {\n return assign({}, dirtyObject)\n}\n","import lightFormatters from '../lightFormatters/index.js'\nimport getUTCDayOfYear from '../../../_lib/getUTCDayOfYear/index.js'\nimport getUTCISOWeek from '../../../_lib/getUTCISOWeek/index.js'\nimport getUTCISOWeekYear from '../../../_lib/getUTCISOWeekYear/index.js'\nimport getUTCWeek from '../../../_lib/getUTCWeek/index.js'\nimport getUTCWeekYear from '../../../_lib/getUTCWeekYear/index.js'\nimport addLeadingZeros from '../../addLeadingZeros/index.js'\n\nvar dayPeriodEnum = {\n am: 'am',\n pm: 'pm',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n}\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n // Era\n G: function(date, token, localize) {\n var era = date.getUTCFullYear() > 0 ? 1 : 0\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return localize.era(era, { width: 'abbreviated' })\n // A, B\n case 'GGGGG':\n return localize.era(era, { width: 'narrow' })\n // Anno Domini, Before Christ\n case 'GGGG':\n default:\n return localize.era(era, { width: 'wide' })\n }\n },\n\n // Year\n y: function(date, token, localize) {\n // Ordinal number\n if (token === 'yo') {\n var signedYear = date.getUTCFullYear()\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n var year = signedYear > 0 ? signedYear : 1 - signedYear\n return localize.ordinalNumber(year, { unit: 'year' })\n }\n\n return lightFormatters.y(date, token)\n },\n\n // Local week-numbering year\n Y: function(date, token, localize, options) {\n var signedWeekYear = getUTCWeekYear(date, options)\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear\n\n // Two digit year\n if (token === 'YY') {\n var twoDigitYear = weekYear % 100\n return addLeadingZeros(twoDigitYear, 2)\n }\n\n // Ordinal number\n if (token === 'Yo') {\n return localize.ordinalNumber(weekYear, { unit: 'year' })\n }\n\n // Padding\n return addLeadingZeros(weekYear, token.length)\n },\n\n // ISO week-numbering year\n R: function(date, token) {\n var isoWeekYear = getUTCISOWeekYear(date)\n\n // Padding\n return addLeadingZeros(isoWeekYear, token.length)\n },\n\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function(date, token) {\n var year = date.getUTCFullYear()\n return addLeadingZeros(year, token.length)\n },\n\n // Quarter\n Q: function(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3)\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n return String(quarter)\n // 01, 02, 03, 04\n case 'QQ':\n return addLeadingZeros(quarter, 2)\n // 1st, 2nd, 3rd, 4th\n case 'Qo':\n return localize.ordinalNumber(quarter, { unit: 'quarter' })\n // Q1, Q2, Q3, Q4\n case 'QQQ':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'formatting'\n })\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case 'QQQQQ':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'formatting'\n })\n // 1st quarter, 2nd quarter, ...\n case 'QQQQ':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'formatting'\n })\n }\n },\n\n // Stand-alone quarter\n q: function(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3)\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n return String(quarter)\n // 01, 02, 03, 04\n case 'qq':\n return addLeadingZeros(quarter, 2)\n // 1st, 2nd, 3rd, 4th\n case 'qo':\n return localize.ordinalNumber(quarter, { unit: 'quarter' })\n // Q1, Q2, Q3, Q4\n case 'qqq':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'standalone'\n })\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case 'qqqqq':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'standalone'\n })\n // 1st quarter, 2nd quarter, ...\n case 'qqqq':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'standalone'\n })\n }\n },\n\n // Month\n M: function(date, token, localize) {\n var month = date.getUTCMonth()\n switch (token) {\n case 'M':\n case 'MM':\n return lightFormatters.M(date, token)\n // 1st, 2nd, ..., 12th\n case 'Mo':\n return localize.ordinalNumber(month + 1, { unit: 'month' })\n // Jan, Feb, ..., Dec\n case 'MMM':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'formatting'\n })\n // J, F, ..., D\n case 'MMMMM':\n return localize.month(month, { width: 'narrow', context: 'formatting' })\n // January, February, ..., December\n case 'MMMM':\n default:\n return localize.month(month, { width: 'wide', context: 'formatting' })\n }\n },\n\n // Stand-alone month\n L: function(date, token, localize) {\n var month = date.getUTCMonth()\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return String(month + 1)\n // 01, 02, ..., 12\n case 'LL':\n return addLeadingZeros(month + 1, 2)\n // 1st, 2nd, ..., 12th\n case 'Lo':\n return localize.ordinalNumber(month + 1, { unit: 'month' })\n // Jan, Feb, ..., Dec\n case 'LLL':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'standalone'\n })\n // J, F, ..., D\n case 'LLLLL':\n return localize.month(month, { width: 'narrow', context: 'standalone' })\n // January, February, ..., December\n case 'LLLL':\n default:\n return localize.month(month, { width: 'wide', context: 'standalone' })\n }\n },\n\n // Local week of year\n w: function(date, token, localize, options) {\n var week = getUTCWeek(date, options)\n\n if (token === 'wo') {\n return localize.ordinalNumber(week, { unit: 'week' })\n }\n\n return addLeadingZeros(week, token.length)\n },\n\n // ISO week of year\n I: function(date, token, localize) {\n var isoWeek = getUTCISOWeek(date)\n\n if (token === 'Io') {\n return localize.ordinalNumber(isoWeek, { unit: 'week' })\n }\n\n return addLeadingZeros(isoWeek, token.length)\n },\n\n // Day of the month\n d: function(date, token, localize) {\n if (token === 'do') {\n return localize.ordinalNumber(date.getUTCDate(), { unit: 'date' })\n }\n\n return lightFormatters.d(date, token)\n },\n\n // Day of year\n D: function(date, token, localize) {\n var dayOfYear = getUTCDayOfYear(date)\n\n if (token === 'Do') {\n return localize.ordinalNumber(dayOfYear, { unit: 'dayOfYear' })\n }\n\n return addLeadingZeros(dayOfYear, token.length)\n },\n\n // Day of week\n E: function(date, token, localize) {\n var dayOfWeek = date.getUTCDay()\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n })\n // T\n case 'EEEEE':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n })\n // Tu\n case 'EEEEEE':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n })\n // Tuesday\n case 'EEEE':\n default:\n return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' })\n }\n },\n\n // Local day of week\n e: function(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay()\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case 'e':\n return String(localDayOfWeek)\n // Padded numerical value\n case 'ee':\n return addLeadingZeros(localDayOfWeek, 2)\n // 1st, 2nd, ..., 7th\n case 'eo':\n return localize.ordinalNumber(localDayOfWeek, { unit: 'day' })\n case 'eee':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n })\n // T\n case 'eeeee':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n })\n // Tu\n case 'eeeeee':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n })\n // Tuesday\n case 'eeee':\n default:\n return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' })\n }\n },\n\n // Stand-alone local day of week\n c: function(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay()\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7\n switch (token) {\n // Numerical value (same as in `e`)\n case 'c':\n return String(localDayOfWeek)\n // Padded numerical value\n case 'cc':\n return addLeadingZeros(localDayOfWeek, token.length)\n // 1st, 2nd, ..., 7th\n case 'co':\n return localize.ordinalNumber(localDayOfWeek, { unit: 'day' })\n case 'ccc':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'standalone'\n })\n // T\n case 'ccccc':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'standalone'\n })\n // Tu\n case 'cccccc':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'standalone'\n })\n // Tuesday\n case 'cccc':\n default:\n return localize.day(dayOfWeek, { width: 'wide', context: 'standalone' })\n }\n },\n\n // ISO day of week\n i: function(date, token, localize) {\n var dayOfWeek = date.getUTCDay()\n var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek\n switch (token) {\n // 2\n case 'i':\n return String(isoDayOfWeek)\n // 02\n case 'ii':\n return addLeadingZeros(isoDayOfWeek, token.length)\n // 2nd\n case 'io':\n return localize.ordinalNumber(isoDayOfWeek, { unit: 'day' })\n // Tue\n case 'iii':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n })\n // T\n case 'iiiii':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n })\n // Tu\n case 'iiiiii':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n })\n // Tuesday\n case 'iiii':\n default:\n return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' })\n }\n },\n\n // AM or PM\n a: function(date, token, localize) {\n var hours = date.getUTCHours()\n var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'\n\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n })\n case 'aaaaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n })\n case 'aaaa':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n })\n }\n },\n\n // AM, PM, midnight, noon\n b: function(date, token, localize) {\n var hours = date.getUTCHours()\n var dayPeriodEnumValue\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'\n }\n\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n })\n case 'bbbbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n })\n case 'bbbb':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n })\n }\n },\n\n // in the morning, in the afternoon, in the evening, at night\n B: function(date, token, localize) {\n var hours = date.getUTCHours()\n var dayPeriodEnumValue\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night\n }\n\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n })\n case 'BBBBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n })\n case 'BBBB':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n })\n }\n },\n\n // Hour [1-12]\n h: function(date, token, localize) {\n if (token === 'ho') {\n var hours = date.getUTCHours() % 12\n if (hours === 0) hours = 12\n return localize.ordinalNumber(hours, { unit: 'hour' })\n }\n\n return lightFormatters.h(date, token)\n },\n\n // Hour [0-23]\n H: function(date, token, localize) {\n if (token === 'Ho') {\n return localize.ordinalNumber(date.getUTCHours(), { unit: 'hour' })\n }\n\n return lightFormatters.H(date, token)\n },\n\n // Hour [0-11]\n K: function(date, token, localize) {\n var hours = date.getUTCHours() % 12\n\n if (token === 'Ko') {\n return localize.ordinalNumber(hours, { unit: 'hour' })\n }\n\n return addLeadingZeros(hours, token.length)\n },\n\n // Hour [1-24]\n k: function(date, token, localize) {\n var hours = date.getUTCHours()\n if (hours === 0) hours = 24\n\n if (token === 'ko') {\n return localize.ordinalNumber(hours, { unit: 'hour' })\n }\n\n return addLeadingZeros(hours, token.length)\n },\n\n // Minute\n m: function(date, token, localize) {\n if (token === 'mo') {\n return localize.ordinalNumber(date.getUTCMinutes(), { unit: 'minute' })\n }\n\n return lightFormatters.m(date, token)\n },\n\n // Second\n s: function(date, token, localize) {\n if (token === 'so') {\n return localize.ordinalNumber(date.getUTCSeconds(), { unit: 'second' })\n }\n\n return lightFormatters.s(date, token)\n },\n\n // Fraction of second\n S: function(date, token) {\n var numberOfDigits = token.length\n var milliseconds = date.getUTCMilliseconds()\n var fractionalSeconds = Math.floor(\n milliseconds * Math.pow(10, numberOfDigits - 3)\n )\n return addLeadingZeros(fractionalSeconds, numberOfDigits)\n },\n\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function(date, token, _localize, options) {\n var originalDate = options._originalDate || date\n var timezoneOffset = originalDate.getTimezoneOffset()\n\n if (timezoneOffset === 0) {\n return 'Z'\n }\n\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset)\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case 'XXXX':\n case 'XX': // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset)\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, ':')\n }\n },\n\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function(date, token, _localize, options) {\n var originalDate = options._originalDate || date\n var timezoneOffset = originalDate.getTimezoneOffset()\n\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset)\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case 'xxxx':\n case 'xx': // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset)\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, ':')\n }\n },\n\n // Timezone (GMT)\n O: function(date, token, _localize, options) {\n var originalDate = options._originalDate || date\n var timezoneOffset = originalDate.getTimezoneOffset()\n\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':')\n // Long\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':')\n }\n },\n\n // Timezone (specific non-location)\n z: function(date, token, _localize, options) {\n var originalDate = options._originalDate || date\n var timezoneOffset = originalDate.getTimezoneOffset()\n\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':')\n // Long\n case 'zzzz':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':')\n }\n },\n\n // Seconds timestamp\n t: function(date, token, _localize, options) {\n var originalDate = options._originalDate || date\n var timestamp = Math.floor(originalDate.getTime() / 1000)\n return addLeadingZeros(timestamp, token.length)\n },\n\n // Milliseconds timestamp\n T: function(date, token, _localize, options) {\n var originalDate = options._originalDate || date\n var timestamp = originalDate.getTime()\n return addLeadingZeros(timestamp, token.length)\n }\n}\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n var sign = offset > 0 ? '-' : '+'\n var absOffset = Math.abs(offset)\n var hours = Math.floor(absOffset / 60)\n var minutes = absOffset % 60\n if (minutes === 0) {\n return sign + String(hours)\n }\n var delimiter = dirtyDelimiter || ''\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2)\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+'\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2)\n }\n return formatTimezone(offset, dirtyDelimiter)\n}\n\nfunction formatTimezone(offset, dirtyDelimiter) {\n var delimiter = dirtyDelimiter || ''\n var sign = offset > 0 ? '-' : '+'\n var absOffset = Math.abs(offset)\n var hours = addLeadingZeros(Math.floor(absOffset / 60), 2)\n var minutes = addLeadingZeros(absOffset % 60, 2)\n return sign + hours + delimiter + minutes\n}\n\nexport default formatters\n","import addLeadingZeros from '../../addLeadingZeros/index.js'\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n // Year\n y: function(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n var signedYear = date.getUTCFullYear()\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n var year = signedYear > 0 ? signedYear : 1 - signedYear\n return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length)\n },\n\n // Month\n M: function(date, token) {\n var month = date.getUTCMonth()\n return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2)\n },\n\n // Day of the month\n d: function(date, token) {\n return addLeadingZeros(date.getUTCDate(), token.length)\n },\n\n // AM or PM\n a: function(date, token) {\n var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am'\n\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return dayPeriodEnumValue.toUpperCase()\n case 'aaaaa':\n return dayPeriodEnumValue[0]\n case 'aaaa':\n default:\n return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.'\n }\n },\n\n // Hour [1-12]\n h: function(date, token) {\n return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length)\n },\n\n // Hour [0-23]\n H: function(date, token) {\n return addLeadingZeros(date.getUTCHours(), token.length)\n },\n\n // Minute\n m: function(date, token) {\n return addLeadingZeros(date.getUTCMinutes(), token.length)\n },\n\n // Second\n s: function(date, token) {\n return addLeadingZeros(date.getUTCSeconds(), token.length)\n }\n}\n\nexport default formatters\n","function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({ width: 'short' })\n case 'PP':\n return formatLong.date({ width: 'medium' })\n case 'PPP':\n return formatLong.date({ width: 'long' })\n case 'PPPP':\n default:\n return formatLong.date({ width: 'full' })\n }\n}\n\nfunction timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({ width: 'short' })\n case 'pp':\n return formatLong.time({ width: 'medium' })\n case 'ppp':\n return formatLong.time({ width: 'long' })\n case 'pppp':\n default:\n return formatLong.time({ width: 'full' })\n }\n}\n\nfunction dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/)\n var datePattern = matchResult[1]\n var timePattern = matchResult[2]\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong)\n }\n\n var dateTimeFormat\n\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({ width: 'short' })\n break\n case 'PP':\n dateTimeFormat = formatLong.dateTime({ width: 'medium' })\n break\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({ width: 'long' })\n break\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({ width: 'full' })\n break\n }\n\n return dateTimeFormat\n .replace('{{date}}', dateLongFormatter(datePattern, formatLong))\n .replace('{{time}}', timeLongFormatter(timePattern, formatLong))\n}\n\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n}\n\nexport default longFormatters\n","var MILLISECONDS_IN_MINUTE = 60000\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds (dirtyDate) {\n var date = new Date(dirtyDate.getTime())\n var baseTimezoneOffset = date.getTimezoneOffset()\n date.setSeconds(0, 0)\n var millisecondsPartOfTimezoneOffset = date.getTime() % MILLISECONDS_IN_MINUTE\n\n return baseTimezoneOffset * MILLISECONDS_IN_MINUTE + millisecondsPartOfTimezoneOffset\n}\n","import toDate from '../../toDate/index.js'\n\nvar MILLISECONDS_IN_DAY = 86400000\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCDayOfYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var timestamp = date.getTime()\n date.setUTCMonth(0, 1)\n date.setUTCHours(0, 0, 0, 0)\n var startOfYearTimestamp = date.getTime()\n var difference = timestamp - startOfYearTimestamp\n return Math.floor(difference / MILLISECONDS_IN_DAY) + 1\n}\n","import toDate from '../../toDate/index.js'\nimport startOfUTCISOWeek from '../startOfUTCISOWeek/index.js'\nimport startOfUTCISOWeekYear from '../startOfUTCISOWeekYear/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCISOWeek(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var diff =\n startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime()\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n","import toDate from '../../toDate/index.js'\nimport startOfUTCISOWeek from '../startOfUTCISOWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCISOWeekYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getUTCFullYear()\n\n var fourthOfJanuaryOfNextYear = new Date(0)\n fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4)\n fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0)\n var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear)\n\n var fourthOfJanuaryOfThisYear = new Date(0)\n fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4)\n fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0)\n var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear)\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year\n } else {\n return year - 1\n }\n}\n","import toDate from '../../toDate/index.js'\nimport startOfUTCWeek from '../startOfUTCWeek/index.js'\nimport startOfUTCWeekYear from '../startOfUTCWeekYear/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCWeek(dirtyDate, options) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var diff =\n startOfUTCWeek(date, options).getTime() -\n startOfUTCWeekYear(date, options).getTime()\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\nimport startOfUTCWeek from '../startOfUTCWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCWeekYear (dirtyDate, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError('1 argument required, but only ' + arguments.length + ' present')\n }\n\n var date = toDate(dirtyDate, dirtyOptions)\n var year = date.getUTCFullYear()\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeFirstWeekContainsDate = locale &&\n locale.options &&\n locale.options.firstWeekContainsDate\n var defaultFirstWeekContainsDate =\n localeFirstWeekContainsDate == null\n ? 1\n : toInteger(localeFirstWeekContainsDate)\n var firstWeekContainsDate =\n options.firstWeekContainsDate == null\n ? defaultFirstWeekContainsDate\n : toInteger(options.firstWeekContainsDate)\n\n // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively')\n }\n\n var firstWeekOfNextYear = new Date(0)\n firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate)\n firstWeekOfNextYear.setUTCHours(0, 0, 0, 0)\n var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, dirtyOptions)\n\n var firstWeekOfThisYear = new Date(0)\n firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate)\n firstWeekOfThisYear.setUTCHours(0, 0, 0, 0)\n var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, dirtyOptions)\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year\n } else {\n return year - 1\n }\n}\n","export var protectedTokens = ['D', 'DD', 'YY', 'YYYY']\n\nexport function isProtectedToken(token) {\n return protectedTokens.indexOf(token) !== -1\n}\n\nexport function throwProtectedError(token) {\n throw new RangeError(\n '`options.awareOfUnicodeTokens` must be set to `true` to use `' +\n token +\n '` token; see: https://git.io/fxCyr'\n )\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function setUTCDay(dirtyDate, dirtyDay, dirtyOptions) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeWeekStartsOn =\n locale && locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n }\n\n var date = toDate(dirtyDate)\n var day = toInteger(dirtyDay)\n\n var currentDay = date.getUTCDay()\n\n var remainder = day % 7\n var dayIndex = (remainder + 7) % 7\n\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay\n\n date.setUTCDate(date.getUTCDate() + diff)\n return date\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var day = toInteger(dirtyDay)\n\n if (day % 7 === 0) {\n day = day - 7\n }\n\n var weekStartsOn = 1\n var date = toDate(dirtyDate)\n var currentDay = date.getUTCDay()\n\n var remainder = day % 7\n var dayIndex = (remainder + 7) % 7\n\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay\n\n date.setUTCDate(date.getUTCDate() + diff)\n return date\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\nimport getUTCISOWeek from '../getUTCISOWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var isoWeek = toInteger(dirtyISOWeek)\n var diff = getUTCISOWeek(date) - isoWeek\n date.setUTCDate(date.getUTCDate() - diff * 7)\n return date\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\nimport getUTCWeek from '../getUTCWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var week = toInteger(dirtyWeek)\n var diff = getUTCWeek(date, options) - week\n date.setUTCDate(date.getUTCDate() - diff * 7)\n return date\n}\n","import toDate from '../../toDate/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function startOfUTCISOWeek(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var weekStartsOn = 1\n\n var date = toDate(dirtyDate)\n var day = date.getUTCDay()\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn\n\n date.setUTCDate(date.getUTCDate() - diff)\n date.setUTCHours(0, 0, 0, 0)\n return date\n}\n","import getUTCISOWeekYear from '../getUTCISOWeekYear/index.js'\nimport startOfUTCISOWeek from '../startOfUTCISOWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var year = getUTCISOWeekYear(dirtyDate)\n var fourthOfJanuary = new Date(0)\n fourthOfJanuary.setUTCFullYear(year, 0, 4)\n fourthOfJanuary.setUTCHours(0, 0, 0, 0)\n var date = startOfUTCISOWeek(fourthOfJanuary)\n return date\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function startOfUTCWeek(dirtyDate, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeWeekStartsOn =\n locale && locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n }\n\n var date = toDate(dirtyDate)\n var day = date.getUTCDay()\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn\n\n date.setUTCDate(date.getUTCDate() - diff)\n date.setUTCHours(0, 0, 0, 0)\n return date\n}\n","import toInteger from '../toInteger/index.js'\nimport getUTCWeekYear from '../getUTCWeekYear/index.js'\nimport startOfUTCWeek from '../startOfUTCWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function startOfUTCWeekYear (dirtyDate, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError('1 argument required, but only ' + arguments.length + ' present')\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeFirstWeekContainsDate = locale &&\n locale.options &&\n locale.options.firstWeekContainsDate\n var defaultFirstWeekContainsDate =\n localeFirstWeekContainsDate == null\n ? 1\n : toInteger(localeFirstWeekContainsDate)\n var firstWeekContainsDate =\n options.firstWeekContainsDate == null\n ? defaultFirstWeekContainsDate\n : toInteger(options.firstWeekContainsDate)\n\n var year = getUTCWeekYear(dirtyDate, dirtyOptions)\n var firstWeek = new Date(0)\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate)\n firstWeek.setUTCHours(0, 0, 0, 0)\n var date = startOfUTCWeek(firstWeek, dirtyOptions)\n return date\n}\n","export default function toInteger (dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN\n }\n\n var number = Number(dirtyNumber)\n\n if (isNaN(number)) {\n return number\n }\n\n return number < 0 ? Math.ceil(number) : Math.floor(number)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added\n * @returns {Date} the new date with the days added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * var result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport default function addDays(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var amount = toInteger(dirtyAmount)\n date.setDate(date.getDate() + amount)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMilliseconds from '../addMilliseconds/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\n\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be added\n * @returns {Date} the new date with the hours added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * var result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\nexport default function addHours(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getISOWeekYear from '../getISOWeekYear/index.js'\nimport setISOWeekYear from '../setISOWeekYear/index.js'\n\n/**\n * @name addISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Add the specified number of ISO week-numbering years to the given date.\n *\n * @description\n * Add the specified number of ISO week-numbering years to the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `addISOYears` to `addISOWeekYears`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `addWeekYears`.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of ISO week-numbering years to be added\n * @returns {Date} the new date with the ISO week-numbering years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 ISO week-numbering years to 2 July 2010:\n * var result = addISOWeekYears(new Date(2010, 6, 2), 5)\n * //=> Fri Jun 26 2015 00:00:00\n */\nexport default function addISOWeekYears(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return setISOWeekYear(dirtyDate, getISOWeekYear(dirtyDate) + amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * var result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var timestamp = toDate(dirtyDate).getTime()\n var amount = toInteger(dirtyAmount)\n return new Date(timestamp + amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMilliseconds from '../addMilliseconds/index.js'\n\nvar MILLISECONDS_IN_MINUTE = 60000\n\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be added\n * @returns {Date} the new date with the minutes added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * var result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\nexport default function addMinutes(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport getDaysInMonth from '../getDaysInMonth/index.js'\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * var result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\nexport default function addMonths(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var amount = toInteger(dirtyAmount)\n var desiredMonth = date.getMonth() + amount\n var dateWithDesiredMonth = new Date(0)\n dateWithDesiredMonth.setFullYear(date.getFullYear(), desiredMonth, 1)\n dateWithDesiredMonth.setHours(0, 0, 0, 0)\n var daysInMonth = getDaysInMonth(dateWithDesiredMonth)\n // Set the last day of the new month\n // if the original date was the last day of the longer month\n date.setMonth(desiredMonth, Math.min(daysInMonth, date.getDate()))\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMonths from '../addMonths/index.js'\n\n/**\n * @name addQuarters\n * @category Quarter Helpers\n * @summary Add the specified number of year quarters to the given date.\n *\n * @description\n * Add the specified number of year quarters to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of quarters to be added\n * @returns {Date} the new date with the quarters added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 1 quarter to 1 September 2014:\n * var result = addQuarters(new Date(2014, 8, 1), 1)\n * //=> Mon Dec 01 2014 00:00:00\n */\nexport default function addQuarters(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n var months = amount * 3\n return addMonths(dirtyDate, months)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMilliseconds from '../addMilliseconds/index.js'\n\n/**\n * @name addSeconds\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be added\n * @returns {Date} the new date with the seconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * var result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\nexport default function addSeconds(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addMilliseconds(dirtyDate, amount * 1000)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addDays from '../addDays/index.js'\n\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of week to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be added\n * @returns {Date} the new date with the weeks added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * var result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\nexport default function addWeeks(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n var days = amount * 7\n return addDays(dirtyDate, days)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMonths from '../addMonths/index.js'\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added\n * @returns {Date} the new date with the years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * var result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport default function addYears(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addMonths(dirtyDate, amount * 12)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name areIntervalsOverlapping\n * @category Interval Helpers\n * @summary Is the given time interval overlapping with another time interval?\n *\n * @description\n * Is the given time interval overlapping with another time interval?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `areRangesOverlapping` to `areIntervalsOverlapping`.\n * This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n * ```\n * 2.1.3\n * time interval\n * part of the time axis limited by two instants\n * ```\n *\n * Also, this function now accepts an object with `start` and `end` properties\n * instead of two arguments as an interval.\n * This function now throws `RangeError` if the start of the interval is after its end\n * or if any date in the interval is `Invalid Date`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * areRangesOverlapping(\n * new Date(2014, 0, 10), new Date(2014, 0, 20),\n * new Date(2014, 0, 17), new Date(2014, 0, 21)\n * )\n *\n * // v2.0.0 onward\n *\n * areIntervalsOverlapping(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n * { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n * )\n * ```\n *\n * @param {Interval} intervalLeft - the first interval to compare. See [Interval]{@link docs/types/Interval}\n * @param {Interval} intervalRight - the second interval to compare. See [Interval]{@link docs/types/Interval}\n * @returns {Boolean} whether the time intervals are overlapping\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For overlapping time intervals:\n * areIntervalsOverlapping(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n * { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n * )\n * //=> true\n *\n * @example\n * // For non-overlapping time intervals:\n * areIntervalsOverlapping(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n * { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) }\n * )\n * //=> false\n */\nexport default function areIntervalsOverlapping(\n dirtyIntervalLeft,\n dirtyIntervalRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var intervalLeft = dirtyIntervalLeft || {}\n var intervalRight = dirtyIntervalRight || {}\n var leftStartTime = toDate(intervalLeft.start).getTime()\n var leftEndTime = toDate(intervalLeft.end).getTime()\n var rightStartTime = toDate(intervalRight.start).getTime()\n var rightEndTime = toDate(intervalRight.end).getTime()\n\n // Throw an exception if start date is after end date or if any date is `Invalid Date`\n if (!(leftStartTime <= leftEndTime && rightStartTime <= rightEndTime)) {\n throw new RangeError('Invalid interval')\n }\n\n return leftStartTime < rightEndTime && rightStartTime < leftEndTime\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name closestIndexTo\n * @category Common Helpers\n * @summary Return an index of the closest date from the array comparing to the given date.\n *\n * @description\n * Return an index of the closest date from the array comparing to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now, `closestIndexTo` doesn't throw an exception\n * when the second argument is not an array, and returns Invalid Date instead.\n *\n * @param {Date|Number} dateToCompare - the date to compare with\n * @param {Date[]|Number[]} datesArray - the array to search\n * @returns {Number} an index of the date closest to the given date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Which date is closer to 6 September 2015?\n * var dateToCompare = new Date(2015, 8, 6)\n * var datesArray = [\n * new Date(2015, 0, 1),\n * new Date(2016, 0, 1),\n * new Date(2017, 0, 1)\n * ]\n * var result = closestIndexTo(dateToCompare, datesArray)\n * //=> 1\n */\nexport default function closestIndexTo(dirtyDateToCompare, dirtyDatesArray) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateToCompare = toDate(dirtyDateToCompare)\n\n if (isNaN(dateToCompare)) {\n return NaN\n }\n\n var timeToCompare = dateToCompare.getTime()\n\n var datesArray\n // `dirtyDatesArray` is undefined or null\n if (dirtyDatesArray == null) {\n datesArray = []\n\n // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n } else if (typeof dirtyDatesArray.forEach === 'function') {\n datesArray = dirtyDatesArray\n\n // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n } else {\n datesArray = Array.prototype.slice.call(dirtyDatesArray)\n }\n\n var result\n var minDistance\n datesArray.forEach(function(dirtyDate, index) {\n var currentDate = toDate(dirtyDate)\n\n if (isNaN(currentDate)) {\n result = NaN\n minDistance = NaN\n return\n }\n\n var distance = Math.abs(timeToCompare - currentDate.getTime())\n if (result == null || distance < minDistance) {\n result = index\n minDistance = distance\n }\n })\n\n return result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name closestTo\n * @category Common Helpers\n * @summary Return a date from the array closest to the given date.\n *\n * @description\n * Return a date from the array closest to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now, `closestTo` doesn't throw an exception\n * when the second argument is not an array, and returns Invalid Date instead.\n *\n * @param {Date|Number} dateToCompare - the date to compare with\n * @param {Date[]|Number[]} datesArray - the array to search\n * @returns {Date} the date from the array closest to the given date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Which date is closer to 6 September 2015: 1 January 2000 or 1 January 2030?\n * var dateToCompare = new Date(2015, 8, 6)\n * var result = closestTo(dateToCompare, [\n * new Date(2000, 0, 1),\n * new Date(2030, 0, 1)\n * ])\n * //=> Tue Jan 01 2030 00:00:00\n */\nexport default function closestTo(dirtyDateToCompare, dirtyDatesArray) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateToCompare = toDate(dirtyDateToCompare)\n\n if (isNaN(dateToCompare)) {\n return new Date(NaN)\n }\n\n var timeToCompare = dateToCompare.getTime()\n\n var datesArray\n // `dirtyDatesArray` is undefined or null\n if (dirtyDatesArray == null) {\n datesArray = []\n\n // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n } else if (typeof dirtyDatesArray.forEach === 'function') {\n datesArray = dirtyDatesArray\n\n // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n } else {\n datesArray = Array.prototype.slice.call(dirtyDatesArray)\n }\n\n var result\n var minDistance\n datesArray.forEach(function(dirtyDate) {\n var currentDate = toDate(dirtyDate)\n\n if (isNaN(currentDate)) {\n result = new Date(NaN)\n minDistance = NaN\n return\n }\n\n var distance = Math.abs(timeToCompare - currentDate.getTime())\n if (result == null || distance < minDistance) {\n result = currentDate\n minDistance = distance\n }\n })\n\n return result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * var result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * var result = [\n * new Date(1995, 6, 2),\n * new Date(1987, 1, 11),\n * new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * // Wed Feb 11 1987 00:00:00,\n * // Mon Jul 10 1989 00:00:00,\n * // Sun Jul 02 1995 00:00:00\n * // ]\n */\nexport default function compareAsc(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n var diff = dateLeft.getTime() - dateRight.getTime()\n\n if (diff < 0) {\n return -1\n } else if (diff > 0) {\n return 1\n // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff\n }\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name compareDesc\n * @category Common Helpers\n * @summary Compare the two dates reverse chronologically and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return -1 if the first date is after the second,\n * 1 if the first date is before the second or 0 if dates are equal.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989 reverse chronologically:\n * var result = compareDesc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> 1\n *\n * @example\n * // Sort the array of dates in reverse chronological order:\n * var result = [\n * new Date(1995, 6, 2),\n * new Date(1987, 1, 11),\n * new Date(1989, 6, 10)\n * ].sort(compareDesc)\n * //=> [\n * // Sun Jul 02 1995 00:00:00,\n * // Mon Jul 10 1989 00:00:00,\n * // Wed Feb 11 1987 00:00:00\n * // ]\n */\nexport default function compareDesc(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n var diff = dateLeft.getTime() - dateRight.getTime()\n\n if (diff > 0) {\n return -1\n } else if (diff < 0) {\n return 1\n // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff\n }\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport startOfDay from '../startOfDay/index.js'\n\nvar MILLISECONDS_IN_DAY = 86400000\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * var result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * var result = differenceInCalendarDays(\n * new Date(2011, 6, 2, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport default function differenceInCalendarDays(\n dirtyDateLeft,\n dirtyDateRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var startOfDayLeft = startOfDay(dirtyDateLeft)\n var startOfDayRight = startOfDay(dirtyDateRight)\n\n var timestampLeft =\n startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft)\n var timestampRight =\n startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight)\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a day is not constant\n // (e.g. it's different in the day of the daylight saving time clock shift)\n return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY)\n}\n","import getISOWeekYear from '../getISOWeekYear/index.js'\n\n/**\n * @name differenceInCalendarISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of calendar ISO week-numbering years between the given dates.\n *\n * @description\n * Get the number of calendar ISO week-numbering years between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `differenceInCalendarISOYears` to `differenceInCalendarISOWeekYears`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `addWeekYears`.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar ISO week-numbering years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar ISO week-numbering years are 1 January 2010 and 1 January 2012?\n * var result = differenceInCalendarISOWeekYears(\n * new Date(2012, 0, 1),\n * new Date(2010, 0, 1)\n * )\n * //=> 2\n */\nexport default function differenceInCalendarISOWeekYears(\n dirtyDateLeft,\n dirtyDateRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n return getISOWeekYear(dirtyDateLeft) - getISOWeekYear(dirtyDateRight)\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name differenceInCalendarISOWeeks\n * @category ISO Week Helpers\n * @summary Get the number of calendar ISO weeks between the given dates.\n *\n * @description\n * Get the number of calendar ISO weeks between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar ISO weeks\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar ISO weeks are between 6 July 2014 and 21 July 2014?\n * var result = differenceInCalendarISOWeeks(\n * new Date(2014, 6, 21),\n * new Date(2014, 6, 6)\n * )\n * //=> 3\n */\nexport default function differenceInCalendarISOWeeks(\n dirtyDateLeft,\n dirtyDateRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var startOfISOWeekLeft = startOfISOWeek(dirtyDateLeft)\n var startOfISOWeekRight = startOfISOWeek(dirtyDateRight)\n\n var timestampLeft =\n startOfISOWeekLeft.getTime() -\n getTimezoneOffsetInMilliseconds(startOfISOWeekLeft)\n var timestampRight =\n startOfISOWeekRight.getTime() -\n getTimezoneOffsetInMilliseconds(startOfISOWeekRight)\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * var result = differenceInCalendarMonths(\n * new Date(2014, 8, 1),\n * new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport default function differenceInCalendarMonths(\n dirtyDateLeft,\n dirtyDateRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear()\n var monthDiff = dateLeft.getMonth() - dateRight.getMonth()\n\n return yearDiff * 12 + monthDiff\n}\n","import getQuarter from '../getQuarter/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name differenceInCalendarQuarters\n * @category Quarter Helpers\n * @summary Get the number of calendar quarters between the given dates.\n *\n * @description\n * Get the number of calendar quarters between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar quarters\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar quarters are between 31 December 2013 and 2 July 2014?\n * var result = differenceInCalendarQuarters(\n * new Date(2014, 6, 2),\n * new Date(2013, 11, 31)\n * )\n * //=> 3\n */\nexport default function differenceInCalendarQuarters(\n dirtyDateLeft,\n dirtyDateRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear()\n var quarterDiff = getQuarter(dateLeft) - getQuarter(dateRight)\n\n return yearDiff * 4 + quarterDiff\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name differenceInCalendarWeeks\n * @category Week Helpers\n * @summary Get the number of calendar weeks between the given dates.\n *\n * @description\n * Get the number of calendar weeks between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Number} the number of calendar weeks\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // How many calendar weeks are between 5 July 2014 and 20 July 2014?\n * var result = differenceInCalendarWeeks(\n * new Date(2014, 6, 20),\n * new Date(2014, 6, 5)\n * )\n * //=> 3\n *\n * @example\n * // If the week starts on Monday,\n * // how many calendar weeks are between 5 July 2014 and 20 July 2014?\n * var result = differenceInCalendarWeeks(\n * new Date(2014, 6, 20),\n * new Date(2014, 6, 5),\n * { weekStartsOn: 1 }\n * )\n * //=> 2\n */\nexport default function differenceInCalendarWeeks(\n dirtyDateLeft,\n dirtyDateRight,\n dirtyOptions\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var startOfWeekLeft = startOfWeek(dirtyDateLeft, dirtyOptions)\n var startOfWeekRight = startOfWeek(dirtyDateRight, dirtyOptions)\n\n var timestampLeft =\n startOfWeekLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekLeft)\n var timestampRight =\n startOfWeekRight.getTime() -\n getTimezoneOffsetInMilliseconds(startOfWeekRight)\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * var result = differenceInCalendarYears(\n * new Date(2015, 1, 11),\n * new Date(2013, 11, 31)\n * )\n * //=> 2\n */\nexport default function differenceInCalendarYears(\n dirtyDateLeft,\n dirtyDateRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n return dateLeft.getFullYear() - dateRight.getFullYear()\n}\n","import toDate from '../toDate/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\nimport compareAsc from '../compareAsc/index.js'\n\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * var result = differenceInDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n * // How many days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * var result = differenceInDays(\n * new Date(2011, 6, 2, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n */\nexport default function differenceInDays(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n var sign = compareAsc(dateLeft, dateRight)\n var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight))\n\n dateLeft.setDate(dateLeft.getDate() - sign * difference)\n\n // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n // If so, result must be decreased by 1 in absolute value\n var isLastDayNotFull = compareAsc(dateLeft, dateRight) === -sign\n var result = sign * (difference - isLastDayNotFull)\n // Prevent negative zero\n return result === 0 ? 0 : result\n}\n","import differenceInMilliseconds from '../differenceInMilliseconds/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\n\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of hours\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * var result = differenceInHours(\n * new Date(2014, 6, 2, 19, 0),\n * new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\nexport default function differenceInHours(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var diff =\n differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) /\n MILLISECONDS_IN_HOUR\n return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import toDate from '../toDate/index.js'\nimport differenceInCalendarISOWeekYears from '../differenceInCalendarISOWeekYears/index.js'\nimport compareAsc from '../compareAsc/index.js'\nimport subISOWeekYears from '../subISOWeekYears/index.js'\n\n/**\n * @name differenceInISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of full ISO week-numbering years between the given dates.\n *\n * @description\n * Get the number of full ISO week-numbering years between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `differenceInISOYears` to `differenceInISOWeekYears`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `addWeekYears`.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full ISO week-numbering years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full ISO week-numbering years are between 1 January 2010 and 1 January 2012?\n * var result = differenceInISOWeekYears(\n * new Date(2012, 0, 1),\n * new Date(2010, 0, 1)\n * )\n * //=> 1\n */\nexport default function differenceInISOWeekYears(\n dirtyDateLeft,\n dirtyDateRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n var sign = compareAsc(dateLeft, dateRight)\n var difference = Math.abs(\n differenceInCalendarISOWeekYears(dateLeft, dateRight)\n )\n dateLeft = subISOWeekYears(dateLeft, sign * difference)\n\n // Math.abs(diff in full ISO years - diff in calendar ISO years) === 1\n // if last calendar ISO year is not full\n // If so, result must be decreased by 1 in absolute value\n var isLastISOWeekYearNotFull = compareAsc(dateLeft, dateRight) === -sign\n var result = sign * (difference - isLastISOWeekYearNotFull)\n // Prevent negative zero\n return result === 0 ? 0 : result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * var result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport default function differenceInMilliseconds(\n dirtyDateLeft,\n dirtyDateRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n return dateLeft.getTime() - dateRight.getTime()\n}\n","import differenceInMilliseconds from '../differenceInMilliseconds/index.js'\n\nvar MILLISECONDS_IN_MINUTE = 60000\n\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the number of minutes between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of minutes\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * var result = differenceInMinutes(\n * new Date(2014, 6, 2, 12, 20, 0),\n * new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n */\nexport default function differenceInMinutes(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var diff =\n differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) /\n MILLISECONDS_IN_MINUTE\n return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import toDate from '../toDate/index.js'\nimport differenceInCalendarMonths from '../differenceInCalendarMonths/index.js'\nimport compareAsc from '../compareAsc/index.js'\n\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @description\n * Get the number of full months between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * var result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\nexport default function differenceInMonths(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n var sign = compareAsc(dateLeft, dateRight)\n var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight))\n dateLeft.setMonth(dateLeft.getMonth() - sign * difference)\n\n // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full\n // If so, result must be decreased by 1 in absolute value\n var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign\n var result = sign * (difference - isLastMonthNotFull)\n // Prevent negative zero\n return result === 0 ? 0 : result\n}\n","import differenceInMonths from '../differenceInMonths/index.js'\n\n/**\n * @name differenceInQuarters\n * @category Quarter Helpers\n * @summary Get the number of full quarters between the given dates.\n *\n * @description\n * Get the number of full quarters between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full quarters\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full quarters are between 31 December 2013 and 2 July 2014?\n * var result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31))\n * //=> 2\n */\nexport default function differenceInQuarters(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var diff = differenceInMonths(dirtyDateLeft, dirtyDateRight) / 3\n return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import differenceInMilliseconds from '../differenceInMilliseconds/index.js'\n\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of seconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * var result = differenceInSeconds(\n * new Date(2014, 6, 2, 12, 30, 20, 0),\n * new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\nexport default function differenceInSeconds(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / 1000\n return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import differenceInDays from '../differenceInDays/index.js'\n\n/**\n * @name differenceInWeeks\n * @category Week Helpers\n * @summary Get the number of full weeks between the given dates.\n *\n * @description\n * Get the number of full weeks between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full weeks\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full weeks are between 5 July 2014 and 20 July 2014?\n * var result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5))\n * //=> 2\n */\nexport default function differenceInWeeks(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var diff = differenceInDays(dirtyDateLeft, dirtyDateRight) / 7\n return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import toDate from '../toDate/index.js'\nimport differenceInCalendarYears from '../differenceInCalendarYears/index.js'\nimport compareAsc from '../compareAsc/index.js'\n\n/**\n * @name differenceInYears\n * @category Year Helpers\n * @summary Get the number of full years between the given dates.\n *\n * @description\n * Get the number of full years between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full years are between 31 December 2013 and 11 February 2015?\n * var result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))\n * //=> 1\n */\nexport default function differenceInYears(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n var sign = compareAsc(dateLeft, dateRight)\n var difference = Math.abs(differenceInCalendarYears(dateLeft, dateRight))\n dateLeft.setFullYear(dateLeft.getFullYear() - sign * difference)\n\n // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full\n // If so, result must be decreased by 1 in absolute value\n var isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign\n var result = sign * (difference - isLastYearNotFull)\n // Prevent negative zero\n return result === 0 ? 0 : result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `eachDay` to `eachDayOfInterval`.\n * This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n * ```\n * 2.1.3\n * time interval\n * part of the time axis limited by two instants\n * ```\n *\n * Also, this function now accepts an object with `start` and `end` properties\n * instead of two arguments as an interval.\n * This function now throws `RangeError` if the start of the interval is after its end\n * or if any date in the interval is `Invalid Date`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * eachDay(new Date(2014, 0, 10), new Date(2014, 0, 20))\n *\n * // v2.0.0 onward\n *\n * eachDayOfInterval(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) }\n * )\n * ```\n *\n * @param {Interval} interval - the interval. See [Interval]{@link docs/types/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * var result = eachDayOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 9, 10)\n * })\n * //=> [\n * // Mon Oct 06 2014 00:00:00,\n * // Tue Oct 07 2014 00:00:00,\n * // Wed Oct 08 2014 00:00:00,\n * // Thu Oct 09 2014 00:00:00,\n * // Fri Oct 10 2014 00:00:00\n * // ]\n */\nexport default function eachDayOfInterval(dirtyInterval, options) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var interval = dirtyInterval || {}\n var startDate = toDate(interval.start)\n var endDate = toDate(interval.end)\n\n var endTime = endDate.getTime()\n\n // Throw an exception if start date is after end date or if any date is `Invalid Date`\n if (!(startDate.getTime() <= endTime)) {\n throw new RangeError('Invalid interval')\n }\n\n var dates = []\n\n var currentDate = startDate\n currentDate.setHours(0, 0, 0, 0)\n\n var step = options && 'step' in options ? Number(options.step) : 1\n if (step < 1 || isNaN(step))\n throw new RangeError('`options.step` must be a number greater than 1')\n\n while (currentDate.getTime() <= endTime) {\n dates.push(toDate(currentDate))\n currentDate.setDate(currentDate.getDate() + step)\n currentDate.setHours(0, 0, 0, 0)\n }\n\n return dates\n}\n","import toDate from '../toDate/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\nimport addWeeks from '../addWeeks/index.js'\n\n/**\n * @name eachWeekOfInterval\n * @category Interval Helpers\n * @summary Return the array of weeks within the specified time interval.\n *\n * @description\n * Return the array of weeks within the specified time interval.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Interval} interval - the interval. See [Interval]{@link docs/types/Interval}\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date[]} the array with starts of weeks from the week of the interval start to the week of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be 0, 1, ..., 6\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each week within interval 6 October 2014 - 23 November 2014:\n * var result = eachWeekOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 10, 23)\n * })\n * //=> [\n * // Sun Oct 05 2014 00:00:00,\n * // Sun Oct 12 2014 00:00:00,\n * // Sun Oct 19 2014 00:00:00,\n * // Sun Oct 26 2014 00:00:00,\n * // Sun Nov 02 2014 00:00:00,\n * // Sun Nov 09 2014 00:00:00,\n * // Sun Nov 16 2014 00:00:00,\n * // Sun Nov 23 2014 00:00:00\n * // ]\n */\nexport default function eachWeekOfInterval(dirtyInterval, options) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var interval = dirtyInterval || {}\n var startDate = toDate(interval.start)\n var endDate = toDate(interval.end)\n\n var endTime = endDate.getTime()\n\n // Throw an exception if start date is after end date or if any date is `Invalid Date`\n if (!(startDate.getTime() <= endTime)) {\n throw new RangeError('Invalid interval')\n }\n\n var startDateWeek = startOfWeek(startDate, options)\n var endDateWeek = startOfWeek(endDate, options)\n\n // Some timezones switch DST at midnight, making start of day unreliable in these timezones, 3pm is a safe bet\n startDateWeek.setHours(15)\n endDateWeek.setHours(15)\n\n endTime = endDateWeek.getTime()\n\n var weeks = []\n\n var currentWeek = startDateWeek\n\n while (currentWeek.getTime() <= endTime) {\n currentWeek.setHours(0)\n weeks.push(toDate(currentWeek))\n currentWeek = addWeeks(currentWeek, 1)\n currentWeek.setHours(15)\n }\n\n return weeks\n}\n","import eachDayOfInterval from '../eachDayOfInterval/index.js'\nimport isSunday from '../isSunday/index.js'\nimport isWeekend from '../isWeekend/index.js'\n\n/**\n * @name eachWeekendOfInterval\n * @category Interval Helpers\n * @summary List all the Saturdays and Sundays in the given date interval.\n *\n * @description\n * Get all the Saturdays and Sundays in the given date interval.\n *\n * @param {Interval} interval - the given interval. See [Interval]{@link docs/types/Interval}\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Lists all Saturdays and Sundays in the given date interval\n * var result = eachWeekendOfInterval({\n * start: new Date(2018, 8, 17),\n * end: new Date(2018, 8, 30)\n * })\n * //=> [\n * // Sat Sep 22 2018 00:00:00,\n * // Sun Sep 23 2018 00:00:00,\n * // Sat Sep 29 2018 00:00:00,\n * // Sun Sep 30 2018 00:00:00\n * // ]\n */\nexport default function eachWeekendOfInterval(interval) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateInterval = eachDayOfInterval(interval)\n var weekends = []\n var index = 0\n while (index++ < dateInterval.length) {\n var date = dateInterval[index]\n if (isWeekend(date)) {\n weekends.push(date)\n if (isSunday(date)) index = index + 5\n }\n }\n return weekends\n}\n","import eachWeekendOfInterval from '../eachWeekendOfInterval/index.js'\nimport startOfMonth from '../startOfMonth/index.js'\nimport endOfMonth from '../endOfMonth/index.js'\n\n/**\n * @name eachWeekendOfMonth\n * @category Month Helpers\n * @summary List all the Saturdays and Sundays in the given month.\n *\n * @description\n * Get all the Saturdays and Sundays in the given month.\n *\n * @param {Date|Number} date - the given month\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The passed date is invalid\n *\n * @example\n * // Lists all Saturdays and Sundays in the given month\n * var result = eachWeekendOfMonth(new Date(2022, 1, 1))\n * //=> [\n * // Sat Feb 05 2022 00:00:00,\n * // Sun Feb 06 2022 00:00:00,\n * // Sat Feb 12 2022 00:00:00,\n * // Sun Feb 13 2022 00:00:00,\n * // Sat Feb 19 2022 00:00:00,\n * // Sun Feb 20 2022 00:00:00,\n * // Sat Feb 26 2022 00:00:00,\n * // Sun Feb 27 2022 00:00:00\n * // ]\n */\nexport default function eachWeekendOfMonth(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var startDate = startOfMonth(dirtyDate)\n if (isNaN(startDate)) throw new RangeError('The passed date is invalid')\n\n var endDate = endOfMonth(dirtyDate)\n return eachWeekendOfInterval({ start: startDate, end: endDate })\n}\n","import eachWeekendOfInterval from '../eachWeekendOfInterval/index.js'\nimport startOfYear from '../startOfYear/index.js'\nimport endOfYear from '../endOfYear/index.js'\n\n/**\n * @name eachWeekendOfYear\n * @category Year Helpers\n * @summary List all the Saturdays and Sundays in the year.\n *\n * @description\n * Get all the Saturdays and Sundays in the year.\n *\n * @param {Date|Number} date - the given year\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The passed date is invalid\n *\n * @example\n * // Lists all Saturdays and Sundays in the year\n * var result = eachWeekendOfYear(new Date(2020, 1, 1))\n * //=> [\n * // Sat Jan 03 2020 00:00:00,\n * // Sun Jan 04 2020 00:00:00,\n * // ...\n * // Sun Dec 27 2020 00:00:00\n * // ]\n * ]\n */\nexport default function eachWeekendOfYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var startDate = startOfYear(dirtyDate)\n if (isNaN(startDate)) throw new RangeError('The passed date is invalid')\n\n var endDate = endOfYear(dirtyDate)\n return eachWeekendOfInterval({ start: startDate, end: endDate })\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * var result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\nexport default function endOfDay(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setHours(23, 59, 59, 999)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfDecade\n * @category Decade Helpers\n * @summary Return the end of a decade for the given date.\n *\n * @description\n * Return the end of a decade for the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a decade\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // The end of a decade for 12 May 1984 00:00:00:\n * var result = endOfDecade(new Date(1984, 4, 12, 00, 00, 00))\n * //=> Dec 31 1989 23:59:59.999\n */\nexport default function endOfDecade(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n var decade = 9 + Math.floor(year / 10) * 10\n date.setFullYear(decade, 11, 31)\n date.setHours(23, 59, 59, 999)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfHour\n * @category Hour Helpers\n * @summary Return the end of an hour for the given date.\n *\n * @description\n * Return the end of an hour for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an hour for 2 September 2014 11:55:00:\n * var result = endOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:59:59.999\n */\nexport default function endOfHour(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setMinutes(59, 59, 999)\n return date\n}\n","import endOfWeek from '../endOfWeek/index.js'\n\n/**\n * @name endOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the end of an ISO week for the given date.\n *\n * @description\n * Return the end of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an ISO week for 2 September 2014 11:55:00:\n * var result = endOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfISOWeek(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return endOfWeek(dirtyDate, { weekStartsOn: 1 })\n}\n","import getISOWeekYear from '../getISOWeekYear/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\n/**\n * @name endOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the end of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the end of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `endOfISOYear` to `endOfISOWeekYear`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `addWeekYears`.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an ISO week-numbering year for 2 July 2005:\n * var result = endOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Sun Jan 01 2006 23:59:59.999\n */\nexport default function endOfISOWeekYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var year = getISOWeekYear(dirtyDate)\n var fourthOfJanuaryOfNextYear = new Date(0)\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4)\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0)\n var date = startOfISOWeek(fourthOfJanuaryOfNextYear)\n date.setMilliseconds(date.getMilliseconds() - 1)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfMinute\n * @category Minute Helpers\n * @summary Return the end of a minute for the given date.\n *\n * @description\n * Return the end of a minute for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a minute\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a minute for 1 December 2014 22:15:45.400:\n * var result = endOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:59.999\n */\nexport default function endOfMinute(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setSeconds(59, 999)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * var result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport default function endOfMonth(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var month = date.getMonth()\n date.setFullYear(date.getFullYear(), month + 1, 0)\n date.setHours(23, 59, 59, 999)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfQuarter\n * @category Quarter Helpers\n * @summary Return the end of a year quarter for the given date.\n *\n * @description\n * Return the end of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a quarter for 2 September 2014 11:55:00:\n * var result = endOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport default function endOfQuarter(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var currentMonth = date.getMonth()\n var month = currentMonth - (currentMonth % 3) + 3\n date.setMonth(month, 0)\n date.setHours(23, 59, 59, 999)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfSecond\n * @category Second Helpers\n * @summary Return the end of a second for the given date.\n *\n * @description\n * Return the end of a second for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a second for 1 December 2014 22:15:45.400:\n * var result = endOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.999\n */\nexport default function endOfSecond(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setMilliseconds(999)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Date} the end of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * var result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * var result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfWeek(dirtyDate, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n\n var locale = options.locale\n var localeWeekStartsOn =\n locale && locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n }\n\n var date = toDate(dirtyDate)\n var day = date.getDay()\n var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn)\n\n date.setDate(date.getDate() + diff)\n date.setHours(23, 59, 59, 999)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfYear\n * @category Year Helpers\n * @summary Return the end of a year for the given date.\n *\n * @description\n * Return the end of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * var result = endOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\nexport default function endOfYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n date.setFullYear(year + 1, 0, 0)\n date.setHours(23, 59, 59, 999)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport toDate from '../toDate/index.js'\nimport isValid from '../isValid/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\nimport formatters from '../_lib/format/formatters/index.js'\nimport longFormatters from '../_lib/format/longFormatters/index.js'\nimport subMilliseconds from '../subMilliseconds/index.js'\nimport {\n isProtectedToken,\n throwProtectedError\n} from '../_lib/protectedTokens/index.js'\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g\n\nvar escapedStringRegExp = /^'(.*?)'?$/\nvar doubleQuoteRegExp = /''/g\n\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 8 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 8 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Su | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Su | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Su | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Su | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | AM, PM | a..aaa | AM, PM | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bbb | AM, PM, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 1, 2, ..., 11, 0 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 0001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 05/29/1453 | 7 |\n * | | PP | May 29, 1453 | 7 |\n * | | PPP | May 29th, 1453 | 7 |\n * | | PPPP | Sunday, May 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 05/29/1453, 12:00 AM | 7 |\n * | | PPpp | May 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | May 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Sunday, May 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. These tokens are often confused with others. See: https://git.io/fxCyr\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n * ```javascript\n * // Before v2.0.0\n * format(new Date(2016, 0, 1))\n *\n * // v2.0.0 onward\n * format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n * ```\n *\n * - New format string API for `format` function\n * which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).\n * See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {Boolean} [options.awareOfUnicodeTokens=false] - if true, allows usage of Unicode tokens causes confusion:\n * - Some of the day of year tokens (`D`, `DD`) that are confused with the day of month tokens (`d`, `dd`).\n * - Some of the local week-numbering year tokens (`YY`, `YYYY`) that are confused with the calendar year tokens (`yy`, `yyyy`).\n * See: https://git.io/fxCyr\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.awareOfUnicodeTokens` must be set to `true` to use `XX` token; see: https://git.io/fxCyr\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport default function format(dirtyDate, dirtyFormatStr, dirtyOptions) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var formatStr = String(dirtyFormatStr)\n var options = dirtyOptions || {}\n\n var locale = options.locale || defaultLocale\n\n var localeFirstWeekContainsDate =\n locale.options && locale.options.firstWeekContainsDate\n var defaultFirstWeekContainsDate =\n localeFirstWeekContainsDate == null\n ? 1\n : toInteger(localeFirstWeekContainsDate)\n var firstWeekContainsDate =\n options.firstWeekContainsDate == null\n ? defaultFirstWeekContainsDate\n : toInteger(options.firstWeekContainsDate)\n\n // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError(\n 'firstWeekContainsDate must be between 1 and 7 inclusively'\n )\n }\n\n var localeWeekStartsOn = locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n }\n\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property')\n }\n\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property')\n }\n\n var originalDate = toDate(dirtyDate)\n\n if (!isValid(originalDate)) {\n throw new RangeError('Invalid time value')\n }\n\n // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate)\n var utcDate = subMilliseconds(originalDate, timezoneOffset)\n\n var formatterOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale,\n _originalDate: originalDate\n }\n\n var result = formatStr\n .match(longFormattingTokensRegExp)\n .map(function(substring) {\n var firstCharacter = substring[0]\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter]\n return longFormatter(substring, locale.formatLong, formatterOptions)\n }\n return substring\n })\n .join('')\n .match(formattingTokensRegExp)\n .map(function(substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\"\n }\n\n var firstCharacter = substring[0]\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring)\n }\n\n var formatter = formatters[firstCharacter]\n if (formatter) {\n if (!options.awareOfUnicodeTokens && isProtectedToken(substring)) {\n throwProtectedError(substring)\n }\n return formatter(utcDate, substring, locale.localize, formatterOptions)\n }\n\n return substring\n })\n .join('')\n\n return result\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\")\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport compareAsc from '../compareAsc/index.js'\nimport toDate from '../toDate/index.js'\nimport differenceInSeconds from '../differenceInSeconds/index.js'\nimport differenceInMonths from '../differenceInMonths/index.js'\nimport cloneObject from '../_lib/cloneObject/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\n\nvar MINUTES_IN_DAY = 1440\nvar MINUTES_IN_ALMOST_TWO_DAYS = 2520\nvar MINUTES_IN_MONTH = 43200\nvar MINUTES_IN_TWO_MONTHS = 86400\n\n/**\n * @name formatDistance\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words.\n *\n * | Distance between dates | Result |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs | less than a minute |\n * | 30 secs ... 1 min 30 secs | 1 minute |\n * | 1 min 30 secs ... 44 mins 30 secs | [2..44] minutes |\n * | 44 mins ... 30 secs ... 89 mins 30 secs | about 1 hour |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs | 1 day |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs | [2..30] days |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr | [2..12] months |\n * | 1 yr ... 1 yr 3 months | about 1 year |\n * | 1 yr 3 months ... 1 yr 9 month s | over 1 year |\n * | 1 yr 9 months ... 2 yrs | almost 2 years |\n * | N yrs ... N yrs 3 months | about N years |\n * | N yrs 3 months ... N yrs 9 months | over N years |\n * | N yrs 9 months ... N+1 yrs | almost N+1 years |\n *\n * With `options.includeSeconds == true`:\n * | Distance between dates | Result |\n * |------------------------|----------------------|\n * | 0 secs ... 5 secs | less than 5 seconds |\n * | 5 secs ... 10 secs | less than 10 seconds |\n * | 10 secs ... 20 secs | less than 20 seconds |\n * | 20 secs ... 40 secs | half a minute |\n * | 40 secs ... 60 secs | less than a minute |\n * | 60 secs ... 90 secs | 1 minute |\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `distanceInWords ` to `formatDistance `\n * to make its name consistent with `format` and `formatRelative`.\n *\n * - The order of arguments is swapped to make the function\n * consistent with `differenceIn...` functions.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * distanceInWords(\n * new Date(1986, 3, 4, 10, 32, 0),\n * new Date(1986, 3, 4, 11, 32, 0),\n * { addSuffix: true }\n * ) //=> 'in about 1 hour'\n *\n * // v2.0.0 onward\n *\n * formatDistance(\n * new Date(1986, 3, 4, 11, 32, 0),\n * new Date(1986, 3, 4, 10, 32, 0),\n * { addSuffix: true }\n * ) //=> 'in about 1 hour'\n * ```\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * var result = formatDistance(new Date(2014, 6, 2), new Date(2015, 0, 1))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00, including seconds?\n * var result = formatDistance(\n * new Date(2015, 0, 1, 0, 0, 15),\n * new Date(2015, 0, 1, 0, 0, 0),\n * { includeSeconds: true }\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * var result = formatDistance(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n * addSuffix: true\n * })\n * //=> 'about 1 year ago'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = formatDistance(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n * locale: eoLocale\n * })\n * //=> 'pli ol 1 jaro'\n */\nexport default function formatDistance(dirtyDate, dirtyBaseDate, dirtyOptions) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale || defaultLocale\n\n if (!locale.formatDistance) {\n throw new RangeError('locale must contain formatDistance property')\n }\n\n var comparison = compareAsc(dirtyDate, dirtyBaseDate)\n\n if (isNaN(comparison)) {\n throw new RangeError('Invalid time value')\n }\n\n var localizeOptions = cloneObject(options)\n localizeOptions.addSuffix = Boolean(options.addSuffix)\n localizeOptions.comparison = comparison\n\n var dateLeft\n var dateRight\n if (comparison > 0) {\n dateLeft = toDate(dirtyBaseDate)\n dateRight = toDate(dirtyDate)\n } else {\n dateLeft = toDate(dirtyDate)\n dateRight = toDate(dirtyBaseDate)\n }\n\n var seconds = differenceInSeconds(dateRight, dateLeft)\n var offsetInSeconds =\n (getTimezoneOffsetInMilliseconds(dateRight) -\n getTimezoneOffsetInMilliseconds(dateLeft)) /\n 1000\n var minutes = Math.round((seconds - offsetInSeconds) / 60)\n var months\n\n // 0 up to 2 mins\n if (minutes < 2) {\n if (options.includeSeconds) {\n if (seconds < 5) {\n return locale.formatDistance('lessThanXSeconds', 5, localizeOptions)\n } else if (seconds < 10) {\n return locale.formatDistance('lessThanXSeconds', 10, localizeOptions)\n } else if (seconds < 20) {\n return locale.formatDistance('lessThanXSeconds', 20, localizeOptions)\n } else if (seconds < 40) {\n return locale.formatDistance('halfAMinute', null, localizeOptions)\n } else if (seconds < 60) {\n return locale.formatDistance('lessThanXMinutes', 1, localizeOptions)\n } else {\n return locale.formatDistance('xMinutes', 1, localizeOptions)\n }\n } else {\n if (minutes === 0) {\n return locale.formatDistance('lessThanXMinutes', 1, localizeOptions)\n } else {\n return locale.formatDistance('xMinutes', minutes, localizeOptions)\n }\n }\n\n // 2 mins up to 0.75 hrs\n } else if (minutes < 45) {\n return locale.formatDistance('xMinutes', minutes, localizeOptions)\n\n // 0.75 hrs up to 1.5 hrs\n } else if (minutes < 90) {\n return locale.formatDistance('aboutXHours', 1, localizeOptions)\n\n // 1.5 hrs up to 24 hrs\n } else if (minutes < MINUTES_IN_DAY) {\n var hours = Math.round(minutes / 60)\n return locale.formatDistance('aboutXHours', hours, localizeOptions)\n\n // 1 day up to 1.75 days\n } else if (minutes < MINUTES_IN_ALMOST_TWO_DAYS) {\n return locale.formatDistance('xDays', 1, localizeOptions)\n\n // 1.75 days up to 30 days\n } else if (minutes < MINUTES_IN_MONTH) {\n var days = Math.round(minutes / MINUTES_IN_DAY)\n return locale.formatDistance('xDays', days, localizeOptions)\n\n // 1 month up to 2 months\n } else if (minutes < MINUTES_IN_TWO_MONTHS) {\n months = Math.round(minutes / MINUTES_IN_MONTH)\n return locale.formatDistance('aboutXMonths', months, localizeOptions)\n }\n\n months = differenceInMonths(dateRight, dateLeft)\n\n // 2 months up to 12 months\n if (months < 12) {\n var nearestMonth = Math.round(minutes / MINUTES_IN_MONTH)\n return locale.formatDistance('xMonths', nearestMonth, localizeOptions)\n\n // 1 year up to max Date\n } else {\n var monthsSinceStartOfYear = months % 12\n var years = Math.floor(months / 12)\n\n // N years up to 1 years 3 months\n if (monthsSinceStartOfYear < 3) {\n return locale.formatDistance('aboutXYears', years, localizeOptions)\n\n // N years 3 months up to N years 9 months\n } else if (monthsSinceStartOfYear < 9) {\n return locale.formatDistance('overXYears', years, localizeOptions)\n\n // N years 9 months up to N year 12 months\n } else {\n return locale.formatDistance('almostXYears', years + 1, localizeOptions)\n }\n }\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport compareAsc from '../compareAsc/index.js'\nimport toDate from '../toDate/index.js'\nimport differenceInSeconds from '../differenceInSeconds/index.js'\nimport cloneObject from '../_lib/cloneObject/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\n\nvar MINUTES_IN_DAY = 1440\nvar MINUTES_IN_MONTH = 43200\nvar MINUTES_IN_YEAR = 525600\n\n/**\n * @name formatDistanceStrict\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words, using strict units.\n * This is like `formatDistance`, but does not use helpers like 'almost', 'over',\n * 'less than' and the like.\n *\n * | Distance between dates | Result |\n * |------------------------|---------------------|\n * | 0 ... 59 secs | [0..59] seconds |\n * | 1 ... 59 mins | [1..59] minutes |\n * | 1 ... 23 hrs | [1..23] hours |\n * | 1 ... 29 days | [1..29] days |\n * | 1 ... 11 months | [1..11] months |\n * | 1 ... N years | [1..N] years |\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `distanceInWordsStrict` to `formatDistanceStrict`\n * to make its name consistent with `format` and `formatRelative`.\n *\n * - The order of arguments is swapped to make the function\n * consistent with `differenceIn...` functions.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * distanceInWordsStrict(\n * new Date(2015, 0, 2),\n * new Date(2014, 6, 2)\n * ) //=> '6 months'\n *\n * // v2.0.0 onward\n *\n * formatDistanceStrict(\n * new Date(2014, 6, 2),\n * new Date(2015, 0, 2)\n * ) //=> '6 months'\n * ```\n *\n * - `partialMethod` option is renamed to `roundingMethod`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * distanceInWordsStrict(\n * new Date(1986, 3, 4, 10, 32, 0),\n * new Date(1986, 3, 4, 10, 33, 1),\n * { partialMethod: 'ceil' }\n * ) //=> '2 minutes'\n *\n * // v2.0.0 onward\n *\n * formatDistanceStrict(\n * new Date(1986, 3, 4, 10, 33, 1),\n * new Date(1986, 3, 4, 10, 32, 0),\n * { roundingMethod: 'ceil' }\n * ) //=> '2 minutes'\n * ```\n *\n * - If `roundingMethod` is not specified, it now defaults to `round` instead of `floor`.\n *\n * - `unit` option now accepts one of the strings:\n * 'second', 'minute', 'hour', 'day', 'month' or 'year' instead of 's', 'm', 'h', 'd', 'M' or 'Y'\n *\n * ```javascript\n * // Before v2.0.0\n *\n * distanceInWordsStrict(\n * new Date(1986, 3, 4, 10, 32, 0),\n * new Date(1986, 3, 4, 10, 33, 1),\n * { unit: 'm' }\n * )\n *\n * // v2.0.0 onward\n *\n * formatDistanceStrict(\n * new Date(1986, 3, 4, 10, 33, 1),\n * new Date(1986, 3, 4, 10, 32, 0),\n * { unit: 'minute' }\n * )\n * ```\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {'second'|'minute'|'hour'|'day'|'month'|'year'} [options.unit] - if specified, will force a unit\n * @param {'floor'|'ceil'|'round'} [options.roundingMethod='round'] - which way to round partial units\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.roundingMethod` must be 'floor', 'ceil' or 'round'\n * @throws {RangeError} `options.unit` must be 'second', 'minute', 'hour', 'day', 'month' or 'year'\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * var result = formatDistanceStrict(new Date(2014, 6, 2), new Date(2015, 0, 2))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00?\n * var result = formatDistanceStrict(\n * new Date(2015, 0, 1, 0, 0, 15),\n * new Date(2015, 0, 1, 0, 0, 0)\n * )\n * //=> '15 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * var result = formatDistanceStrict(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n * addSuffix: true\n * })\n * //=> '1 year ago'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, in minutes?\n * var result = formatDistanceStrict(new Date(2016, 0, 1), new Date(2015, 0, 1), {\n * unit: 'minute'\n * })\n * //=> '525600 minutes'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 28 January 2015, in months, rounded up?\n * var result = formatDistanceStrict(new Date(2015, 0, 28), new Date(2015, 0, 1), {\n * unit: 'month',\n * roundingMethod: 'ceil'\n * })\n * //=> '1 month'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = formatDistanceStrict(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n * locale: eoLocale\n * })\n * //=> '1 jaro'\n */\nexport default function formatDistanceStrict(\n dirtyDate,\n dirtyBaseDate,\n dirtyOptions\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale || defaultLocale\n\n if (!locale.formatDistance) {\n throw new RangeError('locale must contain localize.formatDistance property')\n }\n\n var comparison = compareAsc(dirtyDate, dirtyBaseDate)\n\n if (isNaN(comparison)) {\n throw new RangeError('Invalid time value')\n }\n\n var localizeOptions = cloneObject(options)\n localizeOptions.addSuffix = Boolean(options.addSuffix)\n localizeOptions.comparison = comparison\n\n var dateLeft\n var dateRight\n if (comparison > 0) {\n dateLeft = toDate(dirtyBaseDate)\n dateRight = toDate(dirtyDate)\n } else {\n dateLeft = toDate(dirtyDate)\n dateRight = toDate(dirtyBaseDate)\n }\n\n var roundingMethod =\n options.roundingMethod == null ? 'round' : String(options.roundingMethod)\n var roundingMethodFn\n\n if (roundingMethod === 'floor') {\n roundingMethodFn = Math.floor\n } else if (roundingMethod === 'ceil') {\n roundingMethodFn = Math.ceil\n } else if (roundingMethod === 'round') {\n roundingMethodFn = Math.round\n } else {\n throw new RangeError(\"roundingMethod must be 'floor', 'ceil' or 'round'\")\n }\n\n var seconds = differenceInSeconds(dateRight, dateLeft)\n var offsetInSeconds =\n (getTimezoneOffsetInMilliseconds(dateRight) -\n getTimezoneOffsetInMilliseconds(dateLeft)) /\n 1000\n var minutes = roundingMethodFn((seconds - offsetInSeconds) / 60)\n\n var unit\n if (options.unit == null) {\n if (minutes < 1) {\n unit = 'second'\n } else if (minutes < 60) {\n unit = 'minute'\n } else if (minutes < MINUTES_IN_DAY) {\n unit = 'hour'\n } else if (minutes < MINUTES_IN_MONTH) {\n unit = 'day'\n } else if (minutes < MINUTES_IN_YEAR) {\n unit = 'month'\n } else {\n unit = 'year'\n }\n } else {\n unit = String(options.unit)\n }\n\n // 0 up to 60 seconds\n if (unit === 'second') {\n return locale.formatDistance('xSeconds', seconds, localizeOptions)\n\n // 1 up to 60 mins\n } else if (unit === 'minute') {\n return locale.formatDistance('xMinutes', minutes, localizeOptions)\n\n // 1 up to 24 hours\n } else if (unit === 'hour') {\n var hours = roundingMethodFn(minutes / 60)\n return locale.formatDistance('xHours', hours, localizeOptions)\n\n // 1 up to 30 days\n } else if (unit === 'day') {\n var days = roundingMethodFn(minutes / MINUTES_IN_DAY)\n return locale.formatDistance('xDays', days, localizeOptions)\n\n // 1 up to 12 months\n } else if (unit === 'month') {\n var months = roundingMethodFn(minutes / MINUTES_IN_MONTH)\n return locale.formatDistance('xMonths', months, localizeOptions)\n\n // 1 year up to max Date\n } else if (unit === 'year') {\n var years = roundingMethodFn(minutes / MINUTES_IN_YEAR)\n return locale.formatDistance('xYears', years, localizeOptions)\n }\n\n throw new RangeError(\n \"unit must be 'second', 'minute', 'hour', 'day', 'month' or 'year'\"\n )\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport toDate from '../toDate/index.js'\nimport format from '../format/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\nimport subMilliseconds from '../subMilliseconds/index.js'\n\n/**\n * @name formatRelative\n * @category Common Helpers\n * @summary Represent the date in words relative to the given base date.\n *\n * @description\n * Represent the date in words relative to the given base date.\n *\n * | Distance to the base date | Result |\n * |---------------------------|---------------------------|\n * | Previous 6 days | last Sunday at 04:30 AM |\n * | Last day | yesterday at 04:30 AM |\n * | Same day | today at 04:30 AM |\n * | Next day | tomorrow at 04:30 AM |\n * | Next 6 days | Sunday at 04:30 AM |\n * | Other | 12/31/2017 |\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to format\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the date in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.locale` must contain `formatRelative` property\n */\nexport default function formatRelative(dirtyDate, dirtyBaseDate, dirtyOptions) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var baseDate = toDate(dirtyBaseDate)\n\n var options = dirtyOptions || {}\n var locale = options.locale || defaultLocale\n\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property')\n }\n\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property')\n }\n\n if (!locale.formatRelative) {\n throw new RangeError('locale must contain formatRelative property')\n }\n\n var diff = differenceInCalendarDays(date, baseDate)\n\n if (isNaN(diff)) {\n throw new RangeError('Invalid time value')\n }\n\n var token\n if (diff < -6) {\n token = 'other'\n } else if (diff < -1) {\n token = 'lastWeek'\n } else if (diff < 0) {\n token = 'yesterday'\n } else if (diff < 1) {\n token = 'today'\n } else if (diff < 2) {\n token = 'tomorrow'\n } else if (diff < 7) {\n token = 'nextWeek'\n } else {\n token = 'other'\n }\n\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date))\n var utcBaseDate = subMilliseconds(\n baseDate,\n getTimezoneOffsetInMilliseconds(baseDate)\n )\n var formatStr = locale.formatRelative(token, utcDate, utcBaseDate, options)\n return format(date, formatStr, options)\n}\n","import toDate from '../toDate/index.js'\nimport toInteger from '../_lib/toInteger/index.js'\n\n/**\n * @name fromUnixTime\n * @category Timestamp Helpers\n * @summary Create a date from a Unix timestamp.\n *\n * @description\n * Create a date from a Unix timestamp.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Number} unixTime - the given Unix timestamp\n * @returns {Date} the date\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Create the date 29 February 2012 11:45:05:\n * var result = fromUnixTime(1330515905)\n * //=> Wed Feb 29 2012 11:45:05\n */\nexport default function fromUnixTime(dirtyUnixTime) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var unixTime = toInteger(dirtyUnixTime)\n\n return toDate(unixTime * 1000)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getDate\n * @category Day Helpers\n * @summary Get the day of the month of the given date.\n *\n * @description\n * Get the day of the month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the month is 29 February 2012?\n * var result = getDate(new Date(2012, 1, 29))\n * //=> 29\n */\nexport default function getDate(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var dayOfMonth = date.getDate()\n return dayOfMonth\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getDay\n * @category Weekday Helpers\n * @summary Get the day of the week of the given date.\n *\n * @description\n * Get the day of the week of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the week is 29 February 2012?\n * var result = getDay(new Date(2012, 1, 29))\n * //=> 3\n */\nexport default function getDay(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var day = date.getDay()\n return day\n}\n","import toDate from '../toDate/index.js'\nimport startOfYear from '../startOfYear/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * var result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport default function getDayOfYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var diff = differenceInCalendarDays(date, startOfYear(date))\n var dayOfYear = diff + 1\n return dayOfYear\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in February 2000?\n * var result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\nexport default function getDaysInMonth(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n var monthIndex = date.getMonth()\n var lastDayOfMonth = new Date(0)\n lastDayOfMonth.setFullYear(year, monthIndex + 1, 0)\n lastDayOfMonth.setHours(0, 0, 0, 0)\n return lastDayOfMonth.getDate()\n}\n","import toDate from '../toDate/index.js'\nimport isLeapYear from '../isLeapYear/index.js'\n\n/**\n * @name getDaysInYear\n * @category Year Helpers\n * @summary Get the number of days in a year of the given date.\n *\n * @description\n * Get the number of days in a year of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in 2012?\n * var result = getDaysInYear(new Date(2012, 0, 1))\n * //=> 366\n */\nexport default function getDaysInYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n\n if (isNaN(date)) {\n return NaN\n }\n\n return isLeapYear(date) ? 366 : 365\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getDecade\n * @category Decade Helpers\n * @summary Get the decade of the given date.\n *\n * @description\n * Get the decade of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year of decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which decade belongs 27 November 1942?\n * var result = getDecade(new Date(1942, 10, 27))\n * //=> 1940\n */\nexport default function getDecade(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n var decade = Math.floor(year / 10) * 10\n return decade\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * var result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\nexport default function getHours(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var hours = date.getHours()\n return hours\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * var result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport default function getISODay(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var day = date.getDay()\n\n if (day === 0) {\n day = 7\n }\n\n return day\n}\n","import toDate from '../toDate/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\nimport startOfISOWeekYear from '../startOfISOWeekYear/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * var result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport default function getISOWeek(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var diff = startOfISOWeek(date).getTime() - startOfISOWeekYear(date).getTime()\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n","import toDate from '../toDate/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `getISOYear` to `getISOWeekYear`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `getWeekYear`.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * var result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport default function getISOWeekYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n\n var fourthOfJanuaryOfNextYear = new Date(0)\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4)\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0)\n var startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear)\n\n var fourthOfJanuaryOfThisYear = new Date(0)\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4)\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0)\n var startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear)\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year\n } else {\n return year - 1\n }\n}\n","import startOfISOWeekYear from '../startOfISOWeekYear/index.js'\nimport addWeeks from '../addWeeks/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name getISOWeeksInYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of weeks in an ISO week-numbering year of the given date.\n *\n * @description\n * Get the number of weeks in an ISO week-numbering year of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of ISO weeks in a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many weeks are in ISO week-numbering year 2015?\n * var result = getISOWeeksInYear(new Date(2015, 1, 11))\n * //=> 53\n */\nexport default function getISOWeeksInYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var thisYear = startOfISOWeekYear(dirtyDate)\n var nextYear = startOfISOWeekYear(addWeeks(thisYear, 60))\n var diff = nextYear.valueOf() - thisYear.valueOf()\n // Round the number of weeks to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round(diff / MILLISECONDS_IN_WEEK)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getMilliseconds\n * @category Millisecond Helpers\n * @summary Get the milliseconds of the given date.\n *\n * @description\n * Get the milliseconds of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the milliseconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the milliseconds of 29 February 2012 11:45:05.123:\n * var result = getMilliseconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 123\n */\nexport default function getMilliseconds(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var milliseconds = date.getMilliseconds()\n return milliseconds\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * var result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\nexport default function getMinutes(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var minutes = date.getMinutes()\n return minutes\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * var result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\nexport default function getMonth(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var month = date.getMonth()\n return month\n}\n","import toDate from '../toDate/index.js'\n\nvar MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000\n\n/**\n * @name getOverlappingDaysInIntervals\n * @category Interval Helpers\n * @summary Get the number of days that overlap in two time intervals\n *\n * @description\n * Get the number of days that overlap in two time intervals\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `getOverlappingDaysInRanges` to `getOverlappingDaysInIntervals`.\n * This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n * ```\n * 2.1.3\n * time interval\n * part of the time axis limited by two instants\n * ```\n *\n * Also, this function now accepts an object with `start` and `end` properties\n * instead of two arguments as an interval.\n * This function now throws `RangeError` if the start of the interval is after its end\n * or if any date in the interval is `Invalid Date`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * getOverlappingDaysInRanges(\n * new Date(2014, 0, 10), new Date(2014, 0, 20),\n * new Date(2014, 0, 17), new Date(2014, 0, 21)\n * )\n *\n * // v2.0.0 onward\n *\n * getOverlappingDaysInIntervals(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n * { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n * )\n * ```\n *\n * @param {Interval} intervalLeft - the first interval to compare. See [Interval]{@link docs/Interval}\n * @param {Interval} intervalRight - the second interval to compare. See [Interval]{@link docs/Interval}\n * @returns {Number} the number of days that overlap in two time intervals\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For overlapping time intervals adds 1 for each started overlapping day:\n * getOverlappingDaysInIntervals(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n * { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n * )\n * //=> 3\n *\n * @example\n * // For non-overlapping time intervals returns 0:\n * getOverlappingDaysInIntervals(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n * { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) }\n * )\n * //=> 0\n */\nexport default function getOverlappingDaysInIntervals(\n dirtyIntervalLeft,\n dirtyIntervalRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var intervalLeft = dirtyIntervalLeft || {}\n var intervalRight = dirtyIntervalRight || {}\n var leftStartTime = toDate(intervalLeft.start).getTime()\n var leftEndTime = toDate(intervalLeft.end).getTime()\n var rightStartTime = toDate(intervalRight.start).getTime()\n var rightEndTime = toDate(intervalRight.end).getTime()\n\n // Throw an exception if start date is after end date or if any date is `Invalid Date`\n if (!(leftStartTime <= leftEndTime && rightStartTime <= rightEndTime)) {\n throw new RangeError('Invalid interval')\n }\n\n var isOverlapping =\n leftStartTime < rightEndTime && rightStartTime < leftEndTime\n\n if (!isOverlapping) {\n return 0\n }\n\n var overlapStartDate =\n rightStartTime < leftStartTime ? leftStartTime : rightStartTime\n\n var overlapEndDate = rightEndTime > leftEndTime ? leftEndTime : rightEndTime\n\n var differenceInMs = overlapEndDate - overlapStartDate\n\n return Math.ceil(differenceInMs / MILLISECONDS_IN_DAY)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getQuarter\n * @category Quarter Helpers\n * @summary Get the year quarter of the given date.\n *\n * @description\n * Get the year quarter of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which quarter is 2 July 2014?\n * var result = getQuarter(new Date(2014, 6, 2))\n * //=> 3\n */\nexport default function getQuarter(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var quarter = Math.floor(date.getMonth() / 3) + 1\n return quarter\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * var result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\nexport default function getSeconds(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var seconds = date.getSeconds()\n return seconds\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getTime\n * @category Timestamp Helpers\n * @summary Get the milliseconds timestamp of the given date.\n *\n * @description\n * Get the milliseconds timestamp of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05.123:\n * var result = getTime(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 1330515905123\n */\nexport default function getTime(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var timestamp = date.getTime()\n return timestamp\n}\n","import getTime from '../getTime/index.js'\n\n/**\n * @name getUnixTime\n * @category Timestamp Helpers\n * @summary Get the seconds timestamp of the given date.\n *\n * @description\n * Get the seconds timestamp of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05 CET:\n * var result = getUnixTime(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 1330512305\n */\nexport default function getUnixTime(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return Math.floor(getTime(dirtyDate) / 1000)\n}\n","import toDate from '../toDate/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\nimport startOfWeekYear from '../startOfWeekYear/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Number} the week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * var result = getISOWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * var result = getISOWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\n\nexport default function getWeek(dirtyDate, options) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var diff =\n startOfWeek(date, options).getTime() -\n startOfWeekYear(date, options).getTime()\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getDate from '../getDate/index.js'\nimport startOfMonth from '../startOfMonth/index.js'\nimport getDay from '../getDay/index.js'\n\n/**\n * @name getWeekOfMonth\n * @category Week Helpers\n * @summary Get the week of the month of the given date.\n *\n * @description\n * Get the week of the month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Number} the week of month\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Which week of the month is 9 November 2017?\n * var result = getWeekOfMonth(new Date(2017, 10, 9))\n * //=> 2\n */\nexport default function getWeekOfMonth(date, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeWeekStartsOn =\n locale && locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n }\n\n var startWeekDay = getDay(startOfMonth(date))\n var currentWeekDay = getDay(date)\n\n var startWeekDayWithOptions =\n startWeekDay < weekStartsOn ? 7 - weekStartsOn : startWeekDay\n var diff = startWeekDayWithOptions > currentWeekDay ? 7 - weekStartsOn : 0\n\n return Math.ceil((getDate(date) + diff) / 7)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Number} the local week-numbering year\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * var result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * var result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * var result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport default function getWeekYear(dirtyDate, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeFirstWeekContainsDate =\n locale && locale.options && locale.options.firstWeekContainsDate\n var defaultFirstWeekContainsDate =\n localeFirstWeekContainsDate == null\n ? 1\n : toInteger(localeFirstWeekContainsDate)\n var firstWeekContainsDate =\n options.firstWeekContainsDate == null\n ? defaultFirstWeekContainsDate\n : toInteger(options.firstWeekContainsDate)\n\n // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError(\n 'firstWeekContainsDate must be between 1 and 7 inclusively'\n )\n }\n\n var firstWeekOfNextYear = new Date(0)\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate)\n firstWeekOfNextYear.setHours(0, 0, 0, 0)\n var startOfNextYear = startOfWeek(firstWeekOfNextYear, dirtyOptions)\n\n var firstWeekOfThisYear = new Date(0)\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate)\n firstWeekOfThisYear.setHours(0, 0, 0, 0)\n var startOfThisYear = startOfWeek(firstWeekOfThisYear, dirtyOptions)\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year\n } else {\n return year - 1\n }\n}\n","import differenceInCalendarWeeks from '../differenceInCalendarWeeks/index.js'\nimport lastDayOfMonth from '../lastDayOfMonth/index.js'\nimport startOfMonth from '../startOfMonth/index.js'\n\n/**\n * @name getWeeksInMonth\n * @category Week Helpers\n * @summary Get the number of calendar weeks a month spans.\n *\n * @description\n * Get the number of calendar weeks the month in the given date spans.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Number} the number of calendar weeks\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // How many calendar weeks does February 2015 span?\n * var result = getWeeksInMonth(new Date(2015, 1, 8))\n * //=> 4\n *\n * @example\n * // If the week starts on Monday,\n * // how many calendar weeks does July 2017 span?\n * var result = getWeeksInMonth(new Date(2017, 6, 5), { weekStartsOn: 1 })\n * //=> 6\n */\nexport default function getWeeksInMonth(date, options) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return (\n differenceInCalendarWeeks(\n lastDayOfMonth(date),\n startOfMonth(date),\n options\n ) + 1\n )\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * var result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\nexport default function getYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n return year\n}\n","// This file is generated automatically by `scripts/build/indices.js`. Please, don't change it.\n\nexport { default as addDays } from './addDays/index.js'\nexport { default as addHours } from './addHours/index.js'\nexport { default as addISOWeekYears } from './addISOWeekYears/index.js'\nexport { default as addMilliseconds } from './addMilliseconds/index.js'\nexport { default as addMinutes } from './addMinutes/index.js'\nexport { default as addMonths } from './addMonths/index.js'\nexport { default as addQuarters } from './addQuarters/index.js'\nexport { default as addSeconds } from './addSeconds/index.js'\nexport { default as addWeeks } from './addWeeks/index.js'\nexport { default as addYears } from './addYears/index.js'\nexport {\n default as areIntervalsOverlapping\n} from './areIntervalsOverlapping/index.js'\nexport { default as closestIndexTo } from './closestIndexTo/index.js'\nexport { default as closestTo } from './closestTo/index.js'\nexport { default as compareAsc } from './compareAsc/index.js'\nexport { default as compareDesc } from './compareDesc/index.js'\nexport {\n default as differenceInCalendarDays\n} from './differenceInCalendarDays/index.js'\nexport {\n default as differenceInCalendarISOWeekYears\n} from './differenceInCalendarISOWeekYears/index.js'\nexport {\n default as differenceInCalendarISOWeeks\n} from './differenceInCalendarISOWeeks/index.js'\nexport {\n default as differenceInCalendarMonths\n} from './differenceInCalendarMonths/index.js'\nexport {\n default as differenceInCalendarQuarters\n} from './differenceInCalendarQuarters/index.js'\nexport {\n default as differenceInCalendarWeeks\n} from './differenceInCalendarWeeks/index.js'\nexport {\n default as differenceInCalendarYears\n} from './differenceInCalendarYears/index.js'\nexport { default as differenceInDays } from './differenceInDays/index.js'\nexport { default as differenceInHours } from './differenceInHours/index.js'\nexport {\n default as differenceInISOWeekYears\n} from './differenceInISOWeekYears/index.js'\nexport {\n default as differenceInMilliseconds\n} from './differenceInMilliseconds/index.js'\nexport { default as differenceInMinutes } from './differenceInMinutes/index.js'\nexport { default as differenceInMonths } from './differenceInMonths/index.js'\nexport {\n default as differenceInQuarters\n} from './differenceInQuarters/index.js'\nexport { default as differenceInSeconds } from './differenceInSeconds/index.js'\nexport { default as differenceInWeeks } from './differenceInWeeks/index.js'\nexport { default as differenceInYears } from './differenceInYears/index.js'\nexport { default as eachDayOfInterval } from './eachDayOfInterval/index.js'\nexport { default as eachWeekOfInterval } from './eachWeekOfInterval/index.js'\nexport {\n default as eachWeekendOfInterval\n} from './eachWeekendOfInterval/index.js'\nexport { default as eachWeekendOfMonth } from './eachWeekendOfMonth/index.js'\nexport { default as eachWeekendOfYear } from './eachWeekendOfYear/index.js'\nexport { default as endOfDay } from './endOfDay/index.js'\nexport { default as endOfDecade } from './endOfDecade/index.js'\nexport { default as endOfHour } from './endOfHour/index.js'\nexport { default as endOfISOWeek } from './endOfISOWeek/index.js'\nexport { default as endOfISOWeekYear } from './endOfISOWeekYear/index.js'\nexport { default as endOfMinute } from './endOfMinute/index.js'\nexport { default as endOfMonth } from './endOfMonth/index.js'\nexport { default as endOfQuarter } from './endOfQuarter/index.js'\nexport { default as endOfSecond } from './endOfSecond/index.js'\nexport { default as endOfWeek } from './endOfWeek/index.js'\nexport { default as endOfYear } from './endOfYear/index.js'\nexport { default as format } from './format/index.js'\nexport { default as formatDistance } from './formatDistance/index.js'\nexport {\n default as formatDistanceStrict\n} from './formatDistanceStrict/index.js'\nexport { default as formatRelative } from './formatRelative/index.js'\nexport { default as fromUnixTime } from './fromUnixTime/index.js'\nexport { default as getDate } from './getDate/index.js'\nexport { default as getDay } from './getDay/index.js'\nexport { default as getDayOfYear } from './getDayOfYear/index.js'\nexport { default as getDaysInMonth } from './getDaysInMonth/index.js'\nexport { default as getDaysInYear } from './getDaysInYear/index.js'\nexport { default as getDecade } from './getDecade/index.js'\nexport { default as getHours } from './getHours/index.js'\nexport { default as getISODay } from './getISODay/index.js'\nexport { default as getISOWeek } from './getISOWeek/index.js'\nexport { default as getISOWeekYear } from './getISOWeekYear/index.js'\nexport { default as getISOWeeksInYear } from './getISOWeeksInYear/index.js'\nexport { default as getMilliseconds } from './getMilliseconds/index.js'\nexport { default as getMinutes } from './getMinutes/index.js'\nexport { default as getMonth } from './getMonth/index.js'\nexport {\n default as getOverlappingDaysInIntervals\n} from './getOverlappingDaysInIntervals/index.js'\nexport { default as getQuarter } from './getQuarter/index.js'\nexport { default as getSeconds } from './getSeconds/index.js'\nexport { default as getTime } from './getTime/index.js'\nexport { default as getUnixTime } from './getUnixTime/index.js'\nexport { default as getWeek } from './getWeek/index.js'\nexport { default as getWeekOfMonth } from './getWeekOfMonth/index.js'\nexport { default as getWeekYear } from './getWeekYear/index.js'\nexport { default as getWeeksInMonth } from './getWeeksInMonth/index.js'\nexport { default as getYear } from './getYear/index.js'\nexport { default as isAfter } from './isAfter/index.js'\nexport { default as isBefore } from './isBefore/index.js'\nexport { default as isDate } from './isDate/index.js'\nexport { default as isEqual } from './isEqual/index.js'\nexport { default as isFirstDayOfMonth } from './isFirstDayOfMonth/index.js'\nexport { default as isFriday } from './isFriday/index.js'\nexport { default as isLastDayOfMonth } from './isLastDayOfMonth/index.js'\nexport { default as isLeapYear } from './isLeapYear/index.js'\nexport { default as isMonday } from './isMonday/index.js'\nexport { default as isSameDay } from './isSameDay/index.js'\nexport { default as isSameHour } from './isSameHour/index.js'\nexport { default as isSameISOWeek } from './isSameISOWeek/index.js'\nexport { default as isSameISOWeekYear } from './isSameISOWeekYear/index.js'\nexport { default as isSameMinute } from './isSameMinute/index.js'\nexport { default as isSameMonth } from './isSameMonth/index.js'\nexport { default as isSameQuarter } from './isSameQuarter/index.js'\nexport { default as isSameSecond } from './isSameSecond/index.js'\nexport { default as isSameWeek } from './isSameWeek/index.js'\nexport { default as isSameYear } from './isSameYear/index.js'\nexport { default as isSaturday } from './isSaturday/index.js'\nexport { default as isSunday } from './isSunday/index.js'\nexport { default as isThursday } from './isThursday/index.js'\nexport { default as isTuesday } from './isTuesday/index.js'\nexport { default as isValid } from './isValid/index.js'\nexport { default as isWednesday } from './isWednesday/index.js'\nexport { default as isWeekend } from './isWeekend/index.js'\nexport { default as isWithinInterval } from './isWithinInterval/index.js'\nexport { default as lastDayOfDecade } from './lastDayOfDecade/index.js'\nexport { default as lastDayOfISOWeek } from './lastDayOfISOWeek/index.js'\nexport {\n default as lastDayOfISOWeekYear\n} from './lastDayOfISOWeekYear/index.js'\nexport { default as lastDayOfMonth } from './lastDayOfMonth/index.js'\nexport { default as lastDayOfQuarter } from './lastDayOfQuarter/index.js'\nexport { default as lastDayOfWeek } from './lastDayOfWeek/index.js'\nexport { default as lastDayOfYear } from './lastDayOfYear/index.js'\nexport { default as lightFormat } from './lightFormat/index.js'\nexport { default as max } from './max/index.js'\nexport { default as min } from './min/index.js'\nexport { default as parse } from './parse/index.js'\nexport { default as parseISO } from './parseISO/index.js'\nexport {\n default as roundToNearestMinutes\n} from './roundToNearestMinutes/index.js'\nexport { default as setDate } from './setDate/index.js'\nexport { default as setDay } from './setDay/index.js'\nexport { default as setDayOfYear } from './setDayOfYear/index.js'\nexport { default as setHours } from './setHours/index.js'\nexport { default as setISODay } from './setISODay/index.js'\nexport { default as setISOWeek } from './setISOWeek/index.js'\nexport { default as setISOWeekYear } from './setISOWeekYear/index.js'\nexport { default as setMilliseconds } from './setMilliseconds/index.js'\nexport { default as setMinutes } from './setMinutes/index.js'\nexport { default as setMonth } from './setMonth/index.js'\nexport { default as setQuarter } from './setQuarter/index.js'\nexport { default as setSeconds } from './setSeconds/index.js'\nexport { default as setWeek } from './setWeek/index.js'\nexport { default as setWeekYear } from './setWeekYear/index.js'\nexport { default as setYear } from './setYear/index.js'\nexport { default as startOfDay } from './startOfDay/index.js'\nexport { default as startOfDecade } from './startOfDecade/index.js'\nexport { default as startOfHour } from './startOfHour/index.js'\nexport { default as startOfISOWeek } from './startOfISOWeek/index.js'\nexport { default as startOfISOWeekYear } from './startOfISOWeekYear/index.js'\nexport { default as startOfMinute } from './startOfMinute/index.js'\nexport { default as startOfMonth } from './startOfMonth/index.js'\nexport { default as startOfQuarter } from './startOfQuarter/index.js'\nexport { default as startOfSecond } from './startOfSecond/index.js'\nexport { default as startOfWeek } from './startOfWeek/index.js'\nexport { default as startOfWeekYear } from './startOfWeekYear/index.js'\nexport { default as startOfYear } from './startOfYear/index.js'\nexport { default as subDays } from './subDays/index.js'\nexport { default as subHours } from './subHours/index.js'\nexport { default as subISOWeekYears } from './subISOWeekYears/index.js'\nexport { default as subMilliseconds } from './subMilliseconds/index.js'\nexport { default as subMinutes } from './subMinutes/index.js'\nexport { default as subMonths } from './subMonths/index.js'\nexport { default as subQuarters } from './subQuarters/index.js'\nexport { default as subSeconds } from './subSeconds/index.js'\nexport { default as subWeeks } from './subWeeks/index.js'\nexport { default as subYears } from './subYears/index.js'\nexport { default as toDate } from './toDate/index.js'\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be after the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is after the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * var result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\nexport default function isAfter(dirtyDate, dirtyDateToCompare) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var dateToCompare = toDate(dirtyDateToCompare)\n return date.getTime() > dateToCompare.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * var result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var dateToCompare = toDate(dirtyDateToCompare)\n return date.getTime() < dateToCompare.getTime()\n}\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * var result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * var result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * var result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * var result = isDate({})\n * //=> false\n */\nexport default function isDate(value) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return (\n value instanceof Date ||\n (typeof value === 'object' &&\n Object.prototype.toString.call(value) === '[object Date]')\n )\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isEqual\n * @category Common Helpers\n * @summary Are the given dates equal?\n *\n * @description\n * Are the given dates equal?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Boolean} the dates are equal\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?\n * var result = isEqual(\n * new Date(2014, 6, 2, 6, 30, 45, 0),\n * new Date(2014, 6, 2, 6, 30, 45, 500)\n * )\n * //=> false\n */\nexport default function isEqual(dirtyLeftDate, dirtyRightDate) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyLeftDate)\n var dateRight = toDate(dirtyRightDate)\n return dateLeft.getTime() === dateRight.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isFirstDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the first day of a month?\n *\n * @description\n * Is the given date the first day of a month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the first day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 1 September 2014 the first day of a month?\n * var result = isFirstDayOfMonth(new Date(2014, 8, 1))\n * //=> true\n */\nexport default function isFirstDayOfMonth(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return toDate(dirtyDate).getDate() === 1\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isFriday\n * @category Weekday Helpers\n * @summary Is the given date Friday?\n *\n * @description\n * Is the given date Friday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Friday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 26 September 2014 Friday?\n * var result = isFriday(new Date(2014, 8, 26))\n * //=> true\n */\nexport default function isFriday(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return toDate(dirtyDate).getDay() === 5\n}\n","import toDate from '../toDate/index.js'\nimport endOfDay from '../endOfDay/index.js'\nimport endOfMonth from '../endOfMonth/index.js'\n\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * var result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\nexport default function isLastDayOfMonth(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n return endOfDay(date).getTime() === endOfMonth(date).getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isLeapYear\n * @category Year Helpers\n * @summary Is the given date in the leap year?\n *\n * @description\n * Is the given date in the leap year?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in the leap year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 1 September 2012 in the leap year?\n * var result = isLeapYear(new Date(2012, 8, 1))\n * //=> true\n */\nexport default function isLeapYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isMonday\n * @category Weekday Helpers\n * @summary Is the given date Monday?\n *\n * @description\n * Is the given date Monday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Monday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 22 September 2014 Monday?\n * var result = isMonday(new Date(2014, 8, 22))\n * //=> true\n */\nexport default function isMonday(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return toDate(dirtyDate).getDay() === 1\n}\n","import startOfDay from '../startOfDay/index.js'\n\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day?\n *\n * @description\n * Are the given dates in the same day?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * var result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n */\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeftStartOfDay = startOfDay(dirtyDateLeft)\n var dateRightStartOfDay = startOfDay(dirtyDateRight)\n\n return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime()\n}\n","import startOfHour from '../startOfHour/index.js'\n\n/**\n * @name isSameHour\n * @category Hour Helpers\n * @summary Are the given dates in the same hour?\n *\n * @description\n * Are the given dates in the same hour?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same hour\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:00:00 and 4 September 06:30:00 in the same hour?\n * var result = isSameHour(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 6, 30))\n * //=> true\n */\nexport default function isSameHour(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeftStartOfHour = startOfHour(dirtyDateLeft)\n var dateRightStartOfHour = startOfHour(dirtyDateRight)\n\n return dateLeftStartOfHour.getTime() === dateRightStartOfHour.getTime()\n}\n","import isSameWeek from '../isSameWeek/index.js'\n\n/**\n * @name isSameISOWeek\n * @category ISO Week Helpers\n * @summary Are the given dates in the same ISO week?\n *\n * @description\n * Are the given dates in the same ISO week?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same ISO week\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 1 September 2014 and 7 September 2014 in the same ISO week?\n * var result = isSameISOWeek(new Date(2014, 8, 1), new Date(2014, 8, 7))\n * //=> true\n */\nexport default function isSameISOWeek(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n return isSameWeek(dirtyDateLeft, dirtyDateRight, { weekStartsOn: 1 })\n}\n","import startOfISOWeekYear from '../startOfISOWeekYear/index.js'\n\n/**\n * @name isSameISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Are the given dates in the same ISO week-numbering year?\n *\n * @description\n * Are the given dates in the same ISO week-numbering year?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `isSameISOYear` to `isSameISOWeekYear`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `getWeekYear`.\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same ISO week-numbering year\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 29 December 2003 and 2 January 2005 in the same ISO week-numbering year?\n * var result = isSameISOWeekYear(new Date(2003, 11, 29), new Date(2005, 0, 2))\n * //=> true\n */\nexport default function isSameISOWeekYear(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeftStartOfYear = startOfISOWeekYear(dirtyDateLeft)\n var dateRightStartOfYear = startOfISOWeekYear(dirtyDateRight)\n\n return dateLeftStartOfYear.getTime() === dateRightStartOfYear.getTime()\n}\n","import startOfMinute from '../startOfMinute/index.js'\n\n/**\n * @name isSameMinute\n * @category Minute Helpers\n * @summary Are the given dates in the same minute?\n *\n * @description\n * Are the given dates in the same minute?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same minute\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:30:00 and 4 September 2014 06:30:15\n * // in the same minute?\n * var result = isSameMinute(\n * new Date(2014, 8, 4, 6, 30),\n * new Date(2014, 8, 4, 6, 30, 15)\n * )\n * //=> true\n */\nexport default function isSameMinute(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeftStartOfMinute = startOfMinute(dirtyDateLeft)\n var dateRightStartOfMinute = startOfMinute(dirtyDateRight)\n\n return dateLeftStartOfMinute.getTime() === dateRightStartOfMinute.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month?\n *\n * @description\n * Are the given dates in the same month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * var result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\nexport default function isSameMonth(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n return (\n dateLeft.getFullYear() === dateRight.getFullYear() &&\n dateLeft.getMonth() === dateRight.getMonth()\n )\n}\n","import startOfQuarter from '../startOfQuarter/index.js'\n\n/**\n * @name isSameQuarter\n * @category Quarter Helpers\n * @summary Are the given dates in the same year quarter?\n *\n * @description\n * Are the given dates in the same year quarter?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same quarter\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 1 January 2014 and 8 March 2014 in the same quarter?\n * var result = isSameQuarter(new Date(2014, 0, 1), new Date(2014, 2, 8))\n * //=> true\n */\nexport default function isSameQuarter(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeftStartOfQuarter = startOfQuarter(dirtyDateLeft)\n var dateRightStartOfQuarter = startOfQuarter(dirtyDateRight)\n\n return dateLeftStartOfQuarter.getTime() === dateRightStartOfQuarter.getTime()\n}\n","import startOfSecond from '../startOfSecond/index.js'\n\n/**\n * @name isSameSecond\n * @category Second Helpers\n * @summary Are the given dates in the same second?\n *\n * @description\n * Are the given dates in the same second?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same second\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:30:15.000 and 4 September 2014 06:30.15.500\n * // in the same second?\n * var result = isSameSecond(\n * new Date(2014, 8, 4, 6, 30, 15),\n * new Date(2014, 8, 4, 6, 30, 15, 500)\n * )\n * //=> true\n */\nexport default function isSameSecond(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeftStartOfSecond = startOfSecond(dirtyDateLeft)\n var dateRightStartOfSecond = startOfSecond(dirtyDateRight)\n\n return dateLeftStartOfSecond.getTime() === dateRightStartOfSecond.getTime()\n}\n","import startOfWeek from '../startOfWeek/index.js'\n\n/**\n * @name isSameWeek\n * @category Week Helpers\n * @summary Are the given dates in the same week?\n *\n * @description\n * Are the given dates in the same week?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Boolean} the dates are in the same week\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Are 31 August 2014 and 4 September 2014 in the same week?\n * var result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4))\n * //=> true\n *\n * @example\n * // If week starts with Monday,\n * // are 31 August 2014 and 4 September 2014 in the same week?\n * var result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4), {\n * weekStartsOn: 1\n * })\n * //=> false\n */\nexport default function isSameWeek(\n dirtyDateLeft,\n dirtyDateRight,\n dirtyOptions\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeftStartOfWeek = startOfWeek(dirtyDateLeft, dirtyOptions)\n var dateRightStartOfWeek = startOfWeek(dirtyDateRight, dirtyOptions)\n\n return dateLeftStartOfWeek.getTime() === dateRightStartOfWeek.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isSameYear\n * @category Year Helpers\n * @summary Are the given dates in the same year?\n *\n * @description\n * Are the given dates in the same year?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same year\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same year?\n * var result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\nexport default function isSameYear(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n return dateLeft.getFullYear() === dateRight.getFullYear()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isSaturday\n * @category Weekday Helpers\n * @summary Is the given date Saturday?\n *\n * @description\n * Is the given date Saturday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Saturday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 27 September 2014 Saturday?\n * var result = isSaturday(new Date(2014, 8, 27))\n * //=> true\n */\nexport default function isSaturday(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return toDate(dirtyDate).getDay() === 6\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isSunday\n * @category Weekday Helpers\n * @summary Is the given date Sunday?\n *\n * @description\n * Is the given date Sunday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Sunday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 21 September 2014 Sunday?\n * var result = isSunday(new Date(2014, 8, 21))\n * //=> true\n */\nexport default function isSunday(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return toDate(dirtyDate).getDay() === 0\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isThursday\n * @category Weekday Helpers\n * @summary Is the given date Thursday?\n *\n * @description\n * Is the given date Thursday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Thursday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 25 September 2014 Thursday?\n * var result = isThursday(new Date(2014, 8, 25))\n * //=> true\n */\nexport default function isThursday(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return toDate(dirtyDate).getDay() === 4\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isTuesday\n * @category Weekday Helpers\n * @summary Is the given date Tuesday?\n *\n * @description\n * Is the given date Tuesday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Tuesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 23 September 2014 Tuesday?\n * var result = isTuesday(new Date(2014, 8, 23))\n * //=> true\n */\nexport default function isTuesday(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return toDate(dirtyDate).getDay() === 2\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now `isValid` doesn't throw an exception\n * if the first argument is not an instance of Date.\n * Instead, argument is converted beforehand using `toDate`.\n *\n * Examples:\n *\n * | `isValid` argument | Before v2.0.0 | v2.0.0 onward |\n * |---------------------------|---------------|---------------|\n * | `new Date()` | `true` | `true` |\n * | `new Date('2016-01-01')` | `true` | `true` |\n * | `new Date('')` | `false` | `false` |\n * | `new Date(1488370835081)` | `true` | `true` |\n * | `new Date(NaN)` | `false` | `false` |\n * | `'2016-01-01'` | `TypeError` | `true` |\n * | `''` | `TypeError` | `false` |\n * | `1488370835081` | `TypeError` | `true` |\n * | `NaN` | `TypeError` | `false` |\n *\n * We introduce this change to make *date-fns* consistent with ECMAScript behavior\n * that try to coerce arguments to the expected type\n * (which is also the case with other *date-fns* functions).\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * var result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * var result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * var result = isValid(new Date(''))\n * //=> false\n */\nexport default function isValid(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n return !isNaN(date)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isWednesday\n * @category Weekday Helpers\n * @summary Is the given date Wednesday?\n *\n * @description\n * Is the given date Wednesday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Wednesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 24 September 2014 Wednesday?\n * var result = isWednesday(new Date(2014, 8, 24))\n * //=> true\n */\nexport default function isWednesday(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return toDate(dirtyDate).getDay() === 3\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isWeekend\n * @category Weekday Helpers\n * @summary Does the given date fall on a weekend?\n *\n * @description\n * Does the given date fall on a weekend?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date falls on a weekend\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Does 5 October 2014 fall on a weekend?\n * var result = isWeekend(new Date(2014, 9, 5))\n * //=> true\n */\nexport default function isWeekend(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var day = date.getDay()\n return day === 0 || day === 6\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isWithinInterval\n * @category Interval Helpers\n * @summary Is the given date within the interval?\n *\n * @description\n * Is the given date within the interval?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `isWithinRange` to `isWithinInterval`.\n * This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n * ```\n * 2.1.3\n * time interval\n * part of the time axis limited by two instants\n * ```\n *\n * Also, this function now accepts an object with `start` and `end` properties\n * instead of two arguments as an interval.\n * This function now throws `RangeError` if the start of the interval is after its end\n * or if any date in the interval is `Invalid Date`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * isWithinRange(\n * new Date(2014, 0, 3),\n * new Date(2014, 0, 1), new Date(2014, 0, 7)\n * )\n *\n * // v2.0.0 onward\n *\n * isWithinInterval(\n * new Date(2014, 0, 3),\n * { start: new Date(2014, 0, 1), end: new Date(2014, 0, 7) }\n * )\n * ```\n *\n * @param {Date|Number} date - the date to check\n * @param {Interval} interval - the interval to check\n * @returns {Boolean} the date is within the interval\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For the date within the interval:\n * isWithinInterval(new Date(2014, 0, 3), {\n * start: new Date(2014, 0, 1),\n * end: new Date(2014, 0, 7)\n * })\n * //=> true\n *\n * @example\n * // For the date outside of the interval:\n * isWithinInterval(new Date(2014, 0, 10), {\n * start: new Date(2014, 0, 1),\n * end: new Date(2014, 0, 7)\n * })\n * //=> false\n */\nexport default function isWithinInterval(dirtyDate, dirtyInterval) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var interval = dirtyInterval || {}\n var time = toDate(dirtyDate).getTime()\n var startTime = toDate(interval.start).getTime()\n var endTime = toDate(interval.end).getTime()\n\n // Throw an exception if start date is after end date or if any date is `Invalid Date`\n if (!(startTime <= endTime)) {\n throw new RangeError('Invalid interval')\n }\n\n return time >= startTime && time <= endTime\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfDecade\n * @category Decade Helpers\n * @summary Return the last day of a decade for the given date.\n *\n * @description\n * Return the last day of a decade for the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a decade for 21 December 2012 21:12:00:\n * var result = lastDayOfDecade(new Date(2012, 11, 21, 21, 12, 00))\n * //=> Wed Dec 31 2019 00:00:00\n */\nexport default function lastDayOfDecade(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n var decade = 9 + Math.floor(year / 10) * 10\n date.setFullYear(decade + 1, 0, 0)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import lastDayOfWeek from '../lastDayOfWeek/index.js'\n\n/**\n * @name lastDayOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the last day of an ISO week for the given date.\n *\n * @description\n * Return the last day of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of an ISO week for 2 September 2014 11:55:00:\n * var result = lastDayOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function lastDayOfISOWeek(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return lastDayOfWeek(dirtyDate, { weekStartsOn: 1 })\n}\n","import getISOWeekYear from '../getISOWeekYear/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\n/**\n * @name lastDayOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the last day of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the last day of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `lastDayOfISOYear` to `lastDayOfISOWeekYear`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `getWeekYear`.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of an ISO week-numbering year for 2 July 2005:\n * var result = lastDayOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Sun Jan 01 2006 00:00:00\n */\nexport default function lastDayOfISOWeekYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var year = getISOWeekYear(dirtyDate)\n var fourthOfJanuary = new Date(0)\n fourthOfJanuary.setFullYear(year + 1, 0, 4)\n fourthOfJanuary.setHours(0, 0, 0, 0)\n var date = startOfISOWeek(fourthOfJanuary)\n date.setDate(date.getDate() - 1)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfMonth\n * @category Month Helpers\n * @summary Return the last day of a month for the given date.\n *\n * @description\n * Return the last day of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a month for 2 September 2014 11:55:00:\n * var result = lastDayOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function lastDayOfMonth(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var month = date.getMonth()\n date.setFullYear(date.getFullYear(), month + 1, 0)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfQuarter\n * @category Quarter Helpers\n * @summary Return the last day of a year quarter for the given date.\n *\n * @description\n * Return the last day of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the last day of a quarter\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // The last day of a quarter for 2 September 2014 11:55:00:\n * var result = lastDayOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function lastDayOfQuarter(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var currentMonth = date.getMonth()\n var month = currentMonth - (currentMonth % 3) + 3\n date.setMonth(month, 0)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfWeek\n * @category Week Helpers\n * @summary Return the last day of a week for the given date.\n *\n * @description\n * Return the last day of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Date} the last day of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The last day of a week for 2 September 2014 11:55:00:\n * var result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the last day of the week for 2 September 2014 11:55:00:\n * var result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function lastDayOfWeek(dirtyDate, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeWeekStartsOn =\n locale && locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6')\n }\n\n var date = toDate(dirtyDate)\n var day = date.getDay()\n var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn)\n\n date.setHours(0, 0, 0, 0)\n date.setDate(date.getDate() + diff)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfYear\n * @category Year Helpers\n * @summary Return the last day of a year for the given date.\n *\n * @description\n * Return the last day of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a year for 2 September 2014 11:55:00:\n * var result = lastDayOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 00:00:00\n */\nexport default function lastDayOfYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n date.setFullYear(year + 1, 0, 0)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import toDate from '../toDate/index.js'\nimport formatters from '../_lib/format/lightFormatters/index.js'\nimport getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport isValid from '../isValid/index.js'\nimport subMilliseconds from '../subMilliseconds/index.js'\n\n// This RegExp consists of three parts separated by `|`:\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /(\\w)\\1*|''|'(''|[^'])+('|$)|./g\n\nvar escapedStringRegExp = /^'(.*?)'?$/\nvar doubleQuoteRegExp = /''/g\n\n/**\n * @name lightFormat\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. Unlike `format`,\n * `lightFormat` doesn't use locales and outputs date using the most popular tokens.\n *\n * > ⚠️ Please note that the `lightFormat` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples |\n * |---------------------------------|---------|-----------------------------------|\n * | AM, PM | a..aaa | AM, PM |\n * | | aaaa | a.m., p.m. |\n * | | aaaaa | a, p |\n * | Calendar year | y | 44, 1, 1900, 2017 |\n * | | yy | 44, 01, 00, 17 |\n * | | yyy | 044, 001, 000, 017 |\n * | | yyyy | 0044, 0001, 1900, 2017 |\n * | Month (formatting) | M | 1, 2, ..., 12 |\n * | | MM | 01, 02, ..., 12 |\n * | Day of month | d | 1, 2, ..., 31 |\n * | | dd | 01, 02, ..., 31 |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 |\n * | | hh | 01, 02, ..., 11, 12 |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 |\n * | | HH | 00, 01, 02, ..., 23 |\n * | Minute | m | 0, 1, ..., 59 |\n * | | mm | 00, 01, ..., 59 |\n * | Second | s | 0, 1, ..., 59 |\n * | | ss | 00, 01, ..., 59 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z |\n * | | XX | -0800, +0530, Z |\n * | | XXX | -08:00, +05:30, Z |\n * | | XXXX | -0800, +0530, Z, +123456 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 |\n * | | xx | -0800, +0530, +0000 |\n * | | xxx | -08:00, +05:30, +00:00 |\n * | | xxxx | -0800, +0530, +0000, +123456 |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 |\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * var result = format(new Date(2014, 1, 11), 'yyyy-MM-dd')\n * //=> '1987-02-11'\n */\nexport default function lightFormat(dirtyDate, dirtyFormatStr) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var formatStr = String(dirtyFormatStr)\n\n var originalDate = toDate(dirtyDate)\n\n if (!isValid(originalDate)) {\n throw new RangeError('Invalid time value')\n }\n\n // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate)\n var utcDate = subMilliseconds(originalDate, timezoneOffset)\n\n var result = formatStr\n .match(formattingTokensRegExp)\n .map(function(substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\"\n }\n\n var firstCharacter = substring[0]\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring)\n }\n\n var formatter = formatters[firstCharacter]\n if (formatter) {\n return formatter(utcDate, substring, null, {})\n }\n\n return substring\n })\n .join('')\n\n return result\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\")\n}\n","export default function buildFormatLongFn (args) {\n return function (dirtyOptions) {\n var options = dirtyOptions || {}\n var width = options.width ? String(options.width) : args.defaultWidth\n var format = args.formats[width] || args.formats[args.defaultWidth]\n return format\n }\n}\n","export default function buildLocalizeFn (args) {\n return function (dirtyIndex, dirtyOptions) {\n var options = dirtyOptions || {}\n var width = options.width ? String(options.width) : args.defaultWidth\n var context = options.context ? String(options.context) : 'standalone'\n\n var valuesArray\n if (context === 'formatting' && args.formattingValues) {\n valuesArray = args.formattingValues[width] || args.formattingValues[args.defaultFormattingWidth]\n } else {\n valuesArray = args.values[width] || args.values[args.defaultWidth]\n }\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex\n return valuesArray[index]\n }\n}\n","export default function buildMatchFn (args) {\n return function (dirtyString, dirtyOptions) {\n var string = String(dirtyString)\n var options = dirtyOptions || {}\n var width = options.width\n\n var matchPattern = (width && args.matchPatterns[width]) || args.matchPatterns[args.defaultMatchWidth]\n var matchResult = string.match(matchPattern)\n\n if (!matchResult) {\n return null\n }\n var matchedString = matchResult[0]\n\n var parsePatterns = (width && args.parsePatterns[width]) || args.parsePatterns[args.defaultParseWidth]\n\n var value\n if (Object.prototype.toString.call(parsePatterns) === '[object Array]') {\n value = parsePatterns.findIndex(function (pattern) {\n return pattern.test(string)\n })\n } else {\n value = findKey(parsePatterns, function (pattern) {\n return pattern.test(string)\n })\n }\n\n value = args.valueCallback ? args.valueCallback(value) : value\n value = options.valueCallback ? options.valueCallback(value) : value\n\n return {\n value: value,\n rest: string.slice(matchedString.length)\n }\n }\n}\n\nfunction findKey (object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key\n }\n }\n}\n","export default function buildMatchPatternFn (args) {\n return function (dirtyString, dirtyOptions) {\n var string = String(dirtyString)\n var options = dirtyOptions || {}\n\n var matchResult = string.match(args.matchPattern)\n if (!matchResult) {\n return null\n }\n var matchedString = matchResult[0]\n\n var parseResult = string.match(args.parsePattern)\n if (!parseResult) {\n return null\n }\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]\n value = options.valueCallback ? options.valueCallback(value) : value\n\n return {\n value: value,\n rest: string.slice(matchedString.length)\n }\n }\n}\n","var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n\n halfAMinute: 'half a minute',\n\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n}\n\nexport default function formatDistance (token, count, options) {\n options = options || {}\n\n var result\n if (typeof formatDistanceLocale[token] === 'string') {\n result = formatDistanceLocale[token]\n } else if (count === 1) {\n result = formatDistanceLocale[token].one\n } else {\n result = formatDistanceLocale[token].other.replace('{{count}}', count)\n }\n\n if (options.addSuffix) {\n if (options.comparison > 0) {\n return 'in ' + result\n } else {\n return result + ' ago'\n }\n }\n\n return result\n}\n","import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index.js'\n\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n long: 'MMMM do, y',\n medium: 'MMM d, y',\n short: 'MM/dd/yyyy'\n}\n\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n long: 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n short: 'h:mm a'\n}\n\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n}\n\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n}\n\nexport default formatLong\n","var formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n}\n\nexport default function formatRelative (token, date, baseDate, options) {\n return formatRelativeLocale[token]\n}\n","import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js'\n\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n}\n\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n}\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n}\n\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n}\n\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n}\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n}\n\nfunction ordinalNumber (dirtyNumber, dirtyOptions) {\n var number = Number(dirtyNumber)\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`:\n //\n // var options = dirtyOptions || {}\n // var unit = String(options.unit)\n //\n // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'\n\n var rem100 = number % 100\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st'\n case 2:\n return number + 'nd'\n case 3:\n return number + 'rd'\n }\n }\n return number + 'th'\n}\n\nvar localize = {\n ordinalNumber: ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function (quarter) {\n return Number(quarter) - 1\n }\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n}\n\nexport default localize\n","import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index.js'\nimport buildMatchFn from '../../../_lib/buildMatchFn/index.js'\n\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i\nvar parseOrdinalNumberPattern = /\\d+/i\n\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n}\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n}\n\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n}\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n}\n\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n}\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n}\n\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n}\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n}\n\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n}\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n}\n\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function (value) {\n return parseInt(value, 10)\n }\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function (index) {\n return index + 1\n }\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n}\n\nexport default match\n","import formatDistance from './_lib/formatDistance/index.js'\nimport formatLong from './_lib/formatLong/index.js'\nimport formatRelative from './_lib/formatRelative/index.js'\nimport localize from './_lib/localize/index.js'\nimport match from './_lib/match/index.js'\n\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1\n }\n}\n\nexport default locale\n","import toDate from '../toDate/index.js'\n\n/**\n * @name max\n * @category Common Helpers\n * @summary Return the latest of the given dates.\n *\n * @description\n * Return the latest of the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - `max` function now accepts an array of dates rather than spread arguments.\n *\n * ```javascript\n * // Before v2.0.0\n * var date1 = new Date(1989, 6, 10)\n * var date2 = new Date(1987, 1, 11)\n * var maxDate = max(date1, date2)\n *\n * // v2.0.0 onward:\n * var dates = [new Date(1989, 6, 10), new Date(1987, 1, 11)]\n * var maxDate = max(dates)\n * ```\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the latest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the latest?\n * var result = max([\n * new Date(1989, 6, 10),\n * new Date(1987, 1, 11),\n * new Date(1995, 6, 2),\n * new Date(1990, 0, 1)\n * ])\n * //=> Sun Jul 02 1995 00:00:00\n */\nexport default function max(dirtyDatesArray) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var datesArray\n // `dirtyDatesArray` is undefined or null\n if (dirtyDatesArray == null) {\n datesArray = []\n\n // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n } else if (typeof dirtyDatesArray.forEach === 'function') {\n datesArray = dirtyDatesArray\n\n // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n } else {\n datesArray = Array.prototype.slice.call(dirtyDatesArray)\n }\n\n var result\n datesArray.forEach(function(dirtyDate) {\n var currentDate = toDate(dirtyDate)\n\n if (result === undefined || result < currentDate || isNaN(currentDate)) {\n result = currentDate\n }\n })\n\n return result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name min\n * @category Common Helpers\n * @summary Return the earliest of the given dates.\n *\n * @description\n * Return the earliest of the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - `min` function now accepts an array of dates rather than spread arguments.\n *\n * ```javascript\n * // Before v2.0.0\n * var date1 = new Date(1989, 6, 10)\n * var date2 = new Date(1987, 1, 11)\n * var minDate = min(date1, date2)\n *\n * // v2.0.0 onward:\n * var dates = [new Date(1989, 6, 10), new Date(1987, 1, 11)]\n * var minDate = min(dates)\n * ```\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the earliest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the earliest?\n * var result = min([\n * new Date(1989, 6, 10),\n * new Date(1987, 1, 11),\n * new Date(1995, 6, 2),\n * new Date(1990, 0, 1)\n * ])\n * //=> Wed Feb 11 1987 00:00:00\n */\nexport default function min(dirtyDatesArray) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var datesArray\n // `dirtyDatesArray` is undefined or null\n if (dirtyDatesArray == null) {\n datesArray = []\n\n // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n } else if (typeof dirtyDatesArray.forEach === 'function') {\n datesArray = dirtyDatesArray\n\n // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n } else {\n datesArray = Array.prototype.slice.call(dirtyDatesArray)\n }\n\n var result\n datesArray.forEach(function(dirtyDate) {\n var currentDate = toDate(dirtyDate)\n\n if (result === undefined || result > currentDate || isNaN(currentDate)) {\n result = currentDate\n }\n })\n\n return result\n}\n","import getUTCWeekYear from '../../../_lib/getUTCWeekYear/index.js'\nimport setUTCDay from '../../../_lib/setUTCDay/index.js'\nimport setUTCWeek from '../../../_lib/setUTCWeek/index.js'\nimport startOfUTCWeek from '../../../_lib/startOfUTCWeek/index.js'\nimport setUTCISODay from '../../../_lib/setUTCISODay/index.js'\nimport setUTCISOWeek from '../../../_lib/setUTCISOWeek/index.js'\nimport startOfUTCISOWeek from '../../../_lib/startOfUTCISOWeek/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar MILLISECONDS_IN_SECOND = 1000\n\nvar numericPatterns = {\n month: /^(1[0-2]|0?\\d)/, // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/, // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/, // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/, // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/, // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/, // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/, // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/, // 0 to 12\n minute: /^[0-5]?\\d/, // 0 to 59\n second: /^[0-5]?\\d/, // 0 to 59\n\n singleDigit: /^\\d/, // 0 to 9\n twoDigits: /^\\d{1,2}/, // 0 to 99\n threeDigits: /^\\d{1,3}/, // 0 to 999\n fourDigits: /^\\d{1,4}/, // 0 to 9999\n\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/, // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/, // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/, // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n}\n\nvar timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n}\n\nfunction parseNumericPattern(pattern, string, valueCallback) {\n var matchResult = string.match(pattern)\n\n if (!matchResult) {\n return null\n }\n\n var value = parseInt(matchResult[0], 10)\n\n return {\n value: valueCallback ? valueCallback(value) : value,\n rest: string.slice(matchResult[0].length)\n }\n}\n\nfunction parseTimezonePattern(pattern, string) {\n var matchResult = string.match(pattern)\n\n if (!matchResult) {\n return null\n }\n\n // Input is 'Z'\n if (matchResult[0] === 'Z') {\n return {\n value: 0,\n rest: string.slice(1)\n }\n }\n\n var sign = matchResult[1] === '+' ? 1 : -1\n var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0\n var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0\n var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0\n\n return {\n value:\n sign *\n (hours * MILLISECONDS_IN_HOUR +\n minutes * MILLISECONDS_IN_MINUTE +\n seconds * MILLISECONDS_IN_SECOND),\n rest: string.slice(matchResult[0].length)\n }\n}\n\nfunction parseAnyDigitsSigned(string, valueCallback) {\n return parseNumericPattern(\n numericPatterns.anyDigitsSigned,\n string,\n valueCallback\n )\n}\n\nfunction parseNDigits(n, string, valueCallback) {\n switch (n) {\n case 1:\n return parseNumericPattern(\n numericPatterns.singleDigit,\n string,\n valueCallback\n )\n case 2:\n return parseNumericPattern(\n numericPatterns.twoDigits,\n string,\n valueCallback\n )\n case 3:\n return parseNumericPattern(\n numericPatterns.threeDigits,\n string,\n valueCallback\n )\n case 4:\n return parseNumericPattern(\n numericPatterns.fourDigits,\n string,\n valueCallback\n )\n default:\n return parseNumericPattern(\n new RegExp('^\\\\d{1,' + n + '}'),\n string,\n valueCallback\n )\n }\n}\n\nfunction parseNDigitsSigned(n, string, valueCallback) {\n switch (n) {\n case 1:\n return parseNumericPattern(\n numericPatterns.singleDigitSigned,\n string,\n valueCallback\n )\n case 2:\n return parseNumericPattern(\n numericPatterns.twoDigitsSigned,\n string,\n valueCallback\n )\n case 3:\n return parseNumericPattern(\n numericPatterns.threeDigitsSigned,\n string,\n valueCallback\n )\n case 4:\n return parseNumericPattern(\n numericPatterns.fourDigitsSigned,\n string,\n valueCallback\n )\n default:\n return parseNumericPattern(\n new RegExp('^-?\\\\d{1,' + n + '}'),\n string,\n valueCallback\n )\n }\n}\n\nfunction dayPeriodEnumToHours(enumValue) {\n switch (enumValue) {\n case 'morning':\n return 4\n case 'evening':\n return 17\n case 'pm':\n case 'noon':\n case 'afternoon':\n return 12\n case 'am':\n case 'midnight':\n case 'night':\n default:\n return 0\n }\n}\n\nfunction normalizeTwoDigitYear(twoDigitYear, currentYear) {\n var isCommonEra = currentYear > 0\n // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear\n\n var result\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100\n } else {\n var rangeEnd = absCurrentYear + 50\n var rangeEndCentury = Math.floor(rangeEnd / 100) * 100\n var isPreviousCentury = twoDigitYear >= rangeEnd % 100\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0)\n }\n\n return isCommonEra ? result : 1 - result\n}\n\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\n// User for validation\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)\n}\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O* | Timezone (GMT) |\n * | p | | P | |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n */\nvar parsers = {\n // Era\n G: {\n priority: 140,\n parse: function(string, token, match, options) {\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return (\n match.era(string, { width: 'abbreviated' }) ||\n match.era(string, { width: 'narrow' })\n )\n // A, B\n case 'GGGGG':\n return match.era(string, { width: 'narrow' })\n // Anno Domini, Before Christ\n case 'GGGG':\n default:\n return (\n match.era(string, { width: 'wide' }) ||\n match.era(string, { width: 'abbreviated' }) ||\n match.era(string, { width: 'narrow' })\n )\n }\n },\n set: function(date, flags, value, options) {\n // Sets year 10 BC if BC, or 10 AC if AC\n date.setUTCFullYear(value === 1 ? 10 : -9, 0, 1)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Year\n y: {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n priority: 130,\n parse: function(string, token, match, options) {\n var valueCallback = function(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'yy'\n }\n }\n\n switch (token) {\n case 'y':\n return parseNDigits(4, string, valueCallback)\n case 'yo':\n return match.ordinalNumber(string, {\n unit: 'year',\n valueCallback: valueCallback\n })\n default:\n return parseNDigits(token.length, string, valueCallback)\n }\n },\n validate: function(date, value, options) {\n return value.isTwoDigitYear || value.year > 0\n },\n set: function(date, flags, value, options) {\n var currentYear = getUTCWeekYear(date, options)\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear\n )\n date.setUTCFullYear(normalizedTwoDigitYear, 0, 1)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n\n var year = currentYear > 0 ? value.year : 1 - value.year\n date.setUTCFullYear(year, 0, 1)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Local week-numbering year\n Y: {\n priority: 130,\n parse: function(string, token, match, options) {\n var valueCallback = function(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'YY'\n }\n }\n\n switch (token) {\n case 'Y':\n return parseNDigits(4, string, valueCallback)\n case 'Yo':\n return match.ordinalNumber(string, {\n unit: 'year',\n valueCallback: valueCallback\n })\n default:\n return parseNDigits(token.length, string, valueCallback)\n }\n },\n validate: function(date, value, options) {\n return value.isTwoDigitYear || value.year > 0\n },\n set: function(date, flags, value, options) {\n var currentYear = date.getUTCFullYear()\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear\n )\n date.setUTCFullYear(\n normalizedTwoDigitYear,\n 0,\n options.firstWeekContainsDate\n )\n date.setUTCHours(0, 0, 0, 0)\n return startOfUTCWeek(date, options)\n }\n\n var year = currentYear > 0 ? value.year : 1 - value.year\n date.setUTCFullYear(year, 0, options.firstWeekContainsDate)\n date.setUTCHours(0, 0, 0, 0)\n return startOfUTCWeek(date, options)\n }\n },\n\n // ISO week-numbering year\n R: {\n priority: 130,\n parse: function(string, token, match, options) {\n if (token === 'R') {\n return parseNDigitsSigned(4, string)\n }\n\n return parseNDigitsSigned(token.length, string)\n },\n set: function(date, flags, value, options) {\n var firstWeekOfYear = new Date(0)\n firstWeekOfYear.setUTCFullYear(value, 0, 4)\n firstWeekOfYear.setUTCHours(0, 0, 0, 0)\n return startOfUTCISOWeek(firstWeekOfYear)\n }\n },\n\n // Extended year\n u: {\n priority: 130,\n parse: function(string, token, match, options) {\n if (token === 'u') {\n return parseNDigitsSigned(4, string)\n }\n\n return parseNDigitsSigned(token.length, string)\n },\n set: function(date, flags, value, options) {\n date.setUTCFullYear(value, 0, 1)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Quarter\n Q: {\n priority: 120,\n parse: function(string, token, match, options) {\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n case 'QQ': // 01, 02, 03, 04\n return parseNDigits(token.length, string)\n // 1st, 2nd, 3rd, 4th\n case 'Qo':\n return match.ordinalNumber(string, { unit: 'quarter' })\n // Q1, Q2, Q3, Q4\n case 'QQQ':\n return (\n match.quarter(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.quarter(string, { width: 'narrow', context: 'formatting' })\n )\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case 'QQQQQ':\n return match.quarter(string, {\n width: 'narrow',\n context: 'formatting'\n })\n // 1st quarter, 2nd quarter, ...\n case 'QQQQ':\n default:\n return (\n match.quarter(string, { width: 'wide', context: 'formatting' }) ||\n match.quarter(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.quarter(string, { width: 'narrow', context: 'formatting' })\n )\n }\n },\n validate: function(date, value, options) {\n return value >= 1 && value <= 4\n },\n set: function(date, flags, value, options) {\n date.setUTCMonth((value - 1) * 3, 1)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Stand-alone quarter\n q: {\n priority: 120,\n parse: function(string, token, match, options) {\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n case 'qq': // 01, 02, 03, 04\n return parseNDigits(token.length, string)\n // 1st, 2nd, 3rd, 4th\n case 'qo':\n return match.ordinalNumber(string, { unit: 'quarter' })\n // Q1, Q2, Q3, Q4\n case 'qqq':\n return (\n match.quarter(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) ||\n match.quarter(string, { width: 'narrow', context: 'standalone' })\n )\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case 'qqqqq':\n return match.quarter(string, {\n width: 'narrow',\n context: 'standalone'\n })\n // 1st quarter, 2nd quarter, ...\n case 'qqqq':\n default:\n return (\n match.quarter(string, { width: 'wide', context: 'standalone' }) ||\n match.quarter(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) ||\n match.quarter(string, { width: 'narrow', context: 'standalone' })\n )\n }\n },\n validate: function(date, value, options) {\n return value >= 1 && value <= 4\n },\n set: function(date, flags, value, options) {\n date.setUTCMonth((value - 1) * 3, 1)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Month\n M: {\n priority: 110,\n parse: function(string, token, match, options) {\n var valueCallback = function(value) {\n return value - 1\n }\n\n switch (token) {\n // 1, 2, ..., 12\n case 'M':\n return parseNumericPattern(\n numericPatterns.month,\n string,\n valueCallback\n )\n // 01, 02, ..., 12\n case 'MM':\n return parseNDigits(2, string, valueCallback)\n // 1st, 2nd, ..., 12th\n case 'Mo':\n return match.ordinalNumber(string, {\n unit: 'month',\n valueCallback: valueCallback\n })\n // Jan, Feb, ..., Dec\n case 'MMM':\n return (\n match.month(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.month(string, { width: 'narrow', context: 'formatting' })\n )\n // J, F, ..., D\n case 'MMMMM':\n return match.month(string, { width: 'narrow', context: 'formatting' })\n // January, February, ..., December\n case 'MMMM':\n default:\n return (\n match.month(string, { width: 'wide', context: 'formatting' }) ||\n match.month(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.month(string, { width: 'narrow', context: 'formatting' })\n )\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 11\n },\n set: function(date, flags, value, options) {\n date.setUTCMonth(value, 1)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Stand-alone month\n L: {\n priority: 110,\n parse: function(string, token, match, options) {\n var valueCallback = function(value) {\n return value - 1\n }\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return parseNumericPattern(\n numericPatterns.month,\n string,\n valueCallback\n )\n // 01, 02, ..., 12\n case 'LL':\n return parseNDigits(2, string, valueCallback)\n // 1st, 2nd, ..., 12th\n case 'Lo':\n return match.ordinalNumber(string, {\n unit: 'month',\n valueCallback: valueCallback\n })\n // Jan, Feb, ..., Dec\n case 'LLL':\n return (\n match.month(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) ||\n match.month(string, { width: 'narrow', context: 'standalone' })\n )\n // J, F, ..., D\n case 'LLLLL':\n return match.month(string, { width: 'narrow', context: 'standalone' })\n // January, February, ..., December\n case 'LLLL':\n default:\n return (\n match.month(string, { width: 'wide', context: 'standalone' }) ||\n match.month(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) ||\n match.month(string, { width: 'narrow', context: 'standalone' })\n )\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 11\n },\n set: function(date, flags, value, options) {\n date.setUTCMonth(value, 1)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Local week of year\n w: {\n priority: 100,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'w':\n return parseNumericPattern(numericPatterns.week, string)\n case 'wo':\n return match.ordinalNumber(string, { unit: 'week' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n return value >= 1 && value <= 53\n },\n set: function(date, flags, value, options) {\n return startOfUTCWeek(setUTCWeek(date, value, options), options)\n }\n },\n\n // ISO week of year\n I: {\n priority: 100,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'I':\n return parseNumericPattern(numericPatterns.week, string)\n case 'Io':\n return match.ordinalNumber(string, { unit: 'week' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n return value >= 1 && value <= 53\n },\n set: function(date, flags, value, options) {\n return startOfUTCISOWeek(setUTCISOWeek(date, value, options), options)\n }\n },\n\n // Day of the month\n d: {\n priority: 90,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'd':\n return parseNumericPattern(numericPatterns.date, string)\n case 'do':\n return match.ordinalNumber(string, { unit: 'date' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n var year = date.getUTCFullYear()\n var isLeapYear = isLeapYearIndex(year)\n var month = date.getUTCMonth()\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month]\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month]\n }\n },\n set: function(date, flags, value, options) {\n date.setUTCDate(value)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Day of year\n D: {\n priority: 90,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'D':\n case 'DD':\n return parseNumericPattern(numericPatterns.dayOfYear, string)\n case 'Do':\n return match.ordinalNumber(string, { unit: 'date' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n var year = date.getUTCFullYear()\n var isLeapYear = isLeapYearIndex(year)\n if (isLeapYear) {\n return value >= 1 && value <= 366\n } else {\n return value >= 1 && value <= 365\n }\n },\n set: function(date, flags, value, options) {\n date.setUTCMonth(0, value)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Day of week\n E: {\n priority: 90,\n parse: function(string, token, match, options) {\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return (\n match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.day(string, { width: 'short', context: 'formatting' }) ||\n match.day(string, { width: 'narrow', context: 'formatting' })\n )\n // T\n case 'EEEEE':\n return match.day(string, { width: 'narrow', context: 'formatting' })\n // Tu\n case 'EEEEEE':\n return (\n match.day(string, { width: 'short', context: 'formatting' }) ||\n match.day(string, { width: 'narrow', context: 'formatting' })\n )\n // Tuesday\n case 'EEEE':\n default:\n return (\n match.day(string, { width: 'wide', context: 'formatting' }) ||\n match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.day(string, { width: 'short', context: 'formatting' }) ||\n match.day(string, { width: 'narrow', context: 'formatting' })\n )\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 6\n },\n set: function(date, flags, value, options) {\n date = setUTCDay(date, value, options)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Local day of week\n e: {\n priority: 90,\n parse: function(string, token, match, options) {\n var valueCallback = function(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays\n }\n\n switch (token) {\n // 3\n case 'e':\n case 'ee': // 03\n return parseNDigits(token.length, string, valueCallback)\n // 3rd\n case 'eo':\n return match.ordinalNumber(string, {\n unit: 'day',\n valueCallback: valueCallback\n })\n // Tue\n case 'eee':\n return (\n match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.day(string, { width: 'short', context: 'formatting' }) ||\n match.day(string, { width: 'narrow', context: 'formatting' })\n )\n // T\n case 'eeeee':\n return match.day(string, { width: 'narrow', context: 'formatting' })\n // Tu\n case 'eeeeee':\n return (\n match.day(string, { width: 'short', context: 'formatting' }) ||\n match.day(string, { width: 'narrow', context: 'formatting' })\n )\n // Tuesday\n case 'eeee':\n default:\n return (\n match.day(string, { width: 'wide', context: 'formatting' }) ||\n match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.day(string, { width: 'short', context: 'formatting' }) ||\n match.day(string, { width: 'narrow', context: 'formatting' })\n )\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 6\n },\n set: function(date, flags, value, options) {\n date = setUTCDay(date, value, options)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Stand-alone local day of week\n c: {\n priority: 90,\n parse: function(string, token, match, options) {\n var valueCallback = function(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays\n }\n\n switch (token) {\n // 3\n case 'c':\n case 'cc': // 03\n return parseNDigits(token.length, string, valueCallback)\n // 3rd\n case 'co':\n return match.ordinalNumber(string, {\n unit: 'day',\n valueCallback: valueCallback\n })\n // Tue\n case 'ccc':\n return (\n match.day(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) ||\n match.day(string, { width: 'short', context: 'standalone' }) ||\n match.day(string, { width: 'narrow', context: 'standalone' })\n )\n // T\n case 'ccccc':\n return match.day(string, { width: 'narrow', context: 'standalone' })\n // Tu\n case 'cccccc':\n return (\n match.day(string, { width: 'short', context: 'standalone' }) ||\n match.day(string, { width: 'narrow', context: 'standalone' })\n )\n // Tuesday\n case 'cccc':\n default:\n return (\n match.day(string, { width: 'wide', context: 'standalone' }) ||\n match.day(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) ||\n match.day(string, { width: 'short', context: 'standalone' }) ||\n match.day(string, { width: 'narrow', context: 'standalone' })\n )\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 6\n },\n set: function(date, flags, value, options) {\n date = setUTCDay(date, value, options)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // ISO day of week\n i: {\n priority: 90,\n parse: function(string, token, match, options) {\n var valueCallback = function(value) {\n if (value === 0) {\n return 7\n }\n return value\n }\n\n switch (token) {\n // 2\n case 'i':\n case 'ii': // 02\n return parseNDigits(token.length, string)\n // 2nd\n case 'io':\n return match.ordinalNumber(string, { unit: 'day' })\n // Tue\n case 'iii':\n return (\n match.day(string, {\n width: 'abbreviated',\n context: 'formatting',\n valueCallback: valueCallback\n }) ||\n match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) ||\n match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n })\n )\n // T\n case 'iiiii':\n return match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n })\n // Tu\n case 'iiiiii':\n return (\n match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) ||\n match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n })\n )\n // Tuesday\n case 'iiii':\n default:\n return (\n match.day(string, {\n width: 'wide',\n context: 'formatting',\n valueCallback: valueCallback\n }) ||\n match.day(string, {\n width: 'abbreviated',\n context: 'formatting',\n valueCallback: valueCallback\n }) ||\n match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) ||\n match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n })\n )\n }\n },\n validate: function(date, value, options) {\n return value >= 1 && value <= 7\n },\n set: function(date, flags, value, options) {\n date = setUTCISODay(date, value, options)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // AM or PM\n a: {\n priority: 80,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return (\n match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n )\n case 'aaaaa':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n })\n case 'aaaa':\n default:\n return (\n match.dayPeriod(string, { width: 'wide', context: 'formatting' }) ||\n match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n )\n }\n },\n set: function(date, flags, value, options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0)\n return date\n }\n },\n\n // AM, PM, midnight\n b: {\n priority: 80,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return (\n match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n )\n case 'bbbbb':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n })\n case 'bbbb':\n default:\n return (\n match.dayPeriod(string, { width: 'wide', context: 'formatting' }) ||\n match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n )\n }\n },\n set: function(date, flags, value, options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0)\n return date\n }\n },\n\n // in the morning, in the afternoon, in the evening, at night\n B: {\n priority: 80,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return (\n match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n )\n case 'BBBBB':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n })\n case 'BBBB':\n default:\n return (\n match.dayPeriod(string, { width: 'wide', context: 'formatting' }) ||\n match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n )\n }\n },\n set: function(date, flags, value, options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0)\n return date\n }\n },\n\n // Hour [1-12]\n h: {\n priority: 70,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'h':\n return parseNumericPattern(numericPatterns.hour12h, string)\n case 'ho':\n return match.ordinalNumber(string, { unit: 'hour' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n return value >= 1 && value <= 12\n },\n set: function(date, flags, value, options) {\n var isPM = date.getUTCHours() >= 12\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0)\n } else if (!isPM && value === 12) {\n date.setUTCHours(0, 0, 0, 0)\n } else {\n date.setUTCHours(value, 0, 0, 0)\n }\n return date\n }\n },\n\n // Hour [0-23]\n H: {\n priority: 70,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'H':\n return parseNumericPattern(numericPatterns.hour23h, string)\n case 'Ho':\n return match.ordinalNumber(string, { unit: 'hour' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 23\n },\n set: function(date, flags, value, options) {\n date.setUTCHours(value, 0, 0, 0)\n return date\n }\n },\n\n // Hour [0-11]\n K: {\n priority: 70,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'K':\n return parseNumericPattern(numericPatterns.hour11h, string)\n case 'Ko':\n return match.ordinalNumber(string, { unit: 'hour' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 11\n },\n set: function(date, flags, value, options) {\n var isPM = date.getUTCHours() >= 12\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0)\n } else {\n date.setUTCHours(value, 0, 0, 0)\n }\n return date\n }\n },\n\n // Hour [1-24]\n k: {\n priority: 70,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'k':\n return parseNumericPattern(numericPatterns.hour24h, string)\n case 'ko':\n return match.ordinalNumber(string, { unit: 'hour' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n return value >= 1 && value <= 24\n },\n set: function(date, flags, value, options) {\n var hours = value <= 24 ? value % 24 : value\n date.setUTCHours(hours, 0, 0, 0)\n return date\n }\n },\n\n // Minute\n m: {\n priority: 60,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'm':\n return parseNumericPattern(numericPatterns.minute, string)\n case 'mo':\n return match.ordinalNumber(string, { unit: 'minute' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 59\n },\n set: function(date, flags, value, options) {\n date.setUTCMinutes(value, 0, 0)\n return date\n }\n },\n\n // Second\n s: {\n priority: 50,\n parse: function(string, token, match, options) {\n switch (token) {\n case 's':\n return parseNumericPattern(numericPatterns.second, string)\n case 'so':\n return match.ordinalNumber(string, { unit: 'second' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 59\n },\n set: function(date, flags, value, options) {\n date.setUTCSeconds(value, 0)\n return date\n }\n },\n\n // Fraction of second\n S: {\n priority: 30,\n parse: function(string, token, match, options) {\n var valueCallback = function(value) {\n return Math.floor(value * Math.pow(10, -token.length + 3))\n }\n return parseNDigits(token.length, string, valueCallback)\n },\n set: function(date, flags, value, options) {\n date.setUTCMilliseconds(value)\n return date\n }\n },\n\n // Timezone (ISO-8601. +00:00 is `'Z'`)\n X: {\n priority: 10,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'X':\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n string\n )\n case 'XX':\n return parseTimezonePattern(timezonePatterns.basic, string)\n case 'XXXX':\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n string\n )\n case 'XXXXX':\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n string\n )\n case 'XXX':\n default:\n return parseTimezonePattern(timezonePatterns.extended, string)\n }\n },\n set: function(date, flags, value, options) {\n if (flags.timestampIsSet) {\n return date\n }\n return new Date(date.getTime() - value)\n }\n },\n\n // Timezone (ISO-8601)\n x: {\n priority: 10,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'x':\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n string\n )\n case 'xx':\n return parseTimezonePattern(timezonePatterns.basic, string)\n case 'xxxx':\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n string\n )\n case 'xxxxx':\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n string\n )\n case 'xxx':\n default:\n return parseTimezonePattern(timezonePatterns.extended, string)\n }\n },\n set: function(date, flags, value, options) {\n if (flags.timestampIsSet) {\n return date\n }\n return new Date(date.getTime() - value)\n }\n },\n\n // Seconds timestamp\n t: {\n priority: 40,\n parse: function(string, token, match, options) {\n return parseAnyDigitsSigned(string)\n },\n set: function(date, flags, value, options) {\n return [new Date(value * 1000), { timestampIsSet: true }]\n }\n },\n\n // Milliseconds timestamp\n T: {\n priority: 20,\n parse: function(string, token, match, options) {\n return parseAnyDigitsSigned(string)\n },\n set: function(date, flags, value, options) {\n return [new Date(value), { timestampIsSet: true }]\n }\n }\n}\n\nexport default parsers\n","import toInteger from '../_lib/toInteger/index.js'\nimport assign from '../_lib/assign/index.js'\nimport getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport toDate from '../toDate/index.js'\nimport subMilliseconds from '../subMilliseconds/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\nimport parsers from './_lib/parsers/index.js'\nimport {\n isProtectedToken,\n throwProtectedError\n} from '../_lib/protectedTokens/index.js'\n\nvar TIMEZONE_UNIT_PRIORITY = 10\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g\n\nvar escapedStringRegExp = /^'(.*?)'?$/\nvar doubleQuoteRegExp = /''/g\n\nvar notWhitespaceRegExp = /\\S/\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 6 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 6 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Su | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Su | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Su | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Su | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 1, 2, ..., 11, 0 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 0001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `baseDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n *\n * 6. These tokens are often confused with others. See: https://git.io/fxCyr\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `baseDate` which works as a context of parsing.\n *\n * `baseDate` must be passed for correct work of the function.\n * If you're not sure which `baseDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `baseDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `baseDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Old `parse` was renamed to `toDate`.\n * Now `parse` is a new function which parses a string using a provided format.\n *\n * ```javascript\n * // Before v2.0.0\n * parse('2016-01-01')\n *\n * // v2.0.0 onward\n * toDate('2016-01-01')\n * parse('2016-01-01', 'yyyy-MM-dd', new Date())\n * ```\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} baseDate - defines values missing from the parsed dateString\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @param {Boolean} [options.awareOfUnicodeTokens=false] - if true, allows usage of Unicode tokens causes confusion:\n * - Some of the day of year tokens (`D`, `DD`) that are confused with the day of month tokens (`d`, `dd`).\n * - Some of the local week-numbering year tokens (`YY`, `YYYY`) that are confused with the calendar year tokens (`yy`, `yyyy`).\n * See: https://git.io/fxCyr\n * @returns {Date} the parsed date\n * @throws {TypeError} 3 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.locale` must contain `match` property\n * @throws {RangeError} `options.awareOfUnicodeTokens` must be set to `true` to use `XX` token; see: https://git.io/fxCyr\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport default function parse(\n dirtyDateString,\n dirtyFormatString,\n dirtyBaseDate,\n dirtyOptions\n) {\n if (arguments.length < 3) {\n throw new TypeError(\n '3 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateString = String(dirtyDateString)\n var formatString = String(dirtyFormatString)\n var options = dirtyOptions || {}\n\n var locale = options.locale || defaultLocale\n\n if (!locale.match) {\n throw new RangeError('locale must contain match property')\n }\n\n var localeFirstWeekContainsDate =\n locale.options && locale.options.firstWeekContainsDate\n var defaultFirstWeekContainsDate =\n localeFirstWeekContainsDate == null\n ? 1\n : toInteger(localeFirstWeekContainsDate)\n var firstWeekContainsDate =\n options.firstWeekContainsDate == null\n ? defaultFirstWeekContainsDate\n : toInteger(options.firstWeekContainsDate)\n\n // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError(\n 'firstWeekContainsDate must be between 1 and 7 inclusively'\n )\n }\n\n var localeWeekStartsOn = locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n }\n\n if (formatString === '') {\n if (dateString === '') {\n return toDate(dirtyBaseDate)\n } else {\n return new Date(NaN)\n }\n }\n\n var subFnOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale\n }\n\n // If timezone isn't specified, it will be set to the system timezone\n var setters = [\n {\n priority: TIMEZONE_UNIT_PRIORITY,\n set: dateToSystemTimezone,\n index: 0\n }\n ]\n\n var i\n\n var tokens = formatString.match(formattingTokensRegExp)\n\n for (i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (!options.awareOfUnicodeTokens && isProtectedToken(token)) {\n throwProtectedError(token)\n }\n\n var firstCharacter = token[0]\n var parser = parsers[firstCharacter]\n if (parser) {\n var parseResult = parser.parse(\n dateString,\n token,\n locale.match,\n subFnOptions\n )\n\n if (!parseResult) {\n return new Date(NaN)\n }\n\n setters.push({\n priority: parser.priority,\n set: parser.set,\n validate: parser.validate,\n value: parseResult.value,\n index: setters.length\n })\n\n dateString = parseResult.rest\n } else {\n // Replace two single quote characters with one single quote character\n if (token === \"''\") {\n token = \"'\"\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token)\n }\n\n // Cut token from string, or, if string doesn't match the token, return Invalid Date\n if (dateString.indexOf(token) === 0) {\n dateString = dateString.slice(token.length)\n } else {\n return new Date(NaN)\n }\n }\n }\n\n // Check if the remaining input contains something other than whitespace\n if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n return new Date(NaN)\n }\n\n var uniquePrioritySetters = setters\n .map(function(setter) {\n return setter.priority\n })\n .sort(function(a, b) {\n return b - a\n })\n .filter(function(priority, index, array) {\n return array.indexOf(priority) === index\n })\n .map(function(priority) {\n return setters\n .filter(function(setter) {\n return setter.priority === priority\n })\n .reverse()\n })\n .map(function(setterArray) {\n return setterArray[0]\n })\n\n var date = toDate(dirtyBaseDate)\n\n if (isNaN(date)) {\n return new Date(NaN)\n }\n\n // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/37\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date))\n\n var flags = {}\n for (i = 0; i < uniquePrioritySetters.length; i++) {\n var setter = uniquePrioritySetters[i]\n\n if (\n setter.validate &&\n !setter.validate(utcDate, setter.value, subFnOptions)\n ) {\n return new Date(NaN)\n }\n\n var result = setter.set(utcDate, flags, setter.value, subFnOptions)\n // Result is tuple (date, flags)\n if (result[0]) {\n utcDate = result[0]\n assign(flags, result[1])\n // Result is date\n } else {\n utcDate = result\n }\n }\n\n return utcDate\n}\n\nfunction dateToSystemTimezone(date, flags) {\n if (flags.timestampIsSet) {\n return date\n }\n\n var convertedDate = new Date(0)\n convertedDate.setFullYear(\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate()\n )\n convertedDate.setHours(\n date.getUTCHours(),\n date.getUTCMinutes(),\n date.getUTCSeconds(),\n date.getUTCMilliseconds()\n )\n return convertedDate\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\")\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar DEFAULT_ADDITIONAL_DIGITS = 2\n\nvar patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/\n}\n\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The previous `parse` implementation was renamed to `parseISO`.\n *\n * ```javascript\n * // Before v2.0.0\n * parse('2016-01-01')\n *\n * // v2.0.0 onward\n * parseISO('2016-01-01')\n * ```\n *\n * - `parseISO` now validates separate date and time values in ISO-8601 strings\n * and returns `Invalid Date` if the date is invalid.\n *\n * ```javascript\n * parseISO('2018-13-32')\n * //=> Invalid Date\n * ```\n *\n * - `parseISO` now doesn't fall back to `new Date` constructor\n * if it fails to parse a string argument. Instead, it returns `Invalid Date`.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * var result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport default function parseISO(argument, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n\n var additionalDigits =\n options.additionalDigits == null\n ? DEFAULT_ADDITIONAL_DIGITS\n : toInteger(options.additionalDigits)\n if (\n additionalDigits !== 2 &&\n additionalDigits !== 1 &&\n additionalDigits !== 0\n ) {\n throw new RangeError('additionalDigits must be 0, 1 or 2')\n }\n\n if (\n !(\n typeof argument === 'string' ||\n Object.prototype.toString.call(argument) === '[object String]'\n )\n ) {\n return new Date(NaN)\n }\n\n var dateStrings = splitDateString(argument)\n var parseYearResult = parseYear(dateStrings.date, additionalDigits)\n var date = parseDate(parseYearResult.restDateString, parseYearResult.year)\n\n if (isNaN(date) || !date) {\n return new Date(NaN)\n }\n\n var timestamp = date.getTime()\n var time = 0\n var offset\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time)\n if (isNaN(time)) {\n return new Date(NaN)\n }\n }\n\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone)\n if (isNaN(offset)) {\n return new Date(NaN)\n }\n } else {\n var fullTime = timestamp + time\n var fullTimeDate = new Date(fullTime)\n\n offset = getTimezoneOffsetInMilliseconds(fullTimeDate)\n\n // Adjust time when it's coming from DST\n var fullTimeDateNextDay = new Date(fullTime)\n fullTimeDateNextDay.setDate(fullTimeDate.getDate() + 1)\n var offsetDiff =\n getTimezoneOffsetInMilliseconds(fullTimeDateNextDay) - offset\n if (offsetDiff > 0) {\n offset += offsetDiff\n }\n }\n\n return new Date(timestamp + time + offset)\n}\n\nfunction splitDateString(dateString) {\n var dateStrings = {}\n var array = dateString.split(patterns.dateTimeDelimiter)\n var timeString\n\n if (/:/.test(array[0])) {\n dateStrings.date = null\n timeString = array[0]\n } else {\n dateStrings.date = array[0]\n timeString = array[1]\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0]\n timeString = dateString.substr(dateStrings.date.length, dateString.length)\n }\n }\n\n if (timeString) {\n var token = patterns.timezone.exec(timeString)\n if (token) {\n dateStrings.time = timeString.replace(token[1], '')\n dateStrings.timezone = token[1]\n } else {\n dateStrings.time = timeString\n }\n }\n\n return dateStrings\n}\n\nfunction parseYear(dateString, additionalDigits) {\n var regex = new RegExp(\n '^(?:(\\\\d{4}|[+-]\\\\d{' +\n (4 + additionalDigits) +\n '})|(\\\\d{2}|[+-]\\\\d{' +\n (2 + additionalDigits) +\n '})$)'\n )\n\n var captures = dateString.match(regex)\n // Invalid ISO-formatted year\n if (!captures) return { year: null }\n\n var year = captures[1] && parseInt(captures[1])\n var century = captures[2] && parseInt(captures[2])\n\n return {\n year: century == null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length)\n }\n}\n\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return null\n\n var captures = dateString.match(dateRegex)\n // Invalid ISO-formatted string\n if (!captures) return null\n\n var isWeekDate = !!captures[4]\n var dayOfYear = parseDateUnit(captures[1])\n var month = parseDateUnit(captures[2]) - 1\n var day = parseDateUnit(captures[3])\n var week = parseDateUnit(captures[4]) - 1\n var dayOfWeek = parseDateUnit(captures[5]) - 1\n\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN)\n }\n return dayOfISOWeekYear(year, week, dayOfWeek)\n } else {\n var date = new Date(0)\n if (\n !validateDate(year, month, day) ||\n !validateDayOfYearDate(year, dayOfYear)\n ) {\n return new Date(NaN)\n }\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day))\n return date\n }\n}\n\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1\n}\n\nfunction parseTime(timeString) {\n var captures = timeString.match(timeRegex)\n if (!captures) return null // Invalid ISO-formatted time\n\n var hours = parseTimeUnit(captures[1])\n var minutes = parseTimeUnit(captures[2])\n var seconds = parseTimeUnit(captures[3])\n\n if (!validateTime(hours, minutes, seconds)) {\n return NaN\n }\n\n return (\n (hours % 24) * MILLISECONDS_IN_HOUR +\n minutes * MILLISECONDS_IN_MINUTE +\n seconds * 1000\n )\n}\n\nfunction parseTimeUnit(value) {\n return (value && parseFloat(value.replace(',', '.'))) || 0\n}\n\nfunction parseTimezone(timezoneString) {\n if (timezoneString === 'Z') return 0\n\n var captures = timezoneString.match(timezoneRegex)\n if (!captures) return 0\n\n var sign = captures[1] === '+' ? -1 : 1\n var hours = parseInt(captures[2])\n var minutes = (captures[3] && parseInt(captures[3])) || 0\n\n if (!validateTimezone(hours, minutes)) {\n return NaN\n }\n\n return (\n sign * (hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE)\n )\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n var date = new Date(0)\n date.setUTCFullYear(isoWeekYear, 0, 4)\n var fourthOfJanuaryDay = date.getUTCDay() || 7\n var diff = (week || 0) * 7 + (day || 0) + 1 - fourthOfJanuaryDay\n date.setUTCDate(date.getUTCDate() + diff)\n return date\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nvar daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100)\n}\n\nfunction validateDate(year, month, date) {\n return !(\n month < 0 ||\n month > 11 ||\n date < 1 ||\n date > (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n )\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n return !(dayOfYear < 1 || dayOfYear > (isLeapYearIndex(year) ? 366 : 365))\n}\n\nfunction validateWeekDate(_year, week, day) {\n return !(week < 0 || week > 52 || day < 0 || day > 6)\n}\n\nfunction validateTime(hours, minutes, seconds) {\n return !(\n seconds < 0 ||\n seconds >= 60 ||\n minutes < 0 ||\n minutes >= 60 ||\n hours < 0 ||\n hours >= 25\n )\n}\n\nfunction validateTimezone(_hours, minutes) {\n return !(minutes < 0 || minutes > 59)\n}\n","import toDate from '../toDate/index.js'\nimport toInteger from '../_lib/toInteger/index.js'\n\n/**\n * @name roundToNearestMinutes\n * @category Minute Helpers\n * @summary Rounds the given date to the nearest minute\n *\n * @description\n * Rounds the given date to the nearest minute\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to round\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.nearestTo=1] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the new date rounded to the closest minute\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.nearestTo` must be between 1 and 30\n *\n * @example\n * // Round 10 July 2014 12:12:34 to nearest minute:\n * var result = roundToNearestMinutes(new Date(2014, 6, 10, 12, 12, 34))\n * //=> Thu Jul 10 2014 12:13:00\n */\nexport default function roundToNearestMinutes(dirtyDate, options) {\n if (arguments.length < 1) {\n throw new TypeError('1 argument required, but only none provided present')\n }\n\n var nearestTo =\n options && 'nearestTo' in options ? toInteger(options.nearestTo) : 1\n\n if (nearestTo < 1 || nearestTo > 30) {\n throw new RangeError('`options.nearestTo` must be between 1 and 30')\n }\n\n var date = toDate(dirtyDate)\n var seconds = date.getSeconds() // relevant if nearestTo is 1, which is the default case\n var minutes = date.getMinutes() + seconds / 60\n var roundedMinutes = Math.floor(minutes / nearestTo) * nearestTo\n var remainderMinutes = minutes % nearestTo\n var addedMinutes = Math.round(remainderMinutes / nearestTo) * nearestTo\n\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n roundedMinutes + addedMinutes\n )\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setDate\n * @category Day Helpers\n * @summary Set the day of the month to the given date.\n *\n * @description\n * Set the day of the month to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} dayOfMonth - the day of the month of the new date\n * @returns {Date} the new date with the day of the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 30th day of the month to 1 September 2014:\n * var result = setDate(new Date(2014, 8, 1), 30)\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function setDate(dirtyDate, dirtyDayOfMonth) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var dayOfMonth = toInteger(dirtyDayOfMonth)\n date.setDate(dayOfMonth)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport addDays from '../addDays/index.js'\n\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} day - the day of the week of the new date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Date} the new date with the day of the week set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * var result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If week starts with Monday, set Sunday to 1 September 2014:\n * var result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function setDay(dirtyDate, dirtyDay, dirtyOptions) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeWeekStartsOn =\n locale && locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n }\n\n var date = toDate(dirtyDate, options)\n var day = toInteger(dirtyDay)\n var currentDay = date.getDay()\n\n var remainder = day % 7\n var dayIndex = (remainder + 7) % 7\n\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay\n return addDays(date, diff, options)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setDayOfYear\n * @category Day Helpers\n * @summary Set the day of the year to the given date.\n *\n * @description\n * Set the day of the year to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} dayOfYear - the day of the year of the new date\n * @returns {Date} the new date with the day of the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 2nd day of the year to 2 July 2014:\n * var result = setDayOfYear(new Date(2014, 6, 2), 2)\n * //=> Thu Jan 02 2014 00:00:00\n */\nexport default function setDayOfYear(dirtyDate, dirtyDayOfYear) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var dayOfYear = toInteger(dirtyDayOfYear)\n date.setMonth(0)\n date.setDate(dayOfYear)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * var result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\nexport default function setHours(dirtyDate, dirtyHours) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var hours = toInteger(dirtyHours)\n date.setHours(hours)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport addDays from '../addDays/index.js'\nimport getISODay from '../getISODay/index.js'\n\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday etc.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} day - the day of the ISO week of the new date\n * @returns {Date} the new date with the day of the ISO week set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * var result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function setISODay(dirtyDate, dirtyDay) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var day = toInteger(dirtyDay)\n var currentDay = getISODay(date)\n var diff = day - currentDay\n return addDays(date, diff)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport getISOWeek from '../getISOWeek/index.js'\n\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} isoWeek - the ISO week of the new date\n * @returns {Date} the new date with the ISO week set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * var result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport default function setISOWeek(dirtyDate, dirtyISOWeek) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var isoWeek = toInteger(dirtyISOWeek)\n var diff = getISOWeek(date) - isoWeek\n date.setDate(date.getDate() - diff * 7)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport startOfISOWeekYear from '../startOfISOWeekYear/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\n\n/**\n * @name setISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Set the ISO week-numbering year to the given date.\n *\n * @description\n * Set the ISO week-numbering year to the given date,\n * saving the week number and the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `setISOYear` to `setISOWeekYear`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `setWeekYear`.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} isoWeekYear - the ISO week-numbering year of the new date\n * @returns {Date} the new date with the ISO week-numbering year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set ISO week-numbering year 2007 to 29 December 2008:\n * var result = setISOWeekYear(new Date(2008, 11, 29), 2007)\n * //=> Mon Jan 01 2007 00:00:00\n */\nexport default function setISOWeekYear(dirtyDate, dirtyISOWeekYear) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var isoWeekYear = toInteger(dirtyISOWeekYear)\n var diff = differenceInCalendarDays(date, startOfISOWeekYear(date))\n var fourthOfJanuary = new Date(0)\n fourthOfJanuary.setFullYear(isoWeekYear, 0, 4)\n fourthOfJanuary.setHours(0, 0, 0, 0)\n date = startOfISOWeekYear(fourthOfJanuary)\n date.setDate(date.getDate() + diff)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setMilliseconds\n * @category Millisecond Helpers\n * @summary Set the milliseconds to the given date.\n *\n * @description\n * Set the milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} milliseconds - the milliseconds of the new date\n * @returns {Date} the new date with the milliseconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 300 milliseconds to 1 September 2014 11:30:40.500:\n * var result = setMilliseconds(new Date(2014, 8, 1, 11, 30, 40, 500), 300)\n * //=> Mon Sep 01 2014 11:30:40.300\n */\nexport default function setMilliseconds(dirtyDate, dirtyMilliseconds) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var milliseconds = toInteger(dirtyMilliseconds)\n date.setMilliseconds(milliseconds)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setMinutes\n * @category Minute Helpers\n * @summary Set the minutes to the given date.\n *\n * @description\n * Set the minutes to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} minutes - the minutes of the new date\n * @returns {Date} the new date with the minutes set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 minutes to 1 September 2014 11:30:40:\n * var result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:45:40\n */\nexport default function setMinutes(dirtyDate, dirtyMinutes) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var minutes = toInteger(dirtyMinutes)\n date.setMinutes(minutes)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport getDaysInMonth from '../getDaysInMonth/index.js'\n\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} month - the month of the new date\n * @returns {Date} the new date with the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set February to 1 September 2014:\n * var result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\nexport default function setMonth(dirtyDate, dirtyMonth) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var month = toInteger(dirtyMonth)\n var year = date.getFullYear()\n var day = date.getDate()\n\n var dateWithDesiredMonth = new Date(0)\n dateWithDesiredMonth.setFullYear(year, month, 15)\n dateWithDesiredMonth.setHours(0, 0, 0, 0)\n var daysInMonth = getDaysInMonth(dateWithDesiredMonth)\n // Set the last day of the new month\n // if the original date was the last day of the longer month\n date.setMonth(month, Math.min(day, daysInMonth))\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport setMonth from '../setMonth/index.js'\n\n/**\n * @name setQuarter\n * @category Quarter Helpers\n * @summary Set the year quarter to the given date.\n *\n * @description\n * Set the year quarter to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} quarter - the quarter of the new date\n * @returns {Date} the new date with the quarter set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 2nd quarter to 2 July 2014:\n * var result = setQuarter(new Date(2014, 6, 2), 2)\n * //=> Wed Apr 02 2014 00:00:00\n */\nexport default function setQuarter(dirtyDate, dirtyQuarter) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var quarter = toInteger(dirtyQuarter)\n var oldQuarter = Math.floor(date.getMonth() / 3) + 1\n var diff = quarter - oldQuarter\n return setMonth(date, date.getMonth() + diff * 3)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setSeconds\n * @category Second Helpers\n * @summary Set the seconds to the given date.\n *\n * @description\n * Set the seconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} seconds - the seconds of the new date\n * @returns {Date} the new date with the seconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 seconds to 1 September 2014 11:30:40:\n * var result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:30:45\n */\nexport default function setSeconds(dirtyDate, dirtySeconds) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var seconds = toInteger(dirtySeconds)\n date.setSeconds(seconds)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport getWeek from '../getWeek/index.js'\n\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} week - the week of the new date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the new date with the local week set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * var result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * var result = setWeek(new Date(2005, 0, 2), 1, {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport default function setWeek(dirtyDate, dirtyWeek, dirtyOptions) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var week = toInteger(dirtyWeek)\n var diff = getWeek(date, dirtyOptions) - week\n date.setDate(date.getDate() - diff * 7)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport startOfWeekYear from '../startOfWeekYear/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\n\n/**\n * @name setWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Set the local week-numbering year to the given date.\n *\n * @description\n * Set the local week-numbering year to the given date,\n * saving the week number and the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} weekYear - the local week-numbering year of the new date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the new date with the local week-numbering year set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Set the local week-numbering year 2004 to 2 January 2010 with default options:\n * var result = setWeekYear(new Date(2010, 0, 2), 2004)\n * //=> Sat Jan 03 2004 00:00:00\n *\n * @example\n * // Set the local week-numbering year 2004 to 2 January 2010,\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * var result = setWeekYear(new Date(2010, 0, 2), 2004, {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport default function setWeekYear(dirtyDate, dirtyWeekYear, dirtyOptions) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeFirstWeekContainsDate =\n locale && locale.options && locale.options.firstWeekContainsDate\n var defaultFirstWeekContainsDate =\n localeFirstWeekContainsDate == null\n ? 1\n : toInteger(localeFirstWeekContainsDate)\n var firstWeekContainsDate =\n options.firstWeekContainsDate == null\n ? defaultFirstWeekContainsDate\n : toInteger(options.firstWeekContainsDate)\n\n var date = toDate(dirtyDate)\n var weekYear = toInteger(dirtyWeekYear)\n var diff = differenceInCalendarDays(date, startOfWeekYear(date, dirtyOptions))\n var firstWeek = new Date(0)\n firstWeek.setFullYear(weekYear, 0, firstWeekContainsDate)\n firstWeek.setHours(0, 0, 0, 0)\n date = startOfWeekYear(firstWeek, dirtyOptions)\n date.setDate(date.getDate() + diff)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} year - the year of the new date\n * @returns {Date} the new date with the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * var result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\nexport default function setYear(dirtyDate, dirtyYear) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = toInteger(dirtyYear)\n\n // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n if (isNaN(date)) {\n return new Date(NaN)\n }\n\n date.setFullYear(year)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * var result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport default function startOfDay(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfDecade\n * @category Decade Helpers\n * @summary Return the start of a decade for the given date.\n *\n * @description\n * Return the start of a decade for the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a decade for 21 October 2015 00:00:00:\n * var result = startOfDecade(new Date(2015, 9, 21, 00, 00, 00))\n * //=> Jan 01 2010 00:00:00\n */\nexport default function startOfDecade(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n var decade = Math.floor(year / 10) * 10\n date.setFullYear(decade, 0, 1)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfHour\n * @category Hour Helpers\n * @summary Return the start of an hour for the given date.\n *\n * @description\n * Return the start of an hour for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an hour for 2 September 2014 11:55:00:\n * var result = startOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:00:00\n */\nexport default function startOfHour(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setMinutes(0, 0, 0)\n return date\n}\n","import startOfWeek from '../startOfWeek/index.js'\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * var result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfISOWeek(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return startOfWeek(dirtyDate, { weekStartsOn: 1 })\n}\n","import getISOWeekYear from '../getISOWeekYear/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * var result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport default function startOfISOWeekYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var year = getISOWeekYear(dirtyDate)\n var fourthOfJanuary = new Date(0)\n fourthOfJanuary.setFullYear(year, 0, 4)\n fourthOfJanuary.setHours(0, 0, 0, 0)\n var date = startOfISOWeek(fourthOfJanuary)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfMinute\n * @category Minute Helpers\n * @summary Return the start of a minute for the given date.\n *\n * @description\n * Return the start of a minute for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a minute\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a minute for 1 December 2014 22:15:45.400:\n * var result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:00\n */\nexport default function startOfMinute(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setSeconds(0, 0)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * var result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfMonth(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setDate(1)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfQuarter\n * @category Quarter Helpers\n * @summary Return the start of a year quarter for the given date.\n *\n * @description\n * Return the start of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a quarter for 2 September 2014 11:55:00:\n * var result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Jul 01 2014 00:00:00\n */\nexport default function startOfQuarter(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var currentMonth = date.getMonth()\n var month = currentMonth - (currentMonth % 3)\n date.setMonth(month, 1)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfSecond\n * @category Second Helpers\n * @summary Return the start of a second for the given date.\n *\n * @description\n * Return the start of a second for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a second for 1 December 2014 22:15:45.400:\n * var result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.000\n */\nexport default function startOfSecond(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setMilliseconds(0)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfWeek(dirtyDate, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeWeekStartsOn =\n locale && locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n }\n\n var date = toDate(dirtyDate)\n var day = date.getDay()\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn\n\n date.setDate(date.getDate() - diff)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getWeekYear from '../getWeekYear/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the start of a week-numbering year\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * var result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * var result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport default function startOfWeekYear(dirtyDate, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeFirstWeekContainsDate =\n locale && locale.options && locale.options.firstWeekContainsDate\n var defaultFirstWeekContainsDate =\n localeFirstWeekContainsDate == null\n ? 1\n : toInteger(localeFirstWeekContainsDate)\n var firstWeekContainsDate =\n options.firstWeekContainsDate == null\n ? defaultFirstWeekContainsDate\n : toInteger(options.firstWeekContainsDate)\n\n var year = getWeekYear(dirtyDate, dirtyOptions)\n var firstWeek = new Date(0)\n firstWeek.setFullYear(year, 0, firstWeekContainsDate)\n firstWeek.setHours(0, 0, 0, 0)\n var date = startOfWeek(firstWeek, dirtyOptions)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * var result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport default function startOfYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var cleanDate = toDate(dirtyDate)\n var date = new Date(0)\n date.setFullYear(cleanDate.getFullYear(), 0, 1)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addDays from '../addDays/index.js'\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be subtracted\n * @returns {Date} the new date with the days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * var result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport default function subDays(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addDays(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addHours from '../addHours/index.js'\n\n/**\n * @name subHours\n * @category Hour Helpers\n * @summary Subtract the specified number of hours from the given date.\n *\n * @description\n * Subtract the specified number of hours from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be subtracted\n * @returns {Date} the new date with the hours subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 2 hours from 11 July 2014 01:00:00:\n * var result = subHours(new Date(2014, 6, 11, 1, 0), 2)\n * //=> Thu Jul 10 2014 23:00:00\n */\nexport default function subHours(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addHours(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addISOWeekYears from '../addISOWeekYears/index.js'\n\n/**\n * @name subISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Subtract the specified number of ISO week-numbering years from the given date.\n *\n * @description\n * Subtract the specified number of ISO week-numbering years from the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `subISOYears` to `subISOWeekYears`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `setWeekYear`.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of ISO week-numbering years to be subtracted\n * @returns {Date} the new date with the ISO week-numbering years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 ISO week-numbering years from 1 September 2014:\n * var result = subISOWeekYears(new Date(2014, 8, 1), 5)\n * //=> Mon Aug 31 2009 00:00:00\n */\nexport default function subISOWeekYears(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addISOWeekYears(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMilliseconds from '../addMilliseconds/index.js'\n\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * var result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addMilliseconds(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMinutes from '../addMinutes/index.js'\n\n/**\n * @name subMinutes\n * @category Minute Helpers\n * @summary Subtract the specified number of minutes from the given date.\n *\n * @description\n * Subtract the specified number of minutes from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be subtracted\n * @returns {Date} the new date with the minutes subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 30 minutes from 10 July 2014 12:00:00:\n * var result = subMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 11:30:00\n */\nexport default function subMinutes(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addMinutes(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMonths from '../addMonths/index.js'\n\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be subtracted\n * @returns {Date} the new date with the months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * var result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function subMonths(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addMonths(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addQuarters from '../addQuarters/index.js'\n\n/**\n * @name subQuarters\n * @category Quarter Helpers\n * @summary Subtract the specified number of year quarters from the given date.\n *\n * @description\n * Subtract the specified number of year quarters from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of quarters to be subtracted\n * @returns {Date} the new date with the quarters subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 3 quarters from 1 September 2014:\n * var result = subQuarters(new Date(2014, 8, 1), 3)\n * //=> Sun Dec 01 2013 00:00:00\n */\nexport default function subQuarters(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addQuarters(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addSeconds from '../addSeconds/index.js'\n\n/**\n * @name subSeconds\n * @category Second Helpers\n * @summary Subtract the specified number of seconds from the given date.\n *\n * @description\n * Subtract the specified number of seconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be subtracted\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 30 seconds from 10 July 2014 12:45:00:\n * var result = subSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:44:30\n */\nexport default function subSeconds(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addSeconds(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addWeeks from '../addWeeks/index.js'\n\n/**\n * @name subWeeks\n * @category Week Helpers\n * @summary Subtract the specified number of weeks from the given date.\n *\n * @description\n * Subtract the specified number of weeks from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be subtracted\n * @returns {Date} the new date with the weeks subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 4 weeks from 1 September 2014:\n * var result = subWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Aug 04 2014 00:00:00\n */\nexport default function subWeeks(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addWeeks(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addYears from '../addYears/index.js'\n\n/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be subtracted\n * @returns {Date} the new date with the years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * var result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\nexport default function subYears(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addYears(dirtyDate, -amount)\n}\n","/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * var result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * var result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport default function toDate(argument) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var argStr = Object.prototype.toString.call(argument)\n\n // Clone the date\n if (\n argument instanceof Date ||\n (typeof argument === 'object' && argStr === '[object Date]')\n ) {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime())\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument)\n } else {\n if (\n (typeof argument === 'string' || argStr === '[object String]') &&\n typeof console !== 'undefined'\n ) {\n console.warn(\n \"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fpAk2\"\n )\n console.warn(new Error().stack)\n }\n return new Date(NaN)\n }\n}\n","'use strict';\n\nvar objectKeys = require('object-keys');\nvar isArguments = require('is-arguments');\nvar is = require('object-is');\nvar isRegex = require('is-regex');\nvar flags = require('regexp.prototype.flags');\nvar isArray = require('isarray');\nvar isDate = require('is-date-object');\nvar whichBoxedPrimitive = require('which-boxed-primitive');\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\nvar whichCollection = require('which-collection');\nvar getIterator = require('es-get-iterator');\nvar getSideChannel = require('side-channel');\nvar whichTypedArray = require('which-typed-array');\nvar assign = require('object.assign');\n\nvar $getTime = callBound('Date.prototype.getTime');\nvar gPO = Object.getPrototypeOf;\nvar $objToString = callBound('Object.prototype.toString');\n\nvar $Set = GetIntrinsic('%Set%', true);\nvar $mapHas = callBound('Map.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSize = callBound('Map.prototype.size', true);\nvar $setAdd = callBound('Set.prototype.add', true);\nvar $setDelete = callBound('Set.prototype.delete', true);\nvar $setHas = callBound('Set.prototype.has', true);\nvar $setSize = callBound('Set.prototype.size', true);\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L401-L414\nfunction setHasEqualElement(set, val1, opts, channel) {\n var i = getIterator(set);\n var result;\n while ((result = i.next()) && !result.done) {\n if (internalDeepEqual(val1, result.value, opts, channel)) { // eslint-disable-line no-use-before-define\n // Remove the matching element to make sure we do not check that again.\n $setDelete(set, result.value);\n return true;\n }\n }\n\n return false;\n}\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L416-L439\nfunction findLooseMatchingPrimitives(prim) {\n if (typeof prim === 'undefined') {\n return null;\n }\n if (typeof prim === 'object') { // Only pass in null as object!\n return void 0;\n }\n if (typeof prim === 'symbol') {\n return false;\n }\n if (typeof prim === 'string' || typeof prim === 'number') {\n // Loose equal entries exist only if the string is possible to convert to a regular number and not NaN.\n return +prim === +prim; // eslint-disable-line no-implicit-coercion\n }\n return true;\n}\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L449-L460\nfunction mapMightHaveLoosePrim(a, b, prim, item, opts, channel) {\n var altValue = findLooseMatchingPrimitives(prim);\n if (altValue != null) {\n return altValue;\n }\n var curB = $mapGet(b, altValue);\n var looseOpts = assign({}, opts, { strict: false });\n if (\n (typeof curB === 'undefined' && !$mapHas(b, altValue))\n // eslint-disable-next-line no-use-before-define\n || !internalDeepEqual(item, curB, looseOpts, channel)\n ) {\n return false;\n }\n // eslint-disable-next-line no-use-before-define\n return !$mapHas(a, altValue) && internalDeepEqual(item, curB, looseOpts, channel);\n}\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L441-L447\nfunction setMightHaveLoosePrim(a, b, prim) {\n var altValue = findLooseMatchingPrimitives(prim);\n if (altValue != null) {\n return altValue;\n }\n\n return $setHas(b, altValue) && !$setHas(a, altValue);\n}\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L518-L533\nfunction mapHasEqualEntry(set, map, key1, item1, opts, channel) {\n var i = getIterator(set);\n var result;\n var key2;\n while ((result = i.next()) && !result.done) {\n key2 = result.value;\n if (\n // eslint-disable-next-line no-use-before-define\n internalDeepEqual(key1, key2, opts, channel)\n // eslint-disable-next-line no-use-before-define\n && internalDeepEqual(item1, $mapGet(map, key2), opts, channel)\n ) {\n $setDelete(set, key2);\n return true;\n }\n }\n\n return false;\n}\n\nfunction internalDeepEqual(actual, expected, options, channel) {\n var opts = options || {};\n\n // 7.1. All identical values are equivalent, as determined by ===.\n if (opts.strict ? is(actual, expected) : actual === expected) {\n return true;\n }\n\n var actualBoxed = whichBoxedPrimitive(actual);\n var expectedBoxed = whichBoxedPrimitive(expected);\n if (actualBoxed !== expectedBoxed) {\n return false;\n }\n\n // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.\n if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {\n return opts.strict ? is(actual, expected) : actual == expected; // eslint-disable-line eqeqeq\n }\n\n /*\n * 7.4. For all other Object pairs, including Array objects, equivalence is\n * determined by having the same number of owned properties (as verified\n * with Object.prototype.hasOwnProperty.call), the same set of keys\n * (although not necessarily the same order), equivalent values for every\n * corresponding key, and an identical 'prototype' property. Note: this\n * accounts for both named and indexed properties on Arrays.\n */\n // see https://github.com/nodejs/node/commit/d3aafd02efd3a403d646a3044adcf14e63a88d32 for memos/channel inspiration\n\n var hasActual = channel.has(actual);\n var hasExpected = channel.has(expected);\n var sentinel;\n if (hasActual && hasExpected) {\n if (channel.get(actual) === channel.get(expected)) {\n return true;\n }\n } else {\n sentinel = {};\n }\n if (!hasActual) { channel.set(actual, sentinel); }\n if (!hasExpected) { channel.set(expected, sentinel); }\n\n // eslint-disable-next-line no-use-before-define\n return objEquiv(actual, expected, opts, channel);\n}\n\nfunction isBuffer(x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') {\n return false;\n }\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') {\n return false;\n }\n\n return !!(x.constructor && x.constructor.isBuffer && x.constructor.isBuffer(x));\n}\n\nfunction setEquiv(a, b, opts, channel) {\n if ($setSize(a) !== $setSize(b)) {\n return false;\n }\n var iA = getIterator(a);\n var iB = getIterator(b);\n var resultA;\n var resultB;\n var set;\n while ((resultA = iA.next()) && !resultA.done) {\n if (resultA.value && typeof resultA.value === 'object') {\n if (!set) { set = new $Set(); }\n $setAdd(set, resultA.value);\n } else if (!$setHas(b, resultA.value)) {\n if (opts.strict) { return false; }\n if (!setMightHaveLoosePrim(a, b, resultA.value)) {\n return false;\n }\n if (!set) { set = new $Set(); }\n $setAdd(set, resultA.value);\n }\n }\n if (set) {\n while ((resultB = iB.next()) && !resultB.done) {\n // We have to check if a primitive value is already matching and only if it's not, go hunting for it.\n if (resultB.value && typeof resultB.value === 'object') {\n if (!setHasEqualElement(set, resultB.value, opts.strict, channel)) {\n return false;\n }\n } else if (\n !opts.strict\n && !$setHas(a, resultB.value)\n && !setHasEqualElement(set, resultB.value, opts.strict, channel)\n ) {\n return false;\n }\n }\n return $setSize(set) === 0;\n }\n return true;\n}\n\nfunction mapEquiv(a, b, opts, channel) {\n if ($mapSize(a) !== $mapSize(b)) {\n return false;\n }\n var iA = getIterator(a);\n var iB = getIterator(b);\n var resultA;\n var resultB;\n var set;\n var key;\n var item1;\n var item2;\n while ((resultA = iA.next()) && !resultA.done) {\n key = resultA.value[0];\n item1 = resultA.value[1];\n if (key && typeof key === 'object') {\n if (!set) { set = new $Set(); }\n $setAdd(set, key);\n } else {\n item2 = $mapGet(b, key);\n if ((typeof item2 === 'undefined' && !$mapHas(b, key)) || !internalDeepEqual(item1, item2, opts, channel)) {\n if (opts.strict) {\n return false;\n }\n if (!mapMightHaveLoosePrim(a, b, key, item1, opts, channel)) {\n return false;\n }\n if (!set) { set = new $Set(); }\n $setAdd(set, key);\n }\n }\n }\n\n if (set) {\n while ((resultB = iB.next()) && !resultB.done) {\n key = resultB.value[0];\n item2 = resultB.value[1];\n if (key && typeof key === 'object') {\n if (!mapHasEqualEntry(set, a, key, item2, opts, channel)) {\n return false;\n }\n } else if (\n !opts.strict\n && (!a.has(key) || !internalDeepEqual($mapGet(a, key), item2, opts, channel))\n && !mapHasEqualEntry(set, a, key, item2, assign({}, opts, { strict: false }), channel)\n ) {\n return false;\n }\n }\n return $setSize(set) === 0;\n }\n return true;\n}\n\nfunction objEquiv(a, b, opts, channel) {\n /* eslint max-statements: [2, 100], max-lines-per-function: [2, 120], max-depth: [2, 5] */\n var i, key;\n\n if (typeof a !== typeof b) { return false; }\n if (a == null || b == null) { return false; }\n\n if ($objToString(a) !== $objToString(b)) { return false; }\n\n if (isArguments(a) !== isArguments(b)) { return false; }\n\n var aIsArray = isArray(a);\n var bIsArray = isArray(b);\n if (aIsArray !== bIsArray) { return false; }\n\n // TODO: replace when a cross-realm brand check is available\n var aIsError = a instanceof Error;\n var bIsError = b instanceof Error;\n if (aIsError !== bIsError) { return false; }\n if (aIsError || bIsError) {\n if (a.name !== b.name || a.message !== b.message) { return false; }\n }\n\n var aIsRegex = isRegex(a);\n var bIsRegex = isRegex(b);\n if (aIsRegex !== bIsRegex) { return false; }\n if ((aIsRegex || bIsRegex) && (a.source !== b.source || flags(a) !== flags(b))) {\n return false;\n }\n\n var aIsDate = isDate(a);\n var bIsDate = isDate(b);\n if (aIsDate !== bIsDate) { return false; }\n if (aIsDate || bIsDate) { // && would work too, because both are true or both false here\n if ($getTime(a) !== $getTime(b)) { return false; }\n }\n if (opts.strict && gPO && gPO(a) !== gPO(b)) { return false; }\n\n if (whichTypedArray(a) !== whichTypedArray(b)) {\n return false;\n }\n\n var aIsBuffer = isBuffer(a);\n var bIsBuffer = isBuffer(b);\n if (aIsBuffer !== bIsBuffer) { return false; }\n if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here\n if (a.length !== b.length) { return false; }\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) { return false; }\n }\n return true;\n }\n\n if (typeof a !== typeof b) { return false; }\n\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n // having the same number of owned properties (keys incorporates hasOwnProperty)\n if (ka.length !== kb.length) { return false; }\n\n // the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n // ~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) { return false; } // eslint-disable-line eqeqeq\n }\n\n // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!internalDeepEqual(a[key], b[key], opts, channel)) { return false; }\n }\n\n var aCollection = whichCollection(a);\n var bCollection = whichCollection(b);\n if (aCollection !== bCollection) {\n return false;\n }\n if (aCollection === 'Set' || bCollection === 'Set') { // aCollection === bCollection\n return setEquiv(a, b, opts, channel);\n }\n if (aCollection === 'Map') { // aCollection === bCollection\n return mapEquiv(a, b, opts, channel);\n }\n\n return true;\n}\n\nmodule.exports = function deepEqual(a, b, opts) {\n return internalDeepEqual(a, b, opts, getSideChannel());\n};\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\n/* eslint global-require: 0 */\n// the code is structured this way so that bundlers can\n// alias out `has-symbols` to `() => true` or `() => false` if your target\n// environments' Symbol capabilities are known, and then use\n// dead code elimination on the rest of this module.\n//\n// Similarly, `isarray` can be aliased to `Array.isArray` if\n// available in all target environments.\n\nvar isArguments = require('is-arguments');\n\nif (require('has-symbols')() || require('has-symbols/shams')()) {\n\tvar $iterator = Symbol.iterator;\n\t// Symbol is available natively or shammed\n\t// natively:\n\t// - Chrome >= 38\n\t// - Edge 12-14?, Edge >= 15 for sure\n\t// - FF >= 36\n\t// - Safari >= 9\n\t// - node >= 0.12\n\tmodule.exports = function getIterator(iterable) {\n\t\t// alternatively, `iterable[$iterator]?.()`\n\t\tif (iterable != null && typeof iterable[$iterator] !== 'undefined') {\n\t\t\treturn iterable[$iterator]();\n\t\t}\n\t\tif (isArguments(iterable)) {\n\t\t\t// arguments objects lack Symbol.iterator\n\t\t\t// - node 0.12\n\t\t\treturn Array.prototype[$iterator].call(iterable);\n\t\t}\n\t};\n} else {\n\t// Symbol is not available, native or shammed\n\tvar isArray = require('isarray');\n\tvar isString = require('is-string');\n\tvar GetIntrinsic = require('get-intrinsic');\n\tvar $Map = GetIntrinsic('%Map%', true);\n\tvar $Set = GetIntrinsic('%Set%', true);\n\tvar callBound = require('call-bind/callBound');\n\tvar $arrayPush = callBound('Array.prototype.push');\n\tvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\tvar $stringSlice = callBound('String.prototype.slice');\n\n\tvar advanceStringIndex = function advanceStringIndex(S, index) {\n\t\tvar length = S.length;\n\t\tif ((index + 1) >= length) {\n\t\t\treturn index + 1;\n\t\t}\n\n\t\tvar first = $charCodeAt(S, index);\n\t\tif (first < 0xD800 || first > 0xDBFF) {\n\t\t\treturn index + 1;\n\t\t}\n\n\t\tvar second = $charCodeAt(S, index + 1);\n\t\tif (second < 0xDC00 || second > 0xDFFF) {\n\t\t\treturn index + 1;\n\t\t}\n\n\t\treturn index + 2;\n\t};\n\n\tvar getArrayIterator = function getArrayIterator(arraylike) {\n\t\tvar i = 0;\n\t\treturn {\n\t\t\tnext: function next() {\n\t\t\t\tvar done = i >= arraylike.length;\n\t\t\t\tvar value;\n\t\t\t\tif (!done) {\n\t\t\t\t\tvalue = arraylike[i];\n\t\t\t\t\ti += 1;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tdone: done,\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar getNonCollectionIterator = function getNonCollectionIterator(iterable, noPrimordialCollections) {\n\t\tif (isArray(iterable) || isArguments(iterable)) {\n\t\t\treturn getArrayIterator(iterable);\n\t\t}\n\t\tif (isString(iterable)) {\n\t\t\tvar i = 0;\n\t\t\treturn {\n\t\t\t\tnext: function next() {\n\t\t\t\t\tvar nextIndex = advanceStringIndex(iterable, i);\n\t\t\t\t\tvar value = $stringSlice(iterable, i, nextIndex);\n\t\t\t\t\ti = nextIndex;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: nextIndex > iterable.length,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t// es6-shim and es-shims' es-map use a string \"_es6-shim iterator_\" property on different iterables, such as MapIterator.\n\t\tif (noPrimordialCollections && typeof iterable['_es6-shim iterator_'] !== 'undefined') {\n\t\t\treturn iterable['_es6-shim iterator_']();\n\t\t}\n\t};\n\n\tif (!$Map && !$Set) {\n\t\t// the only language iterables are Array, String, arguments\n\t\t// - Safari <= 6.0\n\t\t// - Chrome < 38\n\t\t// - node < 0.12\n\t\t// - FF < 13\n\t\t// - IE < 11\n\t\t// - Edge < 11\n\n\t\tmodule.exports = function getIterator(iterable) {\n\t\t\tif (iterable != null) {\n\t\t\t\treturn getNonCollectionIterator(iterable, true);\n\t\t\t}\n\t\t};\n\t} else {\n\t\t// either Map or Set are available, but Symbol is not\n\t\t// - es6-shim on an ES5 browser\n\t\t// - Safari 6.2 (maybe 6.1?)\n\t\t// - FF v[13, 36)\n\t\t// - IE 11\n\t\t// - Edge 11\n\t\t// - Safari v[6, 9)\n\n\t\tvar isMap = require('is-map');\n\t\tvar isSet = require('is-set');\n\n\t\t// Firefox >= 27, IE 11, Safari 6.2 - 9, Edge 11, es6-shim in older envs, all have forEach\n\t\tvar $mapForEach = callBound('Map.prototype.forEach', true);\n\t\tvar $setForEach = callBound('Set.prototype.forEach', true);\n\t\tif (typeof process === 'undefined' || !process.versions || !process.versions.node) { // \"if is not node\"\n\n\t\t\t// Firefox 17 - 26 has `.iterator()`, whose iterator `.next()` either\n\t\t\t// returns a value, or throws a StopIteration object. These browsers\n\t\t\t// do not have any other mechanism for iteration.\n\t\t\tvar $mapIterator = callBound('Map.prototype.iterator', true);\n\t\t\tvar $setIterator = callBound('Set.prototype.iterator', true);\n\t\t\tvar getStopIterationIterator = function (iterator) {\n\t\t\t\tvar done = false;\n\t\t\t\treturn {\n\t\t\t\t\tnext: function next() {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tdone: done,\n\t\t\t\t\t\t\t\tvalue: done ? undefined : iterator.next()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tdone = true;\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tdone: true,\n\t\t\t\t\t\t\t\tvalue: undefined\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\t\t// Firefox 27-35, and some older es6-shim versions, use a string \"@@iterator\" property\n\t\t// this returns a proper iterator object, so we should use it instead of forEach.\n\t\t// newer es6-shim versions use a string \"_es6-shim iterator_\" property.\n\t\tvar $mapAtAtIterator = callBound('Map.prototype.@@iterator', true) || callBound('Map.prototype._es6-shim iterator_', true);\n\t\tvar $setAtAtIterator = callBound('Set.prototype.@@iterator', true) || callBound('Set.prototype._es6-shim iterator_', true);\n\n\t\tvar getCollectionIterator = function getCollectionIterator(iterable) {\n\t\t\tif (isMap(iterable)) {\n\t\t\t\tif ($mapIterator) {\n\t\t\t\t\treturn getStopIterationIterator($mapIterator(iterable));\n\t\t\t\t}\n\t\t\t\tif ($mapAtAtIterator) {\n\t\t\t\t\treturn $mapAtAtIterator(iterable);\n\t\t\t\t}\n\t\t\t\tif ($mapForEach) {\n\t\t\t\t\tvar entries = [];\n\t\t\t\t\t$mapForEach(iterable, function (v, k) {\n\t\t\t\t\t\t$arrayPush(entries, [k, v]);\n\t\t\t\t\t});\n\t\t\t\t\treturn getArrayIterator(entries);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isSet(iterable)) {\n\t\t\t\tif ($setIterator) {\n\t\t\t\t\treturn getStopIterationIterator($setIterator(iterable));\n\t\t\t\t}\n\t\t\t\tif ($setAtAtIterator) {\n\t\t\t\t\treturn $setAtAtIterator(iterable);\n\t\t\t\t}\n\t\t\t\tif ($setForEach) {\n\t\t\t\t\tvar values = [];\n\t\t\t\t\t$setForEach(iterable, function (v) {\n\t\t\t\t\t\t$arrayPush(values, v);\n\t\t\t\t\t});\n\t\t\t\t\treturn getArrayIterator(values);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tmodule.exports = function getIterator(iterable) {\n\t\t\treturn getCollectionIterator(iterable) || getNonCollectionIterator(iterable);\n\t\t};\n\t}\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n if (toString.call(fn) !== '[object Function]') {\n throw new TypeError('iterator must be a function');\n }\n var l = obj.length;\n if (l === +l) {\n for (var i = 0; i < l; i++) {\n fn.call(ctx, obj[i], i, obj);\n }\n } else {\n for (var k in obj) {\n if (hasOwn.call(obj, k)) {\n fn.call(ctx, obj[k], k, obj);\n }\n }\n }\n};\n\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e<d;e++){var f=a[e];if(b.call(c,f,e,a))return{i:e,v:f}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;\n$jscomp.defineProperty=$jscomp.ASSUME_ES5||\"function\"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){return\"undefined\"!=typeof window&&window===a?a:\"undefined\"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);\n$jscomp.polyfill=function(a,b,c,d){if(b){c=$jscomp.global;a=a.split(\".\");for(d=0;d<a.length-1;d++){var e=a[d];e in c||(c[e]={});c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})}};$jscomp.polyfill(\"Array.prototype.findIndex\",function(a){return a?a:function(a,c){return $jscomp.findInternal(this,a,c).i}},\"es6\",\"es3\");\n$jscomp.checkStringArgs=function(a,b,c){if(null==a)throw new TypeError(\"The 'this' value for String.prototype.\"+c+\" must not be null or undefined\");if(b instanceof RegExp)throw new TypeError(\"First argument to String.prototype.\"+c+\" must not be a regular expression\");return a+\"\"};\n$jscomp.polyfill(\"String.prototype.endsWith\",function(a){return a?a:function(a,c){var b=$jscomp.checkStringArgs(this,a,\"endsWith\");a+=\"\";void 0===c&&(c=b.length);c=Math.max(0,Math.min(c|0,b.length));for(var e=a.length;0<e&&0<c;)if(b[--c]!=a[--e])return!1;return 0>=e}},\"es6\",\"es3\");$jscomp.polyfill(\"Array.prototype.find\",function(a){return a?a:function(a,c){return $jscomp.findInternal(this,a,c).v}},\"es6\",\"es3\");\n$jscomp.polyfill(\"String.prototype.startsWith\",function(a){return a?a:function(a,c){var b=$jscomp.checkStringArgs(this,a,\"startsWith\");a+=\"\";var e=b.length,f=a.length;c=Math.max(0,Math.min(c|0,b.length));for(var g=0;g<f&&c<e;)if(b[c++]!=a[g++])return!1;return g>=f}},\"es6\",\"es3\");\n$jscomp.polyfill(\"String.prototype.repeat\",function(a){return a?a:function(a){var b=$jscomp.checkStringArgs(this,null,\"repeat\");if(0>a||1342177279<a)throw new RangeError(\"Invalid count value\");a|=0;for(var d=\"\";a;)if(a&1&&(d+=b),a>>>=1)b+=b;return d}},\"es6\",\"es3\");var COMPILED=!0,goog=goog||{};goog.global=this||self;goog.isDef=function(a){return void 0!==a};goog.isString=function(a){return\"string\"==typeof a};goog.isBoolean=function(a){return\"boolean\"==typeof a};\ngoog.isNumber=function(a){return\"number\"==typeof a};goog.exportPath_=function(a,b,c){a=a.split(\".\");c=c||goog.global;a[0]in c||\"undefined\"==typeof c.execScript||c.execScript(\"var \"+a[0]);for(var d;a.length&&(d=a.shift());)!a.length&&goog.isDef(b)?c[d]=b:c=c[d]&&c[d]!==Object.prototype[d]?c[d]:c[d]={}};\ngoog.define=function(a,b){if(!COMPILED){var c=goog.global.CLOSURE_UNCOMPILED_DEFINES,d=goog.global.CLOSURE_DEFINES;c&&void 0===c.nodeType&&Object.prototype.hasOwnProperty.call(c,a)?b=c[a]:d&&void 0===d.nodeType&&Object.prototype.hasOwnProperty.call(d,a)&&(b=d[a])}return b};goog.FEATURESET_YEAR=2012;goog.DEBUG=!0;goog.LOCALE=\"en\";goog.TRUSTED_SITE=!0;goog.STRICT_MODE_COMPATIBLE=!1;goog.DISALLOW_TEST_ONLY_CODE=COMPILED&&!goog.DEBUG;goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING=!1;\ngoog.provide=function(a){if(goog.isInModuleLoader_())throw Error(\"goog.provide cannot be used within a module.\");if(!COMPILED&&goog.isProvided_(a))throw Error('Namespace \"'+a+'\" already declared.');goog.constructNamespace_(a)};goog.constructNamespace_=function(a,b){if(!COMPILED){delete goog.implicitNamespaces_[a];for(var c=a;(c=c.substring(0,c.lastIndexOf(\".\")))&&!goog.getObjectByName(c);)goog.implicitNamespaces_[c]=!0}goog.exportPath_(a,b)};\ngoog.getScriptNonce=function(a){if(a&&a!=goog.global)return goog.getScriptNonce_(a.document);null===goog.cspNonce_&&(goog.cspNonce_=goog.getScriptNonce_(goog.global.document));return goog.cspNonce_};goog.NONCE_PATTERN_=/^[\\w+/_-]+[=]{0,2}$/;goog.cspNonce_=null;goog.getScriptNonce_=function(a){return(a=a.querySelector&&a.querySelector(\"script[nonce]\"))&&(a=a.nonce||a.getAttribute(\"nonce\"))&&goog.NONCE_PATTERN_.test(a)?a:\"\"};goog.VALID_MODULE_RE_=/^[a-zA-Z_$][a-zA-Z0-9._$]*$/;\ngoog.module=function(a){if(!goog.isString(a)||!a||-1==a.search(goog.VALID_MODULE_RE_))throw Error(\"Invalid module identifier\");if(!goog.isInGoogModuleLoader_())throw Error(\"Module \"+a+\" has been loaded incorrectly. Note, modules cannot be loaded as normal scripts. They require some kind of pre-processing step. You're likely trying to load a module via a script tag or as a part of a concatenated bundle without rewriting the module. For more info see: https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide.\");\nif(goog.moduleLoaderState_.moduleName)throw Error(\"goog.module may only be called once per module.\");goog.moduleLoaderState_.moduleName=a;if(!COMPILED){if(goog.isProvided_(a))throw Error('Namespace \"'+a+'\" already declared.');delete goog.implicitNamespaces_[a]}};goog.module.get=function(a){return goog.module.getInternal_(a)};\ngoog.module.getInternal_=function(a){if(!COMPILED){if(a in goog.loadedModules_)return goog.loadedModules_[a].exports;if(!goog.implicitNamespaces_[a])return a=goog.getObjectByName(a),null!=a?a:null}return null};goog.ModuleType={ES6:\"es6\",GOOG:\"goog\"};goog.moduleLoaderState_=null;goog.isInModuleLoader_=function(){return goog.isInGoogModuleLoader_()||goog.isInEs6ModuleLoader_()};goog.isInGoogModuleLoader_=function(){return!!goog.moduleLoaderState_&&goog.moduleLoaderState_.type==goog.ModuleType.GOOG};\ngoog.isInEs6ModuleLoader_=function(){if(goog.moduleLoaderState_&&goog.moduleLoaderState_.type==goog.ModuleType.ES6)return!0;var a=goog.global.$jscomp;return a?\"function\"!=typeof a.getCurrentModulePath?!1:!!a.getCurrentModulePath():!1};\ngoog.module.declareLegacyNamespace=function(){if(!COMPILED&&!goog.isInGoogModuleLoader_())throw Error(\"goog.module.declareLegacyNamespace must be called from within a goog.module\");if(!COMPILED&&!goog.moduleLoaderState_.moduleName)throw Error(\"goog.module must be called prior to goog.module.declareLegacyNamespace.\");goog.moduleLoaderState_.declareLegacyNamespace=!0};\ngoog.declareModuleId=function(a){if(!COMPILED){if(!goog.isInEs6ModuleLoader_())throw Error(\"goog.declareModuleId may only be called from within an ES6 module\");if(goog.moduleLoaderState_&&goog.moduleLoaderState_.moduleName)throw Error(\"goog.declareModuleId may only be called once per module.\");if(a in goog.loadedModules_)throw Error('Module with namespace \"'+a+'\" already exists.');}if(goog.moduleLoaderState_)goog.moduleLoaderState_.moduleName=a;else{var b=goog.global.$jscomp;if(!b||\"function\"!=typeof b.getCurrentModulePath)throw Error('Module with namespace \"'+\na+'\" has been loaded incorrectly.');b=b.require(b.getCurrentModulePath());goog.loadedModules_[a]={exports:b,type:goog.ModuleType.ES6,moduleId:a}}};goog.setTestOnly=function(a){if(goog.DISALLOW_TEST_ONLY_CODE)throw a=a||\"\",Error(\"Importing test-only code into non-debug environment\"+(a?\": \"+a:\".\"));};goog.forwardDeclare=function(a){};\nCOMPILED||(goog.isProvided_=function(a){return a in goog.loadedModules_||!goog.implicitNamespaces_[a]&&goog.isDefAndNotNull(goog.getObjectByName(a))},goog.implicitNamespaces_={\"goog.module\":!0});goog.getObjectByName=function(a,b){a=a.split(\".\");b=b||goog.global;for(var c=0;c<a.length;c++)if(b=b[a[c]],!goog.isDefAndNotNull(b))return null;return b};goog.globalize=function(a,b){b=b||goog.global;for(var c in a)b[c]=a[c]};\ngoog.addDependency=function(a,b,c,d){!COMPILED&&goog.DEPENDENCIES_ENABLED&&goog.debugLoader_.addDependency(a,b,c,d)};goog.ENABLE_DEBUG_LOADER=!0;goog.logToConsole_=function(a){goog.global.console&&goog.global.console.error(a)};\ngoog.require=function(a){if(!COMPILED){goog.ENABLE_DEBUG_LOADER&&goog.debugLoader_.requested(a);if(goog.isProvided_(a)){if(goog.isInModuleLoader_())return goog.module.getInternal_(a)}else if(goog.ENABLE_DEBUG_LOADER){var b=goog.moduleLoaderState_;goog.moduleLoaderState_=null;try{goog.debugLoader_.load_(a)}finally{goog.moduleLoaderState_=b}}return null}};goog.requireType=function(a){return{}};goog.basePath=\"\";goog.nullFunction=function(){};\ngoog.abstractMethod=function(){throw Error(\"unimplemented abstract method\");};goog.addSingletonGetter=function(a){a.instance_=void 0;a.getInstance=function(){if(a.instance_)return a.instance_;goog.DEBUG&&(goog.instantiatedSingletons_[goog.instantiatedSingletons_.length]=a);return a.instance_=new a}};goog.instantiatedSingletons_=[];goog.LOAD_MODULE_USING_EVAL=!0;goog.SEAL_MODULE_EXPORTS=goog.DEBUG;goog.loadedModules_={};goog.DEPENDENCIES_ENABLED=!COMPILED&&goog.ENABLE_DEBUG_LOADER;goog.TRANSPILE=\"detect\";\ngoog.ASSUME_ES_MODULES_TRANSPILED=!1;goog.TRANSPILE_TO_LANGUAGE=\"\";goog.TRANSPILER=\"transpile.js\";goog.hasBadLetScoping=null;goog.useSafari10Workaround=function(){if(null==goog.hasBadLetScoping){try{var a=!eval('\"use strict\";let x = 1; function f() { return typeof x; };f() == \"number\";')}catch(b){a=!1}goog.hasBadLetScoping=a}return goog.hasBadLetScoping};goog.workaroundSafari10EvalBug=function(a){return\"(function(){\"+a+\"\\n;})();\\n\"};\ngoog.loadModule=function(a){var b=goog.moduleLoaderState_;try{goog.moduleLoaderState_={moduleName:\"\",declareLegacyNamespace:!1,type:goog.ModuleType.GOOG};if(goog.isFunction(a))var c=a.call(void 0,{});else if(goog.isString(a))goog.useSafari10Workaround()&&(a=goog.workaroundSafari10EvalBug(a)),c=goog.loadModuleFromSource_.call(void 0,a);else throw Error(\"Invalid module definition\");var d=goog.moduleLoaderState_.moduleName;if(goog.isString(d)&&d)goog.moduleLoaderState_.declareLegacyNamespace?goog.constructNamespace_(d,\nc):goog.SEAL_MODULE_EXPORTS&&Object.seal&&\"object\"==typeof c&&null!=c&&Object.seal(c),goog.loadedModules_[d]={exports:c,type:goog.ModuleType.GOOG,moduleId:goog.moduleLoaderState_.moduleName};else throw Error('Invalid module name \"'+d+'\"');}finally{goog.moduleLoaderState_=b}};goog.loadModuleFromSource_=function(a){eval(a);return{}};goog.normalizePath_=function(a){a=a.split(\"/\");for(var b=0;b<a.length;)\".\"==a[b]?a.splice(b,1):b&&\"..\"==a[b]&&a[b-1]&&\"..\"!=a[b-1]?a.splice(--b,2):b++;return a.join(\"/\")};\ngoog.loadFileSync_=function(a){if(goog.global.CLOSURE_LOAD_FILE_SYNC)return goog.global.CLOSURE_LOAD_FILE_SYNC(a);try{var b=new goog.global.XMLHttpRequest;b.open(\"get\",a,!1);b.send();return 0==b.status||200==b.status?b.responseText:null}catch(c){return null}};\ngoog.transpile_=function(a,b,c){var d=goog.global.$jscomp;d||(goog.global.$jscomp=d={});var e=d.transpile;if(!e){var f=goog.basePath+goog.TRANSPILER,g=goog.loadFileSync_(f);if(g){(function(){(0,eval)(g+\"\\n//# sourceURL=\"+f)}).call(goog.global);if(goog.global.$gwtExport&&goog.global.$gwtExport.$jscomp&&!goog.global.$gwtExport.$jscomp.transpile)throw Error('The transpiler did not properly export the \"transpile\" method. $gwtExport: '+JSON.stringify(goog.global.$gwtExport));goog.global.$jscomp.transpile=\ngoog.global.$gwtExport.$jscomp.transpile;d=goog.global.$jscomp;e=d.transpile}}e||(e=d.transpile=function(a,b){goog.logToConsole_(b+\" requires transpilation but no transpiler was found.\");return a});return e(a,b,c)};\ngoog.typeOf=function(a){var b=typeof a;if(\"object\"==b)if(a){if(a instanceof Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(\"[object Window]\"==c)return\"object\";if(\"[object Array]\"==c||\"number\"==typeof a.length&&\"undefined\"!=typeof a.splice&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==c||\"undefined\"!=typeof a.call&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\nelse if(\"function\"==b&&\"undefined\"==typeof a.call)return\"object\";return b};goog.isNull=function(a){return null===a};goog.isDefAndNotNull=function(a){return null!=a};goog.isArray=function(a){return\"array\"==goog.typeOf(a)};goog.isArrayLike=function(a){var b=goog.typeOf(a);return\"array\"==b||\"object\"==b&&\"number\"==typeof a.length};goog.isDateLike=function(a){return goog.isObject(a)&&\"function\"==typeof a.getFullYear};goog.isFunction=function(a){return\"function\"==goog.typeOf(a)};\ngoog.isObject=function(a){var b=typeof a;return\"object\"==b&&null!=a||\"function\"==b};goog.getUid=function(a){return a[goog.UID_PROPERTY_]||(a[goog.UID_PROPERTY_]=++goog.uidCounter_)};goog.hasUid=function(a){return!!a[goog.UID_PROPERTY_]};goog.removeUid=function(a){null!==a&&\"removeAttribute\"in a&&a.removeAttribute(goog.UID_PROPERTY_);try{delete a[goog.UID_PROPERTY_]}catch(b){}};goog.UID_PROPERTY_=\"closure_uid_\"+(1E9*Math.random()>>>0);goog.uidCounter_=0;goog.getHashCode=goog.getUid;\ngoog.removeHashCode=goog.removeUid;goog.cloneObject=function(a){var b=goog.typeOf(a);if(\"object\"==b||\"array\"==b){if(\"function\"===typeof a.clone)return a.clone();b=\"array\"==b?[]:{};for(var c in a)b[c]=goog.cloneObject(a[c]);return b}return a};goog.bindNative_=function(a,b,c){return a.call.apply(a.bind,arguments)};\ngoog.bindJs_=function(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}};goog.bind=function(a,b,c){Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?goog.bind=goog.bindNative_:goog.bind=goog.bindJs_;return goog.bind.apply(null,arguments)};\ngoog.partial=function(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var b=c.slice();b.push.apply(b,arguments);return a.apply(this,b)}};goog.mixin=function(a,b){for(var c in b)a[c]=b[c]};goog.now=goog.TRUSTED_SITE&&Date.now||function(){return+new Date};\ngoog.globalEval=function(a){if(goog.global.execScript)goog.global.execScript(a,\"JavaScript\");else if(goog.global.eval){if(null==goog.evalWorksForGlobals_){try{goog.global.eval(\"var _evalTest_ = 1;\")}catch(d){}if(\"undefined\"!=typeof goog.global._evalTest_){try{delete goog.global._evalTest_}catch(d){}goog.evalWorksForGlobals_=!0}else goog.evalWorksForGlobals_=!1}if(goog.evalWorksForGlobals_)goog.global.eval(a);else{var b=goog.global.document,c=b.createElement(\"SCRIPT\");c.type=\"text/javascript\";c.defer=\n!1;c.appendChild(b.createTextNode(a));b.head.appendChild(c);b.head.removeChild(c)}}else throw Error(\"goog.globalEval not available\");};goog.evalWorksForGlobals_=null;\ngoog.getCssName=function(a,b){if(\".\"==String(a).charAt(0))throw Error('className passed in goog.getCssName must not start with \".\". You passed: '+a);var c=function(a){return goog.cssNameMapping_[a]||a},d=function(a){a=a.split(\"-\");for(var b=[],d=0;d<a.length;d++)b.push(c(a[d]));return b.join(\"-\")};d=goog.cssNameMapping_?\"BY_WHOLE\"==goog.cssNameMappingStyle_?c:d:function(a){return a};a=b?a+\"-\"+d(b):d(a);return goog.global.CLOSURE_CSS_NAME_MAP_FN?goog.global.CLOSURE_CSS_NAME_MAP_FN(a):a};\ngoog.setCssNameMapping=function(a,b){goog.cssNameMapping_=a;goog.cssNameMappingStyle_=b};!COMPILED&&goog.global.CLOSURE_CSS_NAME_MAPPING&&(goog.cssNameMapping_=goog.global.CLOSURE_CSS_NAME_MAPPING);goog.getMsg=function(a,b,c){c&&c.html&&(a=a.replace(/</g,\"<\"));b&&(a=a.replace(/\\{\\$([^}]+)}/g,function(a,c){return null!=b&&c in b?b[c]:a}));return a};goog.getMsgWithFallback=function(a,b){return a};goog.exportSymbol=function(a,b,c){goog.exportPath_(a,b,c)};\ngoog.exportProperty=function(a,b,c){a[b]=c};goog.inherits=function(a,b){function c(){}c.prototype=b.prototype;a.superClass_=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.base=function(a,c,f){for(var d=Array(arguments.length-2),e=2;e<arguments.length;e++)d[e-2]=arguments[e];return b.prototype[c].apply(a,d)}};\ngoog.base=function(a,b,c){var d=arguments.callee.caller;if(goog.STRICT_MODE_COMPATIBLE||goog.DEBUG&&!d)throw Error(\"arguments.caller not defined. goog.base() cannot be used with strict mode code. See http://www.ecma-international.org/ecma-262/5.1/#sec-C\");if(\"undefined\"!==typeof d.superClass_){for(var e=Array(arguments.length-1),f=1;f<arguments.length;f++)e[f-1]=arguments[f];return d.superClass_.constructor.apply(a,e)}if(\"string\"!=typeof b&&\"symbol\"!=typeof b)throw Error(\"method names provided to goog.base must be a string or a symbol\");\ne=Array(arguments.length-2);for(f=2;f<arguments.length;f++)e[f-2]=arguments[f];f=!1;for(var g=a.constructor.prototype;g;g=Object.getPrototypeOf(g))if(g[b]===d)f=!0;else if(f)return g[b].apply(a,e);if(a[b]===d)return a.constructor.prototype[b].apply(a,e);throw Error(\"goog.base called from a method of one name to a method of a different name\");};goog.scope=function(a){if(goog.isInModuleLoader_())throw Error(\"goog.scope is not supported within a module.\");a.call(goog.global)};\nCOMPILED||(goog.global.COMPILED=COMPILED);goog.defineClass=function(a,b){var c=b.constructor,d=b.statics;c&&c!=Object.prototype.constructor||(c=function(){throw Error(\"cannot instantiate an interface (no constructor defined).\");});c=goog.defineClass.createSealingConstructor_(c,a);a&&goog.inherits(c,a);delete b.constructor;delete b.statics;goog.defineClass.applyProperties_(c.prototype,b);null!=d&&(d instanceof Function?d(c):goog.defineClass.applyProperties_(c,d));return c};\ngoog.defineClass.SEAL_CLASS_INSTANCES=goog.DEBUG;goog.defineClass.createSealingConstructor_=function(a,b){if(!goog.defineClass.SEAL_CLASS_INSTANCES)return a;var c=!goog.defineClass.isUnsealable_(b),d=function(){var b=a.apply(this,arguments)||this;b[goog.UID_PROPERTY_]=b[goog.UID_PROPERTY_];this.constructor===d&&c&&Object.seal instanceof Function&&Object.seal(b);return b};return d};goog.defineClass.isUnsealable_=function(a){return a&&a.prototype&&a.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_]};\ngoog.defineClass.OBJECT_PROTOTYPE_FIELDS_=\"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");goog.defineClass.applyProperties_=function(a,b){for(var c in b)Object.prototype.hasOwnProperty.call(b,c)&&(a[c]=b[c]);for(var d=0;d<goog.defineClass.OBJECT_PROTOTYPE_FIELDS_.length;d++)c=goog.defineClass.OBJECT_PROTOTYPE_FIELDS_[d],Object.prototype.hasOwnProperty.call(b,c)&&(a[c]=b[c])};\ngoog.tagUnsealableClass=function(a){!COMPILED&&goog.defineClass.SEAL_CLASS_INSTANCES&&(a.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_]=!0)};goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_=\"goog_defineClass_legacy_unsealable\";\n!COMPILED&&goog.DEPENDENCIES_ENABLED&&(goog.inHtmlDocument_=function(){var a=goog.global.document;return null!=a&&\"write\"in a},goog.isDocumentLoading_=function(){var a=goog.global.document;return a.attachEvent?\"complete\"!=a.readyState:\"loading\"==a.readyState},goog.findBasePath_=function(){if(goog.isDef(goog.global.CLOSURE_BASE_PATH)&&goog.isString(goog.global.CLOSURE_BASE_PATH))goog.basePath=goog.global.CLOSURE_BASE_PATH;else if(goog.inHtmlDocument_()){var a=goog.global.document,b=a.currentScript;\na=b?[b]:a.getElementsByTagName(\"SCRIPT\");for(b=a.length-1;0<=b;--b){var c=a[b].src,d=c.lastIndexOf(\"?\");d=-1==d?c.length:d;if(\"base.js\"==c.substr(d-7,7)){goog.basePath=c.substr(0,d-7);break}}}},goog.findBasePath_(),goog.Transpiler=function(){this.requiresTranspilation_=null;this.transpilationTarget_=goog.TRANSPILE_TO_LANGUAGE},goog.Transpiler.prototype.createRequiresTranspilation_=function(){function a(a,b){e?d[a]=!0:b()?(c=a,d[a]=!1):e=d[a]=!0}function b(a){try{return!!eval(a)}catch(h){return!1}}\nvar c=\"es3\",d={es3:!1},e=!1,f=goog.global.navigator&&goog.global.navigator.userAgent?goog.global.navigator.userAgent:\"\";a(\"es5\",function(){return b(\"[1,].length==1\")});a(\"es6\",function(){return f.match(/Edge\\/(\\d+)(\\.\\d)*/i)?!1:b('(()=>{\"use strict\";class X{constructor(){if(new.target!=String)throw 1;this.x=42}}let q=Reflect.construct(X,[],String);if(q.x!=42||!(q instanceof String))throw 1;for(const a of[2,3]){if(a==2)continue;function f(z={a}){let a=0;return z.a}{function f(){return 0;}}return f()==3}})()')});\na(\"es7\",function(){return b(\"2 ** 2 == 4\")});a(\"es8\",function(){return b(\"async () => 1, true\")});a(\"es9\",function(){return b(\"({...rest} = {}), true\")});a(\"es_next\",function(){return!1});return{target:c,map:d}},goog.Transpiler.prototype.needsTranspile=function(a,b){if(\"always\"==goog.TRANSPILE)return!0;if(\"never\"==goog.TRANSPILE)return!1;if(!this.requiresTranspilation_){var c=this.createRequiresTranspilation_();this.requiresTranspilation_=c.map;this.transpilationTarget_=this.transpilationTarget_||\nc.target}if(a in this.requiresTranspilation_)return this.requiresTranspilation_[a]?!0:!goog.inHtmlDocument_()||\"es6\"!=b||\"noModule\"in goog.global.document.createElement(\"script\")?!1:!0;throw Error(\"Unknown language mode: \"+a);},goog.Transpiler.prototype.transpile=function(a,b){return goog.transpile_(a,b,this.transpilationTarget_)},goog.transpiler_=new goog.Transpiler,goog.protectScriptTag_=function(a){return a.replace(/<\\/(SCRIPT)/ig,\"\\\\x3c/$1\")},goog.DebugLoader_=function(){this.dependencies_={};\nthis.idToPath_={};this.written_={};this.loadingDeps_=[];this.depsToLoad_=[];this.paused_=!1;this.factory_=new goog.DependencyFactory(goog.transpiler_);this.deferredCallbacks_={};this.deferredQueue_=[]},goog.DebugLoader_.prototype.bootstrap=function(a,b){function c(){d&&(goog.global.setTimeout(d,0),d=null)}var d=b;if(a.length){b=[];for(var e=0;e<a.length;e++){var f=this.getPathFromDeps_(a[e]);if(!f)throw Error(\"Unregonized namespace: \"+a[e]);b.push(this.dependencies_[f])}f=goog.require;var g=0;for(e=\n0;e<a.length;e++)f(a[e]),b[e].onLoad(function(){++g==a.length&&c()})}else c()},goog.DebugLoader_.prototype.loadClosureDeps=function(){this.depsToLoad_.push(this.factory_.createDependency(goog.normalizePath_(goog.basePath+\"deps.js\"),\"deps.js\",[],[],{},!1));this.loadDeps_()},goog.DebugLoader_.prototype.requested=function(a,b){(a=this.getPathFromDeps_(a))&&(b||this.areDepsLoaded_(this.dependencies_[a].requires))&&(b=this.deferredCallbacks_[a])&&(delete this.deferredCallbacks_[a],b())},goog.DebugLoader_.prototype.setDependencyFactory=\nfunction(a){this.factory_=a},goog.DebugLoader_.prototype.load_=function(a){if(this.getPathFromDeps_(a)){var b=this,c=[],d=function(a){var e=b.getPathFromDeps_(a);if(!e)throw Error(\"Bad dependency path or symbol: \"+a);if(!b.written_[e]){b.written_[e]=!0;a=b.dependencies_[e];for(e=0;e<a.requires.length;e++)goog.isProvided_(a.requires[e])||d(a.requires[e]);c.push(a)}};d(a);a=!!this.depsToLoad_.length;this.depsToLoad_=this.depsToLoad_.concat(c);this.paused_||a||this.loadDeps_()}else throw a=\"goog.require could not find: \"+\na,goog.logToConsole_(a),Error(a);},goog.DebugLoader_.prototype.loadDeps_=function(){for(var a=this,b=this.paused_;this.depsToLoad_.length&&!b;)(function(){var c=!1,d=a.depsToLoad_.shift(),e=!1;a.loading_(d);var f={pause:function(){if(c)throw Error(\"Cannot call pause after the call to load.\");b=!0},resume:function(){c?a.resume_():b=!1},loaded:function(){if(e)throw Error(\"Double call to loaded.\");e=!0;a.loaded_(d)},pending:function(){for(var b=[],c=0;c<a.loadingDeps_.length;c++)b.push(a.loadingDeps_[c]);\nreturn b},setModuleState:function(a){goog.moduleLoaderState_={type:a,moduleName:\"\",declareLegacyNamespace:!1}},registerEs6ModuleExports:function(a,b,c){c&&(goog.loadedModules_[c]={exports:b,type:goog.ModuleType.ES6,moduleId:c||\"\"})},registerGoogModuleExports:function(a,b){goog.loadedModules_[a]={exports:b,type:goog.ModuleType.GOOG,moduleId:a}},clearModuleState:function(){goog.moduleLoaderState_=null},defer:function(b){if(c)throw Error(\"Cannot register with defer after the call to load.\");a.defer_(d,\nb)},areDepsLoaded:function(){return a.areDepsLoaded_(d.requires)}};try{d.load(f)}finally{c=!0}})();b&&this.pause_()},goog.DebugLoader_.prototype.pause_=function(){this.paused_=!0},goog.DebugLoader_.prototype.resume_=function(){this.paused_&&(this.paused_=!1,this.loadDeps_())},goog.DebugLoader_.prototype.loading_=function(a){this.loadingDeps_.push(a)},goog.DebugLoader_.prototype.loaded_=function(a){for(var b=0;b<this.loadingDeps_.length;b++)if(this.loadingDeps_[b]==a){this.loadingDeps_.splice(b,1);\nbreak}for(b=0;b<this.deferredQueue_.length;b++)if(this.deferredQueue_[b]==a.path){this.deferredQueue_.splice(b,1);break}if(this.loadingDeps_.length==this.deferredQueue_.length&&!this.depsToLoad_.length)for(;this.deferredQueue_.length;)this.requested(this.deferredQueue_.shift(),!0);a.loaded()},goog.DebugLoader_.prototype.areDepsLoaded_=function(a){for(var b=0;b<a.length;b++){var c=this.getPathFromDeps_(a[b]);if(!c||!(c in this.deferredCallbacks_||goog.isProvided_(a[b])))return!1}return!0},goog.DebugLoader_.prototype.getPathFromDeps_=\nfunction(a){return a in this.idToPath_?this.idToPath_[a]:a in this.dependencies_?a:null},goog.DebugLoader_.prototype.defer_=function(a,b){this.deferredCallbacks_[a.path]=b;this.deferredQueue_.push(a.path)},goog.LoadController=function(){},goog.LoadController.prototype.pause=function(){},goog.LoadController.prototype.resume=function(){},goog.LoadController.prototype.loaded=function(){},goog.LoadController.prototype.pending=function(){},goog.LoadController.prototype.registerEs6ModuleExports=function(a,\nb,c){},goog.LoadController.prototype.setModuleState=function(a){},goog.LoadController.prototype.clearModuleState=function(){},goog.LoadController.prototype.defer=function(a){},goog.LoadController.prototype.areDepsLoaded=function(){},goog.Dependency=function(a,b,c,d,e){this.path=a;this.relativePath=b;this.provides=c;this.requires=d;this.loadFlags=e;this.loaded_=!1;this.loadCallbacks_=[]},goog.Dependency.prototype.getPathName=function(){var a=this.path,b=a.indexOf(\"://\");0<=b&&(a=a.substring(b+3),b=\na.indexOf(\"/\"),0<=b&&(a=a.substring(b+1)));return a},goog.Dependency.prototype.onLoad=function(a){this.loaded_?a():this.loadCallbacks_.push(a)},goog.Dependency.prototype.loaded=function(){this.loaded_=!0;var a=this.loadCallbacks_;this.loadCallbacks_=[];for(var b=0;b<a.length;b++)a[b]()},goog.Dependency.defer_=!1,goog.Dependency.callbackMap_={},goog.Dependency.registerCallback_=function(a){var b=Math.random().toString(32);goog.Dependency.callbackMap_[b]=a;return b},goog.Dependency.unregisterCallback_=\nfunction(a){delete goog.Dependency.callbackMap_[a]},goog.Dependency.callback_=function(a,b){if(a in goog.Dependency.callbackMap_){for(var c=goog.Dependency.callbackMap_[a],d=[],e=1;e<arguments.length;e++)d.push(arguments[e]);c.apply(void 0,d)}else throw Error(\"Callback key \"+a+\" does not exist (was base.js loaded more than once?).\");},goog.Dependency.prototype.load=function(a){if(goog.global.CLOSURE_IMPORT_SCRIPT)goog.global.CLOSURE_IMPORT_SCRIPT(this.path)?a.loaded():a.pause();else if(goog.inHtmlDocument_()){var b=\ngoog.global.document;if(\"complete\"==b.readyState&&!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING){if(/\\bdeps.js$/.test(this.path)){a.loaded();return}throw Error('Cannot write \"'+this.path+'\" after document load');}if(!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING&&goog.isDocumentLoading_()){var c=goog.Dependency.registerCallback_(function(b){goog.DebugLoader_.IS_OLD_IE_&&\"complete\"!=b.readyState||(goog.Dependency.unregisterCallback_(c),a.loaded())}),d=!goog.DebugLoader_.IS_OLD_IE_&&goog.getScriptNonce()?\n' nonce=\"'+goog.getScriptNonce()+'\"':\"\";d='<script src=\"'+this.path+'\" '+(goog.DebugLoader_.IS_OLD_IE_?\"onreadystatechange\":\"onload\")+\"=\\\"goog.Dependency.callback_('\"+c+'\\', this)\" type=\"text/javascript\" '+(goog.Dependency.defer_?\"defer\":\"\")+d+\">\\x3c/script>\";b.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(d):d)}else{var e=b.createElement(\"script\");e.defer=goog.Dependency.defer_;e.async=!1;e.type=\"text/javascript\";(d=goog.getScriptNonce())&&e.setAttribute(\"nonce\",d);goog.DebugLoader_.IS_OLD_IE_?\n(a.pause(),e.onreadystatechange=function(){if(\"loaded\"==e.readyState||\"complete\"==e.readyState)a.loaded(),a.resume()}):e.onload=function(){e.onload=null;a.loaded()};e.src=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScriptURL(this.path):this.path;b.head.appendChild(e)}}else goog.logToConsole_(\"Cannot use default debug loader outside of HTML documents.\"),\"deps.js\"==this.relativePath?(goog.logToConsole_(\"Consider setting CLOSURE_IMPORT_SCRIPT before loading base.js, or setting CLOSURE_NO_DEPS to true.\"),\na.loaded()):a.pause()},goog.Es6ModuleDependency=function(a,b,c,d,e){goog.Dependency.call(this,a,b,c,d,e)},goog.inherits(goog.Es6ModuleDependency,goog.Dependency),goog.Es6ModuleDependency.prototype.load=function(a){function b(a,b){a=b?'<script type=\"module\" crossorigin>'+b+\"\\x3c/script>\":'<script type=\"module\" crossorigin src=\"'+a+'\">\\x3c/script>';d.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(a):a)}function c(a,b){var c=d.createElement(\"script\");c.defer=!0;c.async=!1;c.type=\n\"module\";c.setAttribute(\"crossorigin\",!0);var e=goog.getScriptNonce();e&&c.setAttribute(\"nonce\",e);b?c.textContent=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScript(b):b:c.src=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScriptURL(a):a;d.head.appendChild(c)}if(goog.global.CLOSURE_IMPORT_SCRIPT)goog.global.CLOSURE_IMPORT_SCRIPT(this.path)?a.loaded():a.pause();else if(goog.inHtmlDocument_()){var d=goog.global.document,e=this;if(goog.isDocumentLoading_()){var f=b;goog.Dependency.defer_=\n!0}else f=c;var g=goog.Dependency.registerCallback_(function(){goog.Dependency.unregisterCallback_(g);a.setModuleState(goog.ModuleType.ES6)});f(void 0,'goog.Dependency.callback_(\"'+g+'\")');f(this.path,void 0);var h=goog.Dependency.registerCallback_(function(b){goog.Dependency.unregisterCallback_(h);a.registerEs6ModuleExports(e.path,b,goog.moduleLoaderState_.moduleName)});f(void 0,'import * as m from \"'+this.path+'\"; goog.Dependency.callback_(\"'+h+'\", m)');var k=goog.Dependency.registerCallback_(function(){goog.Dependency.unregisterCallback_(k);\na.clearModuleState();a.loaded()});f(void 0,'goog.Dependency.callback_(\"'+k+'\")')}else goog.logToConsole_(\"Cannot use default debug loader outside of HTML documents.\"),a.pause()},goog.TransformedDependency=function(a,b,c,d,e){goog.Dependency.call(this,a,b,c,d,e);this.contents_=null;this.lazyFetch_=!goog.inHtmlDocument_()||!(\"noModule\"in goog.global.document.createElement(\"script\"))},goog.inherits(goog.TransformedDependency,goog.Dependency),goog.TransformedDependency.prototype.load=function(a){function b(){e.contents_=\ngoog.loadFileSync_(e.path);e.contents_&&(e.contents_=e.transform(e.contents_),e.contents_&&(e.contents_+=\"\\n//# sourceURL=\"+e.path))}function c(){e.lazyFetch_&&b();if(e.contents_){f&&a.setModuleState(goog.ModuleType.ES6);try{var c=e.contents_;e.contents_=null;goog.globalEval(c);if(f)var d=goog.moduleLoaderState_.moduleName}finally{f&&a.clearModuleState()}f&&goog.global.$jscomp.require.ensure([e.getPathName()],function(){a.registerEs6ModuleExports(e.path,goog.global.$jscomp.require(e.getPathName()),\nd)});a.loaded()}}function d(){var a=goog.global.document,b=goog.Dependency.registerCallback_(function(){goog.Dependency.unregisterCallback_(b);c()}),d='<script type=\"text/javascript\">'+goog.protectScriptTag_('goog.Dependency.callback_(\"'+b+'\");')+\"\\x3c/script>\";a.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(d):d)}var e=this;if(goog.global.CLOSURE_IMPORT_SCRIPT)b(),this.contents_&&goog.global.CLOSURE_IMPORT_SCRIPT(\"\",this.contents_)?(this.contents_=null,a.loaded()):a.pause();\nelse{var f=this.loadFlags.module==goog.ModuleType.ES6;this.lazyFetch_||b();var g=1<a.pending().length,h=g&&goog.DebugLoader_.IS_OLD_IE_;g=goog.Dependency.defer_&&(g||goog.isDocumentLoading_());if(h||g)a.defer(function(){c()});else{var k=goog.global.document;h=goog.inHtmlDocument_()&&\"ActiveXObject\"in goog.global;if(f&&goog.inHtmlDocument_()&&goog.isDocumentLoading_()&&!h){goog.Dependency.defer_=!0;a.pause();var l=k.onreadystatechange;k.onreadystatechange=function(){\"interactive\"==k.readyState&&(k.onreadystatechange=\nl,c(),a.resume());goog.isFunction(l)&&l.apply(void 0,arguments)}}else!goog.DebugLoader_.IS_OLD_IE_&&goog.inHtmlDocument_()&&goog.isDocumentLoading_()?d():c()}}},goog.TransformedDependency.prototype.transform=function(a){},goog.TranspiledDependency=function(a,b,c,d,e,f){goog.TransformedDependency.call(this,a,b,c,d,e);this.transpiler=f},goog.inherits(goog.TranspiledDependency,goog.TransformedDependency),goog.TranspiledDependency.prototype.transform=function(a){return this.transpiler.transpile(a,this.getPathName())},\ngoog.PreTranspiledEs6ModuleDependency=function(a,b,c,d,e){goog.TransformedDependency.call(this,a,b,c,d,e)},goog.inherits(goog.PreTranspiledEs6ModuleDependency,goog.TransformedDependency),goog.PreTranspiledEs6ModuleDependency.prototype.transform=function(a){return a},goog.GoogModuleDependency=function(a,b,c,d,e,f,g){goog.TransformedDependency.call(this,a,b,c,d,e);this.needsTranspile_=f;this.transpiler_=g},goog.inherits(goog.GoogModuleDependency,goog.TransformedDependency),goog.GoogModuleDependency.prototype.transform=\nfunction(a){this.needsTranspile_&&(a=this.transpiler_.transpile(a,this.getPathName()));return goog.LOAD_MODULE_USING_EVAL&&goog.isDef(goog.global.JSON)?\"goog.loadModule(\"+goog.global.JSON.stringify(a+\"\\n//# sourceURL=\"+this.path+\"\\n\")+\");\":'goog.loadModule(function(exports) {\"use strict\";'+a+\"\\n;return exports});\\n//# sourceURL=\"+this.path+\"\\n\"},goog.DebugLoader_.IS_OLD_IE_=!(goog.global.atob||!goog.global.document||!goog.global.document.all),goog.DebugLoader_.prototype.addDependency=function(a,b,\nc,d){b=b||[];a=a.replace(/\\\\/g,\"/\");var e=goog.normalizePath_(goog.basePath+a);d&&\"boolean\"!==typeof d||(d=d?{module:goog.ModuleType.GOOG}:{});c=this.factory_.createDependency(e,a,b,c,d,goog.transpiler_.needsTranspile(d.lang||\"es3\",d.module));this.dependencies_[e]=c;for(c=0;c<b.length;c++)this.idToPath_[b[c]]=e;this.idToPath_[a]=e},goog.DependencyFactory=function(a){this.transpiler=a},goog.DependencyFactory.prototype.createDependency=function(a,b,c,d,e,f){return e.module==goog.ModuleType.GOOG?new goog.GoogModuleDependency(a,\nb,c,d,e,f,this.transpiler):f?new goog.TranspiledDependency(a,b,c,d,e,this.transpiler):e.module==goog.ModuleType.ES6?\"never\"==goog.TRANSPILE&&goog.ASSUME_ES_MODULES_TRANSPILED?new goog.PreTranspiledEs6ModuleDependency(a,b,c,d,e):new goog.Es6ModuleDependency(a,b,c,d,e):new goog.Dependency(a,b,c,d,e)},goog.debugLoader_=new goog.DebugLoader_,goog.loadClosureDeps=function(){goog.debugLoader_.loadClosureDeps()},goog.setDependencyFactory=function(a){goog.debugLoader_.setDependencyFactory(a)},goog.global.CLOSURE_NO_DEPS||\ngoog.debugLoader_.loadClosureDeps(),goog.bootstrap=function(a,b){goog.debugLoader_.bootstrap(a,b)});goog.TRUSTED_TYPES_POLICY_NAME=\"\";goog.identity_=function(a){return a};goog.createTrustedTypesPolicy=function(a){var b=null;if(\"undefined\"===typeof TrustedTypes||!TrustedTypes.createPolicy)return b;try{b=TrustedTypes.createPolicy(a,{createHTML:goog.identity_,createScript:goog.identity_,createScriptURL:goog.identity_,createURL:goog.identity_})}catch(c){goog.logToConsole_(c.message)}return b};\ngoog.TRUSTED_TYPES_POLICY_=goog.TRUSTED_TYPES_POLICY_NAME?goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME+\"#base\"):null;goog.object={};goog.object.is=function(a,b){return a===b?0!==a||1/a===1/b:a!==a&&b!==b};goog.object.forEach=function(a,b,c){for(var d in a)b.call(c,a[d],d,a)};goog.object.filter=function(a,b,c){var d={},e;for(e in a)b.call(c,a[e],e,a)&&(d[e]=a[e]);return d};goog.object.map=function(a,b,c){var d={},e;for(e in a)d[e]=b.call(c,a[e],e,a);return d};goog.object.some=function(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return!0;return!1};\ngoog.object.every=function(a,b,c){for(var d in a)if(!b.call(c,a[d],d,a))return!1;return!0};goog.object.getCount=function(a){var b=0,c;for(c in a)b++;return b};goog.object.getAnyKey=function(a){for(var b in a)return b};goog.object.getAnyValue=function(a){for(var b in a)return a[b]};goog.object.contains=function(a,b){return goog.object.containsValue(a,b)};goog.object.getValues=function(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b};\ngoog.object.getKeys=function(a){var b=[],c=0,d;for(d in a)b[c++]=d;return b};goog.object.getValueByKeys=function(a,b){var c=goog.isArrayLike(b),d=c?b:arguments;for(c=c?0:1;c<d.length;c++){if(null==a)return;a=a[d[c]]}return a};goog.object.containsKey=function(a,b){return null!==a&&b in a};goog.object.containsValue=function(a,b){for(var c in a)if(a[c]==b)return!0;return!1};goog.object.findKey=function(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};\ngoog.object.findValue=function(a,b,c){return(b=goog.object.findKey(a,b,c))&&a[b]};goog.object.isEmpty=function(a){for(var b in a)return!1;return!0};goog.object.clear=function(a){for(var b in a)delete a[b]};goog.object.remove=function(a,b){var c;(c=b in a)&&delete a[b];return c};goog.object.add=function(a,b,c){if(null!==a&&b in a)throw Error('The object already contains the key \"'+b+'\"');goog.object.set(a,b,c)};goog.object.get=function(a,b,c){return null!==a&&b in a?a[b]:c};\ngoog.object.set=function(a,b,c){a[b]=c};goog.object.setIfUndefined=function(a,b,c){return b in a?a[b]:a[b]=c};goog.object.setWithReturnValueIfNotSet=function(a,b,c){if(b in a)return a[b];c=c();return a[b]=c};goog.object.equals=function(a,b){for(var c in a)if(!(c in b)||a[c]!==b[c])return!1;for(var d in b)if(!(d in a))return!1;return!0};goog.object.clone=function(a){var b={},c;for(c in a)b[c]=a[c];return b};\ngoog.object.unsafeClone=function(a){var b=goog.typeOf(a);if(\"object\"==b||\"array\"==b){if(goog.isFunction(a.clone))return a.clone();b=\"array\"==b?[]:{};for(var c in a)b[c]=goog.object.unsafeClone(a[c]);return b}return a};goog.object.transpose=function(a){var b={},c;for(c in a)b[a[c]]=c;return b};goog.object.PROTOTYPE_FIELDS_=\"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");\ngoog.object.extend=function(a,b){for(var c,d,e=1;e<arguments.length;e++){d=arguments[e];for(c in d)a[c]=d[c];for(var f=0;f<goog.object.PROTOTYPE_FIELDS_.length;f++)c=goog.object.PROTOTYPE_FIELDS_[f],Object.prototype.hasOwnProperty.call(d,c)&&(a[c]=d[c])}};\ngoog.object.create=function(a){var b=arguments.length;if(1==b&&goog.isArray(arguments[0]))return goog.object.create.apply(null,arguments[0]);if(b%2)throw Error(\"Uneven number of arguments\");for(var c={},d=0;d<b;d+=2)c[arguments[d]]=arguments[d+1];return c};goog.object.createSet=function(a){var b=arguments.length;if(1==b&&goog.isArray(arguments[0]))return goog.object.createSet.apply(null,arguments[0]);for(var c={},d=0;d<b;d++)c[arguments[d]]=!0;return c};\ngoog.object.createImmutableView=function(a){var b=a;Object.isFrozen&&!Object.isFrozen(a)&&(b=Object.create(a),Object.freeze(b));return b};goog.object.isImmutableView=function(a){return!!Object.isFrozen&&Object.isFrozen(a)};\ngoog.object.getAllPropertyNames=function(a,b,c){if(!a)return[];if(!Object.getOwnPropertyNames||!Object.getPrototypeOf)return goog.object.getKeys(a);for(var d={};a&&(a!==Object.prototype||b)&&(a!==Function.prototype||c);){for(var e=Object.getOwnPropertyNames(a),f=0;f<e.length;f++)d[e[f]]=!0;a=Object.getPrototypeOf(a)}return goog.object.getKeys(d)};goog.object.getSuperClass=function(a){return(a=Object.getPrototypeOf(a.prototype))&&a.constructor};goog.debug={};goog.debug.Error=function(a){if(Error.captureStackTrace)Error.captureStackTrace(this,goog.debug.Error);else{var b=Error().stack;b&&(this.stack=b)}a&&(this.message=String(a));this.reportErrorToServer=!0};goog.inherits(goog.debug.Error,Error);goog.debug.Error.prototype.name=\"CustomError\";goog.dom={};goog.dom.NodeType={ELEMENT:1,ATTRIBUTE:2,TEXT:3,CDATA_SECTION:4,ENTITY_REFERENCE:5,ENTITY:6,PROCESSING_INSTRUCTION:7,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,NOTATION:12};goog.asserts={};goog.asserts.ENABLE_ASSERTS=goog.DEBUG;goog.asserts.AssertionError=function(a,b){goog.debug.Error.call(this,goog.asserts.subs_(a,b));this.messagePattern=a};goog.inherits(goog.asserts.AssertionError,goog.debug.Error);goog.asserts.AssertionError.prototype.name=\"AssertionError\";goog.asserts.DEFAULT_ERROR_HANDLER=function(a){throw a;};goog.asserts.errorHandler_=goog.asserts.DEFAULT_ERROR_HANDLER;\ngoog.asserts.subs_=function(a,b){a=a.split(\"%s\");for(var c=\"\",d=a.length-1,e=0;e<d;e++)c+=a[e]+(e<b.length?b[e]:\"%s\");return c+a[d]};goog.asserts.doAssertFailure_=function(a,b,c,d){var e=\"Assertion failed\";if(c){e+=\": \"+c;var f=d}else a&&(e+=\": \"+a,f=b);a=new goog.asserts.AssertionError(\"\"+e,f||[]);goog.asserts.errorHandler_(a)};goog.asserts.setErrorHandler=function(a){goog.asserts.ENABLE_ASSERTS&&(goog.asserts.errorHandler_=a)};\ngoog.asserts.assert=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!a&&goog.asserts.doAssertFailure_(\"\",null,b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertExists=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&null==a&&goog.asserts.doAssertFailure_(\"Expected to exist: %s.\",[a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.fail=function(a,b){goog.asserts.ENABLE_ASSERTS&&goog.asserts.errorHandler_(new goog.asserts.AssertionError(\"Failure\"+(a?\": \"+a:\"\"),Array.prototype.slice.call(arguments,1)))};goog.asserts.assertNumber=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isNumber(a)&&goog.asserts.doAssertFailure_(\"Expected number but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertString=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isString(a)&&goog.asserts.doAssertFailure_(\"Expected string but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertFunction=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isFunction(a)&&goog.asserts.doAssertFailure_(\"Expected function but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertObject=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isObject(a)&&goog.asserts.doAssertFailure_(\"Expected object but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertArray=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isArray(a)&&goog.asserts.doAssertFailure_(\"Expected array but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertBoolean=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isBoolean(a)&&goog.asserts.doAssertFailure_(\"Expected boolean but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertElement=function(a,b,c){!goog.asserts.ENABLE_ASSERTS||goog.isObject(a)&&a.nodeType==goog.dom.NodeType.ELEMENT||goog.asserts.doAssertFailure_(\"Expected Element but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertInstanceof=function(a,b,c,d){!goog.asserts.ENABLE_ASSERTS||a instanceof b||goog.asserts.doAssertFailure_(\"Expected instanceof %s but got %s.\",[goog.asserts.getType_(b),goog.asserts.getType_(a)],c,Array.prototype.slice.call(arguments,3));return a};goog.asserts.assertFinite=function(a,b,c){!goog.asserts.ENABLE_ASSERTS||\"number\"==typeof a&&isFinite(a)||goog.asserts.doAssertFailure_(\"Expected %s to be a finite number but it is not.\",[a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertObjectPrototypeIsIntact=function(){for(var a in Object.prototype)goog.asserts.fail(a+\" should not be enumerable in Object.prototype.\")};goog.asserts.getType_=function(a){return a instanceof Function?a.displayName||a.name||\"unknown type name\":a instanceof Object?a.constructor.displayName||a.constructor.name||Object.prototype.toString.call(a):null===a?\"null\":typeof a};var jspb={BinaryConstants:{},ConstBinaryMessage:function(){},BinaryMessage:function(){}};jspb.BinaryConstants.FieldType={INVALID:-1,DOUBLE:1,FLOAT:2,INT64:3,UINT64:4,INT32:5,FIXED64:6,FIXED32:7,BOOL:8,STRING:9,GROUP:10,MESSAGE:11,BYTES:12,UINT32:13,ENUM:14,SFIXED32:15,SFIXED64:16,SINT32:17,SINT64:18,FHASH64:30,VHASH64:31};jspb.BinaryConstants.WireType={INVALID:-1,VARINT:0,FIXED64:1,DELIMITED:2,START_GROUP:3,END_GROUP:4,FIXED32:5};\njspb.BinaryConstants.FieldTypeToWireType=function(a){var b=jspb.BinaryConstants.FieldType,c=jspb.BinaryConstants.WireType;switch(a){case b.INT32:case b.INT64:case b.UINT32:case b.UINT64:case b.SINT32:case b.SINT64:case b.BOOL:case b.ENUM:case b.VHASH64:return c.VARINT;case b.DOUBLE:case b.FIXED64:case b.SFIXED64:case b.FHASH64:return c.FIXED64;case b.STRING:case b.MESSAGE:case b.BYTES:return c.DELIMITED;case b.FLOAT:case b.FIXED32:case b.SFIXED32:return c.FIXED32;default:return c.INVALID}};\njspb.BinaryConstants.INVALID_FIELD_NUMBER=-1;jspb.BinaryConstants.FLOAT32_EPS=1.401298464324817E-45;jspb.BinaryConstants.FLOAT32_MIN=1.1754943508222875E-38;jspb.BinaryConstants.FLOAT32_MAX=3.4028234663852886E38;jspb.BinaryConstants.FLOAT64_EPS=4.9E-324;jspb.BinaryConstants.FLOAT64_MIN=2.2250738585072014E-308;jspb.BinaryConstants.FLOAT64_MAX=1.7976931348623157E308;jspb.BinaryConstants.TWO_TO_20=1048576;jspb.BinaryConstants.TWO_TO_23=8388608;jspb.BinaryConstants.TWO_TO_31=2147483648;\njspb.BinaryConstants.TWO_TO_32=4294967296;jspb.BinaryConstants.TWO_TO_52=4503599627370496;jspb.BinaryConstants.TWO_TO_63=0x7fffffffffffffff;jspb.BinaryConstants.TWO_TO_64=1.8446744073709552E19;jspb.BinaryConstants.ZERO_HASH=\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";goog.array={};goog.NATIVE_ARRAY_PROTOTYPES=goog.TRUSTED_SITE;goog.array.ASSUME_NATIVE_FUNCTIONS=2012<goog.FEATURESET_YEAR;goog.array.peek=function(a){return a[a.length-1]};goog.array.last=goog.array.peek;\ngoog.array.indexOf=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.indexOf)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.indexOf.call(a,b,c)}:function(a,b,c){c=null==c?0:0>c?Math.max(0,a.length+c):c;if(goog.isString(a))return goog.isString(b)&&1==b.length?a.indexOf(b,c):-1;for(;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};\ngoog.array.lastIndexOf=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.lastIndexOf)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.lastIndexOf.call(a,b,null==c?a.length-1:c)}:function(a,b,c){c=null==c?a.length-1:c;0>c&&(c=Math.max(0,a.length+c));if(goog.isString(a))return goog.isString(b)&&1==b.length?a.lastIndexOf(b,c):-1;for(;0<=c;c--)if(c in a&&a[c]===b)return c;return-1};\ngoog.array.forEach=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.forEach)?function(a,b,c){goog.asserts.assert(null!=a.length);Array.prototype.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(\"\"):a,f=0;f<d;f++)f in e&&b.call(c,e[f],f,a)};goog.array.forEachRight=function(a,b,c){var d=a.length,e=goog.isString(a)?a.split(\"\"):a;for(--d;0<=d;--d)d in e&&b.call(c,e[d],d,a)};\ngoog.array.filter=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.filter)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.filter.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=[],f=0,g=goog.isString(a)?a.split(\"\"):a,h=0;h<d;h++)if(h in g){var k=g[h];b.call(c,k,h,a)&&(e[f++]=k)}return e};\ngoog.array.map=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.map)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.map.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=Array(d),f=goog.isString(a)?a.split(\"\"):a,g=0;g<d;g++)g in f&&(e[g]=b.call(c,f[g],g,a));return e};\ngoog.array.reduce=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.reduce)?function(a,b,c,d){goog.asserts.assert(null!=a.length);d&&(b=goog.bind(b,d));return Array.prototype.reduce.call(a,b,c)}:function(a,b,c,d){var e=c;goog.array.forEach(a,function(c,g){e=b.call(d,e,c,g,a)});return e};\ngoog.array.reduceRight=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.reduceRight)?function(a,b,c,d){goog.asserts.assert(null!=a.length);goog.asserts.assert(null!=b);d&&(b=goog.bind(b,d));return Array.prototype.reduceRight.call(a,b,c)}:function(a,b,c,d){var e=c;goog.array.forEachRight(a,function(c,g){e=b.call(d,e,c,g,a)});return e};\ngoog.array.some=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.some)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.some.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(\"\"):a,f=0;f<d;f++)if(f in e&&b.call(c,e[f],f,a))return!0;return!1};\ngoog.array.every=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.every)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.every.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(\"\"):a,f=0;f<d;f++)if(f in e&&!b.call(c,e[f],f,a))return!1;return!0};goog.array.count=function(a,b,c){var d=0;goog.array.forEach(a,function(a,f,g){b.call(c,a,f,g)&&++d},c);return d};\ngoog.array.find=function(a,b,c){b=goog.array.findIndex(a,b,c);return 0>b?null:goog.isString(a)?a.charAt(b):a[b]};goog.array.findIndex=function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(\"\"):a,f=0;f<d;f++)if(f in e&&b.call(c,e[f],f,a))return f;return-1};goog.array.findRight=function(a,b,c){b=goog.array.findIndexRight(a,b,c);return 0>b?null:goog.isString(a)?a.charAt(b):a[b]};\ngoog.array.findIndexRight=function(a,b,c){var d=a.length,e=goog.isString(a)?a.split(\"\"):a;for(--d;0<=d;d--)if(d in e&&b.call(c,e[d],d,a))return d;return-1};goog.array.contains=function(a,b){return 0<=goog.array.indexOf(a,b)};goog.array.isEmpty=function(a){return 0==a.length};goog.array.clear=function(a){if(!goog.isArray(a))for(var b=a.length-1;0<=b;b--)delete a[b];a.length=0};goog.array.insert=function(a,b){goog.array.contains(a,b)||a.push(b)};\ngoog.array.insertAt=function(a,b,c){goog.array.splice(a,c,0,b)};goog.array.insertArrayAt=function(a,b,c){goog.partial(goog.array.splice,a,c,0).apply(null,b)};goog.array.insertBefore=function(a,b,c){var d;2==arguments.length||0>(d=goog.array.indexOf(a,c))?a.push(b):goog.array.insertAt(a,b,d)};goog.array.remove=function(a,b){b=goog.array.indexOf(a,b);var c;(c=0<=b)&&goog.array.removeAt(a,b);return c};\ngoog.array.removeLast=function(a,b){b=goog.array.lastIndexOf(a,b);return 0<=b?(goog.array.removeAt(a,b),!0):!1};goog.array.removeAt=function(a,b){goog.asserts.assert(null!=a.length);return 1==Array.prototype.splice.call(a,b,1).length};goog.array.removeIf=function(a,b,c){b=goog.array.findIndex(a,b,c);return 0<=b?(goog.array.removeAt(a,b),!0):!1};goog.array.removeAllIf=function(a,b,c){var d=0;goog.array.forEachRight(a,function(e,f){b.call(c,e,f,a)&&goog.array.removeAt(a,f)&&d++});return d};\ngoog.array.concat=function(a){return Array.prototype.concat.apply([],arguments)};goog.array.join=function(a){return Array.prototype.concat.apply([],arguments)};goog.array.toArray=function(a){var b=a.length;if(0<b){for(var c=Array(b),d=0;d<b;d++)c[d]=a[d];return c}return[]};goog.array.clone=goog.array.toArray;goog.array.extend=function(a,b){for(var c=1;c<arguments.length;c++){var d=arguments[c];if(goog.isArrayLike(d)){var e=a.length||0,f=d.length||0;a.length=e+f;for(var g=0;g<f;g++)a[e+g]=d[g]}else a.push(d)}};\ngoog.array.splice=function(a,b,c,d){goog.asserts.assert(null!=a.length);return Array.prototype.splice.apply(a,goog.array.slice(arguments,1))};goog.array.slice=function(a,b,c){goog.asserts.assert(null!=a.length);return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};\ngoog.array.removeDuplicates=function(a,b,c){b=b||a;var d=function(a){return goog.isObject(a)?\"o\"+goog.getUid(a):(typeof a).charAt(0)+a};c=c||d;d={};for(var e=0,f=0;f<a.length;){var g=a[f++],h=c(g);Object.prototype.hasOwnProperty.call(d,h)||(d[h]=!0,b[e++]=g)}b.length=e};goog.array.binarySearch=function(a,b,c){return goog.array.binarySearch_(a,c||goog.array.defaultCompare,!1,b)};goog.array.binarySelect=function(a,b,c){return goog.array.binarySearch_(a,b,!0,void 0,c)};\ngoog.array.binarySearch_=function(a,b,c,d,e){for(var f=0,g=a.length,h;f<g;){var k=f+g>>1;var l=c?b.call(e,a[k],k,a):b(d,a[k]);0<l?f=k+1:(g=k,h=!l)}return h?f:~f};goog.array.sort=function(a,b){a.sort(b||goog.array.defaultCompare)};goog.array.stableSort=function(a,b){for(var c=Array(a.length),d=0;d<a.length;d++)c[d]={index:d,value:a[d]};var e=b||goog.array.defaultCompare;goog.array.sort(c,function(a,b){return e(a.value,b.value)||a.index-b.index});for(d=0;d<a.length;d++)a[d]=c[d].value};\ngoog.array.sortByKey=function(a,b,c){var d=c||goog.array.defaultCompare;goog.array.sort(a,function(a,c){return d(b(a),b(c))})};goog.array.sortObjectsByKey=function(a,b,c){goog.array.sortByKey(a,function(a){return a[b]},c)};goog.array.isSorted=function(a,b,c){b=b||goog.array.defaultCompare;for(var d=1;d<a.length;d++){var e=b(a[d-1],a[d]);if(0<e||0==e&&c)return!1}return!0};\ngoog.array.equals=function(a,b,c){if(!goog.isArrayLike(a)||!goog.isArrayLike(b)||a.length!=b.length)return!1;var d=a.length;c=c||goog.array.defaultCompareEquality;for(var e=0;e<d;e++)if(!c(a[e],b[e]))return!1;return!0};goog.array.compare3=function(a,b,c){c=c||goog.array.defaultCompare;for(var d=Math.min(a.length,b.length),e=0;e<d;e++){var f=c(a[e],b[e]);if(0!=f)return f}return goog.array.defaultCompare(a.length,b.length)};goog.array.defaultCompare=function(a,b){return a>b?1:a<b?-1:0};\ngoog.array.inverseDefaultCompare=function(a,b){return-goog.array.defaultCompare(a,b)};goog.array.defaultCompareEquality=function(a,b){return a===b};goog.array.binaryInsert=function(a,b,c){c=goog.array.binarySearch(a,b,c);return 0>c?(goog.array.insertAt(a,b,-(c+1)),!0):!1};goog.array.binaryRemove=function(a,b,c){b=goog.array.binarySearch(a,b,c);return 0<=b?goog.array.removeAt(a,b):!1};\ngoog.array.bucket=function(a,b,c){for(var d={},e=0;e<a.length;e++){var f=a[e],g=b.call(c,f,e,a);goog.isDef(g)&&(d[g]||(d[g]=[])).push(f)}return d};goog.array.toObject=function(a,b,c){var d={};goog.array.forEach(a,function(e,f){d[b.call(c,e,f,a)]=e});return d};goog.array.range=function(a,b,c){var d=[],e=0,f=a;c=c||1;void 0!==b&&(e=a,f=b);if(0>c*(f-e))return[];if(0<c)for(a=e;a<f;a+=c)d.push(a);else for(a=e;a>f;a+=c)d.push(a);return d};\ngoog.array.repeat=function(a,b){for(var c=[],d=0;d<b;d++)c[d]=a;return c};goog.array.flatten=function(a){for(var b=[],c=0;c<arguments.length;c++){var d=arguments[c];if(goog.isArray(d))for(var e=0;e<d.length;e+=8192){var f=goog.array.slice(d,e,e+8192);f=goog.array.flatten.apply(null,f);for(var g=0;g<f.length;g++)b.push(f[g])}else b.push(d)}return b};\ngoog.array.rotate=function(a,b){goog.asserts.assert(null!=a.length);a.length&&(b%=a.length,0<b?Array.prototype.unshift.apply(a,a.splice(-b,b)):0>b&&Array.prototype.push.apply(a,a.splice(0,-b)));return a};goog.array.moveItem=function(a,b,c){goog.asserts.assert(0<=b&&b<a.length);goog.asserts.assert(0<=c&&c<a.length);b=Array.prototype.splice.call(a,b,1);Array.prototype.splice.call(a,c,0,b[0])};\ngoog.array.zip=function(a){if(!arguments.length)return[];for(var b=[],c=arguments[0].length,d=1;d<arguments.length;d++)arguments[d].length<c&&(c=arguments[d].length);for(d=0;d<c;d++){for(var e=[],f=0;f<arguments.length;f++)e.push(arguments[f][d]);b.push(e)}return b};goog.array.shuffle=function(a,b){b=b||Math.random;for(var c=a.length-1;0<c;c--){var d=Math.floor(b()*(c+1)),e=a[c];a[c]=a[d];a[d]=e}};goog.array.copyByIndex=function(a,b){var c=[];goog.array.forEach(b,function(b){c.push(a[b])});return c};\ngoog.array.concatMap=function(a,b,c){return goog.array.concat.apply([],goog.array.map(a,b,c))};goog.crypt={};goog.crypt.stringToByteArray=function(a){for(var b=[],c=0,d=0;d<a.length;d++){var e=a.charCodeAt(d);255<e&&(b[c++]=e&255,e>>=8);b[c++]=e}return b};goog.crypt.byteArrayToString=function(a){if(8192>=a.length)return String.fromCharCode.apply(null,a);for(var b=\"\",c=0;c<a.length;c+=8192){var d=goog.array.slice(a,c,c+8192);b+=String.fromCharCode.apply(null,d)}return b};\ngoog.crypt.byteArrayToHex=function(a,b){return goog.array.map(a,function(a){a=a.toString(16);return 1<a.length?a:\"0\"+a}).join(b||\"\")};goog.crypt.hexToByteArray=function(a){goog.asserts.assert(0==a.length%2,\"Key string length must be multiple of 2\");for(var b=[],c=0;c<a.length;c+=2)b.push(parseInt(a.substring(c,c+2),16));return b};\ngoog.crypt.stringToUtf8ByteArray=function(a){for(var b=[],c=0,d=0;d<a.length;d++){var e=a.charCodeAt(d);128>e?b[c++]=e:(2048>e?b[c++]=e>>6|192:(55296==(e&64512)&&d+1<a.length&&56320==(a.charCodeAt(d+1)&64512)?(e=65536+((e&1023)<<10)+(a.charCodeAt(++d)&1023),b[c++]=e>>18|240,b[c++]=e>>12&63|128):b[c++]=e>>12|224,b[c++]=e>>6&63|128),b[c++]=e&63|128)}return b};\ngoog.crypt.utf8ByteArrayToString=function(a){for(var b=[],c=0,d=0;c<a.length;){var e=a[c++];if(128>e)b[d++]=String.fromCharCode(e);else if(191<e&&224>e){var f=a[c++];b[d++]=String.fromCharCode((e&31)<<6|f&63)}else if(239<e&&365>e){f=a[c++];var g=a[c++],h=a[c++];e=((e&7)<<18|(f&63)<<12|(g&63)<<6|h&63)-65536;b[d++]=String.fromCharCode(55296+(e>>10));b[d++]=String.fromCharCode(56320+(e&1023))}else f=a[c++],g=a[c++],b[d++]=String.fromCharCode((e&15)<<12|(f&63)<<6|g&63)}return b.join(\"\")};\ngoog.crypt.xorByteArray=function(a,b){goog.asserts.assert(a.length==b.length,\"XOR array lengths must match\");for(var c=[],d=0;d<a.length;d++)c.push(a[d]^b[d]);return c};goog.dom.asserts={};goog.dom.asserts.assertIsLocation=function(a){if(goog.asserts.ENABLE_ASSERTS){var b=goog.dom.asserts.getWindow_(a);b&&(!a||!(a instanceof b.Location)&&a instanceof b.Element)&&goog.asserts.fail(\"Argument is not a Location (or a non-Element mock); got: %s\",goog.dom.asserts.debugStringForType_(a))}return a};\ngoog.dom.asserts.assertIsElementType_=function(a,b){if(goog.asserts.ENABLE_ASSERTS){var c=goog.dom.asserts.getWindow_(a);c&&\"undefined\"!=typeof c[b]&&(a&&(a instanceof c[b]||!(a instanceof c.Location||a instanceof c.Element))||goog.asserts.fail(\"Argument is not a %s (or a non-Element, non-Location mock); got: %s\",b,goog.dom.asserts.debugStringForType_(a)))}return a};goog.dom.asserts.assertIsHTMLAnchorElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLAnchorElement\")};\ngoog.dom.asserts.assertIsHTMLButtonElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLButtonElement\")};goog.dom.asserts.assertIsHTMLLinkElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLLinkElement\")};goog.dom.asserts.assertIsHTMLImageElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLImageElement\")};goog.dom.asserts.assertIsHTMLAudioElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLAudioElement\")};\ngoog.dom.asserts.assertIsHTMLVideoElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLVideoElement\")};goog.dom.asserts.assertIsHTMLInputElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLInputElement\")};goog.dom.asserts.assertIsHTMLTextAreaElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLTextAreaElement\")};goog.dom.asserts.assertIsHTMLCanvasElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLCanvasElement\")};\ngoog.dom.asserts.assertIsHTMLEmbedElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLEmbedElement\")};goog.dom.asserts.assertIsHTMLFormElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLFormElement\")};goog.dom.asserts.assertIsHTMLFrameElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLFrameElement\")};goog.dom.asserts.assertIsHTMLIFrameElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLIFrameElement\")};\ngoog.dom.asserts.assertIsHTMLObjectElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLObjectElement\")};goog.dom.asserts.assertIsHTMLScriptElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLScriptElement\")};\ngoog.dom.asserts.debugStringForType_=function(a){if(goog.isObject(a))try{return a.constructor.displayName||a.constructor.name||Object.prototype.toString.call(a)}catch(b){return\"<object could not be stringified>\"}else return void 0===a?\"undefined\":null===a?\"null\":typeof a};goog.dom.asserts.getWindow_=function(a){try{var b=a&&a.ownerDocument,c=b&&(b.defaultView||b.parentWindow);c=c||goog.global;if(c.Element&&c.Location)return c}catch(d){}return null};goog.functions={};goog.functions.constant=function(a){return function(){return a}};goog.functions.FALSE=function(){return!1};goog.functions.TRUE=function(){return!0};goog.functions.NULL=function(){return null};goog.functions.identity=function(a,b){return a};goog.functions.error=function(a){return function(){throw Error(a);}};goog.functions.fail=function(a){return function(){throw a;}};\ngoog.functions.lock=function(a,b){b=b||0;return function(){return a.apply(this,Array.prototype.slice.call(arguments,0,b))}};goog.functions.nth=function(a){return function(){return arguments[a]}};goog.functions.partialRight=function(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var b=Array.prototype.slice.call(arguments);b.push.apply(b,c);return a.apply(this,b)}};goog.functions.withReturnValue=function(a,b){return goog.functions.sequence(a,goog.functions.constant(b))};\ngoog.functions.equalTo=function(a,b){return function(c){return b?a==c:a===c}};goog.functions.compose=function(a,b){var c=arguments,d=c.length;return function(){var a;d&&(a=c[d-1].apply(this,arguments));for(var b=d-2;0<=b;b--)a=c[b].call(this,a);return a}};goog.functions.sequence=function(a){var b=arguments,c=b.length;return function(){for(var a,e=0;e<c;e++)a=b[e].apply(this,arguments);return a}};\ngoog.functions.and=function(a){var b=arguments,c=b.length;return function(){for(var a=0;a<c;a++)if(!b[a].apply(this,arguments))return!1;return!0}};goog.functions.or=function(a){var b=arguments,c=b.length;return function(){for(var a=0;a<c;a++)if(b[a].apply(this,arguments))return!0;return!1}};goog.functions.not=function(a){return function(){return!a.apply(this,arguments)}};\ngoog.functions.create=function(a,b){var c=function(){};c.prototype=a.prototype;c=new c;a.apply(c,Array.prototype.slice.call(arguments,1));return c};goog.functions.CACHE_RETURN_VALUE=!0;goog.functions.cacheReturnValue=function(a){var b=!1,c;return function(){if(!goog.functions.CACHE_RETURN_VALUE)return a();b||(c=a(),b=!0);return c}};goog.functions.once=function(a){var b=a;return function(){if(b){var a=b;b=null;a()}}};\ngoog.functions.debounce=function(a,b,c){var d=0;return function(e){goog.global.clearTimeout(d);var f=arguments;d=goog.global.setTimeout(function(){a.apply(c,f)},b)}};goog.functions.throttle=function(a,b,c){var d=0,e=!1,f=[],g=function(){d=0;e&&(e=!1,h())},h=function(){d=goog.global.setTimeout(g,b);a.apply(c,f)};return function(a){f=arguments;d?e=!0:h()}};goog.functions.rateLimit=function(a,b,c){var d=0,e=function(){d=0};return function(f){d||(d=goog.global.setTimeout(e,b),a.apply(c,arguments))}};goog.dom.HtmlElement=function(){};goog.dom.TagName=function(a){this.tagName_=a};goog.dom.TagName.prototype.toString=function(){return this.tagName_};goog.dom.TagName.A=new goog.dom.TagName(\"A\");goog.dom.TagName.ABBR=new goog.dom.TagName(\"ABBR\");goog.dom.TagName.ACRONYM=new goog.dom.TagName(\"ACRONYM\");goog.dom.TagName.ADDRESS=new goog.dom.TagName(\"ADDRESS\");goog.dom.TagName.APPLET=new goog.dom.TagName(\"APPLET\");goog.dom.TagName.AREA=new goog.dom.TagName(\"AREA\");goog.dom.TagName.ARTICLE=new goog.dom.TagName(\"ARTICLE\");\ngoog.dom.TagName.ASIDE=new goog.dom.TagName(\"ASIDE\");goog.dom.TagName.AUDIO=new goog.dom.TagName(\"AUDIO\");goog.dom.TagName.B=new goog.dom.TagName(\"B\");goog.dom.TagName.BASE=new goog.dom.TagName(\"BASE\");goog.dom.TagName.BASEFONT=new goog.dom.TagName(\"BASEFONT\");goog.dom.TagName.BDI=new goog.dom.TagName(\"BDI\");goog.dom.TagName.BDO=new goog.dom.TagName(\"BDO\");goog.dom.TagName.BIG=new goog.dom.TagName(\"BIG\");goog.dom.TagName.BLOCKQUOTE=new goog.dom.TagName(\"BLOCKQUOTE\");goog.dom.TagName.BODY=new goog.dom.TagName(\"BODY\");\ngoog.dom.TagName.BR=new goog.dom.TagName(\"BR\");goog.dom.TagName.BUTTON=new goog.dom.TagName(\"BUTTON\");goog.dom.TagName.CANVAS=new goog.dom.TagName(\"CANVAS\");goog.dom.TagName.CAPTION=new goog.dom.TagName(\"CAPTION\");goog.dom.TagName.CENTER=new goog.dom.TagName(\"CENTER\");goog.dom.TagName.CITE=new goog.dom.TagName(\"CITE\");goog.dom.TagName.CODE=new goog.dom.TagName(\"CODE\");goog.dom.TagName.COL=new goog.dom.TagName(\"COL\");goog.dom.TagName.COLGROUP=new goog.dom.TagName(\"COLGROUP\");\ngoog.dom.TagName.COMMAND=new goog.dom.TagName(\"COMMAND\");goog.dom.TagName.DATA=new goog.dom.TagName(\"DATA\");goog.dom.TagName.DATALIST=new goog.dom.TagName(\"DATALIST\");goog.dom.TagName.DD=new goog.dom.TagName(\"DD\");goog.dom.TagName.DEL=new goog.dom.TagName(\"DEL\");goog.dom.TagName.DETAILS=new goog.dom.TagName(\"DETAILS\");goog.dom.TagName.DFN=new goog.dom.TagName(\"DFN\");goog.dom.TagName.DIALOG=new goog.dom.TagName(\"DIALOG\");goog.dom.TagName.DIR=new goog.dom.TagName(\"DIR\");goog.dom.TagName.DIV=new goog.dom.TagName(\"DIV\");\ngoog.dom.TagName.DL=new goog.dom.TagName(\"DL\");goog.dom.TagName.DT=new goog.dom.TagName(\"DT\");goog.dom.TagName.EM=new goog.dom.TagName(\"EM\");goog.dom.TagName.EMBED=new goog.dom.TagName(\"EMBED\");goog.dom.TagName.FIELDSET=new goog.dom.TagName(\"FIELDSET\");goog.dom.TagName.FIGCAPTION=new goog.dom.TagName(\"FIGCAPTION\");goog.dom.TagName.FIGURE=new goog.dom.TagName(\"FIGURE\");goog.dom.TagName.FONT=new goog.dom.TagName(\"FONT\");goog.dom.TagName.FOOTER=new goog.dom.TagName(\"FOOTER\");goog.dom.TagName.FORM=new goog.dom.TagName(\"FORM\");\ngoog.dom.TagName.FRAME=new goog.dom.TagName(\"FRAME\");goog.dom.TagName.FRAMESET=new goog.dom.TagName(\"FRAMESET\");goog.dom.TagName.H1=new goog.dom.TagName(\"H1\");goog.dom.TagName.H2=new goog.dom.TagName(\"H2\");goog.dom.TagName.H3=new goog.dom.TagName(\"H3\");goog.dom.TagName.H4=new goog.dom.TagName(\"H4\");goog.dom.TagName.H5=new goog.dom.TagName(\"H5\");goog.dom.TagName.H6=new goog.dom.TagName(\"H6\");goog.dom.TagName.HEAD=new goog.dom.TagName(\"HEAD\");goog.dom.TagName.HEADER=new goog.dom.TagName(\"HEADER\");\ngoog.dom.TagName.HGROUP=new goog.dom.TagName(\"HGROUP\");goog.dom.TagName.HR=new goog.dom.TagName(\"HR\");goog.dom.TagName.HTML=new goog.dom.TagName(\"HTML\");goog.dom.TagName.I=new goog.dom.TagName(\"I\");goog.dom.TagName.IFRAME=new goog.dom.TagName(\"IFRAME\");goog.dom.TagName.IMG=new goog.dom.TagName(\"IMG\");goog.dom.TagName.INPUT=new goog.dom.TagName(\"INPUT\");goog.dom.TagName.INS=new goog.dom.TagName(\"INS\");goog.dom.TagName.ISINDEX=new goog.dom.TagName(\"ISINDEX\");goog.dom.TagName.KBD=new goog.dom.TagName(\"KBD\");\ngoog.dom.TagName.KEYGEN=new goog.dom.TagName(\"KEYGEN\");goog.dom.TagName.LABEL=new goog.dom.TagName(\"LABEL\");goog.dom.TagName.LEGEND=new goog.dom.TagName(\"LEGEND\");goog.dom.TagName.LI=new goog.dom.TagName(\"LI\");goog.dom.TagName.LINK=new goog.dom.TagName(\"LINK\");goog.dom.TagName.MAIN=new goog.dom.TagName(\"MAIN\");goog.dom.TagName.MAP=new goog.dom.TagName(\"MAP\");goog.dom.TagName.MARK=new goog.dom.TagName(\"MARK\");goog.dom.TagName.MATH=new goog.dom.TagName(\"MATH\");goog.dom.TagName.MENU=new goog.dom.TagName(\"MENU\");\ngoog.dom.TagName.MENUITEM=new goog.dom.TagName(\"MENUITEM\");goog.dom.TagName.META=new goog.dom.TagName(\"META\");goog.dom.TagName.METER=new goog.dom.TagName(\"METER\");goog.dom.TagName.NAV=new goog.dom.TagName(\"NAV\");goog.dom.TagName.NOFRAMES=new goog.dom.TagName(\"NOFRAMES\");goog.dom.TagName.NOSCRIPT=new goog.dom.TagName(\"NOSCRIPT\");goog.dom.TagName.OBJECT=new goog.dom.TagName(\"OBJECT\");goog.dom.TagName.OL=new goog.dom.TagName(\"OL\");goog.dom.TagName.OPTGROUP=new goog.dom.TagName(\"OPTGROUP\");\ngoog.dom.TagName.OPTION=new goog.dom.TagName(\"OPTION\");goog.dom.TagName.OUTPUT=new goog.dom.TagName(\"OUTPUT\");goog.dom.TagName.P=new goog.dom.TagName(\"P\");goog.dom.TagName.PARAM=new goog.dom.TagName(\"PARAM\");goog.dom.TagName.PICTURE=new goog.dom.TagName(\"PICTURE\");goog.dom.TagName.PRE=new goog.dom.TagName(\"PRE\");goog.dom.TagName.PROGRESS=new goog.dom.TagName(\"PROGRESS\");goog.dom.TagName.Q=new goog.dom.TagName(\"Q\");goog.dom.TagName.RP=new goog.dom.TagName(\"RP\");goog.dom.TagName.RT=new goog.dom.TagName(\"RT\");\ngoog.dom.TagName.RTC=new goog.dom.TagName(\"RTC\");goog.dom.TagName.RUBY=new goog.dom.TagName(\"RUBY\");goog.dom.TagName.S=new goog.dom.TagName(\"S\");goog.dom.TagName.SAMP=new goog.dom.TagName(\"SAMP\");goog.dom.TagName.SCRIPT=new goog.dom.TagName(\"SCRIPT\");goog.dom.TagName.SECTION=new goog.dom.TagName(\"SECTION\");goog.dom.TagName.SELECT=new goog.dom.TagName(\"SELECT\");goog.dom.TagName.SMALL=new goog.dom.TagName(\"SMALL\");goog.dom.TagName.SOURCE=new goog.dom.TagName(\"SOURCE\");goog.dom.TagName.SPAN=new goog.dom.TagName(\"SPAN\");\ngoog.dom.TagName.STRIKE=new goog.dom.TagName(\"STRIKE\");goog.dom.TagName.STRONG=new goog.dom.TagName(\"STRONG\");goog.dom.TagName.STYLE=new goog.dom.TagName(\"STYLE\");goog.dom.TagName.SUB=new goog.dom.TagName(\"SUB\");goog.dom.TagName.SUMMARY=new goog.dom.TagName(\"SUMMARY\");goog.dom.TagName.SUP=new goog.dom.TagName(\"SUP\");goog.dom.TagName.SVG=new goog.dom.TagName(\"SVG\");goog.dom.TagName.TABLE=new goog.dom.TagName(\"TABLE\");goog.dom.TagName.TBODY=new goog.dom.TagName(\"TBODY\");goog.dom.TagName.TD=new goog.dom.TagName(\"TD\");\ngoog.dom.TagName.TEMPLATE=new goog.dom.TagName(\"TEMPLATE\");goog.dom.TagName.TEXTAREA=new goog.dom.TagName(\"TEXTAREA\");goog.dom.TagName.TFOOT=new goog.dom.TagName(\"TFOOT\");goog.dom.TagName.TH=new goog.dom.TagName(\"TH\");goog.dom.TagName.THEAD=new goog.dom.TagName(\"THEAD\");goog.dom.TagName.TIME=new goog.dom.TagName(\"TIME\");goog.dom.TagName.TITLE=new goog.dom.TagName(\"TITLE\");goog.dom.TagName.TR=new goog.dom.TagName(\"TR\");goog.dom.TagName.TRACK=new goog.dom.TagName(\"TRACK\");goog.dom.TagName.TT=new goog.dom.TagName(\"TT\");\ngoog.dom.TagName.U=new goog.dom.TagName(\"U\");goog.dom.TagName.UL=new goog.dom.TagName(\"UL\");goog.dom.TagName.VAR=new goog.dom.TagName(\"VAR\");goog.dom.TagName.VIDEO=new goog.dom.TagName(\"VIDEO\");goog.dom.TagName.WBR=new goog.dom.TagName(\"WBR\");goog.dom.tags={};goog.dom.tags.VOID_TAGS_={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0};goog.dom.tags.isVoidTag=function(a){return!0===goog.dom.tags.VOID_TAGS_[a]};goog.html={};goog.html.trustedtypes={};goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY=goog.TRUSTED_TYPES_POLICY_NAME?goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME+\"#html\"):null;goog.string={};goog.string.TypedString=function(){};goog.string.Const=function(a,b){this.stringConstValueWithSecurityContract__googStringSecurityPrivate_=a===goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_&&b||\"\";this.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_=goog.string.Const.TYPE_MARKER_};goog.string.Const.prototype.implementsGoogStringTypedString=!0;goog.string.Const.prototype.getTypedStringValue=function(){return this.stringConstValueWithSecurityContract__googStringSecurityPrivate_};\ngoog.string.Const.prototype.toString=function(){return\"Const{\"+this.stringConstValueWithSecurityContract__googStringSecurityPrivate_+\"}\"};goog.string.Const.unwrap=function(a){if(a instanceof goog.string.Const&&a.constructor===goog.string.Const&&a.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_===goog.string.Const.TYPE_MARKER_)return a.stringConstValueWithSecurityContract__googStringSecurityPrivate_;goog.asserts.fail(\"expected object of type Const, got '\"+a+\"'\");return\"type_error:Const\"};\ngoog.string.Const.from=function(a){return new goog.string.Const(goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_,a)};goog.string.Const.TYPE_MARKER_={};goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_={};goog.string.Const.EMPTY=goog.string.Const.from(\"\");goog.html.SafeScript=function(){this.privateDoNotAccessOrElseSafeScriptWrappedValue_=\"\";this.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_};goog.html.SafeScript.prototype.implementsGoogStringTypedString=!0;goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};goog.html.SafeScript.fromConstant=function(a){a=goog.string.Const.unwrap(a);return 0===a.length?goog.html.SafeScript.EMPTY:goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeScript.fromConstantAndArgs=function(a,b){for(var c=[],d=1;d<arguments.length;d++)c.push(goog.html.SafeScript.stringify_(arguments[d]));return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(\"(\"+goog.string.Const.unwrap(a)+\")(\"+c.join(\", \")+\");\")};goog.html.SafeScript.fromJson=function(a){return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(goog.html.SafeScript.stringify_(a))};goog.html.SafeScript.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeScriptWrappedValue_.toString()};\ngoog.DEBUG&&(goog.html.SafeScript.prototype.toString=function(){return\"SafeScript{\"+this.privateDoNotAccessOrElseSafeScriptWrappedValue_+\"}\"});goog.html.SafeScript.unwrap=function(a){return goog.html.SafeScript.unwrapTrustedScript(a).toString()};\ngoog.html.SafeScript.unwrapTrustedScript=function(a){if(a instanceof goog.html.SafeScript&&a.constructor===goog.html.SafeScript&&a.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseSafeScriptWrappedValue_;goog.asserts.fail(\"expected object of type SafeScript, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeScript\"};\ngoog.html.SafeScript.stringify_=function(a){return JSON.stringify(a).replace(/</g,\"\\\\x3c\")};goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse=function(a){return(new goog.html.SafeScript).initSecurityPrivateDoNotAccessOrElse_(a)};\ngoog.html.SafeScript.prototype.initSecurityPrivateDoNotAccessOrElse_=function(a){this.privateDoNotAccessOrElseSafeScriptWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createScript(a):a;return this};goog.html.SafeScript.EMPTY=goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(\"\");goog.fs={};goog.fs.url={};goog.fs.url.createObjectUrl=function(a){return goog.fs.url.getUrlObject_().createObjectURL(a)};goog.fs.url.revokeObjectUrl=function(a){goog.fs.url.getUrlObject_().revokeObjectURL(a)};goog.fs.url.getUrlObject_=function(){var a=goog.fs.url.findUrlObject_();if(null!=a)return a;throw Error(\"This browser doesn't seem to support blob URLs\");};\ngoog.fs.url.findUrlObject_=function(){return goog.isDef(goog.global.URL)&&goog.isDef(goog.global.URL.createObjectURL)?goog.global.URL:goog.isDef(goog.global.webkitURL)&&goog.isDef(goog.global.webkitURL.createObjectURL)?goog.global.webkitURL:goog.isDef(goog.global.createObjectURL)?goog.global:null};goog.fs.url.browserSupportsObjectUrls=function(){return null!=goog.fs.url.findUrlObject_()};goog.i18n={};goog.i18n.bidi={};goog.i18n.bidi.FORCE_RTL=!1;\ngoog.i18n.bidi.IS_RTL=goog.i18n.bidi.FORCE_RTL||(\"ar\"==goog.LOCALE.substring(0,2).toLowerCase()||\"fa\"==goog.LOCALE.substring(0,2).toLowerCase()||\"he\"==goog.LOCALE.substring(0,2).toLowerCase()||\"iw\"==goog.LOCALE.substring(0,2).toLowerCase()||\"ps\"==goog.LOCALE.substring(0,2).toLowerCase()||\"sd\"==goog.LOCALE.substring(0,2).toLowerCase()||\"ug\"==goog.LOCALE.substring(0,2).toLowerCase()||\"ur\"==goog.LOCALE.substring(0,2).toLowerCase()||\"yi\"==goog.LOCALE.substring(0,2).toLowerCase())&&(2==goog.LOCALE.length||\n\"-\"==goog.LOCALE.substring(2,3)||\"_\"==goog.LOCALE.substring(2,3))||3<=goog.LOCALE.length&&\"ckb\"==goog.LOCALE.substring(0,3).toLowerCase()&&(3==goog.LOCALE.length||\"-\"==goog.LOCALE.substring(3,4)||\"_\"==goog.LOCALE.substring(3,4))||7<=goog.LOCALE.length&&(\"-\"==goog.LOCALE.substring(2,3)||\"_\"==goog.LOCALE.substring(2,3))&&(\"adlm\"==goog.LOCALE.substring(3,7).toLowerCase()||\"arab\"==goog.LOCALE.substring(3,7).toLowerCase()||\"hebr\"==goog.LOCALE.substring(3,7).toLowerCase()||\"nkoo\"==goog.LOCALE.substring(3,\n7).toLowerCase()||\"rohg\"==goog.LOCALE.substring(3,7).toLowerCase()||\"thaa\"==goog.LOCALE.substring(3,7).toLowerCase())||8<=goog.LOCALE.length&&(\"-\"==goog.LOCALE.substring(3,4)||\"_\"==goog.LOCALE.substring(3,4))&&(\"adlm\"==goog.LOCALE.substring(4,8).toLowerCase()||\"arab\"==goog.LOCALE.substring(4,8).toLowerCase()||\"hebr\"==goog.LOCALE.substring(4,8).toLowerCase()||\"nkoo\"==goog.LOCALE.substring(4,8).toLowerCase()||\"rohg\"==goog.LOCALE.substring(4,8).toLowerCase()||\"thaa\"==goog.LOCALE.substring(4,8).toLowerCase());\ngoog.i18n.bidi.Format={LRE:\"\\u202a\",RLE:\"\\u202b\",PDF:\"\\u202c\",LRM:\"\\u200e\",RLM:\"\\u200f\"};goog.i18n.bidi.Dir={LTR:1,RTL:-1,NEUTRAL:0};goog.i18n.bidi.RIGHT=\"right\";goog.i18n.bidi.LEFT=\"left\";goog.i18n.bidi.I18N_RIGHT=goog.i18n.bidi.IS_RTL?goog.i18n.bidi.LEFT:goog.i18n.bidi.RIGHT;goog.i18n.bidi.I18N_LEFT=goog.i18n.bidi.IS_RTL?goog.i18n.bidi.RIGHT:goog.i18n.bidi.LEFT;\ngoog.i18n.bidi.toDir=function(a,b){return\"number\"==typeof a?0<a?goog.i18n.bidi.Dir.LTR:0>a?goog.i18n.bidi.Dir.RTL:b?null:goog.i18n.bidi.Dir.NEUTRAL:null==a?null:a?goog.i18n.bidi.Dir.RTL:goog.i18n.bidi.Dir.LTR};goog.i18n.bidi.ltrChars_=\"A-Za-z\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02b8\\u0300-\\u0590\\u0900-\\u1fff\\u200e\\u2c00-\\ud801\\ud804-\\ud839\\ud83c-\\udbff\\uf900-\\ufb1c\\ufe00-\\ufe6f\\ufefd-\\uffff\";goog.i18n.bidi.rtlChars_=\"\\u0591-\\u06ef\\u06fa-\\u08ff\\u200f\\ud802-\\ud803\\ud83a-\\ud83b\\ufb1d-\\ufdff\\ufe70-\\ufefc\";\ngoog.i18n.bidi.htmlSkipReg_=/<[^>]*>|&[^;]+;/g;goog.i18n.bidi.stripHtmlIfNeeded_=function(a,b){return b?a.replace(goog.i18n.bidi.htmlSkipReg_,\"\"):a};goog.i18n.bidi.rtlCharReg_=new RegExp(\"[\"+goog.i18n.bidi.rtlChars_+\"]\");goog.i18n.bidi.ltrCharReg_=new RegExp(\"[\"+goog.i18n.bidi.ltrChars_+\"]\");goog.i18n.bidi.hasAnyRtl=function(a,b){return goog.i18n.bidi.rtlCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.hasRtlChar=goog.i18n.bidi.hasAnyRtl;\ngoog.i18n.bidi.hasAnyLtr=function(a,b){return goog.i18n.bidi.ltrCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.ltrRe_=new RegExp(\"^[\"+goog.i18n.bidi.ltrChars_+\"]\");goog.i18n.bidi.rtlRe_=new RegExp(\"^[\"+goog.i18n.bidi.rtlChars_+\"]\");goog.i18n.bidi.isRtlChar=function(a){return goog.i18n.bidi.rtlRe_.test(a)};goog.i18n.bidi.isLtrChar=function(a){return goog.i18n.bidi.ltrRe_.test(a)};goog.i18n.bidi.isNeutralChar=function(a){return!goog.i18n.bidi.isLtrChar(a)&&!goog.i18n.bidi.isRtlChar(a)};\ngoog.i18n.bidi.ltrDirCheckRe_=new RegExp(\"^[^\"+goog.i18n.bidi.rtlChars_+\"]*[\"+goog.i18n.bidi.ltrChars_+\"]\");goog.i18n.bidi.rtlDirCheckRe_=new RegExp(\"^[^\"+goog.i18n.bidi.ltrChars_+\"]*[\"+goog.i18n.bidi.rtlChars_+\"]\");goog.i18n.bidi.startsWithRtl=function(a,b){return goog.i18n.bidi.rtlDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.isRtlText=goog.i18n.bidi.startsWithRtl;\ngoog.i18n.bidi.startsWithLtr=function(a,b){return goog.i18n.bidi.ltrDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.isLtrText=goog.i18n.bidi.startsWithLtr;goog.i18n.bidi.isRequiredLtrRe_=/^http:\\/\\/.*/;goog.i18n.bidi.isNeutralText=function(a,b){a=goog.i18n.bidi.stripHtmlIfNeeded_(a,b);return goog.i18n.bidi.isRequiredLtrRe_.test(a)||!goog.i18n.bidi.hasAnyLtr(a)&&!goog.i18n.bidi.hasAnyRtl(a)};\ngoog.i18n.bidi.ltrExitDirCheckRe_=new RegExp(\"[\"+goog.i18n.bidi.ltrChars_+\"][^\"+goog.i18n.bidi.rtlChars_+\"]*$\");goog.i18n.bidi.rtlExitDirCheckRe_=new RegExp(\"[\"+goog.i18n.bidi.rtlChars_+\"][^\"+goog.i18n.bidi.ltrChars_+\"]*$\");goog.i18n.bidi.endsWithLtr=function(a,b){return goog.i18n.bidi.ltrExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.isLtrExitText=goog.i18n.bidi.endsWithLtr;\ngoog.i18n.bidi.endsWithRtl=function(a,b){return goog.i18n.bidi.rtlExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.isRtlExitText=goog.i18n.bidi.endsWithRtl;goog.i18n.bidi.rtlLocalesRe_=/^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;goog.i18n.bidi.isRtlLanguage=function(a){return goog.i18n.bidi.rtlLocalesRe_.test(a)};goog.i18n.bidi.bracketGuardTextRe_=/(\\(.*?\\)+)|(\\[.*?\\]+)|(\\{.*?\\}+)|(<.*?>+)/g;\ngoog.i18n.bidi.guardBracketInText=function(a,b){b=(void 0===b?goog.i18n.bidi.hasAnyRtl(a):b)?goog.i18n.bidi.Format.RLM:goog.i18n.bidi.Format.LRM;return a.replace(goog.i18n.bidi.bracketGuardTextRe_,b+\"$&\"+b)};goog.i18n.bidi.enforceRtlInHtml=function(a){return\"<\"==a.charAt(0)?a.replace(/<\\w+/,\"$& dir=rtl\"):\"\\n<span dir=rtl>\"+a+\"</span>\"};goog.i18n.bidi.enforceRtlInText=function(a){return goog.i18n.bidi.Format.RLE+a+goog.i18n.bidi.Format.PDF};\ngoog.i18n.bidi.enforceLtrInHtml=function(a){return\"<\"==a.charAt(0)?a.replace(/<\\w+/,\"$& dir=ltr\"):\"\\n<span dir=ltr>\"+a+\"</span>\"};goog.i18n.bidi.enforceLtrInText=function(a){return goog.i18n.bidi.Format.LRE+a+goog.i18n.bidi.Format.PDF};goog.i18n.bidi.dimensionsRe_=/:\\s*([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)/g;goog.i18n.bidi.leftRe_=/left/gi;goog.i18n.bidi.rightRe_=/right/gi;goog.i18n.bidi.tempRe_=/%%%%/g;\ngoog.i18n.bidi.mirrorCSS=function(a){return a.replace(goog.i18n.bidi.dimensionsRe_,\":$1 $4 $3 $2\").replace(goog.i18n.bidi.leftRe_,\"%%%%\").replace(goog.i18n.bidi.rightRe_,goog.i18n.bidi.LEFT).replace(goog.i18n.bidi.tempRe_,goog.i18n.bidi.RIGHT)};goog.i18n.bidi.doubleQuoteSubstituteRe_=/([\\u0591-\\u05f2])\"/g;goog.i18n.bidi.singleQuoteSubstituteRe_=/([\\u0591-\\u05f2])'/g;\ngoog.i18n.bidi.normalizeHebrewQuote=function(a){return a.replace(goog.i18n.bidi.doubleQuoteSubstituteRe_,\"$1\\u05f4\").replace(goog.i18n.bidi.singleQuoteSubstituteRe_,\"$1\\u05f3\")};goog.i18n.bidi.wordSeparatorRe_=/\\s+/;goog.i18n.bidi.hasNumeralsRe_=/[\\d\\u06f0-\\u06f9]/;goog.i18n.bidi.rtlDetectionThreshold_=.4;\ngoog.i18n.bidi.estimateDirection=function(a,b){var c=0,d=0,e=!1;a=goog.i18n.bidi.stripHtmlIfNeeded_(a,b).split(goog.i18n.bidi.wordSeparatorRe_);for(b=0;b<a.length;b++){var f=a[b];goog.i18n.bidi.startsWithRtl(f)?(c++,d++):goog.i18n.bidi.isRequiredLtrRe_.test(f)?e=!0:goog.i18n.bidi.hasAnyLtr(f)?d++:goog.i18n.bidi.hasNumeralsRe_.test(f)&&(e=!0)}return 0==d?e?goog.i18n.bidi.Dir.LTR:goog.i18n.bidi.Dir.NEUTRAL:c/d>goog.i18n.bidi.rtlDetectionThreshold_?goog.i18n.bidi.Dir.RTL:goog.i18n.bidi.Dir.LTR};\ngoog.i18n.bidi.detectRtlDirectionality=function(a,b){return goog.i18n.bidi.estimateDirection(a,b)==goog.i18n.bidi.Dir.RTL};goog.i18n.bidi.setElementDirAndAlign=function(a,b){a&&(b=goog.i18n.bidi.toDir(b))&&(a.style.textAlign=b==goog.i18n.bidi.Dir.RTL?goog.i18n.bidi.RIGHT:goog.i18n.bidi.LEFT,a.dir=b==goog.i18n.bidi.Dir.RTL?\"rtl\":\"ltr\")};\ngoog.i18n.bidi.setElementDirByTextDirectionality=function(a,b){switch(goog.i18n.bidi.estimateDirection(b)){case goog.i18n.bidi.Dir.LTR:a.dir=\"ltr\";break;case goog.i18n.bidi.Dir.RTL:a.dir=\"rtl\";break;default:a.removeAttribute(\"dir\")}};goog.i18n.bidi.DirectionalString=function(){};goog.html.TrustedResourceUrl=function(){this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_=\"\";this.trustedURL_=null;this.TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_};goog.html.TrustedResourceUrl.prototype.implementsGoogStringTypedString=!0;goog.html.TrustedResourceUrl.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_.toString()};\ngoog.html.TrustedResourceUrl.prototype.implementsGoogI18nBidiDirectionalString=!0;goog.html.TrustedResourceUrl.prototype.getDirection=function(){return goog.i18n.bidi.Dir.LTR};\ngoog.html.TrustedResourceUrl.prototype.cloneWithParams=function(a,b){var c=goog.html.TrustedResourceUrl.unwrap(this);c=goog.html.TrustedResourceUrl.URL_PARAM_PARSER_.exec(c);var d=c[3]||\"\";return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(c[1]+goog.html.TrustedResourceUrl.stringifyParams_(\"?\",c[2]||\"\",a)+goog.html.TrustedResourceUrl.stringifyParams_(\"#\",d,b))};\ngoog.DEBUG&&(goog.html.TrustedResourceUrl.prototype.toString=function(){return\"TrustedResourceUrl{\"+this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_+\"}\"});goog.html.TrustedResourceUrl.unwrap=function(a){return goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(a).toString()};\ngoog.html.TrustedResourceUrl.unwrapTrustedScriptURL=function(a){if(a instanceof goog.html.TrustedResourceUrl&&a.constructor===goog.html.TrustedResourceUrl&&a.TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_;goog.asserts.fail(\"expected object of type TrustedResourceUrl, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:TrustedResourceUrl\"};\ngoog.html.TrustedResourceUrl.unwrapTrustedURL=function(a){return a.trustedURL_?a.trustedURL_:goog.html.TrustedResourceUrl.unwrap(a)};\ngoog.html.TrustedResourceUrl.format=function(a,b){var c=goog.string.Const.unwrap(a);if(!goog.html.TrustedResourceUrl.BASE_URL_.test(c))throw Error(\"Invalid TrustedResourceUrl format: \"+c);a=c.replace(goog.html.TrustedResourceUrl.FORMAT_MARKER_,function(a,e){if(!Object.prototype.hasOwnProperty.call(b,e))throw Error('Found marker, \"'+e+'\", in format string, \"'+c+'\", but no valid label mapping found in args: '+JSON.stringify(b));a=b[e];return a instanceof goog.string.Const?goog.string.Const.unwrap(a):\nencodeURIComponent(String(a))});return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.TrustedResourceUrl.FORMAT_MARKER_=/%{(\\w+)}/g;goog.html.TrustedResourceUrl.BASE_URL_=/^((https:)?\\/\\/[0-9a-z.:[\\]-]+\\/|\\/[^/\\\\]|[^:/\\\\%]+\\/|[^:/\\\\%]*[?#]|about:blank#)/i;goog.html.TrustedResourceUrl.URL_PARAM_PARSER_=/^([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/;\ngoog.html.TrustedResourceUrl.formatWithParams=function(a,b,c,d){return goog.html.TrustedResourceUrl.format(a,b).cloneWithParams(c,d)};goog.html.TrustedResourceUrl.fromConstant=function(a){return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(a))};goog.html.TrustedResourceUrl.fromConstants=function(a){for(var b=\"\",c=0;c<a.length;c++)b+=goog.string.Const.unwrap(a[c]);return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};\ngoog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse=function(a){var b=new goog.html.TrustedResourceUrl;b.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createScriptURL(a):a;goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY&&(b.trustedURL_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createURL(a));return b};\ngoog.html.TrustedResourceUrl.stringifyParams_=function(a,b,c){if(null==c)return b;if(goog.isString(c))return c?a+encodeURIComponent(c):\"\";for(var d in c){var e=c[d];e=goog.isArray(e)?e:[e];for(var f=0;f<e.length;f++){var g=e[f];null!=g&&(b||(b=a),b+=(b.length>a.length?\"&\":\"\")+encodeURIComponent(d)+\"=\"+encodeURIComponent(String(g)))}}return b};goog.string.internal={};goog.string.internal.startsWith=function(a,b){return 0==a.lastIndexOf(b,0)};goog.string.internal.endsWith=function(a,b){var c=a.length-b.length;return 0<=c&&a.indexOf(b,c)==c};goog.string.internal.caseInsensitiveStartsWith=function(a,b){return 0==goog.string.internal.caseInsensitiveCompare(b,a.substr(0,b.length))};goog.string.internal.caseInsensitiveEndsWith=function(a,b){return 0==goog.string.internal.caseInsensitiveCompare(b,a.substr(a.length-b.length,b.length))};\ngoog.string.internal.caseInsensitiveEquals=function(a,b){return a.toLowerCase()==b.toLowerCase()};goog.string.internal.isEmptyOrWhitespace=function(a){return/^[\\s\\xa0]*$/.test(a)};goog.string.internal.trim=goog.TRUSTED_SITE&&String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\\s\\xa0]*([\\s\\S]*?)[\\s\\xa0]*$/.exec(a)[1]};goog.string.internal.caseInsensitiveCompare=function(a,b){a=String(a).toLowerCase();b=String(b).toLowerCase();return a<b?-1:a==b?0:1};\ngoog.string.internal.newLineToBr=function(a,b){return a.replace(/(\\r\\n|\\r|\\n)/g,b?\"<br />\":\"<br>\")};\ngoog.string.internal.htmlEscape=function(a,b){if(b)a=a.replace(goog.string.internal.AMP_RE_,\"&\").replace(goog.string.internal.LT_RE_,\"<\").replace(goog.string.internal.GT_RE_,\">\").replace(goog.string.internal.QUOT_RE_,\""\").replace(goog.string.internal.SINGLE_QUOTE_RE_,\"'\").replace(goog.string.internal.NULL_RE_,\"�\");else{if(!goog.string.internal.ALL_RE_.test(a))return a;-1!=a.indexOf(\"&\")&&(a=a.replace(goog.string.internal.AMP_RE_,\"&\"));-1!=a.indexOf(\"<\")&&(a=a.replace(goog.string.internal.LT_RE_,\n\"<\"));-1!=a.indexOf(\">\")&&(a=a.replace(goog.string.internal.GT_RE_,\">\"));-1!=a.indexOf('\"')&&(a=a.replace(goog.string.internal.QUOT_RE_,\""\"));-1!=a.indexOf(\"'\")&&(a=a.replace(goog.string.internal.SINGLE_QUOTE_RE_,\"'\"));-1!=a.indexOf(\"\\x00\")&&(a=a.replace(goog.string.internal.NULL_RE_,\"�\"))}return a};goog.string.internal.AMP_RE_=/&/g;goog.string.internal.LT_RE_=/</g;goog.string.internal.GT_RE_=/>/g;goog.string.internal.QUOT_RE_=/\"/g;goog.string.internal.SINGLE_QUOTE_RE_=/'/g;\ngoog.string.internal.NULL_RE_=/\\x00/g;goog.string.internal.ALL_RE_=/[\\x00&<>\"']/;goog.string.internal.whitespaceEscape=function(a,b){return goog.string.internal.newLineToBr(a.replace(/ /g,\"  \"),b)};goog.string.internal.contains=function(a,b){return-1!=a.indexOf(b)};goog.string.internal.caseInsensitiveContains=function(a,b){return goog.string.internal.contains(a.toLowerCase(),b.toLowerCase())};\ngoog.string.internal.compareVersions=function(a,b){var c=0;a=goog.string.internal.trim(String(a)).split(\".\");b=goog.string.internal.trim(String(b)).split(\".\");for(var d=Math.max(a.length,b.length),e=0;0==c&&e<d;e++){var f=a[e]||\"\",g=b[e]||\"\";do{f=/(\\d*)(\\D*)(.*)/.exec(f)||[\"\",\"\",\"\",\"\"];g=/(\\d*)(\\D*)(.*)/.exec(g)||[\"\",\"\",\"\",\"\"];if(0==f[0].length&&0==g[0].length)break;c=0==f[1].length?0:parseInt(f[1],10);var h=0==g[1].length?0:parseInt(g[1],10);c=goog.string.internal.compareElements_(c,h)||goog.string.internal.compareElements_(0==\nf[2].length,0==g[2].length)||goog.string.internal.compareElements_(f[2],g[2]);f=f[3];g=g[3]}while(0==c)}return c};goog.string.internal.compareElements_=function(a,b){return a<b?-1:a>b?1:0};goog.html.SafeUrl=function(){this.privateDoNotAccessOrElseSafeUrlWrappedValue_=\"\";this.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_};goog.html.SafeUrl.INNOCUOUS_STRING=\"about:invalid#zClosurez\";goog.html.SafeUrl.prototype.implementsGoogStringTypedString=!0;goog.html.SafeUrl.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeUrlWrappedValue_.toString()};\ngoog.html.SafeUrl.prototype.implementsGoogI18nBidiDirectionalString=!0;goog.html.SafeUrl.prototype.getDirection=function(){return goog.i18n.bidi.Dir.LTR};goog.DEBUG&&(goog.html.SafeUrl.prototype.toString=function(){return\"SafeUrl{\"+this.privateDoNotAccessOrElseSafeUrlWrappedValue_+\"}\"});goog.html.SafeUrl.unwrap=function(a){return goog.html.SafeUrl.unwrapTrustedURL(a).toString()};\ngoog.html.SafeUrl.unwrapTrustedURL=function(a){if(a instanceof goog.html.SafeUrl&&a.constructor===goog.html.SafeUrl&&a.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseSafeUrlWrappedValue_;goog.asserts.fail(\"expected object of type SafeUrl, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeUrl\"};goog.html.SafeUrl.fromConstant=function(a){return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(a))};\ngoog.html.SAFE_MIME_TYPE_PATTERN_=/^(?:audio\\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-wav|wav|webm)|image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|text\\/csv|video\\/(?:mpeg|mp4|ogg|webm|quicktime))(?:;\\w+=(?:\\w+|\"[\\w;=]+\"))*$/i;goog.html.SafeUrl.isSafeMimeType=function(a){return goog.html.SAFE_MIME_TYPE_PATTERN_.test(a)};goog.html.SafeUrl.fromBlob=function(a){a=goog.html.SAFE_MIME_TYPE_PATTERN_.test(a.type)?goog.fs.url.createObjectUrl(a):goog.html.SafeUrl.INNOCUOUS_STRING;return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.DATA_URL_PATTERN_=/^data:([^,]*);base64,[a-z0-9+\\/]+=*$/i;goog.html.SafeUrl.fromDataUrl=function(a){a=a.replace(/(%0A|%0D)/g,\"\");var b=a.match(goog.html.DATA_URL_PATTERN_);b=b&&goog.html.SAFE_MIME_TYPE_PATTERN_.test(b[1]);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b?a:goog.html.SafeUrl.INNOCUOUS_STRING)};goog.html.SafeUrl.fromTelUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"tel:\")||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SIP_URL_PATTERN_=/^sip[s]?:[+a-z0-9_.!$%&'*\\/=^`{|}~-]+@([a-z0-9-]+\\.)+[a-z0-9]{2,63}$/i;goog.html.SafeUrl.fromSipUrl=function(a){goog.html.SIP_URL_PATTERN_.test(decodeURIComponent(a))||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.SafeUrl.fromFacebookMessengerUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"fb-messenger://share\")||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.fromWhatsAppUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"whatsapp://send\")||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.SafeUrl.fromSmsUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"sms:\")&&goog.html.SafeUrl.isSmsUrlBodyValid_(a)||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.isSmsUrlBodyValid_=function(a){var b=a.indexOf(\"#\");0<b&&(a=a.substring(0,b));b=a.match(/[?&]body=/gi);if(!b)return!0;if(1<b.length)return!1;a=a.match(/[?&]body=([^&]*)/)[1];if(!a)return!0;try{decodeURIComponent(a)}catch(c){return!1}return/^(?:[a-z0-9\\-_.~]|%[0-9a-f]{2})+$/i.test(a)};goog.html.SafeUrl.fromSshUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"ssh://\")||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.sanitizeChromeExtensionUrl=function(a,b){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^chrome-extension:\\/\\/([^\\/]+)\\//,a,b)};goog.html.SafeUrl.sanitizeFirefoxExtensionUrl=function(a,b){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^moz-extension:\\/\\/([^\\/]+)\\//,a,b)};goog.html.SafeUrl.sanitizeEdgeExtensionUrl=function(a,b){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^ms-browser-extension:\\/\\/([^\\/]+)\\//,a,b)};\ngoog.html.SafeUrl.sanitizeExtensionUrl_=function(a,b,c){(a=a.exec(b))?(a=a[1],-1==(c instanceof goog.string.Const?[goog.string.Const.unwrap(c)]:c.map(function(a){return goog.string.Const.unwrap(a)})).indexOf(a)&&(b=goog.html.SafeUrl.INNOCUOUS_STRING)):b=goog.html.SafeUrl.INNOCUOUS_STRING;return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b)};goog.html.SafeUrl.fromTrustedResourceUrl=function(a){return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.html.TrustedResourceUrl.unwrap(a))};\ngoog.html.SAFE_URL_PATTERN_=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;goog.html.SafeUrl.SAFE_URL_PATTERN=goog.html.SAFE_URL_PATTERN_;goog.html.SafeUrl.sanitize=function(a){if(a instanceof goog.html.SafeUrl)return a;a=\"object\"==typeof a&&a.implementsGoogStringTypedString?a.getTypedStringValue():String(a);goog.html.SAFE_URL_PATTERN_.test(a)||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.sanitizeAssertUnchanged=function(a,b){if(a instanceof goog.html.SafeUrl)return a;a=\"object\"==typeof a&&a.implementsGoogStringTypedString?a.getTypedStringValue():String(a);if(b&&/^data:/i.test(a)&&(b=goog.html.SafeUrl.fromDataUrl(a),b.getTypedStringValue()==a))return b;goog.asserts.assert(goog.html.SAFE_URL_PATTERN_.test(a),\"%s does not match the safe URL pattern\",a)||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse=function(a){var b=new goog.html.SafeUrl;b.privateDoNotAccessOrElseSafeUrlWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createURL(a):a;return b};goog.html.SafeUrl.ABOUT_BLANK=goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(\"about:blank\");goog.html.SafeStyle=function(){this.privateDoNotAccessOrElseSafeStyleWrappedValue_=\"\";this.SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_};goog.html.SafeStyle.prototype.implementsGoogStringTypedString=!0;goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};\ngoog.html.SafeStyle.fromConstant=function(a){a=goog.string.Const.unwrap(a);if(0===a.length)return goog.html.SafeStyle.EMPTY;goog.asserts.assert(goog.string.internal.endsWith(a,\";\"),\"Last character of style string is not ';': \"+a);goog.asserts.assert(goog.string.internal.contains(a,\":\"),\"Style string must contain at least one ':', to specify a \\\"name: value\\\" pair: \"+a);return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeStyle.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeStyleWrappedValue_};goog.DEBUG&&(goog.html.SafeStyle.prototype.toString=function(){return\"SafeStyle{\"+this.privateDoNotAccessOrElseSafeStyleWrappedValue_+\"}\"});\ngoog.html.SafeStyle.unwrap=function(a){if(a instanceof goog.html.SafeStyle&&a.constructor===goog.html.SafeStyle&&a.SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseSafeStyleWrappedValue_;goog.asserts.fail(\"expected object of type SafeStyle, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeStyle\"};goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse=function(a){return(new goog.html.SafeStyle).initSecurityPrivateDoNotAccessOrElse_(a)};\ngoog.html.SafeStyle.prototype.initSecurityPrivateDoNotAccessOrElse_=function(a){this.privateDoNotAccessOrElseSafeStyleWrappedValue_=a;return this};goog.html.SafeStyle.EMPTY=goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(\"\");goog.html.SafeStyle.INNOCUOUS_STRING=\"zClosurez\";\ngoog.html.SafeStyle.create=function(a){var b=\"\",c;for(c in a){if(!/^[-_a-zA-Z0-9]+$/.test(c))throw Error(\"Name allows only [-_a-zA-Z0-9], got: \"+c);var d=a[c];null!=d&&(d=goog.isArray(d)?goog.array.map(d,goog.html.SafeStyle.sanitizePropertyValue_).join(\" \"):goog.html.SafeStyle.sanitizePropertyValue_(d),b+=c+\":\"+d+\";\")}return b?goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b):goog.html.SafeStyle.EMPTY};\ngoog.html.SafeStyle.sanitizePropertyValue_=function(a){if(a instanceof goog.html.SafeUrl)return'url(\"'+goog.html.SafeUrl.unwrap(a).replace(/</g,\"%3c\").replace(/[\\\\\"]/g,\"\\\\$&\")+'\")';a=a instanceof goog.string.Const?goog.string.Const.unwrap(a):goog.html.SafeStyle.sanitizePropertyValueString_(String(a));if(/[{;}]/.test(a))throw new goog.asserts.AssertionError(\"Value does not allow [{;}], got: %s.\",[a]);return a};\ngoog.html.SafeStyle.sanitizePropertyValueString_=function(a){var b=a.replace(goog.html.SafeStyle.FUNCTIONS_RE_,\"$1\").replace(goog.html.SafeStyle.FUNCTIONS_RE_,\"$1\").replace(goog.html.SafeStyle.URL_RE_,\"url\");if(goog.html.SafeStyle.VALUE_RE_.test(b)){if(goog.html.SafeStyle.COMMENT_RE_.test(a))return goog.asserts.fail(\"String value disallows comments, got: \"+a),goog.html.SafeStyle.INNOCUOUS_STRING;if(!goog.html.SafeStyle.hasBalancedQuotes_(a))return goog.asserts.fail(\"String value requires balanced quotes, got: \"+\na),goog.html.SafeStyle.INNOCUOUS_STRING;if(!goog.html.SafeStyle.hasBalancedSquareBrackets_(a))return goog.asserts.fail(\"String value requires balanced square brackets and one identifier per pair of brackets, got: \"+a),goog.html.SafeStyle.INNOCUOUS_STRING}else return goog.asserts.fail(\"String value allows only \"+goog.html.SafeStyle.VALUE_ALLOWED_CHARS_+\" and simple functions, got: \"+a),goog.html.SafeStyle.INNOCUOUS_STRING;return goog.html.SafeStyle.sanitizeUrl_(a)};\ngoog.html.SafeStyle.hasBalancedQuotes_=function(a){for(var b=!0,c=!0,d=0;d<a.length;d++){var e=a.charAt(d);\"'\"==e&&c?b=!b:'\"'==e&&b&&(c=!c)}return b&&c};goog.html.SafeStyle.hasBalancedSquareBrackets_=function(a){for(var b=!0,c=/^[-_a-zA-Z0-9]$/,d=0;d<a.length;d++){var e=a.charAt(d);if(\"]\"==e){if(b)return!1;b=!0}else if(\"[\"==e){if(!b)return!1;b=!1}else if(!b&&!c.test(e))return!1}return b};goog.html.SafeStyle.VALUE_ALLOWED_CHARS_=\"[-,.\\\"'%_!# a-zA-Z0-9\\\\[\\\\]]\";\ngoog.html.SafeStyle.VALUE_RE_=new RegExp(\"^\"+goog.html.SafeStyle.VALUE_ALLOWED_CHARS_+\"+$\");goog.html.SafeStyle.URL_RE_=/\\b(url\\([ \\t\\n]*)('[ -&(-\\[\\]-~]*'|\"[ !#-\\[\\]-~]*\"|[!#-&*-\\[\\]-~]*)([ \\t\\n]*\\))/g;goog.html.SafeStyle.FUNCTIONS_RE_=/\\b(hsl|hsla|rgb|rgba|matrix|calc|minmax|fit-content|repeat|(rotate|scale|translate)(X|Y|Z|3d)?)\\([-+*/0-9a-z.%\\[\\], ]+\\)/g;goog.html.SafeStyle.COMMENT_RE_=/\\/\\*/;\ngoog.html.SafeStyle.sanitizeUrl_=function(a){return a.replace(goog.html.SafeStyle.URL_RE_,function(a,c,d,e){var b=\"\";d=d.replace(/^(['\"])(.*)\\1$/,function(a,c,d){b=c;return d});a=goog.html.SafeUrl.sanitize(d).getTypedStringValue();return c+b+a+b+e})};goog.html.SafeStyle.concat=function(a){var b=\"\",c=function(a){goog.isArray(a)?goog.array.forEach(a,c):b+=goog.html.SafeStyle.unwrap(a)};goog.array.forEach(arguments,c);return b?goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b):goog.html.SafeStyle.EMPTY};goog.html.SafeStyleSheet=function(){this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_=\"\";this.SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_};goog.html.SafeStyleSheet.prototype.implementsGoogStringTypedString=!0;goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};\ngoog.html.SafeStyleSheet.createRule=function(a,b){if(goog.string.internal.contains(a,\"<\"))throw Error(\"Selector does not allow '<', got: \"+a);var c=a.replace(/('|\")((?!\\1)[^\\r\\n\\f\\\\]|\\\\[\\s\\S])*\\1/g,\"\");if(!/^[-_a-zA-Z0-9#.:* ,>+~[\\]()=^$|]+$/.test(c))throw Error(\"Selector allows only [-_a-zA-Z0-9#.:* ,>+~[\\\\]()=^$|] and strings, got: \"+a);if(!goog.html.SafeStyleSheet.hasBalancedBrackets_(c))throw Error(\"() and [] in selector must be balanced, got: \"+a);b instanceof goog.html.SafeStyle||(b=goog.html.SafeStyle.create(b));\na=a+\"{\"+goog.html.SafeStyle.unwrap(b).replace(/</g,\"\\\\3C \")+\"}\";return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(a)};goog.html.SafeStyleSheet.hasBalancedBrackets_=function(a){for(var b={\"(\":\")\",\"[\":\"]\"},c=[],d=0;d<a.length;d++){var e=a[d];if(b[e])c.push(b[e]);else if(goog.object.contains(b,e)&&c.pop()!=e)return!1}return 0==c.length};\ngoog.html.SafeStyleSheet.concat=function(a){var b=\"\",c=function(a){goog.isArray(a)?goog.array.forEach(a,c):b+=goog.html.SafeStyleSheet.unwrap(a)};goog.array.forEach(arguments,c);return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.SafeStyleSheet.fromConstant=function(a){a=goog.string.Const.unwrap(a);if(0===a.length)return goog.html.SafeStyleSheet.EMPTY;goog.asserts.assert(!goog.string.internal.contains(a,\"<\"),\"Forbidden '<' character in style sheet string: \"+a);return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(a)};goog.html.SafeStyleSheet.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_};\ngoog.DEBUG&&(goog.html.SafeStyleSheet.prototype.toString=function(){return\"SafeStyleSheet{\"+this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_+\"}\"});\ngoog.html.SafeStyleSheet.unwrap=function(a){if(a instanceof goog.html.SafeStyleSheet&&a.constructor===goog.html.SafeStyleSheet&&a.SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_;goog.asserts.fail(\"expected object of type SafeStyleSheet, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeStyleSheet\"};\ngoog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse=function(a){return(new goog.html.SafeStyleSheet).initSecurityPrivateDoNotAccessOrElse_(a)};goog.html.SafeStyleSheet.prototype.initSecurityPrivateDoNotAccessOrElse_=function(a){this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_=a;return this};goog.html.SafeStyleSheet.EMPTY=goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(\"\");goog.labs={};goog.labs.userAgent={};goog.labs.userAgent.util={};goog.labs.userAgent.util.getNativeUserAgentString_=function(){var a=goog.labs.userAgent.util.getNavigator_();return a&&(a=a.userAgent)?a:\"\"};goog.labs.userAgent.util.getNavigator_=function(){return goog.global.navigator};goog.labs.userAgent.util.userAgent_=goog.labs.userAgent.util.getNativeUserAgentString_();goog.labs.userAgent.util.setUserAgent=function(a){goog.labs.userAgent.util.userAgent_=a||goog.labs.userAgent.util.getNativeUserAgentString_()};\ngoog.labs.userAgent.util.getUserAgent=function(){return goog.labs.userAgent.util.userAgent_};goog.labs.userAgent.util.matchUserAgent=function(a){var b=goog.labs.userAgent.util.getUserAgent();return goog.string.internal.contains(b,a)};goog.labs.userAgent.util.matchUserAgentIgnoreCase=function(a){var b=goog.labs.userAgent.util.getUserAgent();return goog.string.internal.caseInsensitiveContains(b,a)};\ngoog.labs.userAgent.util.extractVersionTuples=function(a){for(var b=/(\\w[\\w ]+)\\/([^\\s]+)\\s*(?:\\((.*?)\\))?/g,c=[],d;d=b.exec(a);)c.push([d[1],d[2],d[3]||void 0]);return c};goog.labs.userAgent.browser={};goog.labs.userAgent.browser.matchOpera_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Opera\")};goog.labs.userAgent.browser.matchIE_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Trident\")||goog.labs.userAgent.util.matchUserAgent(\"MSIE\")};goog.labs.userAgent.browser.matchEdgeHtml_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Edge\")};goog.labs.userAgent.browser.matchEdgeChromium_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Edg/\")};\ngoog.labs.userAgent.browser.matchOperaChromium_=function(){return goog.labs.userAgent.util.matchUserAgent(\"OPR\")};goog.labs.userAgent.browser.matchFirefox_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Firefox\")||goog.labs.userAgent.util.matchUserAgent(\"FxiOS\")};\ngoog.labs.userAgent.browser.matchSafari_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Safari\")&&!(goog.labs.userAgent.browser.matchChrome_()||goog.labs.userAgent.browser.matchCoast_()||goog.labs.userAgent.browser.matchOpera_()||goog.labs.userAgent.browser.matchEdgeHtml_()||goog.labs.userAgent.browser.matchEdgeChromium_()||goog.labs.userAgent.browser.matchOperaChromium_()||goog.labs.userAgent.browser.matchFirefox_()||goog.labs.userAgent.browser.isSilk()||goog.labs.userAgent.util.matchUserAgent(\"Android\"))};\ngoog.labs.userAgent.browser.matchCoast_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Coast\")};goog.labs.userAgent.browser.matchIosWebview_=function(){return(goog.labs.userAgent.util.matchUserAgent(\"iPad\")||goog.labs.userAgent.util.matchUserAgent(\"iPhone\"))&&!goog.labs.userAgent.browser.matchSafari_()&&!goog.labs.userAgent.browser.matchChrome_()&&!goog.labs.userAgent.browser.matchCoast_()&&!goog.labs.userAgent.browser.matchFirefox_()&&goog.labs.userAgent.util.matchUserAgent(\"AppleWebKit\")};\ngoog.labs.userAgent.browser.matchChrome_=function(){return(goog.labs.userAgent.util.matchUserAgent(\"Chrome\")||goog.labs.userAgent.util.matchUserAgent(\"CriOS\"))&&!goog.labs.userAgent.browser.matchEdgeHtml_()};goog.labs.userAgent.browser.matchAndroidBrowser_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Android\")&&!(goog.labs.userAgent.browser.isChrome()||goog.labs.userAgent.browser.isFirefox()||goog.labs.userAgent.browser.isOpera()||goog.labs.userAgent.browser.isSilk())};\ngoog.labs.userAgent.browser.isOpera=goog.labs.userAgent.browser.matchOpera_;goog.labs.userAgent.browser.isIE=goog.labs.userAgent.browser.matchIE_;goog.labs.userAgent.browser.isEdge=goog.labs.userAgent.browser.matchEdgeHtml_;goog.labs.userAgent.browser.isEdgeChromium=goog.labs.userAgent.browser.matchEdgeChromium_;goog.labs.userAgent.browser.isOperaChromium=goog.labs.userAgent.browser.matchOperaChromium_;goog.labs.userAgent.browser.isFirefox=goog.labs.userAgent.browser.matchFirefox_;\ngoog.labs.userAgent.browser.isSafari=goog.labs.userAgent.browser.matchSafari_;goog.labs.userAgent.browser.isCoast=goog.labs.userAgent.browser.matchCoast_;goog.labs.userAgent.browser.isIosWebview=goog.labs.userAgent.browser.matchIosWebview_;goog.labs.userAgent.browser.isChrome=goog.labs.userAgent.browser.matchChrome_;goog.labs.userAgent.browser.isAndroidBrowser=goog.labs.userAgent.browser.matchAndroidBrowser_;goog.labs.userAgent.browser.isSilk=function(){return goog.labs.userAgent.util.matchUserAgent(\"Silk\")};\ngoog.labs.userAgent.browser.getVersion=function(){function a(a){a=goog.array.find(a,d);return c[a]||\"\"}var b=goog.labs.userAgent.util.getUserAgent();if(goog.labs.userAgent.browser.isIE())return goog.labs.userAgent.browser.getIEVersion_(b);b=goog.labs.userAgent.util.extractVersionTuples(b);var c={};goog.array.forEach(b,function(a){c[a[0]]=a[1]});var d=goog.partial(goog.object.containsKey,c);return goog.labs.userAgent.browser.isOpera()?a([\"Version\",\"Opera\"]):goog.labs.userAgent.browser.isEdge()?a([\"Edge\"]):\ngoog.labs.userAgent.browser.isEdgeChromium()?a([\"Edg\"]):goog.labs.userAgent.browser.isChrome()?a([\"Chrome\",\"CriOS\"]):(b=b[2])&&b[1]||\"\"};goog.labs.userAgent.browser.isVersionOrHigher=function(a){return 0<=goog.string.internal.compareVersions(goog.labs.userAgent.browser.getVersion(),a)};\ngoog.labs.userAgent.browser.getIEVersion_=function(a){var b=/rv: *([\\d\\.]*)/.exec(a);if(b&&b[1])return b[1];b=\"\";var c=/MSIE +([\\d\\.]+)/.exec(a);if(c&&c[1])if(a=/Trident\\/(\\d.\\d)/.exec(a),\"7.0\"==c[1])if(a&&a[1])switch(a[1]){case \"4.0\":b=\"8.0\";break;case \"5.0\":b=\"9.0\";break;case \"6.0\":b=\"10.0\";break;case \"7.0\":b=\"11.0\"}else b=\"7.0\";else b=c[1];return b};goog.html.SafeHtml=function(){this.privateDoNotAccessOrElseSafeHtmlWrappedValue_=\"\";this.SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;this.dir_=null};goog.html.SafeHtml.prototype.implementsGoogI18nBidiDirectionalString=!0;goog.html.SafeHtml.prototype.getDirection=function(){return this.dir_};goog.html.SafeHtml.prototype.implementsGoogStringTypedString=!0;goog.html.SafeHtml.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeHtmlWrappedValue_.toString()};\ngoog.DEBUG&&(goog.html.SafeHtml.prototype.toString=function(){return\"SafeHtml{\"+this.privateDoNotAccessOrElseSafeHtmlWrappedValue_+\"}\"});goog.html.SafeHtml.unwrap=function(a){return goog.html.SafeHtml.unwrapTrustedHTML(a).toString()};\ngoog.html.SafeHtml.unwrapTrustedHTML=function(a){if(a instanceof goog.html.SafeHtml&&a.constructor===goog.html.SafeHtml&&a.SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseSafeHtmlWrappedValue_;goog.asserts.fail(\"expected object of type SafeHtml, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeHtml\"};\ngoog.html.SafeHtml.htmlEscape=function(a){if(a instanceof goog.html.SafeHtml)return a;var b=\"object\"==typeof a,c=null;b&&a.implementsGoogI18nBidiDirectionalString&&(c=a.getDirection());a=b&&a.implementsGoogStringTypedString?a.getTypedStringValue():String(a);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.htmlEscape(a),c)};\ngoog.html.SafeHtml.htmlEscapePreservingNewlines=function(a){if(a instanceof goog.html.SafeHtml)return a;a=goog.html.SafeHtml.htmlEscape(a);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.newLineToBr(goog.html.SafeHtml.unwrap(a)),a.getDirection())};\ngoog.html.SafeHtml.htmlEscapePreservingNewlinesAndSpaces=function(a){if(a instanceof goog.html.SafeHtml)return a;a=goog.html.SafeHtml.htmlEscape(a);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.whitespaceEscape(goog.html.SafeHtml.unwrap(a)),a.getDirection())};goog.html.SafeHtml.from=goog.html.SafeHtml.htmlEscape;goog.html.SafeHtml.VALID_NAMES_IN_TAG_=/^[a-zA-Z0-9-]+$/;\ngoog.html.SafeHtml.URL_ATTRIBUTES_={action:!0,cite:!0,data:!0,formaction:!0,href:!0,manifest:!0,poster:!0,src:!0};goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_={APPLET:!0,BASE:!0,EMBED:!0,IFRAME:!0,LINK:!0,MATH:!0,META:!0,OBJECT:!0,SCRIPT:!0,STYLE:!0,SVG:!0,TEMPLATE:!0};goog.html.SafeHtml.create=function(a,b,c){goog.html.SafeHtml.verifyTagName(String(a));return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(String(a),b,c)};\ngoog.html.SafeHtml.verifyTagName=function(a){if(!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(a))throw Error(\"Invalid tag name <\"+a+\">.\");if(a.toUpperCase()in goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_)throw Error(\"Tag name <\"+a+\"> is not allowed for SafeHtml.\");};\ngoog.html.SafeHtml.createIframe=function(a,b,c,d){a&&goog.html.TrustedResourceUrl.unwrap(a);var e={};e.src=a||null;e.srcdoc=b&&goog.html.SafeHtml.unwrap(b);a=goog.html.SafeHtml.combineAttributes(e,{sandbox:\"\"},c);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"iframe\",a,d)};\ngoog.html.SafeHtml.createSandboxIframe=function(a,b,c,d){if(!goog.html.SafeHtml.canUseSandboxIframe())throw Error(\"The browser does not support sandboxed iframes.\");var e={};e.src=a?goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(a)):null;e.srcdoc=b||null;e.sandbox=\"\";a=goog.html.SafeHtml.combineAttributes(e,{},c);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"iframe\",a,d)};\ngoog.html.SafeHtml.canUseSandboxIframe=function(){return goog.global.HTMLIFrameElement&&\"sandbox\"in goog.global.HTMLIFrameElement.prototype};goog.html.SafeHtml.createScriptSrc=function(a,b){goog.html.TrustedResourceUrl.unwrap(a);a=goog.html.SafeHtml.combineAttributes({src:a},{},b);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"script\",a)};\ngoog.html.SafeHtml.createScript=function(a,b){for(var c in b){var d=c.toLowerCase();if(\"language\"==d||\"src\"==d||\"text\"==d||\"type\"==d)throw Error('Cannot set \"'+d+'\" attribute');}c=\"\";a=goog.array.concat(a);for(d=0;d<a.length;d++)c+=goog.html.SafeScript.unwrap(a[d]);a=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(c,goog.i18n.bidi.Dir.NEUTRAL);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"script\",b,a)};\ngoog.html.SafeHtml.createStyle=function(a,b){b=goog.html.SafeHtml.combineAttributes({type:\"text/css\"},{},b);var c=\"\";a=goog.array.concat(a);for(var d=0;d<a.length;d++)c+=goog.html.SafeStyleSheet.unwrap(a[d]);a=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(c,goog.i18n.bidi.Dir.NEUTRAL);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"style\",b,a)};\ngoog.html.SafeHtml.createMetaRefresh=function(a,b){a=goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(a));(goog.labs.userAgent.browser.isIE()||goog.labs.userAgent.browser.isEdge())&&goog.string.internal.contains(a,\";\")&&(a=\"'\"+a.replace(/'/g,\"%27\")+\"'\");return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"meta\",{\"http-equiv\":\"refresh\",content:(b||0)+\"; url=\"+a})};\ngoog.html.SafeHtml.getAttrNameAndValue_=function(a,b,c){if(c instanceof goog.string.Const)c=goog.string.Const.unwrap(c);else if(\"style\"==b.toLowerCase())c=goog.html.SafeHtml.getStyleValue_(c);else{if(/^on/i.test(b))throw Error('Attribute \"'+b+'\" requires goog.string.Const value, \"'+c+'\" given.');if(b.toLowerCase()in goog.html.SafeHtml.URL_ATTRIBUTES_)if(c instanceof goog.html.TrustedResourceUrl)c=goog.html.TrustedResourceUrl.unwrap(c);else if(c instanceof goog.html.SafeUrl)c=goog.html.SafeUrl.unwrap(c);\nelse if(goog.isString(c))c=goog.html.SafeUrl.sanitize(c).getTypedStringValue();else throw Error('Attribute \"'+b+'\" on tag \"'+a+'\" requires goog.html.SafeUrl, goog.string.Const, or string, value \"'+c+'\" given.');}c.implementsGoogStringTypedString&&(c=c.getTypedStringValue());goog.asserts.assert(goog.isString(c)||goog.isNumber(c),\"String or number value expected, got \"+typeof c+\" with value: \"+c);return b+'=\"'+goog.string.internal.htmlEscape(String(c))+'\"'};\ngoog.html.SafeHtml.getStyleValue_=function(a){if(!goog.isObject(a))throw Error('The \"style\" attribute requires goog.html.SafeStyle or map of style properties, '+typeof a+\" given: \"+a);a instanceof goog.html.SafeStyle||(a=goog.html.SafeStyle.create(a));return goog.html.SafeStyle.unwrap(a)};goog.html.SafeHtml.createWithDir=function(a,b,c,d){b=goog.html.SafeHtml.create(b,c,d);b.dir_=a;return b};\ngoog.html.SafeHtml.join=function(a,b){a=goog.html.SafeHtml.htmlEscape(a);var c=a.getDirection(),d=[],e=function(a){goog.isArray(a)?goog.array.forEach(a,e):(a=goog.html.SafeHtml.htmlEscape(a),d.push(goog.html.SafeHtml.unwrap(a)),a=a.getDirection(),c==goog.i18n.bidi.Dir.NEUTRAL?c=a:a!=goog.i18n.bidi.Dir.NEUTRAL&&c!=a&&(c=null))};goog.array.forEach(b,e);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(d.join(goog.html.SafeHtml.unwrap(a)),c)};\ngoog.html.SafeHtml.concat=function(a){return goog.html.SafeHtml.join(goog.html.SafeHtml.EMPTY,Array.prototype.slice.call(arguments))};goog.html.SafeHtml.concatWithDir=function(a,b){var c=goog.html.SafeHtml.concat(goog.array.slice(arguments,1));c.dir_=a;return c};goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse=function(a,b){return(new goog.html.SafeHtml).initSecurityPrivateDoNotAccessOrElse_(a,b)};\ngoog.html.SafeHtml.prototype.initSecurityPrivateDoNotAccessOrElse_=function(a,b){this.privateDoNotAccessOrElseSafeHtmlWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createHTML(a):a;this.dir_=b;return this};\ngoog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse=function(a,b,c){var d=null;var e=\"<\"+a+goog.html.SafeHtml.stringifyAttributes(a,b);goog.isDefAndNotNull(c)?goog.isArray(c)||(c=[c]):c=[];goog.dom.tags.isVoidTag(a.toLowerCase())?(goog.asserts.assert(!c.length,\"Void tag <\"+a+\"> does not allow content.\"),e+=\">\"):(d=goog.html.SafeHtml.concat(c),e+=\">\"+goog.html.SafeHtml.unwrap(d)+\"</\"+a+\">\",d=d.getDirection());(a=b&&b.dir)&&(d=/^(ltr|rtl|auto)$/i.test(a)?goog.i18n.bidi.Dir.NEUTRAL:\nnull);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(e,d)};goog.html.SafeHtml.stringifyAttributes=function(a,b){var c=\"\";if(b)for(var d in b){if(!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(d))throw Error('Invalid attribute name \"'+d+'\".');var e=b[d];goog.isDefAndNotNull(e)&&(c+=\" \"+goog.html.SafeHtml.getAttrNameAndValue_(a,d,e))}return c};\ngoog.html.SafeHtml.combineAttributes=function(a,b,c){var d={},e;for(e in a)goog.asserts.assert(e.toLowerCase()==e,\"Must be lower case\"),d[e]=a[e];for(e in b)goog.asserts.assert(e.toLowerCase()==e,\"Must be lower case\"),d[e]=b[e];for(e in c){var f=e.toLowerCase();if(f in a)throw Error('Cannot override \"'+f+'\" attribute, got \"'+e+'\" with value \"'+c[e]+'\"');f in b&&delete d[f];d[e]=c[e]}return d};\ngoog.html.SafeHtml.DOCTYPE_HTML=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(\"<!DOCTYPE html>\",goog.i18n.bidi.Dir.NEUTRAL);goog.html.SafeHtml.EMPTY=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(\"\",goog.i18n.bidi.Dir.NEUTRAL);goog.html.SafeHtml.BR=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(\"<br>\",goog.i18n.bidi.Dir.NEUTRAL);goog.html.uncheckedconversions={};goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract=function(a,b,c){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(b,c||null)};\ngoog.html.uncheckedconversions.safeScriptFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.uncheckedconversions.safeStyleFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.uncheckedconversions.safeStyleSheetFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.uncheckedconversions.trustedResourceUrlFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(b)};goog.dom.safe={};goog.dom.safe.InsertAdjacentHtmlPosition={AFTERBEGIN:\"afterbegin\",AFTEREND:\"afterend\",BEFOREBEGIN:\"beforebegin\",BEFOREEND:\"beforeend\"};goog.dom.safe.insertAdjacentHtml=function(a,b,c){a.insertAdjacentHTML(b,goog.html.SafeHtml.unwrapTrustedHTML(c))};goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_={MATH:!0,SCRIPT:!0,STYLE:!0,SVG:!0,TEMPLATE:!0};\ngoog.dom.safe.isInnerHtmlCleanupRecursive_=goog.functions.cacheReturnValue(function(){if(goog.DEBUG&&\"undefined\"===typeof document)return!1;var a=document.createElement(\"div\"),b=document.createElement(\"div\");b.appendChild(document.createElement(\"div\"));a.appendChild(b);if(goog.DEBUG&&!a.firstChild)return!1;b=a.firstChild.firstChild;a.innerHTML=goog.html.SafeHtml.unwrapTrustedHTML(goog.html.SafeHtml.EMPTY);return!b.parentElement});\ngoog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse=function(a,b){if(goog.dom.safe.isInnerHtmlCleanupRecursive_())for(;a.lastChild;)a.removeChild(a.lastChild);a.innerHTML=goog.html.SafeHtml.unwrapTrustedHTML(b)};\ngoog.dom.safe.setInnerHtml=function(a,b){if(goog.asserts.ENABLE_ASSERTS){var c=a.tagName.toUpperCase();if(goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_[c])throw Error(\"goog.dom.safe.setInnerHtml cannot be used to set content of \"+a.tagName+\".\");}goog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse(a,b)};goog.dom.safe.setOuterHtml=function(a,b){a.outerHTML=goog.html.SafeHtml.unwrapTrustedHTML(b)};\ngoog.dom.safe.setFormElementAction=function(a,b){b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);goog.dom.asserts.assertIsHTMLFormElement(a).action=goog.html.SafeUrl.unwrapTrustedURL(b)};goog.dom.safe.setButtonFormAction=function(a,b){b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);goog.dom.asserts.assertIsHTMLButtonElement(a).formAction=goog.html.SafeUrl.unwrapTrustedURL(b)};\ngoog.dom.safe.setInputFormAction=function(a,b){b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);goog.dom.asserts.assertIsHTMLInputElement(a).formAction=goog.html.SafeUrl.unwrapTrustedURL(b)};goog.dom.safe.setStyle=function(a,b){a.style.cssText=goog.html.SafeStyle.unwrap(b)};goog.dom.safe.documentWrite=function(a,b){a.write(goog.html.SafeHtml.unwrapTrustedHTML(b))};\ngoog.dom.safe.setAnchorHref=function(a,b){goog.dom.asserts.assertIsHTMLAnchorElement(a);b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);a.href=goog.html.SafeUrl.unwrapTrustedURL(b)};goog.dom.safe.setImageSrc=function(a,b){goog.dom.asserts.assertIsHTMLImageElement(a);if(!(b instanceof goog.html.SafeUrl)){var c=/^data:image\\//i.test(b);b=goog.html.SafeUrl.sanitizeAssertUnchanged(b,c)}a.src=goog.html.SafeUrl.unwrapTrustedURL(b)};\ngoog.dom.safe.setAudioSrc=function(a,b){goog.dom.asserts.assertIsHTMLAudioElement(a);if(!(b instanceof goog.html.SafeUrl)){var c=/^data:audio\\//i.test(b);b=goog.html.SafeUrl.sanitizeAssertUnchanged(b,c)}a.src=goog.html.SafeUrl.unwrapTrustedURL(b)};goog.dom.safe.setVideoSrc=function(a,b){goog.dom.asserts.assertIsHTMLVideoElement(a);if(!(b instanceof goog.html.SafeUrl)){var c=/^data:video\\//i.test(b);b=goog.html.SafeUrl.sanitizeAssertUnchanged(b,c)}a.src=goog.html.SafeUrl.unwrapTrustedURL(b)};\ngoog.dom.safe.setEmbedSrc=function(a,b){goog.dom.asserts.assertIsHTMLEmbedElement(a);a.src=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b)};goog.dom.safe.setFrameSrc=function(a,b){goog.dom.asserts.assertIsHTMLFrameElement(a);a.src=goog.html.TrustedResourceUrl.unwrapTrustedURL(b)};goog.dom.safe.setIframeSrc=function(a,b){goog.dom.asserts.assertIsHTMLIFrameElement(a);a.src=goog.html.TrustedResourceUrl.unwrapTrustedURL(b)};\ngoog.dom.safe.setIframeSrcdoc=function(a,b){goog.dom.asserts.assertIsHTMLIFrameElement(a);a.srcdoc=goog.html.SafeHtml.unwrapTrustedHTML(b)};\ngoog.dom.safe.setLinkHrefAndRel=function(a,b,c){goog.dom.asserts.assertIsHTMLLinkElement(a);a.rel=c;goog.string.internal.caseInsensitiveContains(c,\"stylesheet\")?(goog.asserts.assert(b instanceof goog.html.TrustedResourceUrl,'URL must be TrustedResourceUrl because \"rel\" contains \"stylesheet\"'),a.href=goog.html.TrustedResourceUrl.unwrapTrustedURL(b)):a.href=b instanceof goog.html.TrustedResourceUrl?goog.html.TrustedResourceUrl.unwrapTrustedURL(b):b instanceof goog.html.SafeUrl?goog.html.SafeUrl.unwrapTrustedURL(b):\ngoog.html.SafeUrl.unwrapTrustedURL(goog.html.SafeUrl.sanitizeAssertUnchanged(b))};goog.dom.safe.setObjectData=function(a,b){goog.dom.asserts.assertIsHTMLObjectElement(a);a.data=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b)};goog.dom.safe.setScriptSrc=function(a,b){goog.dom.asserts.assertIsHTMLScriptElement(a);a.src=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b);(b=goog.getScriptNonce())&&a.setAttribute(\"nonce\",b)};\ngoog.dom.safe.setScriptContent=function(a,b){goog.dom.asserts.assertIsHTMLScriptElement(a);a.text=goog.html.SafeScript.unwrapTrustedScript(b);(b=goog.getScriptNonce())&&a.setAttribute(\"nonce\",b)};goog.dom.safe.setLocationHref=function(a,b){goog.dom.asserts.assertIsLocation(a);b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);a.href=goog.html.SafeUrl.unwrapTrustedURL(b)};\ngoog.dom.safe.assignLocation=function(a,b){goog.dom.asserts.assertIsLocation(a);b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);a.assign(goog.html.SafeUrl.unwrapTrustedURL(b))};goog.dom.safe.replaceLocation=function(a,b){goog.dom.asserts.assertIsLocation(a);b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);a.replace(goog.html.SafeUrl.unwrapTrustedURL(b))};\ngoog.dom.safe.openInWindow=function(a,b,c,d,e){a=a instanceof goog.html.SafeUrl?a:goog.html.SafeUrl.sanitizeAssertUnchanged(a);return(b||goog.global).open(goog.html.SafeUrl.unwrapTrustedURL(a),c?goog.string.Const.unwrap(c):\"\",d,e)};goog.dom.safe.parseFromStringHtml=function(a,b){return goog.dom.safe.parseFromString(a,b,\"text/html\")};goog.dom.safe.parseFromString=function(a,b,c){return a.parseFromString(goog.html.SafeHtml.unwrapTrustedHTML(b),c)};\ngoog.dom.safe.createImageFromBlob=function(a){if(!/^image\\/.*/g.test(a.type))throw Error(\"goog.dom.safe.createImageFromBlob only accepts MIME type image/.*.\");var b=goog.global.URL.createObjectURL(a);a=new goog.global.Image;a.onload=function(){goog.global.URL.revokeObjectURL(b)};goog.dom.safe.setImageSrc(a,goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract(goog.string.Const.from(\"Image blob URL.\"),b));return a};goog.string.DETECT_DOUBLE_ESCAPING=!1;goog.string.FORCE_NON_DOM_HTML_UNESCAPING=!1;goog.string.Unicode={NBSP:\"\\u00a0\"};goog.string.startsWith=goog.string.internal.startsWith;goog.string.endsWith=goog.string.internal.endsWith;goog.string.caseInsensitiveStartsWith=goog.string.internal.caseInsensitiveStartsWith;goog.string.caseInsensitiveEndsWith=goog.string.internal.caseInsensitiveEndsWith;goog.string.caseInsensitiveEquals=goog.string.internal.caseInsensitiveEquals;\ngoog.string.subs=function(a,b){for(var c=a.split(\"%s\"),d=\"\",e=Array.prototype.slice.call(arguments,1);e.length&&1<c.length;)d+=c.shift()+e.shift();return d+c.join(\"%s\")};goog.string.collapseWhitespace=function(a){return a.replace(/[\\s\\xa0]+/g,\" \").replace(/^\\s+|\\s+$/g,\"\")};goog.string.isEmptyOrWhitespace=goog.string.internal.isEmptyOrWhitespace;goog.string.isEmptyString=function(a){return 0==a.length};goog.string.isEmpty=goog.string.isEmptyOrWhitespace;goog.string.isEmptyOrWhitespaceSafe=function(a){return goog.string.isEmptyOrWhitespace(goog.string.makeSafe(a))};\ngoog.string.isEmptySafe=goog.string.isEmptyOrWhitespaceSafe;goog.string.isBreakingWhitespace=function(a){return!/[^\\t\\n\\r ]/.test(a)};goog.string.isAlpha=function(a){return!/[^a-zA-Z]/.test(a)};goog.string.isNumeric=function(a){return!/[^0-9]/.test(a)};goog.string.isAlphaNumeric=function(a){return!/[^a-zA-Z0-9]/.test(a)};goog.string.isSpace=function(a){return\" \"==a};goog.string.isUnicodeChar=function(a){return 1==a.length&&\" \"<=a&&\"~\">=a||\"\\u0080\"<=a&&\"\\ufffd\">=a};\ngoog.string.stripNewlines=function(a){return a.replace(/(\\r\\n|\\r|\\n)+/g,\" \")};goog.string.canonicalizeNewlines=function(a){return a.replace(/(\\r\\n|\\r|\\n)/g,\"\\n\")};goog.string.normalizeWhitespace=function(a){return a.replace(/\\xa0|\\s/g,\" \")};goog.string.normalizeSpaces=function(a){return a.replace(/\\xa0|[ \\t]+/g,\" \")};goog.string.collapseBreakingSpaces=function(a){return a.replace(/[\\t\\r\\n ]+/g,\" \").replace(/^[\\t\\r\\n ]+|[\\t\\r\\n ]+$/g,\"\")};goog.string.trim=goog.string.internal.trim;\ngoog.string.trimLeft=function(a){return a.replace(/^[\\s\\xa0]+/,\"\")};goog.string.trimRight=function(a){return a.replace(/[\\s\\xa0]+$/,\"\")};goog.string.caseInsensitiveCompare=goog.string.internal.caseInsensitiveCompare;\ngoog.string.numberAwareCompare_=function(a,b,c){if(a==b)return 0;if(!a)return-1;if(!b)return 1;for(var d=a.toLowerCase().match(c),e=b.toLowerCase().match(c),f=Math.min(d.length,e.length),g=0;g<f;g++){c=d[g];var h=e[g];if(c!=h)return a=parseInt(c,10),!isNaN(a)&&(b=parseInt(h,10),!isNaN(b)&&a-b)?a-b:c<h?-1:1}return d.length!=e.length?d.length-e.length:a<b?-1:1};goog.string.intAwareCompare=function(a,b){return goog.string.numberAwareCompare_(a,b,/\\d+|\\D+/g)};\ngoog.string.floatAwareCompare=function(a,b){return goog.string.numberAwareCompare_(a,b,/\\d+|\\.\\d+|\\D+/g)};goog.string.numerateCompare=goog.string.floatAwareCompare;goog.string.urlEncode=function(a){return encodeURIComponent(String(a))};goog.string.urlDecode=function(a){return decodeURIComponent(a.replace(/\\+/g,\" \"))};goog.string.newLineToBr=goog.string.internal.newLineToBr;\ngoog.string.htmlEscape=function(a,b){a=goog.string.internal.htmlEscape(a,b);goog.string.DETECT_DOUBLE_ESCAPING&&(a=a.replace(goog.string.E_RE_,\"e\"));return a};goog.string.E_RE_=/e/g;goog.string.unescapeEntities=function(a){return goog.string.contains(a,\"&\")?!goog.string.FORCE_NON_DOM_HTML_UNESCAPING&&\"document\"in goog.global?goog.string.unescapeEntitiesUsingDom_(a):goog.string.unescapePureXmlEntities_(a):a};\ngoog.string.unescapeEntitiesWithDocument=function(a,b){return goog.string.contains(a,\"&\")?goog.string.unescapeEntitiesUsingDom_(a,b):a};\ngoog.string.unescapeEntitiesUsingDom_=function(a,b){var c={\"&\":\"&\",\"<\":\"<\",\">\":\">\",\""\":'\"'};var d=b?b.createElement(\"div\"):goog.global.document.createElement(\"div\");return a.replace(goog.string.HTML_ENTITY_PATTERN_,function(a,b){var e=c[a];if(e)return e;\"#\"==b.charAt(0)&&(b=Number(\"0\"+b.substr(1)),isNaN(b)||(e=String.fromCharCode(b)));e||(goog.dom.safe.setInnerHtml(d,goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract(goog.string.Const.from(\"Single HTML entity.\"),\na+\" \")),e=d.firstChild.nodeValue.slice(0,-1));return c[a]=e})};goog.string.unescapePureXmlEntities_=function(a){return a.replace(/&([^;]+);/g,function(a,c){switch(c){case \"amp\":return\"&\";case \"lt\":return\"<\";case \"gt\":return\">\";case \"quot\":return'\"';default:return\"#\"!=c.charAt(0)||(c=Number(\"0\"+c.substr(1)),isNaN(c))?a:String.fromCharCode(c)}})};goog.string.HTML_ENTITY_PATTERN_=/&([^;\\s<&]+);?/g;goog.string.whitespaceEscape=function(a,b){return goog.string.newLineToBr(a.replace(/ /g,\"  \"),b)};\ngoog.string.preserveSpaces=function(a){return a.replace(/(^|[\\n ]) /g,\"$1\"+goog.string.Unicode.NBSP)};goog.string.stripQuotes=function(a,b){for(var c=b.length,d=0;d<c;d++){var e=1==c?b:b.charAt(d);if(a.charAt(0)==e&&a.charAt(a.length-1)==e)return a.substring(1,a.length-1)}return a};goog.string.truncate=function(a,b,c){c&&(a=goog.string.unescapeEntities(a));a.length>b&&(a=a.substring(0,b-3)+\"...\");c&&(a=goog.string.htmlEscape(a));return a};\ngoog.string.truncateMiddle=function(a,b,c,d){c&&(a=goog.string.unescapeEntities(a));if(d&&a.length>b){d>b&&(d=b);var e=a.length-d;a=a.substring(0,b-d)+\"...\"+a.substring(e)}else a.length>b&&(d=Math.floor(b/2),e=a.length-d,a=a.substring(0,d+b%2)+\"...\"+a.substring(e));c&&(a=goog.string.htmlEscape(a));return a};goog.string.specialEscapeChars_={\"\\x00\":\"\\\\0\",\"\\b\":\"\\\\b\",\"\\f\":\"\\\\f\",\"\\n\":\"\\\\n\",\"\\r\":\"\\\\r\",\"\\t\":\"\\\\t\",\"\\x0B\":\"\\\\x0B\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\",\"<\":\"\\\\u003C\"};goog.string.jsEscapeCache_={\"'\":\"\\\\'\"};\ngoog.string.quote=function(a){a=String(a);for(var b=['\"'],c=0;c<a.length;c++){var d=a.charAt(c),e=d.charCodeAt(0);b[c+1]=goog.string.specialEscapeChars_[d]||(31<e&&127>e?d:goog.string.escapeChar(d))}b.push('\"');return b.join(\"\")};goog.string.escapeString=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=goog.string.escapeChar(a.charAt(c));return b.join(\"\")};\ngoog.string.escapeChar=function(a){if(a in goog.string.jsEscapeCache_)return goog.string.jsEscapeCache_[a];if(a in goog.string.specialEscapeChars_)return goog.string.jsEscapeCache_[a]=goog.string.specialEscapeChars_[a];var b=a.charCodeAt(0);if(31<b&&127>b)var c=a;else{if(256>b){if(c=\"\\\\x\",16>b||256<b)c+=\"0\"}else c=\"\\\\u\",4096>b&&(c+=\"0\");c+=b.toString(16).toUpperCase()}return goog.string.jsEscapeCache_[a]=c};goog.string.contains=goog.string.internal.contains;goog.string.caseInsensitiveContains=goog.string.internal.caseInsensitiveContains;\ngoog.string.countOf=function(a,b){return a&&b?a.split(b).length-1:0};goog.string.removeAt=function(a,b,c){var d=a;0<=b&&b<a.length&&0<c&&(d=a.substr(0,b)+a.substr(b+c,a.length-b-c));return d};goog.string.remove=function(a,b){return a.replace(b,\"\")};goog.string.removeAll=function(a,b){b=new RegExp(goog.string.regExpEscape(b),\"g\");return a.replace(b,\"\")};goog.string.replaceAll=function(a,b,c){b=new RegExp(goog.string.regExpEscape(b),\"g\");return a.replace(b,c.replace(/\\$/g,\"$$$$\"))};\ngoog.string.regExpEscape=function(a){return String(a).replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g,\"\\\\$1\").replace(/\\x08/g,\"\\\\x08\")};goog.string.repeat=String.prototype.repeat?function(a,b){return a.repeat(b)}:function(a,b){return Array(b+1).join(a)};goog.string.padNumber=function(a,b,c){a=goog.isDef(c)?a.toFixed(c):String(a);c=a.indexOf(\".\");-1==c&&(c=a.length);return goog.string.repeat(\"0\",Math.max(0,b-c))+a};goog.string.makeSafe=function(a){return null==a?\"\":String(a)};\ngoog.string.buildString=function(a){return Array.prototype.join.call(arguments,\"\")};goog.string.getRandomString=function(){return Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^goog.now()).toString(36)};goog.string.compareVersions=goog.string.internal.compareVersions;goog.string.hashCode=function(a){for(var b=0,c=0;c<a.length;++c)b=31*b+a.charCodeAt(c)>>>0;return b};goog.string.uniqueStringCounter_=2147483648*Math.random()|0;\ngoog.string.createUniqueString=function(){return\"goog_\"+goog.string.uniqueStringCounter_++};goog.string.toNumber=function(a){var b=Number(a);return 0==b&&goog.string.isEmptyOrWhitespace(a)?NaN:b};goog.string.isLowerCamelCase=function(a){return/^[a-z]+([A-Z][a-z]*)*$/.test(a)};goog.string.isUpperCamelCase=function(a){return/^([A-Z][a-z]*)+$/.test(a)};goog.string.toCamelCase=function(a){return String(a).replace(/\\-([a-z])/g,function(a,c){return c.toUpperCase()})};\ngoog.string.toSelectorCase=function(a){return String(a).replace(/([A-Z])/g,\"-$1\").toLowerCase()};goog.string.toTitleCase=function(a,b){b=goog.isString(b)?goog.string.regExpEscape(b):\"\\\\s\";return a.replace(new RegExp(\"(^\"+(b?\"|[\"+b+\"]+\":\"\")+\")([a-z])\",\"g\"),function(a,b,e){return b+e.toUpperCase()})};goog.string.capitalize=function(a){return String(a.charAt(0)).toUpperCase()+String(a.substr(1)).toLowerCase()};\ngoog.string.parseInt=function(a){isFinite(a)&&(a=String(a));return goog.isString(a)?/^\\s*-?0x/i.test(a)?parseInt(a,16):parseInt(a,10):NaN};goog.string.splitLimit=function(a,b,c){a=a.split(b);for(var d=[];0<c&&a.length;)d.push(a.shift()),c--;a.length&&d.push(a.join(b));return d};goog.string.lastComponent=function(a,b){if(b)\"string\"==typeof b&&(b=[b]);else return a;for(var c=-1,d=0;d<b.length;d++)if(\"\"!=b[d]){var e=a.lastIndexOf(b[d]);e>c&&(c=e)}return-1==c?a:a.slice(c+1)};\ngoog.string.editDistance=function(a,b){var c=[],d=[];if(a==b)return 0;if(!a.length||!b.length)return Math.max(a.length,b.length);for(var e=0;e<b.length+1;e++)c[e]=e;for(e=0;e<a.length;e++){d[0]=e+1;for(var f=0;f<b.length;f++)d[f+1]=Math.min(d[f]+1,c[f+1]+1,c[f]+Number(a[e]!=b[f]));for(f=0;f<c.length;f++)c[f]=d[f]}return d[b.length]};goog.labs.userAgent.engine={};goog.labs.userAgent.engine.isPresto=function(){return goog.labs.userAgent.util.matchUserAgent(\"Presto\")};goog.labs.userAgent.engine.isTrident=function(){return goog.labs.userAgent.util.matchUserAgent(\"Trident\")||goog.labs.userAgent.util.matchUserAgent(\"MSIE\")};goog.labs.userAgent.engine.isEdge=function(){return goog.labs.userAgent.util.matchUserAgent(\"Edge\")};\ngoog.labs.userAgent.engine.isWebKit=function(){return goog.labs.userAgent.util.matchUserAgentIgnoreCase(\"WebKit\")&&!goog.labs.userAgent.engine.isEdge()};goog.labs.userAgent.engine.isGecko=function(){return goog.labs.userAgent.util.matchUserAgent(\"Gecko\")&&!goog.labs.userAgent.engine.isWebKit()&&!goog.labs.userAgent.engine.isTrident()&&!goog.labs.userAgent.engine.isEdge()};\ngoog.labs.userAgent.engine.getVersion=function(){var a=goog.labs.userAgent.util.getUserAgent();if(a){a=goog.labs.userAgent.util.extractVersionTuples(a);var b=goog.labs.userAgent.engine.getEngineTuple_(a);if(b)return\"Gecko\"==b[0]?goog.labs.userAgent.engine.getVersionForKey_(a,\"Firefox\"):b[1];a=a[0];var c;if(a&&(c=a[2])&&(c=/Trident\\/([^\\s;]+)/.exec(c)))return c[1]}return\"\"};\ngoog.labs.userAgent.engine.getEngineTuple_=function(a){if(!goog.labs.userAgent.engine.isEdge())return a[1];for(var b=0;b<a.length;b++){var c=a[b];if(\"Edge\"==c[0])return c}};goog.labs.userAgent.engine.isVersionOrHigher=function(a){return 0<=goog.string.compareVersions(goog.labs.userAgent.engine.getVersion(),a)};goog.labs.userAgent.engine.getVersionForKey_=function(a,b){return(a=goog.array.find(a,function(a){return b==a[0]}))&&a[1]||\"\"};goog.labs.userAgent.platform={};goog.labs.userAgent.platform.isAndroid=function(){return goog.labs.userAgent.util.matchUserAgent(\"Android\")};goog.labs.userAgent.platform.isIpod=function(){return goog.labs.userAgent.util.matchUserAgent(\"iPod\")};goog.labs.userAgent.platform.isIphone=function(){return goog.labs.userAgent.util.matchUserAgent(\"iPhone\")&&!goog.labs.userAgent.util.matchUserAgent(\"iPod\")&&!goog.labs.userAgent.util.matchUserAgent(\"iPad\")};goog.labs.userAgent.platform.isIpad=function(){return goog.labs.userAgent.util.matchUserAgent(\"iPad\")};\ngoog.labs.userAgent.platform.isIos=function(){return goog.labs.userAgent.platform.isIphone()||goog.labs.userAgent.platform.isIpad()||goog.labs.userAgent.platform.isIpod()};goog.labs.userAgent.platform.isMacintosh=function(){return goog.labs.userAgent.util.matchUserAgent(\"Macintosh\")};goog.labs.userAgent.platform.isLinux=function(){return goog.labs.userAgent.util.matchUserAgent(\"Linux\")};goog.labs.userAgent.platform.isWindows=function(){return goog.labs.userAgent.util.matchUserAgent(\"Windows\")};\ngoog.labs.userAgent.platform.isChromeOS=function(){return goog.labs.userAgent.util.matchUserAgent(\"CrOS\")};goog.labs.userAgent.platform.isChromecast=function(){return goog.labs.userAgent.util.matchUserAgent(\"CrKey\")};goog.labs.userAgent.platform.isKaiOS=function(){return goog.labs.userAgent.util.matchUserAgentIgnoreCase(\"KaiOS\")};goog.labs.userAgent.platform.isGo2Phone=function(){return goog.labs.userAgent.util.matchUserAgentIgnoreCase(\"GAFP\")};\ngoog.labs.userAgent.platform.getVersion=function(){var a=goog.labs.userAgent.util.getUserAgent(),b=\"\";goog.labs.userAgent.platform.isWindows()?(b=/Windows (?:NT|Phone) ([0-9.]+)/,b=(a=b.exec(a))?a[1]:\"0.0\"):goog.labs.userAgent.platform.isIos()?(b=/(?:iPhone|iPod|iPad|CPU)\\s+OS\\s+(\\S+)/,b=(a=b.exec(a))&&a[1].replace(/_/g,\".\")):goog.labs.userAgent.platform.isMacintosh()?(b=/Mac OS X ([0-9_.]+)/,b=(a=b.exec(a))?a[1].replace(/_/g,\".\"):\"10\"):goog.labs.userAgent.platform.isKaiOS()?(b=/(?:KaiOS)\\/(\\S+)/i,\nb=(a=b.exec(a))&&a[1]):goog.labs.userAgent.platform.isAndroid()?(b=/Android\\s+([^\\);]+)(\\)|;)/,b=(a=b.exec(a))&&a[1]):goog.labs.userAgent.platform.isChromeOS()&&(b=/(?:CrOS\\s+(?:i686|x86_64)\\s+([0-9.]+))/,b=(a=b.exec(a))&&a[1]);return b||\"\"};goog.labs.userAgent.platform.isVersionOrHigher=function(a){return 0<=goog.string.compareVersions(goog.labs.userAgent.platform.getVersion(),a)};goog.reflect={};goog.reflect.object=function(a,b){return b};goog.reflect.objectProperty=function(a,b){return a};goog.reflect.sinkValue=function(a){goog.reflect.sinkValue[\" \"](a);return a};goog.reflect.sinkValue[\" \"]=goog.nullFunction;goog.reflect.canAccessProperty=function(a,b){try{return goog.reflect.sinkValue(a[b]),!0}catch(c){}return!1};goog.reflect.cache=function(a,b,c,d){d=d?d(b):b;return Object.prototype.hasOwnProperty.call(a,d)?a[d]:a[d]=c(b)};goog.userAgent={};goog.userAgent.ASSUME_IE=!1;goog.userAgent.ASSUME_EDGE=!1;goog.userAgent.ASSUME_GECKO=!1;goog.userAgent.ASSUME_WEBKIT=!1;goog.userAgent.ASSUME_MOBILE_WEBKIT=!1;goog.userAgent.ASSUME_OPERA=!1;goog.userAgent.ASSUME_ANY_VERSION=!1;goog.userAgent.BROWSER_KNOWN_=goog.userAgent.ASSUME_IE||goog.userAgent.ASSUME_EDGE||goog.userAgent.ASSUME_GECKO||goog.userAgent.ASSUME_MOBILE_WEBKIT||goog.userAgent.ASSUME_WEBKIT||goog.userAgent.ASSUME_OPERA;goog.userAgent.getUserAgentString=function(){return goog.labs.userAgent.util.getUserAgent()};\ngoog.userAgent.getNavigatorTyped=function(){return goog.global.navigator||null};goog.userAgent.getNavigator=function(){return goog.userAgent.getNavigatorTyped()};goog.userAgent.OPERA=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_OPERA:goog.labs.userAgent.browser.isOpera();goog.userAgent.IE=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_IE:goog.labs.userAgent.browser.isIE();goog.userAgent.EDGE=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_EDGE:goog.labs.userAgent.engine.isEdge();\ngoog.userAgent.EDGE_OR_IE=goog.userAgent.EDGE||goog.userAgent.IE;goog.userAgent.GECKO=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_GECKO:goog.labs.userAgent.engine.isGecko();goog.userAgent.WEBKIT=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_WEBKIT||goog.userAgent.ASSUME_MOBILE_WEBKIT:goog.labs.userAgent.engine.isWebKit();goog.userAgent.isMobile_=function(){return goog.userAgent.WEBKIT&&goog.labs.userAgent.util.matchUserAgent(\"Mobile\")};\ngoog.userAgent.MOBILE=goog.userAgent.ASSUME_MOBILE_WEBKIT||goog.userAgent.isMobile_();goog.userAgent.SAFARI=goog.userAgent.WEBKIT;goog.userAgent.determinePlatform_=function(){var a=goog.userAgent.getNavigatorTyped();return a&&a.platform||\"\"};goog.userAgent.PLATFORM=goog.userAgent.determinePlatform_();goog.userAgent.ASSUME_MAC=!1;goog.userAgent.ASSUME_WINDOWS=!1;goog.userAgent.ASSUME_LINUX=!1;goog.userAgent.ASSUME_X11=!1;goog.userAgent.ASSUME_ANDROID=!1;goog.userAgent.ASSUME_IPHONE=!1;\ngoog.userAgent.ASSUME_IPAD=!1;goog.userAgent.ASSUME_IPOD=!1;goog.userAgent.ASSUME_KAIOS=!1;goog.userAgent.ASSUME_GO2PHONE=!1;goog.userAgent.PLATFORM_KNOWN_=goog.userAgent.ASSUME_MAC||goog.userAgent.ASSUME_WINDOWS||goog.userAgent.ASSUME_LINUX||goog.userAgent.ASSUME_X11||goog.userAgent.ASSUME_ANDROID||goog.userAgent.ASSUME_IPHONE||goog.userAgent.ASSUME_IPAD||goog.userAgent.ASSUME_IPOD;goog.userAgent.MAC=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_MAC:goog.labs.userAgent.platform.isMacintosh();\ngoog.userAgent.WINDOWS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_WINDOWS:goog.labs.userAgent.platform.isWindows();goog.userAgent.isLegacyLinux_=function(){return goog.labs.userAgent.platform.isLinux()||goog.labs.userAgent.platform.isChromeOS()};goog.userAgent.LINUX=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_LINUX:goog.userAgent.isLegacyLinux_();goog.userAgent.isX11_=function(){var a=goog.userAgent.getNavigatorTyped();return!!a&&goog.string.contains(a.appVersion||\"\",\"X11\")};\ngoog.userAgent.X11=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_X11:goog.userAgent.isX11_();goog.userAgent.ANDROID=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_ANDROID:goog.labs.userAgent.platform.isAndroid();goog.userAgent.IPHONE=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPHONE:goog.labs.userAgent.platform.isIphone();goog.userAgent.IPAD=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPAD:goog.labs.userAgent.platform.isIpad();\ngoog.userAgent.IPOD=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPOD:goog.labs.userAgent.platform.isIpod();goog.userAgent.IOS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPHONE||goog.userAgent.ASSUME_IPAD||goog.userAgent.ASSUME_IPOD:goog.labs.userAgent.platform.isIos();goog.userAgent.KAIOS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_KAIOS:goog.labs.userAgent.platform.isKaiOS();goog.userAgent.GO2PHONE=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_GO2PHONE:goog.labs.userAgent.platform.isGo2Phone();\ngoog.userAgent.determineVersion_=function(){var a=\"\",b=goog.userAgent.getVersionRegexResult_();b&&(a=b?b[1]:\"\");return goog.userAgent.IE&&(b=goog.userAgent.getDocumentMode_(),null!=b&&b>parseFloat(a))?String(b):a};\ngoog.userAgent.getVersionRegexResult_=function(){var a=goog.userAgent.getUserAgentString();if(goog.userAgent.GECKO)return/rv:([^\\);]+)(\\)|;)/.exec(a);if(goog.userAgent.EDGE)return/Edge\\/([\\d\\.]+)/.exec(a);if(goog.userAgent.IE)return/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(a);if(goog.userAgent.WEBKIT)return/WebKit\\/(\\S+)/.exec(a);if(goog.userAgent.OPERA)return/(?:Version)[ \\/]?(\\S+)/.exec(a)};goog.userAgent.getDocumentMode_=function(){var a=goog.global.document;return a?a.documentMode:void 0};\ngoog.userAgent.VERSION=goog.userAgent.determineVersion_();goog.userAgent.compare=function(a,b){return goog.string.compareVersions(a,b)};goog.userAgent.isVersionOrHigherCache_={};goog.userAgent.isVersionOrHigher=function(a){return goog.userAgent.ASSUME_ANY_VERSION||goog.reflect.cache(goog.userAgent.isVersionOrHigherCache_,a,function(){return 0<=goog.string.compareVersions(goog.userAgent.VERSION,a)})};goog.userAgent.isVersion=goog.userAgent.isVersionOrHigher;\ngoog.userAgent.isDocumentModeOrHigher=function(a){return Number(goog.userAgent.DOCUMENT_MODE)>=a};goog.userAgent.isDocumentMode=goog.userAgent.isDocumentModeOrHigher;goog.userAgent.DOCUMENT_MODE=function(){if(goog.global.document&&goog.userAgent.IE)return goog.userAgent.getDocumentMode_()}();goog.userAgent.product={};goog.userAgent.product.ASSUME_FIREFOX=!1;goog.userAgent.product.ASSUME_IPHONE=!1;goog.userAgent.product.ASSUME_IPAD=!1;goog.userAgent.product.ASSUME_ANDROID=!1;goog.userAgent.product.ASSUME_CHROME=!1;goog.userAgent.product.ASSUME_SAFARI=!1;\ngoog.userAgent.product.PRODUCT_KNOWN_=goog.userAgent.ASSUME_IE||goog.userAgent.ASSUME_EDGE||goog.userAgent.ASSUME_OPERA||goog.userAgent.product.ASSUME_FIREFOX||goog.userAgent.product.ASSUME_IPHONE||goog.userAgent.product.ASSUME_IPAD||goog.userAgent.product.ASSUME_ANDROID||goog.userAgent.product.ASSUME_CHROME||goog.userAgent.product.ASSUME_SAFARI;goog.userAgent.product.OPERA=goog.userAgent.OPERA;goog.userAgent.product.IE=goog.userAgent.IE;goog.userAgent.product.EDGE=goog.userAgent.EDGE;\ngoog.userAgent.product.FIREFOX=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_FIREFOX:goog.labs.userAgent.browser.isFirefox();goog.userAgent.product.isIphoneOrIpod_=function(){return goog.labs.userAgent.platform.isIphone()||goog.labs.userAgent.platform.isIpod()};goog.userAgent.product.IPHONE=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_IPHONE:goog.userAgent.product.isIphoneOrIpod_();\ngoog.userAgent.product.IPAD=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_IPAD:goog.labs.userAgent.platform.isIpad();goog.userAgent.product.ANDROID=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_ANDROID:goog.labs.userAgent.browser.isAndroidBrowser();goog.userAgent.product.CHROME=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_CHROME:goog.labs.userAgent.browser.isChrome();\ngoog.userAgent.product.isSafariDesktop_=function(){return goog.labs.userAgent.browser.isSafari()&&!goog.labs.userAgent.platform.isIos()};goog.userAgent.product.SAFARI=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_SAFARI:goog.userAgent.product.isSafariDesktop_();goog.crypt.base64={};goog.crypt.base64.DEFAULT_ALPHABET_COMMON_=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";goog.crypt.base64.ENCODED_VALS=goog.crypt.base64.DEFAULT_ALPHABET_COMMON_+\"+/=\";goog.crypt.base64.ENCODED_VALS_WEBSAFE=goog.crypt.base64.DEFAULT_ALPHABET_COMMON_+\"-_.\";goog.crypt.base64.Alphabet={DEFAULT:0,NO_PADDING:1,WEBSAFE:2,WEBSAFE_DOT_PADDING:3,WEBSAFE_NO_PADDING:4};goog.crypt.base64.paddingChars_=\"=.\";\ngoog.crypt.base64.isPadding_=function(a){return goog.string.contains(goog.crypt.base64.paddingChars_,a)};goog.crypt.base64.byteToCharMaps_={};goog.crypt.base64.charToByteMap_=null;goog.crypt.base64.ASSUME_NATIVE_SUPPORT_=goog.userAgent.GECKO||goog.userAgent.WEBKIT&&!goog.userAgent.product.SAFARI||goog.userAgent.OPERA;goog.crypt.base64.HAS_NATIVE_ENCODE_=goog.crypt.base64.ASSUME_NATIVE_SUPPORT_||\"function\"==typeof goog.global.btoa;\ngoog.crypt.base64.HAS_NATIVE_DECODE_=goog.crypt.base64.ASSUME_NATIVE_SUPPORT_||!goog.userAgent.product.SAFARI&&!goog.userAgent.IE&&\"function\"==typeof goog.global.atob;\ngoog.crypt.base64.encodeByteArray=function(a,b){goog.asserts.assert(goog.isArrayLike(a),\"encodeByteArray takes an array as a parameter\");void 0===b&&(b=goog.crypt.base64.Alphabet.DEFAULT);goog.crypt.base64.init_();b=goog.crypt.base64.byteToCharMaps_[b];for(var c=[],d=0;d<a.length;d+=3){var e=a[d],f=d+1<a.length,g=f?a[d+1]:0,h=d+2<a.length,k=h?a[d+2]:0,l=e>>2;e=(e&3)<<4|g>>4;g=(g&15)<<2|k>>6;k&=63;h||(k=64,f||(g=64));c.push(b[l],b[e],b[g]||\"\",b[k]||\"\")}return c.join(\"\")};\ngoog.crypt.base64.encodeString=function(a,b){return goog.crypt.base64.HAS_NATIVE_ENCODE_&&!b?goog.global.btoa(a):goog.crypt.base64.encodeByteArray(goog.crypt.stringToByteArray(a),b)};goog.crypt.base64.decodeString=function(a,b){if(goog.crypt.base64.HAS_NATIVE_DECODE_&&!b)return goog.global.atob(a);var c=\"\";goog.crypt.base64.decodeStringInternal_(a,function(a){c+=String.fromCharCode(a)});return c};\ngoog.crypt.base64.decodeStringToByteArray=function(a,b){var c=[];goog.crypt.base64.decodeStringInternal_(a,function(a){c.push(a)});return c};\ngoog.crypt.base64.decodeStringToUint8Array=function(a){goog.asserts.assert(!goog.userAgent.IE||goog.userAgent.isVersionOrHigher(\"10\"),\"Browser does not support typed arrays\");var b=a.length,c=3*b/4;c%3?c=Math.floor(c):goog.crypt.base64.isPadding_(a[b-1])&&(c=goog.crypt.base64.isPadding_(a[b-2])?c-2:c-1);var d=new Uint8Array(c),e=0;goog.crypt.base64.decodeStringInternal_(a,function(a){d[e++]=a});return d.subarray(0,e)};\ngoog.crypt.base64.decodeStringInternal_=function(a,b){function c(b){for(;d<a.length;){var c=a.charAt(d++),e=goog.crypt.base64.charToByteMap_[c];if(null!=e)return e;if(!goog.string.isEmptyOrWhitespace(c))throw Error(\"Unknown base64 encoding at char: \"+c);}return b}goog.crypt.base64.init_();for(var d=0;;){var e=c(-1),f=c(0),g=c(64),h=c(64);if(64===h&&-1===e)break;b(e<<2|f>>4);64!=g&&(b(f<<4&240|g>>2),64!=h&&b(g<<6&192|h))}};\ngoog.crypt.base64.init_=function(){if(!goog.crypt.base64.charToByteMap_){goog.crypt.base64.charToByteMap_={};for(var a=goog.crypt.base64.DEFAULT_ALPHABET_COMMON_.split(\"\"),b=[\"+/=\",\"+/\",\"-_=\",\"-_.\",\"-_\"],c=0;5>c;c++){var d=a.concat(b[c].split(\"\"));goog.crypt.base64.byteToCharMaps_[c]=d;for(var e=0;e<d.length;e++){var f=d[e],g=goog.crypt.base64.charToByteMap_[f];void 0===g?goog.crypt.base64.charToByteMap_[f]=e:goog.asserts.assert(g===e)}}}};jspb.utils={};jspb.utils.split64Low=0;jspb.utils.split64High=0;jspb.utils.splitUint64=function(a){var b=a>>>0;a=Math.floor((a-b)/jspb.BinaryConstants.TWO_TO_32)>>>0;jspb.utils.split64Low=b;jspb.utils.split64High=a};jspb.utils.splitInt64=function(a){var b=0>a;a=Math.abs(a);var c=a>>>0;a=Math.floor((a-c)/jspb.BinaryConstants.TWO_TO_32);a>>>=0;b&&(a=~a>>>0,c=(~c>>>0)+1,4294967295<c&&(c=0,a++,4294967295<a&&(a=0)));jspb.utils.split64Low=c;jspb.utils.split64High=a};\njspb.utils.splitZigzag64=function(a){var b=0>a;a=2*Math.abs(a);jspb.utils.splitUint64(a);a=jspb.utils.split64Low;var c=jspb.utils.split64High;b&&(0==a?0==c?c=a=4294967295:(c--,a=4294967295):a--);jspb.utils.split64Low=a;jspb.utils.split64High=c};\njspb.utils.splitFloat32=function(a){var b=0>a?1:0;a=b?-a:a;if(0===a)0<1/a?(jspb.utils.split64High=0,jspb.utils.split64Low=0):(jspb.utils.split64High=0,jspb.utils.split64Low=2147483648);else if(isNaN(a))jspb.utils.split64High=0,jspb.utils.split64Low=2147483647;else if(a>jspb.BinaryConstants.FLOAT32_MAX)jspb.utils.split64High=0,jspb.utils.split64Low=(b<<31|2139095040)>>>0;else if(a<jspb.BinaryConstants.FLOAT32_MIN)a=Math.round(a/Math.pow(2,-149)),jspb.utils.split64High=0,jspb.utils.split64Low=(b<<31|\na)>>>0;else{var c=Math.floor(Math.log(a)/Math.LN2);a*=Math.pow(2,-c);a=Math.round(a*jspb.BinaryConstants.TWO_TO_23);16777216<=a&&++c;jspb.utils.split64High=0;jspb.utils.split64Low=(b<<31|c+127<<23|a&8388607)>>>0}};\njspb.utils.splitFloat64=function(a){var b=0>a?1:0;a=b?-a:a;if(0===a)jspb.utils.split64High=0<1/a?0:2147483648,jspb.utils.split64Low=0;else if(isNaN(a))jspb.utils.split64High=2147483647,jspb.utils.split64Low=4294967295;else if(a>jspb.BinaryConstants.FLOAT64_MAX)jspb.utils.split64High=(b<<31|2146435072)>>>0,jspb.utils.split64Low=0;else if(a<jspb.BinaryConstants.FLOAT64_MIN){var c=a/Math.pow(2,-1074);a=c/jspb.BinaryConstants.TWO_TO_32;jspb.utils.split64High=(b<<31|a)>>>0;jspb.utils.split64Low=c>>>0}else{c=\na;var d=0;if(2<=c)for(;2<=c&&1023>d;)d++,c/=2;else for(;1>c&&-1022<d;)c*=2,d--;c=a*Math.pow(2,-d);a=c*jspb.BinaryConstants.TWO_TO_20&1048575;c=c*jspb.BinaryConstants.TWO_TO_52>>>0;jspb.utils.split64High=(b<<31|d+1023<<20|a)>>>0;jspb.utils.split64Low=c}};\njspb.utils.splitHash64=function(a){var b=a.charCodeAt(0),c=a.charCodeAt(1),d=a.charCodeAt(2),e=a.charCodeAt(3),f=a.charCodeAt(4),g=a.charCodeAt(5),h=a.charCodeAt(6);a=a.charCodeAt(7);jspb.utils.split64Low=b+(c<<8)+(d<<16)+(e<<24)>>>0;jspb.utils.split64High=f+(g<<8)+(h<<16)+(a<<24)>>>0};jspb.utils.joinUint64=function(a,b){return b*jspb.BinaryConstants.TWO_TO_32+(a>>>0)};\njspb.utils.joinInt64=function(a,b){var c=b&2147483648;c&&(a=~a+1>>>0,b=~b>>>0,0==a&&(b=b+1>>>0));a=jspb.utils.joinUint64(a,b);return c?-a:a};jspb.utils.toZigzag64=function(a,b,c){var d=b>>31;return c(a<<1^d,(b<<1|a>>>31)^d)};jspb.utils.joinZigzag64=function(a,b){return jspb.utils.fromZigzag64(a,b,jspb.utils.joinInt64)};jspb.utils.fromZigzag64=function(a,b,c){var d=-(a&1);return c((a>>>1|b<<31)^d,b>>>1^d)};\njspb.utils.joinFloat32=function(a,b){b=2*(a>>31)+1;var c=a>>>23&255;a&=8388607;return 255==c?a?NaN:Infinity*b:0==c?b*Math.pow(2,-149)*a:b*Math.pow(2,c-150)*(a+Math.pow(2,23))};jspb.utils.joinFloat64=function(a,b){var c=2*(b>>31)+1,d=b>>>20&2047;a=jspb.BinaryConstants.TWO_TO_32*(b&1048575)+a;return 2047==d?a?NaN:Infinity*c:0==d?c*Math.pow(2,-1074)*a:c*Math.pow(2,d-1075)*(a+jspb.BinaryConstants.TWO_TO_52)};\njspb.utils.joinHash64=function(a,b){return String.fromCharCode(a>>>0&255,a>>>8&255,a>>>16&255,a>>>24&255,b>>>0&255,b>>>8&255,b>>>16&255,b>>>24&255)};jspb.utils.DIGITS=\"0123456789abcdef\".split(\"\");jspb.utils.ZERO_CHAR_CODE_=48;jspb.utils.A_CHAR_CODE_=97;\njspb.utils.joinUnsignedDecimalString=function(a,b){function c(a,b){a=a?String(a):\"\";return b?\"0000000\".slice(a.length)+a:a}if(2097151>=b)return\"\"+jspb.utils.joinUint64(a,b);var d=(a>>>24|b<<8)>>>0&16777215;b=b>>16&65535;a=(a&16777215)+6777216*d+6710656*b;d+=8147497*b;b*=2;1E7<=a&&(d+=Math.floor(a/1E7),a%=1E7);1E7<=d&&(b+=Math.floor(d/1E7),d%=1E7);return c(b,0)+c(d,b)+c(a,1)};\njspb.utils.joinSignedDecimalString=function(a,b){var c=b&2147483648;c&&(a=~a+1>>>0,b=~b+(0==a?1:0)>>>0);a=jspb.utils.joinUnsignedDecimalString(a,b);return c?\"-\"+a:a};jspb.utils.hash64ToDecimalString=function(a,b){jspb.utils.splitHash64(a);a=jspb.utils.split64Low;var c=jspb.utils.split64High;return b?jspb.utils.joinSignedDecimalString(a,c):jspb.utils.joinUnsignedDecimalString(a,c)};\njspb.utils.hash64ArrayToDecimalStrings=function(a,b){for(var c=Array(a.length),d=0;d<a.length;d++)c[d]=jspb.utils.hash64ToDecimalString(a[d],b);return c};\njspb.utils.decimalStringToHash64=function(a){function b(a,b){for(var c=0;8>c&&(1!==a||0<b);c++)b=a*e[c]+b,e[c]=b&255,b>>>=8}function c(){for(var a=0;8>a;a++)e[a]=~e[a]&255}goog.asserts.assert(0<a.length);var d=!1;\"-\"===a[0]&&(d=!0,a=a.slice(1));for(var e=[0,0,0,0,0,0,0,0],f=0;f<a.length;f++)b(10,a.charCodeAt(f)-jspb.utils.ZERO_CHAR_CODE_);d&&(c(),b(1,1));return goog.crypt.byteArrayToString(e)};jspb.utils.splitDecimalString=function(a){jspb.utils.splitHash64(jspb.utils.decimalStringToHash64(a))};\njspb.utils.toHexDigit_=function(a){return String.fromCharCode(10>a?jspb.utils.ZERO_CHAR_CODE_+a:jspb.utils.A_CHAR_CODE_-10+a)};jspb.utils.fromHexCharCode_=function(a){return a>=jspb.utils.A_CHAR_CODE_?a-jspb.utils.A_CHAR_CODE_+10:a-jspb.utils.ZERO_CHAR_CODE_};jspb.utils.hash64ToHexString=function(a){var b=Array(18);b[0]=\"0\";b[1]=\"x\";for(var c=0;8>c;c++){var d=a.charCodeAt(7-c);b[2*c+2]=jspb.utils.toHexDigit_(d>>4);b[2*c+3]=jspb.utils.toHexDigit_(d&15)}return b.join(\"\")};\njspb.utils.hexStringToHash64=function(a){a=a.toLowerCase();goog.asserts.assert(18==a.length);goog.asserts.assert(\"0\"==a[0]);goog.asserts.assert(\"x\"==a[1]);for(var b=\"\",c=0;8>c;c++){var d=jspb.utils.fromHexCharCode_(a.charCodeAt(2*c+2)),e=jspb.utils.fromHexCharCode_(a.charCodeAt(2*c+3));b=String.fromCharCode(16*d+e)+b}return b};\njspb.utils.hash64ToNumber=function(a,b){jspb.utils.splitHash64(a);a=jspb.utils.split64Low;var c=jspb.utils.split64High;return b?jspb.utils.joinInt64(a,c):jspb.utils.joinUint64(a,c)};jspb.utils.numberToHash64=function(a){jspb.utils.splitInt64(a);return jspb.utils.joinHash64(jspb.utils.split64Low,jspb.utils.split64High)};jspb.utils.countVarints=function(a,b,c){for(var d=0,e=b;e<c;e++)d+=a[e]>>7;return c-b-d};\njspb.utils.countVarintFields=function(a,b,c,d){var e=0;d=8*d+jspb.BinaryConstants.WireType.VARINT;if(128>d)for(;b<c&&a[b++]==d;)for(e++;;){var f=a[b++];if(0==(f&128))break}else for(;b<c;){for(f=d;128<f;){if(a[b]!=(f&127|128))return e;b++;f>>=7}if(a[b++]!=f)break;for(e++;f=a[b++],0!=(f&128););}return e};jspb.utils.countFixedFields_=function(a,b,c,d,e){var f=0;if(128>d)for(;b<c&&a[b++]==d;)f++,b+=e;else for(;b<c;){for(var g=d;128<g;){if(a[b++]!=(g&127|128))return f;g>>=7}if(a[b++]!=g)break;f++;b+=e}return f};\njspb.utils.countFixed32Fields=function(a,b,c,d){return jspb.utils.countFixedFields_(a,b,c,8*d+jspb.BinaryConstants.WireType.FIXED32,4)};jspb.utils.countFixed64Fields=function(a,b,c,d){return jspb.utils.countFixedFields_(a,b,c,8*d+jspb.BinaryConstants.WireType.FIXED64,8)};\njspb.utils.countDelimitedFields=function(a,b,c,d){var e=0;for(d=8*d+jspb.BinaryConstants.WireType.DELIMITED;b<c;){for(var f=d;128<f;){if(a[b++]!=(f&127|128))return e;f>>=7}if(a[b++]!=f)break;e++;for(var g=0,h=1;f=a[b++],g+=(f&127)*h,h*=128,0!=(f&128););b+=g}return e};jspb.utils.debugBytesToTextFormat=function(a){var b='\"';if(a){a=jspb.utils.byteSourceToUint8Array(a);for(var c=0;c<a.length;c++)b+=\"\\\\x\",16>a[c]&&(b+=\"0\"),b+=a[c].toString(16)}return b+'\"'};\njspb.utils.debugScalarToTextFormat=function(a){return\"string\"===typeof a?goog.string.quote(a):a.toString()};jspb.utils.stringToByteArray=function(a){for(var b=new Uint8Array(a.length),c=0;c<a.length;c++){var d=a.charCodeAt(c);if(255<d)throw Error(\"Conversion error: string contains codepoint outside of byte range\");b[c]=d}return b};\njspb.utils.byteSourceToUint8Array=function(a){if(a.constructor===Uint8Array)return a;if(a.constructor===ArrayBuffer||\"undefined\"!=typeof Buffer&&a.constructor===Buffer||a.constructor===Array)return new Uint8Array(a);if(a.constructor===String)return goog.crypt.base64.decodeStringToUint8Array(a);goog.asserts.fail(\"Type not convertible to Uint8Array.\");return new Uint8Array(0)};jspb.BinaryDecoder=function(a,b,c){this.bytes_=null;this.cursor_=this.end_=this.start_=0;this.error_=!1;a&&this.setBlock(a,b,c)};jspb.BinaryDecoder.instanceCache_=[];jspb.BinaryDecoder.alloc=function(a,b,c){if(jspb.BinaryDecoder.instanceCache_.length){var d=jspb.BinaryDecoder.instanceCache_.pop();a&&d.setBlock(a,b,c);return d}return new jspb.BinaryDecoder(a,b,c)};jspb.BinaryDecoder.prototype.free=function(){this.clear();100>jspb.BinaryDecoder.instanceCache_.length&&jspb.BinaryDecoder.instanceCache_.push(this)};\njspb.BinaryDecoder.prototype.clone=function(){return jspb.BinaryDecoder.alloc(this.bytes_,this.start_,this.end_-this.start_)};jspb.BinaryDecoder.prototype.clear=function(){this.bytes_=null;this.cursor_=this.end_=this.start_=0;this.error_=!1};jspb.BinaryDecoder.prototype.getBuffer=function(){return this.bytes_};\njspb.BinaryDecoder.prototype.setBlock=function(a,b,c){this.bytes_=jspb.utils.byteSourceToUint8Array(a);this.start_=void 0!==b?b:0;this.end_=void 0!==c?this.start_+c:this.bytes_.length;this.cursor_=this.start_};jspb.BinaryDecoder.prototype.getEnd=function(){return this.end_};jspb.BinaryDecoder.prototype.setEnd=function(a){this.end_=a};jspb.BinaryDecoder.prototype.reset=function(){this.cursor_=this.start_};jspb.BinaryDecoder.prototype.getCursor=function(){return this.cursor_};\njspb.BinaryDecoder.prototype.setCursor=function(a){this.cursor_=a};jspb.BinaryDecoder.prototype.advance=function(a){this.cursor_+=a;goog.asserts.assert(this.cursor_<=this.end_)};jspb.BinaryDecoder.prototype.atEnd=function(){return this.cursor_==this.end_};jspb.BinaryDecoder.prototype.pastEnd=function(){return this.cursor_>this.end_};jspb.BinaryDecoder.prototype.getError=function(){return this.error_||0>this.cursor_||this.cursor_>this.end_};\njspb.BinaryDecoder.prototype.readSplitVarint64=function(a){for(var b=128,c=0,d=0,e=0;4>e&&128<=b;e++)b=this.bytes_[this.cursor_++],c|=(b&127)<<7*e;128<=b&&(b=this.bytes_[this.cursor_++],c|=(b&127)<<28,d|=(b&127)>>4);if(128<=b)for(e=0;5>e&&128<=b;e++)b=this.bytes_[this.cursor_++],d|=(b&127)<<7*e+3;if(128>b)return a(c>>>0,d>>>0);goog.asserts.fail(\"Failed to read varint, encoding is invalid.\");this.error_=!0};\njspb.BinaryDecoder.prototype.readSplitZigzagVarint64=function(a){return this.readSplitVarint64(function(b,c){return jspb.utils.fromZigzag64(b,c,a)})};jspb.BinaryDecoder.prototype.readSplitFixed64=function(a){var b=this.bytes_,c=this.cursor_;this.cursor_+=8;for(var d=0,e=0,f=c+7;f>=c;f--)d=d<<8|b[f],e=e<<8|b[f+4];return a(d,e)};jspb.BinaryDecoder.prototype.skipVarint=function(){for(;this.bytes_[this.cursor_]&128;)this.cursor_++;this.cursor_++};\njspb.BinaryDecoder.prototype.unskipVarint=function(a){for(;128<a;)this.cursor_--,a>>>=7;this.cursor_--};\njspb.BinaryDecoder.prototype.readUnsignedVarint32=function(){var a=this.bytes_;var b=a[this.cursor_+0];var c=b&127;if(128>b)return this.cursor_+=1,goog.asserts.assert(this.cursor_<=this.end_),c;b=a[this.cursor_+1];c|=(b&127)<<7;if(128>b)return this.cursor_+=2,goog.asserts.assert(this.cursor_<=this.end_),c;b=a[this.cursor_+2];c|=(b&127)<<14;if(128>b)return this.cursor_+=3,goog.asserts.assert(this.cursor_<=this.end_),c;b=a[this.cursor_+3];c|=(b&127)<<21;if(128>b)return this.cursor_+=4,goog.asserts.assert(this.cursor_<=\nthis.end_),c;b=a[this.cursor_+4];c|=(b&15)<<28;if(128>b)return this.cursor_+=5,goog.asserts.assert(this.cursor_<=this.end_),c>>>0;this.cursor_+=5;128<=a[this.cursor_++]&&128<=a[this.cursor_++]&&128<=a[this.cursor_++]&&128<=a[this.cursor_++]&&128<=a[this.cursor_++]&&goog.asserts.assert(!1);goog.asserts.assert(this.cursor_<=this.end_);return c};jspb.BinaryDecoder.prototype.readSignedVarint32=jspb.BinaryDecoder.prototype.readUnsignedVarint32;jspb.BinaryDecoder.prototype.readUnsignedVarint32String=function(){return this.readUnsignedVarint32().toString()};\njspb.BinaryDecoder.prototype.readSignedVarint32String=function(){return this.readSignedVarint32().toString()};jspb.BinaryDecoder.prototype.readZigzagVarint32=function(){var a=this.readUnsignedVarint32();return a>>>1^-(a&1)};jspb.BinaryDecoder.prototype.readUnsignedVarint64=function(){return this.readSplitVarint64(jspb.utils.joinUint64)};jspb.BinaryDecoder.prototype.readUnsignedVarint64String=function(){return this.readSplitVarint64(jspb.utils.joinUnsignedDecimalString)};\njspb.BinaryDecoder.prototype.readSignedVarint64=function(){return this.readSplitVarint64(jspb.utils.joinInt64)};jspb.BinaryDecoder.prototype.readSignedVarint64String=function(){return this.readSplitVarint64(jspb.utils.joinSignedDecimalString)};jspb.BinaryDecoder.prototype.readZigzagVarint64=function(){return this.readSplitVarint64(jspb.utils.joinZigzag64)};jspb.BinaryDecoder.prototype.readZigzagVarintHash64=function(){return this.readSplitZigzagVarint64(jspb.utils.joinHash64)};\njspb.BinaryDecoder.prototype.readZigzagVarint64String=function(){return this.readSplitZigzagVarint64(jspb.utils.joinSignedDecimalString)};jspb.BinaryDecoder.prototype.readUint8=function(){var a=this.bytes_[this.cursor_+0];this.cursor_+=1;goog.asserts.assert(this.cursor_<=this.end_);return a};jspb.BinaryDecoder.prototype.readUint16=function(){var a=this.bytes_[this.cursor_+0],b=this.bytes_[this.cursor_+1];this.cursor_+=2;goog.asserts.assert(this.cursor_<=this.end_);return a<<0|b<<8};\njspb.BinaryDecoder.prototype.readUint32=function(){var a=this.bytes_[this.cursor_+0],b=this.bytes_[this.cursor_+1],c=this.bytes_[this.cursor_+2],d=this.bytes_[this.cursor_+3];this.cursor_+=4;goog.asserts.assert(this.cursor_<=this.end_);return(a<<0|b<<8|c<<16|d<<24)>>>0};jspb.BinaryDecoder.prototype.readUint64=function(){var a=this.readUint32(),b=this.readUint32();return jspb.utils.joinUint64(a,b)};\njspb.BinaryDecoder.prototype.readUint64String=function(){var a=this.readUint32(),b=this.readUint32();return jspb.utils.joinUnsignedDecimalString(a,b)};jspb.BinaryDecoder.prototype.readInt8=function(){var a=this.bytes_[this.cursor_+0];this.cursor_+=1;goog.asserts.assert(this.cursor_<=this.end_);return a<<24>>24};\njspb.BinaryDecoder.prototype.readInt16=function(){var a=this.bytes_[this.cursor_+0],b=this.bytes_[this.cursor_+1];this.cursor_+=2;goog.asserts.assert(this.cursor_<=this.end_);return(a<<0|b<<8)<<16>>16};jspb.BinaryDecoder.prototype.readInt32=function(){var a=this.bytes_[this.cursor_+0],b=this.bytes_[this.cursor_+1],c=this.bytes_[this.cursor_+2],d=this.bytes_[this.cursor_+3];this.cursor_+=4;goog.asserts.assert(this.cursor_<=this.end_);return a<<0|b<<8|c<<16|d<<24};\njspb.BinaryDecoder.prototype.readInt64=function(){var a=this.readUint32(),b=this.readUint32();return jspb.utils.joinInt64(a,b)};jspb.BinaryDecoder.prototype.readInt64String=function(){var a=this.readUint32(),b=this.readUint32();return jspb.utils.joinSignedDecimalString(a,b)};jspb.BinaryDecoder.prototype.readFloat=function(){var a=this.readUint32();return jspb.utils.joinFloat32(a,0)};\njspb.BinaryDecoder.prototype.readDouble=function(){var a=this.readUint32(),b=this.readUint32();return jspb.utils.joinFloat64(a,b)};jspb.BinaryDecoder.prototype.readBool=function(){return!!this.bytes_[this.cursor_++]};jspb.BinaryDecoder.prototype.readEnum=function(){return this.readSignedVarint32()};\njspb.BinaryDecoder.prototype.readString=function(a){var b=this.bytes_,c=this.cursor_;a=c+a;for(var d=[],e=\"\";c<a;){var f=b[c++];if(128>f)d.push(f);else if(192>f)continue;else if(224>f){var g=b[c++];d.push((f&31)<<6|g&63)}else if(240>f){g=b[c++];var h=b[c++];d.push((f&15)<<12|(g&63)<<6|h&63)}else if(248>f){g=b[c++];h=b[c++];var k=b[c++];f=(f&7)<<18|(g&63)<<12|(h&63)<<6|k&63;f-=65536;d.push((f>>10&1023)+55296,(f&1023)+56320)}8192<=d.length&&(e+=String.fromCharCode.apply(null,d),d.length=0)}e+=goog.crypt.byteArrayToString(d);\nthis.cursor_=c;return e};jspb.BinaryDecoder.prototype.readStringWithLength=function(){var a=this.readUnsignedVarint32();return this.readString(a)};jspb.BinaryDecoder.prototype.readBytes=function(a){if(0>a||this.cursor_+a>this.bytes_.length)return this.error_=!0,goog.asserts.fail(\"Invalid byte length!\"),new Uint8Array(0);var b=this.bytes_.subarray(this.cursor_,this.cursor_+a);this.cursor_+=a;goog.asserts.assert(this.cursor_<=this.end_);return b};jspb.BinaryDecoder.prototype.readVarintHash64=function(){return this.readSplitVarint64(jspb.utils.joinHash64)};\njspb.BinaryDecoder.prototype.readFixedHash64=function(){var a=this.bytes_,b=this.cursor_,c=a[b+0],d=a[b+1],e=a[b+2],f=a[b+3],g=a[b+4],h=a[b+5],k=a[b+6];a=a[b+7];this.cursor_+=8;return String.fromCharCode(c,d,e,f,g,h,k,a)};jspb.BinaryReader=function(a,b,c){this.decoder_=jspb.BinaryDecoder.alloc(a,b,c);this.fieldCursor_=this.decoder_.getCursor();this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER;this.nextWireType_=jspb.BinaryConstants.WireType.INVALID;this.error_=!1;this.readCallbacks_=null};jspb.BinaryReader.instanceCache_=[];\njspb.BinaryReader.alloc=function(a,b,c){if(jspb.BinaryReader.instanceCache_.length){var d=jspb.BinaryReader.instanceCache_.pop();a&&d.decoder_.setBlock(a,b,c);return d}return new jspb.BinaryReader(a,b,c)};jspb.BinaryReader.prototype.alloc=jspb.BinaryReader.alloc;\njspb.BinaryReader.prototype.free=function(){this.decoder_.clear();this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER;this.nextWireType_=jspb.BinaryConstants.WireType.INVALID;this.error_=!1;this.readCallbacks_=null;100>jspb.BinaryReader.instanceCache_.length&&jspb.BinaryReader.instanceCache_.push(this)};jspb.BinaryReader.prototype.getFieldCursor=function(){return this.fieldCursor_};jspb.BinaryReader.prototype.getCursor=function(){return this.decoder_.getCursor()};\njspb.BinaryReader.prototype.getBuffer=function(){return this.decoder_.getBuffer()};jspb.BinaryReader.prototype.getFieldNumber=function(){return this.nextField_};jspb.BinaryReader.prototype.getWireType=function(){return this.nextWireType_};jspb.BinaryReader.prototype.isDelimited=function(){return this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED};jspb.BinaryReader.prototype.isEndGroup=function(){return this.nextWireType_==jspb.BinaryConstants.WireType.END_GROUP};\njspb.BinaryReader.prototype.getError=function(){return this.error_||this.decoder_.getError()};jspb.BinaryReader.prototype.setBlock=function(a,b,c){this.decoder_.setBlock(a,b,c);this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER;this.nextWireType_=jspb.BinaryConstants.WireType.INVALID};jspb.BinaryReader.prototype.reset=function(){this.decoder_.reset();this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER;this.nextWireType_=jspb.BinaryConstants.WireType.INVALID};\njspb.BinaryReader.prototype.advance=function(a){this.decoder_.advance(a)};\njspb.BinaryReader.prototype.nextField=function(){if(this.decoder_.atEnd())return!1;if(this.getError())return goog.asserts.fail(\"Decoder hit an error\"),!1;this.fieldCursor_=this.decoder_.getCursor();var a=this.decoder_.readUnsignedVarint32(),b=a>>>3;a&=7;if(a!=jspb.BinaryConstants.WireType.VARINT&&a!=jspb.BinaryConstants.WireType.FIXED32&&a!=jspb.BinaryConstants.WireType.FIXED64&&a!=jspb.BinaryConstants.WireType.DELIMITED&&a!=jspb.BinaryConstants.WireType.START_GROUP&&a!=jspb.BinaryConstants.WireType.END_GROUP)return goog.asserts.fail(\"Invalid wire type: %s (at position %s)\",\na,this.fieldCursor_),this.error_=!0,!1;this.nextField_=b;this.nextWireType_=a;return!0};jspb.BinaryReader.prototype.unskipHeader=function(){this.decoder_.unskipVarint(this.nextField_<<3|this.nextWireType_)};jspb.BinaryReader.prototype.skipMatchingFields=function(){var a=this.nextField_;for(this.unskipHeader();this.nextField()&&this.getFieldNumber()==a;)this.skipField();this.decoder_.atEnd()||this.unskipHeader()};\njspb.BinaryReader.prototype.skipVarintField=function(){this.nextWireType_!=jspb.BinaryConstants.WireType.VARINT?(goog.asserts.fail(\"Invalid wire type for skipVarintField\"),this.skipField()):this.decoder_.skipVarint()};jspb.BinaryReader.prototype.skipDelimitedField=function(){if(this.nextWireType_!=jspb.BinaryConstants.WireType.DELIMITED)goog.asserts.fail(\"Invalid wire type for skipDelimitedField\"),this.skipField();else{var a=this.decoder_.readUnsignedVarint32();this.decoder_.advance(a)}};\njspb.BinaryReader.prototype.skipFixed32Field=function(){this.nextWireType_!=jspb.BinaryConstants.WireType.FIXED32?(goog.asserts.fail(\"Invalid wire type for skipFixed32Field\"),this.skipField()):this.decoder_.advance(4)};jspb.BinaryReader.prototype.skipFixed64Field=function(){this.nextWireType_!=jspb.BinaryConstants.WireType.FIXED64?(goog.asserts.fail(\"Invalid wire type for skipFixed64Field\"),this.skipField()):this.decoder_.advance(8)};\njspb.BinaryReader.prototype.skipGroup=function(){var a=this.nextField_;do{if(!this.nextField()){goog.asserts.fail(\"Unmatched start-group tag: stream EOF\");this.error_=!0;break}if(this.nextWireType_==jspb.BinaryConstants.WireType.END_GROUP){this.nextField_!=a&&(goog.asserts.fail(\"Unmatched end-group tag\"),this.error_=!0);break}this.skipField()}while(1)};\njspb.BinaryReader.prototype.skipField=function(){switch(this.nextWireType_){case jspb.BinaryConstants.WireType.VARINT:this.skipVarintField();break;case jspb.BinaryConstants.WireType.FIXED64:this.skipFixed64Field();break;case jspb.BinaryConstants.WireType.DELIMITED:this.skipDelimitedField();break;case jspb.BinaryConstants.WireType.FIXED32:this.skipFixed32Field();break;case jspb.BinaryConstants.WireType.START_GROUP:this.skipGroup();break;default:goog.asserts.fail(\"Invalid wire encoding for field.\")}};\njspb.BinaryReader.prototype.registerReadCallback=function(a,b){null===this.readCallbacks_&&(this.readCallbacks_={});goog.asserts.assert(!this.readCallbacks_[a]);this.readCallbacks_[a]=b};jspb.BinaryReader.prototype.runReadCallback=function(a){goog.asserts.assert(null!==this.readCallbacks_);a=this.readCallbacks_[a];goog.asserts.assert(a);return a(this)};\njspb.BinaryReader.prototype.readAny=function(a){this.nextWireType_=jspb.BinaryConstants.FieldTypeToWireType(a);var b=jspb.BinaryConstants.FieldType;switch(a){case b.DOUBLE:return this.readDouble();case b.FLOAT:return this.readFloat();case b.INT64:return this.readInt64();case b.UINT64:return this.readUint64();case b.INT32:return this.readInt32();case b.FIXED64:return this.readFixed64();case b.FIXED32:return this.readFixed32();case b.BOOL:return this.readBool();case b.STRING:return this.readString();\ncase b.GROUP:goog.asserts.fail(\"Group field type not supported in readAny()\");case b.MESSAGE:goog.asserts.fail(\"Message field type not supported in readAny()\");case b.BYTES:return this.readBytes();case b.UINT32:return this.readUint32();case b.ENUM:return this.readEnum();case b.SFIXED32:return this.readSfixed32();case b.SFIXED64:return this.readSfixed64();case b.SINT32:return this.readSint32();case b.SINT64:return this.readSint64();case b.FHASH64:return this.readFixedHash64();case b.VHASH64:return this.readVarintHash64();\ndefault:goog.asserts.fail(\"Invalid field type in readAny()\")}return 0};jspb.BinaryReader.prototype.readMessage=function(a,b){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var c=this.decoder_.getEnd(),d=this.decoder_.readUnsignedVarint32();d=this.decoder_.getCursor()+d;this.decoder_.setEnd(d);b(a,this);this.decoder_.setCursor(d);this.decoder_.setEnd(c)};\njspb.BinaryReader.prototype.readGroup=function(a,b,c){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.START_GROUP);goog.asserts.assert(this.nextField_==a);c(b,this);this.error_||this.nextWireType_==jspb.BinaryConstants.WireType.END_GROUP||(goog.asserts.fail(\"Group submessage did not end with an END_GROUP tag\"),this.error_=!0)};\njspb.BinaryReader.prototype.getFieldDecoder=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var a=this.decoder_.readUnsignedVarint32(),b=this.decoder_.getCursor(),c=b+a;a=jspb.BinaryDecoder.alloc(this.decoder_.getBuffer(),b,a);this.decoder_.setCursor(c);return a};jspb.BinaryReader.prototype.readInt32=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSignedVarint32()};\njspb.BinaryReader.prototype.readInt32String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSignedVarint32String()};jspb.BinaryReader.prototype.readInt64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSignedVarint64()};jspb.BinaryReader.prototype.readInt64String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSignedVarint64String()};\njspb.BinaryReader.prototype.readUint32=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readUnsignedVarint32()};jspb.BinaryReader.prototype.readUint32String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readUnsignedVarint32String()};jspb.BinaryReader.prototype.readUint64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readUnsignedVarint64()};\njspb.BinaryReader.prototype.readUint64String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readUnsignedVarint64String()};jspb.BinaryReader.prototype.readSint32=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readZigzagVarint32()};jspb.BinaryReader.prototype.readSint64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readZigzagVarint64()};\njspb.BinaryReader.prototype.readSint64String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readZigzagVarint64String()};jspb.BinaryReader.prototype.readFixed32=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32);return this.decoder_.readUint32()};jspb.BinaryReader.prototype.readFixed64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readUint64()};\njspb.BinaryReader.prototype.readFixed64String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readUint64String()};jspb.BinaryReader.prototype.readSfixed32=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32);return this.decoder_.readInt32()};jspb.BinaryReader.prototype.readSfixed32String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32);return this.decoder_.readInt32().toString()};\njspb.BinaryReader.prototype.readSfixed64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readInt64()};jspb.BinaryReader.prototype.readSfixed64String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readInt64String()};jspb.BinaryReader.prototype.readFloat=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32);return this.decoder_.readFloat()};\njspb.BinaryReader.prototype.readDouble=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readDouble()};jspb.BinaryReader.prototype.readBool=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return!!this.decoder_.readUnsignedVarint32()};jspb.BinaryReader.prototype.readEnum=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSignedVarint64()};\njspb.BinaryReader.prototype.readString=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var a=this.decoder_.readUnsignedVarint32();return this.decoder_.readString(a)};jspb.BinaryReader.prototype.readBytes=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var a=this.decoder_.readUnsignedVarint32();return this.decoder_.readBytes(a)};\njspb.BinaryReader.prototype.readVarintHash64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readVarintHash64()};jspb.BinaryReader.prototype.readSintHash64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readZigzagVarintHash64()};jspb.BinaryReader.prototype.readSplitVarint64=function(a){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSplitVarint64(a)};\njspb.BinaryReader.prototype.readSplitZigzagVarint64=function(a){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSplitVarint64(function(b,c){return jspb.utils.fromZigzag64(b,c,a)})};jspb.BinaryReader.prototype.readFixedHash64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readFixedHash64()};\njspb.BinaryReader.prototype.readSplitFixed64=function(a){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readSplitFixed64(a)};jspb.BinaryReader.prototype.readPackedField_=function(a){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var b=this.decoder_.readUnsignedVarint32();b=this.decoder_.getCursor()+b;for(var c=[];this.decoder_.getCursor()<b;)c.push(a.call(this.decoder_));return c};\njspb.BinaryReader.prototype.readPackedInt32=function(){return this.readPackedField_(this.decoder_.readSignedVarint32)};jspb.BinaryReader.prototype.readPackedInt32String=function(){return this.readPackedField_(this.decoder_.readSignedVarint32String)};jspb.BinaryReader.prototype.readPackedInt64=function(){return this.readPackedField_(this.decoder_.readSignedVarint64)};jspb.BinaryReader.prototype.readPackedInt64String=function(){return this.readPackedField_(this.decoder_.readSignedVarint64String)};\njspb.BinaryReader.prototype.readPackedUint32=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint32)};jspb.BinaryReader.prototype.readPackedUint32String=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint32String)};jspb.BinaryReader.prototype.readPackedUint64=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint64)};jspb.BinaryReader.prototype.readPackedUint64String=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint64String)};\njspb.BinaryReader.prototype.readPackedSint32=function(){return this.readPackedField_(this.decoder_.readZigzagVarint32)};jspb.BinaryReader.prototype.readPackedSint64=function(){return this.readPackedField_(this.decoder_.readZigzagVarint64)};jspb.BinaryReader.prototype.readPackedSint64String=function(){return this.readPackedField_(this.decoder_.readZigzagVarint64String)};jspb.BinaryReader.prototype.readPackedFixed32=function(){return this.readPackedField_(this.decoder_.readUint32)};\njspb.BinaryReader.prototype.readPackedFixed64=function(){return this.readPackedField_(this.decoder_.readUint64)};jspb.BinaryReader.prototype.readPackedFixed64String=function(){return this.readPackedField_(this.decoder_.readUint64String)};jspb.BinaryReader.prototype.readPackedSfixed32=function(){return this.readPackedField_(this.decoder_.readInt32)};jspb.BinaryReader.prototype.readPackedSfixed64=function(){return this.readPackedField_(this.decoder_.readInt64)};\njspb.BinaryReader.prototype.readPackedSfixed64String=function(){return this.readPackedField_(this.decoder_.readInt64String)};jspb.BinaryReader.prototype.readPackedFloat=function(){return this.readPackedField_(this.decoder_.readFloat)};jspb.BinaryReader.prototype.readPackedDouble=function(){return this.readPackedField_(this.decoder_.readDouble)};jspb.BinaryReader.prototype.readPackedBool=function(){return this.readPackedField_(this.decoder_.readBool)};jspb.BinaryReader.prototype.readPackedEnum=function(){return this.readPackedField_(this.decoder_.readEnum)};\njspb.BinaryReader.prototype.readPackedVarintHash64=function(){return this.readPackedField_(this.decoder_.readVarintHash64)};jspb.BinaryReader.prototype.readPackedFixedHash64=function(){return this.readPackedField_(this.decoder_.readFixedHash64)};jspb.BinaryEncoder=function(){this.buffer_=[]};jspb.BinaryEncoder.prototype.length=function(){return this.buffer_.length};jspb.BinaryEncoder.prototype.end=function(){var a=this.buffer_;this.buffer_=[];return a};\njspb.BinaryEncoder.prototype.writeSplitVarint64=function(a,b){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(b==Math.floor(b));goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_32);for(goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_32);0<b||127<a;)this.buffer_.push(a&127|128),a=(a>>>7|b<<25)>>>0,b>>>=7;this.buffer_.push(a)};\njspb.BinaryEncoder.prototype.writeSplitFixed64=function(a,b){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(b==Math.floor(b));goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_32);goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_32);this.writeUint32(a);this.writeUint32(b)};\njspb.BinaryEncoder.prototype.writeUnsignedVarint32=function(a){goog.asserts.assert(a==Math.floor(a));for(goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_32);127<a;)this.buffer_.push(a&127|128),a>>>=7;this.buffer_.push(a)};\njspb.BinaryEncoder.prototype.writeSignedVarint32=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_31&&a<jspb.BinaryConstants.TWO_TO_31);if(0<=a)this.writeUnsignedVarint32(a);else{for(var b=0;9>b;b++)this.buffer_.push(a&127|128),a>>=7;this.buffer_.push(1)}};\njspb.BinaryEncoder.prototype.writeUnsignedVarint64=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_64);jspb.utils.splitInt64(a);this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeSignedVarint64=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_63&&a<jspb.BinaryConstants.TWO_TO_63);jspb.utils.splitInt64(a);this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeZigzagVarint32=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_31&&a<jspb.BinaryConstants.TWO_TO_31);this.writeUnsignedVarint32((a<<1^a>>31)>>>0)};jspb.BinaryEncoder.prototype.writeZigzagVarint64=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_63&&a<jspb.BinaryConstants.TWO_TO_63);jspb.utils.splitZigzag64(a);this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeZigzagVarint64String=function(a){this.writeZigzagVarintHash64(jspb.utils.decimalStringToHash64(a))};jspb.BinaryEncoder.prototype.writeZigzagVarintHash64=function(a){var b=this;jspb.utils.splitHash64(a);jspb.utils.toZigzag64(jspb.utils.split64Low,jspb.utils.split64High,function(a,d){b.writeSplitVarint64(a>>>0,d>>>0)})};\njspb.BinaryEncoder.prototype.writeUint8=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(0<=a&&256>a);this.buffer_.push(a>>>0&255)};jspb.BinaryEncoder.prototype.writeUint16=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(0<=a&&65536>a);this.buffer_.push(a>>>0&255);this.buffer_.push(a>>>8&255)};\njspb.BinaryEncoder.prototype.writeUint32=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_32);this.buffer_.push(a>>>0&255);this.buffer_.push(a>>>8&255);this.buffer_.push(a>>>16&255);this.buffer_.push(a>>>24&255)};jspb.BinaryEncoder.prototype.writeUint64=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_64);jspb.utils.splitUint64(a);this.writeUint32(jspb.utils.split64Low);this.writeUint32(jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeInt8=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(-128<=a&&128>a);this.buffer_.push(a>>>0&255)};jspb.BinaryEncoder.prototype.writeInt16=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(-32768<=a&&32768>a);this.buffer_.push(a>>>0&255);this.buffer_.push(a>>>8&255)};\njspb.BinaryEncoder.prototype.writeInt32=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_31&&a<jspb.BinaryConstants.TWO_TO_31);this.buffer_.push(a>>>0&255);this.buffer_.push(a>>>8&255);this.buffer_.push(a>>>16&255);this.buffer_.push(a>>>24&255)};\njspb.BinaryEncoder.prototype.writeInt64=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_63&&a<jspb.BinaryConstants.TWO_TO_63);jspb.utils.splitInt64(a);this.writeSplitFixed64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeInt64String=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(+a>=-jspb.BinaryConstants.TWO_TO_63&&+a<jspb.BinaryConstants.TWO_TO_63);jspb.utils.splitHash64(jspb.utils.decimalStringToHash64(a));this.writeSplitFixed64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeFloat=function(a){goog.asserts.assert(Infinity===a||-Infinity===a||isNaN(a)||a>=-jspb.BinaryConstants.FLOAT32_MAX&&a<=jspb.BinaryConstants.FLOAT32_MAX);jspb.utils.splitFloat32(a);this.writeUint32(jspb.utils.split64Low)};\njspb.BinaryEncoder.prototype.writeDouble=function(a){goog.asserts.assert(Infinity===a||-Infinity===a||isNaN(a)||a>=-jspb.BinaryConstants.FLOAT64_MAX&&a<=jspb.BinaryConstants.FLOAT64_MAX);jspb.utils.splitFloat64(a);this.writeUint32(jspb.utils.split64Low);this.writeUint32(jspb.utils.split64High)};jspb.BinaryEncoder.prototype.writeBool=function(a){goog.asserts.assert(\"boolean\"===typeof a||\"number\"===typeof a);this.buffer_.push(a?1:0)};\njspb.BinaryEncoder.prototype.writeEnum=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_31&&a<jspb.BinaryConstants.TWO_TO_31);this.writeSignedVarint32(a)};jspb.BinaryEncoder.prototype.writeBytes=function(a){this.buffer_.push.apply(this.buffer_,a)};jspb.BinaryEncoder.prototype.writeVarintHash64=function(a){jspb.utils.splitHash64(a);this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeFixedHash64=function(a){jspb.utils.splitHash64(a);this.writeUint32(jspb.utils.split64Low);this.writeUint32(jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeString=function(a){for(var b=this.buffer_.length,c=0;c<a.length;c++){var d=a.charCodeAt(c);if(128>d)this.buffer_.push(d);else if(2048>d)this.buffer_.push(d>>6|192),this.buffer_.push(d&63|128);else if(65536>d)if(55296<=d&&56319>=d&&c+1<a.length){var e=a.charCodeAt(c+1);56320<=e&&57343>=e&&(d=1024*(d-55296)+e-56320+65536,this.buffer_.push(d>>18|240),this.buffer_.push(d>>12&63|128),this.buffer_.push(d>>6&63|128),this.buffer_.push(d&63|128),c++)}else this.buffer_.push(d>>\n12|224),this.buffer_.push(d>>6&63|128),this.buffer_.push(d&63|128)}return this.buffer_.length-b};jspb.arith={};jspb.arith.UInt64=function(a,b){this.lo=a;this.hi=b};jspb.arith.UInt64.prototype.cmp=function(a){return this.hi<a.hi||this.hi==a.hi&&this.lo<a.lo?-1:this.hi==a.hi&&this.lo==a.lo?0:1};jspb.arith.UInt64.prototype.rightShift=function(){return new jspb.arith.UInt64((this.lo>>>1|(this.hi&1)<<31)>>>0,this.hi>>>1>>>0)};jspb.arith.UInt64.prototype.leftShift=function(){return new jspb.arith.UInt64(this.lo<<1>>>0,(this.hi<<1|this.lo>>>31)>>>0)};\njspb.arith.UInt64.prototype.msb=function(){return!!(this.hi&2147483648)};jspb.arith.UInt64.prototype.lsb=function(){return!!(this.lo&1)};jspb.arith.UInt64.prototype.zero=function(){return 0==this.lo&&0==this.hi};jspb.arith.UInt64.prototype.add=function(a){return new jspb.arith.UInt64((this.lo+a.lo&4294967295)>>>0>>>0,((this.hi+a.hi&4294967295)>>>0)+(4294967296<=this.lo+a.lo?1:0)>>>0)};\njspb.arith.UInt64.prototype.sub=function(a){return new jspb.arith.UInt64((this.lo-a.lo&4294967295)>>>0>>>0,((this.hi-a.hi&4294967295)>>>0)-(0>this.lo-a.lo?1:0)>>>0)};jspb.arith.UInt64.mul32x32=function(a,b){var c=a&65535;a>>>=16;var d=b&65535,e=b>>>16;b=c*d+65536*(c*e&65535)+65536*(a*d&65535);for(c=a*e+(c*e>>>16)+(a*d>>>16);4294967296<=b;)b-=4294967296,c+=1;return new jspb.arith.UInt64(b>>>0,c>>>0)};\njspb.arith.UInt64.prototype.mul=function(a){var b=jspb.arith.UInt64.mul32x32(this.lo,a);a=jspb.arith.UInt64.mul32x32(this.hi,a);a.hi=a.lo;a.lo=0;return b.add(a)};\njspb.arith.UInt64.prototype.div=function(a){if(0==a)return[];var b=new jspb.arith.UInt64(0,0),c=new jspb.arith.UInt64(this.lo,this.hi);a=new jspb.arith.UInt64(a,0);for(var d=new jspb.arith.UInt64(1,0);!a.msb();)a=a.leftShift(),d=d.leftShift();for(;!d.zero();)0>=a.cmp(c)&&(b=b.add(d),c=c.sub(a)),a=a.rightShift(),d=d.rightShift();return[b,c]};jspb.arith.UInt64.prototype.toString=function(){for(var a=\"\",b=this;!b.zero();){b=b.div(10);var c=b[0];a=b[1].lo+a;b=c}\"\"==a&&(a=\"0\");return a};\njspb.arith.UInt64.fromString=function(a){for(var b=new jspb.arith.UInt64(0,0),c=new jspb.arith.UInt64(0,0),d=0;d<a.length;d++){if(\"0\">a[d]||\"9\"<a[d])return null;var e=parseInt(a[d],10);c.lo=e;b=b.mul(10).add(c)}return b};jspb.arith.UInt64.prototype.clone=function(){return new jspb.arith.UInt64(this.lo,this.hi)};jspb.arith.Int64=function(a,b){this.lo=a;this.hi=b};\njspb.arith.Int64.prototype.add=function(a){return new jspb.arith.Int64((this.lo+a.lo&4294967295)>>>0>>>0,((this.hi+a.hi&4294967295)>>>0)+(4294967296<=this.lo+a.lo?1:0)>>>0)};jspb.arith.Int64.prototype.sub=function(a){return new jspb.arith.Int64((this.lo-a.lo&4294967295)>>>0>>>0,((this.hi-a.hi&4294967295)>>>0)-(0>this.lo-a.lo?1:0)>>>0)};jspb.arith.Int64.prototype.clone=function(){return new jspb.arith.Int64(this.lo,this.hi)};\njspb.arith.Int64.prototype.toString=function(){var a=0!=(this.hi&2147483648),b=new jspb.arith.UInt64(this.lo,this.hi);a&&(b=(new jspb.arith.UInt64(0,0)).sub(b));return(a?\"-\":\"\")+b.toString()};jspb.arith.Int64.fromString=function(a){var b=0<a.length&&\"-\"==a[0];b&&(a=a.substring(1));a=jspb.arith.UInt64.fromString(a);if(null===a)return null;b&&(a=(new jspb.arith.UInt64(0,0)).sub(a));return new jspb.arith.Int64(a.lo,a.hi)};jspb.BinaryWriter=function(){this.blocks_=[];this.totalLength_=0;this.encoder_=new jspb.BinaryEncoder;this.bookmarks_=[]};jspb.BinaryWriter.prototype.appendUint8Array_=function(a){var b=this.encoder_.end();this.blocks_.push(b);this.blocks_.push(a);this.totalLength_+=b.length+a.length};\njspb.BinaryWriter.prototype.beginDelimited_=function(a){this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED);a=this.encoder_.end();this.blocks_.push(a);this.totalLength_+=a.length;a.push(this.totalLength_);return a};jspb.BinaryWriter.prototype.endDelimited_=function(a){var b=a.pop();b=this.totalLength_+this.encoder_.length()-b;for(goog.asserts.assert(0<=b);127<b;)a.push(b&127|128),b>>>=7,this.totalLength_++;a.push(b);this.totalLength_++};\njspb.BinaryWriter.prototype.writeSerializedMessage=function(a,b,c){this.appendUint8Array_(a.subarray(b,c))};jspb.BinaryWriter.prototype.maybeWriteSerializedMessage=function(a,b,c){null!=a&&null!=b&&null!=c&&this.writeSerializedMessage(a,b,c)};jspb.BinaryWriter.prototype.reset=function(){this.blocks_=[];this.encoder_.end();this.totalLength_=0;this.bookmarks_=[]};\njspb.BinaryWriter.prototype.getResultBuffer=function(){goog.asserts.assert(0==this.bookmarks_.length);for(var a=new Uint8Array(this.totalLength_+this.encoder_.length()),b=this.blocks_,c=b.length,d=0,e=0;e<c;e++){var f=b[e];a.set(f,d);d+=f.length}b=this.encoder_.end();a.set(b,d);d+=b.length;goog.asserts.assert(d==a.length);this.blocks_=[a];return a};jspb.BinaryWriter.prototype.getResultBase64String=function(a){return goog.crypt.base64.encodeByteArray(this.getResultBuffer(),a)};\njspb.BinaryWriter.prototype.beginSubMessage=function(a){this.bookmarks_.push(this.beginDelimited_(a))};jspb.BinaryWriter.prototype.endSubMessage=function(){goog.asserts.assert(0<=this.bookmarks_.length);this.endDelimited_(this.bookmarks_.pop())};jspb.BinaryWriter.prototype.writeFieldHeader_=function(a,b){goog.asserts.assert(1<=a&&a==Math.floor(a));this.encoder_.writeUnsignedVarint32(8*a+b)};\njspb.BinaryWriter.prototype.writeAny=function(a,b,c){var d=jspb.BinaryConstants.FieldType;switch(a){case d.DOUBLE:this.writeDouble(b,c);break;case d.FLOAT:this.writeFloat(b,c);break;case d.INT64:this.writeInt64(b,c);break;case d.UINT64:this.writeUint64(b,c);break;case d.INT32:this.writeInt32(b,c);break;case d.FIXED64:this.writeFixed64(b,c);break;case d.FIXED32:this.writeFixed32(b,c);break;case d.BOOL:this.writeBool(b,c);break;case d.STRING:this.writeString(b,c);break;case d.GROUP:goog.asserts.fail(\"Group field type not supported in writeAny()\");\nbreak;case d.MESSAGE:goog.asserts.fail(\"Message field type not supported in writeAny()\");break;case d.BYTES:this.writeBytes(b,c);break;case d.UINT32:this.writeUint32(b,c);break;case d.ENUM:this.writeEnum(b,c);break;case d.SFIXED32:this.writeSfixed32(b,c);break;case d.SFIXED64:this.writeSfixed64(b,c);break;case d.SINT32:this.writeSint32(b,c);break;case d.SINT64:this.writeSint64(b,c);break;case d.FHASH64:this.writeFixedHash64(b,c);break;case d.VHASH64:this.writeVarintHash64(b,c);break;default:goog.asserts.fail(\"Invalid field type in writeAny()\")}};\njspb.BinaryWriter.prototype.writeUnsignedVarint32_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeUnsignedVarint32(b))};jspb.BinaryWriter.prototype.writeSignedVarint32_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint32(b))};jspb.BinaryWriter.prototype.writeUnsignedVarint64_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeUnsignedVarint64(b))};\njspb.BinaryWriter.prototype.writeSignedVarint64_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint64(b))};jspb.BinaryWriter.prototype.writeZigzagVarint32_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarint32(b))};jspb.BinaryWriter.prototype.writeZigzagVarint64_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarint64(b))};\njspb.BinaryWriter.prototype.writeZigzagVarint64String_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarint64String(b))};jspb.BinaryWriter.prototype.writeZigzagVarintHash64_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarintHash64(b))};\njspb.BinaryWriter.prototype.writeInt32=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_31&&b<jspb.BinaryConstants.TWO_TO_31),this.writeSignedVarint32_(a,b))};jspb.BinaryWriter.prototype.writeInt32String=function(a,b){null!=b&&(b=parseInt(b,10),goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_31&&b<jspb.BinaryConstants.TWO_TO_31),this.writeSignedVarint32_(a,b))};\njspb.BinaryWriter.prototype.writeInt64=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_63&&b<jspb.BinaryConstants.TWO_TO_63),this.writeSignedVarint64_(a,b))};jspb.BinaryWriter.prototype.writeInt64String=function(a,b){null!=b&&(b=jspb.arith.Int64.fromString(b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSplitVarint64(b.lo,b.hi))};\njspb.BinaryWriter.prototype.writeUint32=function(a,b){null!=b&&(goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_32),this.writeUnsignedVarint32_(a,b))};jspb.BinaryWriter.prototype.writeUint32String=function(a,b){null!=b&&(b=parseInt(b,10),goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_32),this.writeUnsignedVarint32_(a,b))};jspb.BinaryWriter.prototype.writeUint64=function(a,b){null!=b&&(goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_64),this.writeUnsignedVarint64_(a,b))};\njspb.BinaryWriter.prototype.writeUint64String=function(a,b){null!=b&&(b=jspb.arith.UInt64.fromString(b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSplitVarint64(b.lo,b.hi))};jspb.BinaryWriter.prototype.writeSint32=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_31&&b<jspb.BinaryConstants.TWO_TO_31),this.writeZigzagVarint32_(a,b))};\njspb.BinaryWriter.prototype.writeSint64=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_63&&b<jspb.BinaryConstants.TWO_TO_63),this.writeZigzagVarint64_(a,b))};jspb.BinaryWriter.prototype.writeSintHash64=function(a,b){null!=b&&this.writeZigzagVarintHash64_(a,b)};jspb.BinaryWriter.prototype.writeSint64String=function(a,b){null!=b&&this.writeZigzagVarint64String_(a,b)};\njspb.BinaryWriter.prototype.writeFixed32=function(a,b){null!=b&&(goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_32),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED32),this.encoder_.writeUint32(b))};jspb.BinaryWriter.prototype.writeFixed64=function(a,b){null!=b&&(goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_64),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeUint64(b))};\njspb.BinaryWriter.prototype.writeFixed64String=function(a,b){null!=b&&(b=jspb.arith.UInt64.fromString(b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeSplitFixed64(b.lo,b.hi))};jspb.BinaryWriter.prototype.writeSfixed32=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_31&&b<jspb.BinaryConstants.TWO_TO_31),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED32),this.encoder_.writeInt32(b))};\njspb.BinaryWriter.prototype.writeSfixed64=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_63&&b<jspb.BinaryConstants.TWO_TO_63),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeInt64(b))};jspb.BinaryWriter.prototype.writeSfixed64String=function(a,b){null!=b&&(b=jspb.arith.Int64.fromString(b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeSplitFixed64(b.lo,b.hi))};\njspb.BinaryWriter.prototype.writeFloat=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED32),this.encoder_.writeFloat(b))};jspb.BinaryWriter.prototype.writeDouble=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeDouble(b))};\njspb.BinaryWriter.prototype.writeBool=function(a,b){null!=b&&(goog.asserts.assert(\"boolean\"===typeof b||\"number\"===typeof b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeBool(b))};jspb.BinaryWriter.prototype.writeEnum=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_31&&b<jspb.BinaryConstants.TWO_TO_31),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint32(b))};\njspb.BinaryWriter.prototype.writeString=function(a,b){null!=b&&(a=this.beginDelimited_(a),this.encoder_.writeString(b),this.endDelimited_(a))};jspb.BinaryWriter.prototype.writeBytes=function(a,b){null!=b&&(b=jspb.utils.byteSourceToUint8Array(b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(b.length),this.appendUint8Array_(b))};jspb.BinaryWriter.prototype.writeMessage=function(a,b,c){null!=b&&(a=this.beginDelimited_(a),c(b,this),this.endDelimited_(a))};\njspb.BinaryWriter.prototype.writeMessageSet=function(a,b,c){null!=b&&(this.writeFieldHeader_(1,jspb.BinaryConstants.WireType.START_GROUP),this.writeFieldHeader_(2,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint32(a),a=this.beginDelimited_(3),c(b,this),this.endDelimited_(a),this.writeFieldHeader_(1,jspb.BinaryConstants.WireType.END_GROUP))};\njspb.BinaryWriter.prototype.writeGroup=function(a,b,c){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.START_GROUP),c(b,this),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.END_GROUP))};jspb.BinaryWriter.prototype.writeFixedHash64=function(a,b){null!=b&&(goog.asserts.assert(8==b.length),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeFixedHash64(b))};\njspb.BinaryWriter.prototype.writeVarintHash64=function(a,b){null!=b&&(goog.asserts.assert(8==b.length),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeVarintHash64(b))};jspb.BinaryWriter.prototype.writeSplitFixed64=function(a,b,c){this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64);this.encoder_.writeSplitFixed64(b,c)};\njspb.BinaryWriter.prototype.writeSplitVarint64=function(a,b,c){this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT);this.encoder_.writeSplitVarint64(b,c)};jspb.BinaryWriter.prototype.writeSplitZigzagVarint64=function(a,b,c){this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT);var d=this.encoder_;jspb.utils.toZigzag64(b,c,function(a,b){d.writeSplitVarint64(a>>>0,b>>>0)})};\njspb.BinaryWriter.prototype.writeRepeatedInt32=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeSignedVarint32_(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedInt32String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeInt32String(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedInt64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeSignedVarint64_(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedSplitFixed64=function(a,b,c,d){if(null!=b)for(var e=0;e<b.length;e++)this.writeSplitFixed64(a,c(b[e]),d(b[e]))};jspb.BinaryWriter.prototype.writeRepeatedSplitVarint64=function(a,b,c,d){if(null!=b)for(var e=0;e<b.length;e++)this.writeSplitVarint64(a,c(b[e]),d(b[e]))};jspb.BinaryWriter.prototype.writeRepeatedSplitZigzagVarint64=function(a,b,c,d){if(null!=b)for(var e=0;e<b.length;e++)this.writeSplitZigzagVarint64(a,c(b[e]),d(b[e]))};\njspb.BinaryWriter.prototype.writeRepeatedInt64String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeInt64String(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedUint32=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeUnsignedVarint32_(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedUint32String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeUint32String(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedUint64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeUnsignedVarint64_(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedUint64String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeUint64String(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedSint32=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeZigzagVarint32_(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedSint64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeZigzagVarint64_(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedSint64String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeZigzagVarint64String_(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedSintHash64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeZigzagVarintHash64_(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedFixed32=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeFixed32(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedFixed64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeFixed64(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedFixed64String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeFixed64String(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedSfixed32=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeSfixed32(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedSfixed64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeSfixed64(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedSfixed64String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeSfixed64String(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedFloat=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeFloat(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedDouble=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeDouble(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedBool=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeBool(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedEnum=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeEnum(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedString=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeString(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedBytes=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeBytes(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedMessage=function(a,b,c){if(null!=b)for(var d=0;d<b.length;d++){var e=this.beginDelimited_(a);c(b[d],this);this.endDelimited_(e)}};\njspb.BinaryWriter.prototype.writeRepeatedGroup=function(a,b,c){if(null!=b)for(var d=0;d<b.length;d++)this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.START_GROUP),c(b[d],this),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.END_GROUP)};jspb.BinaryWriter.prototype.writeRepeatedFixedHash64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeFixedHash64(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedVarintHash64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeVarintHash64(a,b[c])};jspb.BinaryWriter.prototype.writePackedInt32=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeSignedVarint32(b[c]);this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedInt32String=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeSignedVarint32(parseInt(b[c],10));this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedInt64=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeSignedVarint64(b[c]);this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedSplitFixed64=function(a,b,c,d){if(null!=b){a=this.beginDelimited_(a);for(var e=0;e<b.length;e++)this.encoder_.writeSplitFixed64(c(b[e]),d(b[e]));this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedSplitVarint64=function(a,b,c,d){if(null!=b){a=this.beginDelimited_(a);for(var e=0;e<b.length;e++)this.encoder_.writeSplitVarint64(c(b[e]),d(b[e]));this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedSplitZigzagVarint64=function(a,b,c,d){if(null!=b){a=this.beginDelimited_(a);for(var e=this.encoder_,f=0;f<b.length;f++)jspb.utils.toZigzag64(c(b[f]),d(b[f]),function(a,b){e.writeSplitVarint64(a>>>0,b>>>0)});this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedInt64String=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++){var d=jspb.arith.Int64.fromString(b[c]);this.encoder_.writeSplitVarint64(d.lo,d.hi)}this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedUint32=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeUnsignedVarint32(b[c]);this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedUint32String=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeUnsignedVarint32(parseInt(b[c],10));this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedUint64=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeUnsignedVarint64(b[c]);this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedUint64String=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++){var d=jspb.arith.UInt64.fromString(b[c]);this.encoder_.writeSplitVarint64(d.lo,d.hi)}this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedSint32=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeZigzagVarint32(b[c]);this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedSint64=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeZigzagVarint64(b[c]);this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedSint64String=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeZigzagVarintHash64(jspb.utils.decimalStringToHash64(b[c]));this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedSintHash64=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeZigzagVarintHash64(b[c]);this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedFixed32=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(4*b.length),a=0;a<b.length;a++)this.encoder_.writeUint32(b[a])};jspb.BinaryWriter.prototype.writePackedFixed64=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++)this.encoder_.writeUint64(b[a])};\njspb.BinaryWriter.prototype.writePackedFixed64String=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++){var c=jspb.arith.UInt64.fromString(b[a]);this.encoder_.writeSplitFixed64(c.lo,c.hi)}};\njspb.BinaryWriter.prototype.writePackedSfixed32=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(4*b.length),a=0;a<b.length;a++)this.encoder_.writeInt32(b[a])};jspb.BinaryWriter.prototype.writePackedSfixed64=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++)this.encoder_.writeInt64(b[a])};\njspb.BinaryWriter.prototype.writePackedSfixed64String=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++)this.encoder_.writeInt64String(b[a])};jspb.BinaryWriter.prototype.writePackedFloat=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(4*b.length),a=0;a<b.length;a++)this.encoder_.writeFloat(b[a])};\njspb.BinaryWriter.prototype.writePackedDouble=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++)this.encoder_.writeDouble(b[a])};jspb.BinaryWriter.prototype.writePackedBool=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(b.length),a=0;a<b.length;a++)this.encoder_.writeBool(b[a])};\njspb.BinaryWriter.prototype.writePackedEnum=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeEnum(b[c]);this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedFixedHash64=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++)this.encoder_.writeFixedHash64(b[a])};\njspb.BinaryWriter.prototype.writePackedVarintHash64=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeVarintHash64(b[c]);this.endDelimited_(a)}};jspb.Map=function(a,b){this.arr_=a;this.valueCtor_=b;this.map_={};this.arrClean=!0;0<this.arr_.length&&this.loadFromArray_()};jspb.Map.prototype.loadFromArray_=function(){for(var a=0;a<this.arr_.length;a++){var b=this.arr_[a],c=b[0];this.map_[c.toString()]=new jspb.Map.Entry_(c,b[1])}this.arrClean=!0};\njspb.Map.prototype.toArray=function(){if(this.arrClean){if(this.valueCtor_){var a=this.map_,b;for(b in a)if(Object.prototype.hasOwnProperty.call(a,b)){var c=a[b].valueWrapper;c&&c.toArray()}}}else{this.arr_.length=0;a=this.stringKeys_();a.sort();for(b=0;b<a.length;b++){var d=this.map_[a[b]];(c=d.valueWrapper)&&c.toArray();this.arr_.push([d.key,d.value])}this.arrClean=!0}return this.arr_};\njspb.Map.prototype.toObject=function(a,b){for(var c=this.toArray(),d=[],e=0;e<c.length;e++){var f=this.map_[c[e][0].toString()];this.wrapEntry_(f);var g=f.valueWrapper;g?(goog.asserts.assert(b),d.push([f.key,b(a,g)])):d.push([f.key,f.value])}return d};jspb.Map.fromObject=function(a,b,c){b=new jspb.Map([],b);for(var d=0;d<a.length;d++){var e=a[d][0],f=c(a[d][1]);b.set(e,f)}return b};jspb.Map.ArrayIteratorIterable_=function(a){this.idx_=0;this.arr_=a};\njspb.Map.ArrayIteratorIterable_.prototype.next=function(){return this.idx_<this.arr_.length?{done:!1,value:this.arr_[this.idx_++]}:{done:!0,value:void 0}};\"undefined\"!=typeof Symbol&&(jspb.Map.ArrayIteratorIterable_.prototype[Symbol.iterator]=function(){return this});jspb.Map.prototype.getLength=function(){return this.stringKeys_().length};jspb.Map.prototype.clear=function(){this.map_={};this.arrClean=!1};\njspb.Map.prototype.del=function(a){a=a.toString();var b=this.map_.hasOwnProperty(a);delete this.map_[a];this.arrClean=!1;return b};jspb.Map.prototype.getEntryList=function(){var a=[],b=this.stringKeys_();b.sort();for(var c=0;c<b.length;c++){var d=this.map_[b[c]];a.push([d.key,d.value])}return a};jspb.Map.prototype.entries=function(){var a=[],b=this.stringKeys_();b.sort();for(var c=0;c<b.length;c++){var d=this.map_[b[c]];a.push([d.key,this.wrapEntry_(d)])}return new jspb.Map.ArrayIteratorIterable_(a)};\njspb.Map.prototype.keys=function(){var a=[],b=this.stringKeys_();b.sort();for(var c=0;c<b.length;c++)a.push(this.map_[b[c]].key);return new jspb.Map.ArrayIteratorIterable_(a)};jspb.Map.prototype.values=function(){var a=[],b=this.stringKeys_();b.sort();for(var c=0;c<b.length;c++)a.push(this.wrapEntry_(this.map_[b[c]]));return new jspb.Map.ArrayIteratorIterable_(a)};\njspb.Map.prototype.forEach=function(a,b){var c=this.stringKeys_();c.sort();for(var d=0;d<c.length;d++){var e=this.map_[c[d]];a.call(b,this.wrapEntry_(e),e.key,this)}};jspb.Map.prototype.set=function(a,b){var c=new jspb.Map.Entry_(a);this.valueCtor_?(c.valueWrapper=b,c.value=b.toArray()):c.value=b;this.map_[a.toString()]=c;this.arrClean=!1;return this};jspb.Map.prototype.wrapEntry_=function(a){return this.valueCtor_?(a.valueWrapper||(a.valueWrapper=new this.valueCtor_(a.value)),a.valueWrapper):a.value};\njspb.Map.prototype.get=function(a){if(a=this.map_[a.toString()])return this.wrapEntry_(a)};jspb.Map.prototype.has=function(a){return a.toString()in this.map_};jspb.Map.prototype.serializeBinary=function(a,b,c,d,e){var f=this.stringKeys_();f.sort();for(var g=0;g<f.length;g++){var h=this.map_[f[g]];b.beginSubMessage(a);c.call(b,1,h.key);this.valueCtor_?d.call(b,2,this.wrapEntry_(h),e):d.call(b,2,h.value);b.endSubMessage()}};\njspb.Map.deserializeBinary=function(a,b,c,d,e,f,g){for(;b.nextField()&&!b.isEndGroup();){var h=b.getFieldNumber();1==h?f=c.call(b):2==h&&(a.valueCtor_?(goog.asserts.assert(e),g||(g=new a.valueCtor_),d.call(b,g,e)):g=d.call(b))}goog.asserts.assert(void 0!=f);goog.asserts.assert(void 0!=g);a.set(f,g)};jspb.Map.prototype.stringKeys_=function(){var a=this.map_,b=[],c;for(c in a)Object.prototype.hasOwnProperty.call(a,c)&&b.push(c);return b};\njspb.Map.Entry_=function(a,b){this.key=a;this.value=b;this.valueWrapper=void 0};jspb.ExtensionFieldInfo=function(a,b,c,d,e){this.fieldIndex=a;this.fieldName=b;this.ctor=c;this.toObjectFn=d;this.isRepeated=e};jspb.ExtensionFieldBinaryInfo=function(a,b,c,d,e,f){this.fieldInfo=a;this.binaryReaderFn=b;this.binaryWriterFn=c;this.binaryMessageSerializeFn=d;this.binaryMessageDeserializeFn=e;this.isPacked=f};jspb.ExtensionFieldInfo.prototype.isMessageType=function(){return!!this.ctor};jspb.Message=function(){};jspb.Message.GENERATE_TO_OBJECT=!0;jspb.Message.GENERATE_FROM_OBJECT=!goog.DISALLOW_TEST_ONLY_CODE;\njspb.Message.GENERATE_TO_STRING=!0;jspb.Message.ASSUME_LOCAL_ARRAYS=!1;jspb.Message.SERIALIZE_EMPTY_TRAILING_FIELDS=!0;jspb.Message.SUPPORTS_UINT8ARRAY_=\"function\"==typeof Uint8Array;jspb.Message.prototype.getJsPbMessageId=function(){return this.messageId_};jspb.Message.getIndex_=function(a,b){return b+a.arrayIndexOffset_};jspb.Message.hiddenES6Property_=function(){};jspb.Message.getFieldNumber_=function(a,b){return b-a.arrayIndexOffset_};\njspb.Message.initialize=function(a,b,c,d,e,f){a.wrappers_=null;b||(b=c?[c]:[]);a.messageId_=c?String(c):void 0;a.arrayIndexOffset_=0===c?-1:0;a.array=b;jspb.Message.initPivotAndExtensionObject_(a,d);a.convertedPrimitiveFields_={};jspb.Message.SERIALIZE_EMPTY_TRAILING_FIELDS||(a.repeatedFields=e);if(e)for(b=0;b<e.length;b++)c=e[b],c<a.pivot_?(c=jspb.Message.getIndex_(a,c),a.array[c]=a.array[c]||jspb.Message.EMPTY_LIST_SENTINEL_):(jspb.Message.maybeInitEmptyExtensionObject_(a),a.extensionObject_[c]=\na.extensionObject_[c]||jspb.Message.EMPTY_LIST_SENTINEL_);if(f&&f.length)for(b=0;b<f.length;b++)jspb.Message.computeOneofCase(a,f[b])};jspb.Message.EMPTY_LIST_SENTINEL_=goog.DEBUG&&Object.freeze?Object.freeze([]):[];jspb.Message.isArray_=function(a){return jspb.Message.ASSUME_LOCAL_ARRAYS?a instanceof Array:Array.isArray(a)};jspb.Message.isExtensionObject_=function(a){return null!==a&&\"object\"==typeof a&&!jspb.Message.isArray_(a)&&!(jspb.Message.SUPPORTS_UINT8ARRAY_&&a instanceof Uint8Array)};\njspb.Message.initPivotAndExtensionObject_=function(a,b){var c=a.array.length,d=-1;if(c&&(d=c-1,c=a.array[d],jspb.Message.isExtensionObject_(c))){a.pivot_=jspb.Message.getFieldNumber_(a,d);a.extensionObject_=c;return}-1<b?(a.pivot_=Math.max(b,jspb.Message.getFieldNumber_(a,d+1)),a.extensionObject_=null):a.pivot_=Number.MAX_VALUE};jspb.Message.maybeInitEmptyExtensionObject_=function(a){var b=jspb.Message.getIndex_(a,a.pivot_);a.array[b]||(a.extensionObject_=a.array[b]={})};\njspb.Message.toObjectList=function(a,b,c){for(var d=[],e=0;e<a.length;e++)d[e]=b.call(a[e],c,a[e]);return d};jspb.Message.toObjectExtension=function(a,b,c,d,e){for(var f in c){var g=c[f],h=d.call(a,g);if(null!=h){for(var k in g.fieldName)if(g.fieldName.hasOwnProperty(k))break;b[k]=g.toObjectFn?g.isRepeated?jspb.Message.toObjectList(h,g.toObjectFn,e):g.toObjectFn(e,h):h}}};\njspb.Message.serializeBinaryExtensions=function(a,b,c,d){for(var e in c){var f=c[e],g=f.fieldInfo;if(!f.binaryWriterFn)throw Error(\"Message extension present that was generated without binary serialization support\");var h=d.call(a,g);if(null!=h)if(g.isMessageType())if(f.binaryMessageSerializeFn)f.binaryWriterFn.call(b,g.fieldIndex,h,f.binaryMessageSerializeFn);else throw Error(\"Message extension present holding submessage without binary support enabled, and message is being serialized to binary format\");\nelse f.binaryWriterFn.call(b,g.fieldIndex,h)}};jspb.Message.readBinaryExtension=function(a,b,c,d,e){var f=c[b.getFieldNumber()];if(f){c=f.fieldInfo;if(!f.binaryReaderFn)throw Error(\"Deserializing extension whose generated code does not support binary format\");if(c.isMessageType()){var g=new c.ctor;f.binaryReaderFn.call(b,g,f.binaryMessageDeserializeFn)}else g=f.binaryReaderFn.call(b);c.isRepeated&&!f.isPacked?(b=d.call(a,c))?b.push(g):e.call(a,c,[g]):e.call(a,c,g)}else b.skipField()};\njspb.Message.getField=function(a,b){if(b<a.pivot_){b=jspb.Message.getIndex_(a,b);var c=a.array[b];return c===jspb.Message.EMPTY_LIST_SENTINEL_?a.array[b]=[]:c}if(a.extensionObject_)return c=a.extensionObject_[b],c===jspb.Message.EMPTY_LIST_SENTINEL_?a.extensionObject_[b]=[]:c};jspb.Message.getRepeatedField=function(a,b){return jspb.Message.getField(a,b)};jspb.Message.getOptionalFloatingPointField=function(a,b){a=jspb.Message.getField(a,b);return null==a?a:+a};\njspb.Message.getBooleanField=function(a,b){a=jspb.Message.getField(a,b);return null==a?a:!!a};jspb.Message.getRepeatedFloatingPointField=function(a,b){var c=jspb.Message.getRepeatedField(a,b);a.convertedPrimitiveFields_||(a.convertedPrimitiveFields_={});if(!a.convertedPrimitiveFields_[b]){for(var d=0;d<c.length;d++)c[d]=+c[d];a.convertedPrimitiveFields_[b]=!0}return c};\njspb.Message.getRepeatedBooleanField=function(a,b){var c=jspb.Message.getRepeatedField(a,b);a.convertedPrimitiveFields_||(a.convertedPrimitiveFields_={});if(!a.convertedPrimitiveFields_[b]){for(var d=0;d<c.length;d++)c[d]=!!c[d];a.convertedPrimitiveFields_[b]=!0}return c};\njspb.Message.bytesAsB64=function(a){if(null==a||\"string\"===typeof a)return a;if(jspb.Message.SUPPORTS_UINT8ARRAY_&&a instanceof Uint8Array)return goog.crypt.base64.encodeByteArray(a);goog.asserts.fail(\"Cannot coerce to b64 string: \"+goog.typeOf(a));return null};jspb.Message.bytesAsU8=function(a){if(null==a||a instanceof Uint8Array)return a;if(\"string\"===typeof a)return goog.crypt.base64.decodeStringToUint8Array(a);goog.asserts.fail(\"Cannot coerce to Uint8Array: \"+goog.typeOf(a));return null};\njspb.Message.bytesListAsB64=function(a){jspb.Message.assertConsistentTypes_(a);return a.length&&\"string\"!==typeof a[0]?goog.array.map(a,jspb.Message.bytesAsB64):a};jspb.Message.bytesListAsU8=function(a){jspb.Message.assertConsistentTypes_(a);return!a.length||a[0]instanceof Uint8Array?a:goog.array.map(a,jspb.Message.bytesAsU8)};\njspb.Message.assertConsistentTypes_=function(a){if(goog.DEBUG&&a&&1<a.length){var b=goog.typeOf(a[0]);goog.array.forEach(a,function(a){goog.typeOf(a)!=b&&goog.asserts.fail(\"Inconsistent type in JSPB repeated field array. Got \"+goog.typeOf(a)+\" expected \"+b)})}};jspb.Message.getFieldWithDefault=function(a,b,c){a=jspb.Message.getField(a,b);return null==a?c:a};jspb.Message.getBooleanFieldWithDefault=function(a,b,c){a=jspb.Message.getBooleanField(a,b);return null==a?c:a};\njspb.Message.getFloatingPointFieldWithDefault=function(a,b,c){a=jspb.Message.getOptionalFloatingPointField(a,b);return null==a?c:a};jspb.Message.getFieldProto3=jspb.Message.getFieldWithDefault;jspb.Message.getMapField=function(a,b,c,d){a.wrappers_||(a.wrappers_={});if(b in a.wrappers_)return a.wrappers_[b];var e=jspb.Message.getField(a,b);if(!e){if(c)return;e=[];jspb.Message.setField(a,b,e)}return a.wrappers_[b]=new jspb.Map(e,d)};\njspb.Message.setField=function(a,b,c){goog.asserts.assertInstanceof(a,jspb.Message);b<a.pivot_?a.array[jspb.Message.getIndex_(a,b)]=c:(jspb.Message.maybeInitEmptyExtensionObject_(a),a.extensionObject_[b]=c);return a};jspb.Message.setProto3IntField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,0)};jspb.Message.setProto3FloatField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,0)};\njspb.Message.setProto3BooleanField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,!1)};jspb.Message.setProto3StringField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,\"\")};jspb.Message.setProto3BytesField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,\"\")};jspb.Message.setProto3EnumField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,0)};\njspb.Message.setProto3StringIntField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,\"0\")};jspb.Message.setFieldIgnoringDefault_=function(a,b,c,d){goog.asserts.assertInstanceof(a,jspb.Message);c!==d?jspb.Message.setField(a,b,c):b<a.pivot_?a.array[jspb.Message.getIndex_(a,b)]=null:(jspb.Message.maybeInitEmptyExtensionObject_(a),delete a.extensionObject_[b]);return a};\njspb.Message.addToRepeatedField=function(a,b,c,d){goog.asserts.assertInstanceof(a,jspb.Message);b=jspb.Message.getRepeatedField(a,b);void 0!=d?b.splice(d,0,c):b.push(c);return a};jspb.Message.setOneofField=function(a,b,c,d){goog.asserts.assertInstanceof(a,jspb.Message);(c=jspb.Message.computeOneofCase(a,c))&&c!==b&&void 0!==d&&(a.wrappers_&&c in a.wrappers_&&(a.wrappers_[c]=void 0),jspb.Message.setField(a,c,void 0));return jspb.Message.setField(a,b,d)};\njspb.Message.computeOneofCase=function(a,b){for(var c,d,e=0;e<b.length;e++){var f=b[e],g=jspb.Message.getField(a,f);null!=g&&(c=f,d=g,jspb.Message.setField(a,f,void 0))}return c?(jspb.Message.setField(a,c,d),c):0};jspb.Message.getWrapperField=function(a,b,c,d){a.wrappers_||(a.wrappers_={});if(!a.wrappers_[c]){var e=jspb.Message.getField(a,c);if(d||e)a.wrappers_[c]=new b(e)}return a.wrappers_[c]};\njspb.Message.getRepeatedWrapperField=function(a,b,c){jspb.Message.wrapRepeatedField_(a,b,c);b=a.wrappers_[c];b==jspb.Message.EMPTY_LIST_SENTINEL_&&(b=a.wrappers_[c]=[]);return b};jspb.Message.wrapRepeatedField_=function(a,b,c){a.wrappers_||(a.wrappers_={});if(!a.wrappers_[c]){for(var d=jspb.Message.getRepeatedField(a,c),e=[],f=0;f<d.length;f++)e[f]=new b(d[f]);a.wrappers_[c]=e}};\njspb.Message.setWrapperField=function(a,b,c){goog.asserts.assertInstanceof(a,jspb.Message);a.wrappers_||(a.wrappers_={});var d=c?c.toArray():c;a.wrappers_[b]=c;return jspb.Message.setField(a,b,d)};jspb.Message.setOneofWrapperField=function(a,b,c,d){goog.asserts.assertInstanceof(a,jspb.Message);a.wrappers_||(a.wrappers_={});var e=d?d.toArray():d;a.wrappers_[b]=d;return jspb.Message.setOneofField(a,b,c,e)};\njspb.Message.setRepeatedWrapperField=function(a,b,c){goog.asserts.assertInstanceof(a,jspb.Message);a.wrappers_||(a.wrappers_={});c=c||[];for(var d=[],e=0;e<c.length;e++)d[e]=c[e].toArray();a.wrappers_[b]=c;return jspb.Message.setField(a,b,d)};\njspb.Message.addToRepeatedWrapperField=function(a,b,c,d,e){jspb.Message.wrapRepeatedField_(a,d,b);var f=a.wrappers_[b];f||(f=a.wrappers_[b]=[]);c=c?c:new d;a=jspb.Message.getRepeatedField(a,b);void 0!=e?(f.splice(e,0,c),a.splice(e,0,c.toArray())):(f.push(c),a.push(c.toArray()));return c};jspb.Message.toMap=function(a,b,c,d){for(var e={},f=0;f<a.length;f++)e[b.call(a[f])]=c?c.call(a[f],d,a[f]):a[f];return e};\njspb.Message.prototype.syncMapFields_=function(){if(this.wrappers_)for(var a in this.wrappers_){var b=this.wrappers_[a];if(Array.isArray(b))for(var c=0;c<b.length;c++)b[c]&&b[c].toArray();else b&&b.toArray()}};jspb.Message.prototype.toArray=function(){this.syncMapFields_();return this.array};jspb.Message.GENERATE_TO_STRING&&(jspb.Message.prototype.toString=function(){this.syncMapFields_();return this.array.toString()});\njspb.Message.prototype.getExtension=function(a){if(this.extensionObject_){this.wrappers_||(this.wrappers_={});var b=a.fieldIndex;if(a.isRepeated){if(a.isMessageType())return this.wrappers_[b]||(this.wrappers_[b]=goog.array.map(this.extensionObject_[b]||[],function(b){return new a.ctor(b)})),this.wrappers_[b]}else if(a.isMessageType())return!this.wrappers_[b]&&this.extensionObject_[b]&&(this.wrappers_[b]=new a.ctor(this.extensionObject_[b])),this.wrappers_[b];return this.extensionObject_[b]}};\njspb.Message.prototype.setExtension=function(a,b){this.wrappers_||(this.wrappers_={});jspb.Message.maybeInitEmptyExtensionObject_(this);var c=a.fieldIndex;a.isRepeated?(b=b||[],a.isMessageType()?(this.wrappers_[c]=b,this.extensionObject_[c]=goog.array.map(b,function(a){return a.toArray()})):this.extensionObject_[c]=b):a.isMessageType()?(this.wrappers_[c]=b,this.extensionObject_[c]=b?b.toArray():b):this.extensionObject_[c]=b;return this};\njspb.Message.difference=function(a,b){if(!(a instanceof b.constructor))throw Error(\"Messages have different types.\");var c=a.toArray();b=b.toArray();var d=[],e=0,f=c.length>b.length?c.length:b.length;a.getJsPbMessageId()&&(d[0]=a.getJsPbMessageId(),e=1);for(;e<f;e++)jspb.Message.compareFields(c[e],b[e])||(d[e]=b[e]);return new a.constructor(d)};jspb.Message.equals=function(a,b){return a==b||!(!a||!b)&&a instanceof b.constructor&&jspb.Message.compareFields(a.toArray(),b.toArray())};\njspb.Message.compareExtensions=function(a,b){a=a||{};b=b||{};var c={},d;for(d in a)c[d]=0;for(d in b)c[d]=0;for(d in c)if(!jspb.Message.compareFields(a[d],b[d]))return!1;return!0};\njspb.Message.compareFields=function(a,b){if(a==b)return!0;if(!goog.isObject(a)||!goog.isObject(b))return\"number\"===typeof a&&isNaN(a)||\"number\"===typeof b&&isNaN(b)?String(a)==String(b):!1;if(a.constructor!=b.constructor)return!1;if(jspb.Message.SUPPORTS_UINT8ARRAY_&&a.constructor===Uint8Array){if(a.length!=b.length)return!1;for(var c=0;c<a.length;c++)if(a[c]!=b[c])return!1;return!0}if(a.constructor===Array){var d=void 0,e=void 0,f=Math.max(a.length,b.length);for(c=0;c<f;c++){var g=a[c],h=b[c];g&&\ng.constructor==Object&&(goog.asserts.assert(void 0===d),goog.asserts.assert(c===a.length-1),d=g,g=void 0);h&&h.constructor==Object&&(goog.asserts.assert(void 0===e),goog.asserts.assert(c===b.length-1),e=h,h=void 0);if(!jspb.Message.compareFields(g,h))return!1}return d||e?(d=d||{},e=e||{},jspb.Message.compareExtensions(d,e)):!0}if(a.constructor===Object)return jspb.Message.compareExtensions(a,b);throw Error(\"Invalid type in JSPB array\");};jspb.Message.prototype.cloneMessage=function(){return jspb.Message.cloneMessage(this)};\njspb.Message.prototype.clone=function(){return jspb.Message.cloneMessage(this)};jspb.Message.clone=function(a){return jspb.Message.cloneMessage(a)};jspb.Message.cloneMessage=function(a){return new a.constructor(jspb.Message.clone_(a.toArray()))};\njspb.Message.copyInto=function(a,b){goog.asserts.assertInstanceof(a,jspb.Message);goog.asserts.assertInstanceof(b,jspb.Message);goog.asserts.assert(a.constructor==b.constructor,\"Copy source and target message should have the same type.\");a=jspb.Message.clone(a);for(var c=b.toArray(),d=a.toArray(),e=c.length=0;e<d.length;e++)c[e]=d[e];b.wrappers_=a.wrappers_;b.extensionObject_=a.extensionObject_};\njspb.Message.clone_=function(a){if(Array.isArray(a)){for(var b=Array(a.length),c=0;c<a.length;c++){var d=a[c];null!=d&&(b[c]=\"object\"==typeof d?jspb.Message.clone_(goog.asserts.assert(d)):d)}return b}if(jspb.Message.SUPPORTS_UINT8ARRAY_&&a instanceof Uint8Array)return new Uint8Array(a);b={};for(c in a)d=a[c],null!=d&&(b[c]=\"object\"==typeof d?jspb.Message.clone_(goog.asserts.assert(d)):d);return b};jspb.Message.registerMessageType=function(a,b){b.messageId=a};jspb.Message.messageSetExtensions={};\njspb.Message.messageSetExtensionsBinary={};jspb.Export={};\"object\"===typeof exports&&(exports.Map=jspb.Map,exports.Message=jspb.Message,exports.BinaryReader=jspb.BinaryReader,exports.BinaryWriter=jspb.BinaryWriter,exports.ExtensionFieldInfo=jspb.ExtensionFieldInfo,exports.ExtensionFieldBinaryInfo=jspb.ExtensionFieldBinaryInfo,exports.exportSymbol=goog.exportSymbol,exports.inherits=goog.inherits,exports.object={extend:goog.object.extend},exports.typeOf=goog.typeOf);\n","'use strict';\n\nvar $BigInt = global.BigInt;\n\nmodule.exports = function hasNativeBigInts() {\n\treturn typeof $BigInt === 'function'\n\t\t&& typeof BigInt === 'function'\n\t\t&& typeof $BigInt(42) === 'bigint' // eslint-disable-line no-magic-numbers\n\t\t&& typeof BigInt(42) === 'bigint'; // eslint-disable-line no-magic-numbers\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar hasBigInts = require('has-bigints')();\n\nif (hasBigInts) {\n\tvar bigIntValueOf = BigInt.prototype.valueOf;\n\tvar tryBigInt = function tryBigIntObject(value) {\n\t\ttry {\n\t\t\tbigIntValueOf.call(value);\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t}\n\t\treturn false;\n\t};\n\n\tmodule.exports = function isBigInt(value) {\n\t\tif (\n\t\t\tvalue === null\n\t\t\t|| typeof value === 'undefined'\n\t\t\t|| typeof value === 'boolean'\n\t\t\t|| typeof value === 'string'\n\t\t\t|| typeof value === 'number'\n\t\t\t|| typeof value === 'symbol'\n\t\t\t|| typeof value === 'function'\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\tif (typeof value === 'bigint') {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn tryBigInt(value);\n\t};\n} else {\n\tmodule.exports = function isBigInt(value) {\n\t\treturn false && value;\n\t};\n}\n","'use strict';\n\nvar callBound = require('call-bind/callBound');\nvar $boolToStr = callBound('Boolean.prototype.toString');\nvar $toString = callBound('Object.prototype.toString');\n\nvar tryBooleanObject = function booleanBrandCheck(value) {\n\ttry {\n\t\t$boolToStr(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar boolClass = '[object Boolean]';\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nmodule.exports = function isBoolean(value) {\n\tif (typeof value === 'boolean') {\n\t\treturn true;\n\t}\n\tif (value === null || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\treturn hasToStringTag && Symbol.toStringTag in value ? tryBooleanObject(value) : $toString(value) === boolClass;\n};\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","'use strict';\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n","'use strict';\n\nvar $Map = typeof Map === 'function' && Map.prototype ? Map : null;\nvar $Set = typeof Set === 'function' && Set.prototype ? Set : null;\n\nvar exported;\n\nif (!$Map) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isMap(x) {\n\t\t// `Map` is not present in this environment.\n\t\treturn false;\n\t};\n}\n\nvar $mapHas = $Map ? Map.prototype.has : null;\nvar $setHas = $Set ? Set.prototype.has : null;\nif (!exported && !$mapHas) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isMap(x) {\n\t\t// `Map` does not have a `has` method\n\t\treturn false;\n\t};\n}\n\nmodule.exports = exported || function isMap(x) {\n\tif (!x || typeof x !== 'object') {\n\t\treturn false;\n\t}\n\ttry {\n\t\t$mapHas.call(x);\n\t\tif ($setHas) {\n\t\t\ttry {\n\t\t\t\t$setHas.call(x);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn x instanceof $Map; // core-js workaround, pre-v2.5.0\n\t} catch (e) {}\n\treturn false;\n};\n","'use strict';\n\nvar numToStr = Number.prototype.toString;\nvar tryNumberObject = function tryNumberObject(value) {\n\ttry {\n\t\tnumToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar numClass = '[object Number]';\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nmodule.exports = function isNumberObject(value) {\n\tif (typeof value === 'number') {\n\t\treturn true;\n\t}\n\tif (typeof value !== 'object') {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryNumberObject(value) : toStr.call(value) === numClass;\n};\n","'use strict';\n\nvar callBound = require('call-bind/callBound');\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n","'use strict';\n\nvar $Map = typeof Map === 'function' && Map.prototype ? Map : null;\nvar $Set = typeof Set === 'function' && Set.prototype ? Set : null;\n\nvar exported;\n\nif (!$Set) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isSet(x) {\n\t\t// `Set` is not present in this environment.\n\t\treturn false;\n\t};\n}\n\nvar $mapHas = $Map ? Map.prototype.has : null;\nvar $setHas = $Set ? Set.prototype.has : null;\nif (!exported && !$setHas) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isSet(x) {\n\t\t// `Set` does not have a `has` method\n\t\treturn false;\n\t};\n}\n\nmodule.exports = exported || function isSet(x) {\n\tif (!x || typeof x !== 'object') {\n\t\treturn false;\n\t}\n\ttry {\n\t\t$setHas.call(x);\n\t\tif ($mapHas) {\n\t\t\ttry {\n\t\t\t\t$mapHas.call(x);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn x instanceof $Set; // core-js workaround, pre-v2.5.0\n\t} catch (e) {}\n\treturn false;\n};\n","'use strict';\n\nvar strValue = String.prototype.valueOf;\nvar tryStringObject = function tryStringObject(value) {\n\ttry {\n\t\tstrValue.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar strClass = '[object String]';\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nmodule.exports = function isString(value) {\n\tif (typeof value === 'string') {\n\t\treturn true;\n\t}\n\tif (typeof value !== 'object') {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryStringObject(value) : toStr.call(value) === strClass;\n};\n","'use strict';\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = require('has-symbols')();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && value;\n\t};\n}\n","'use strict';\n\nvar forEach = require('foreach');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n","'use strict';\n\nvar $WeakMap = typeof WeakMap === 'function' && WeakMap.prototype ? WeakMap : null;\nvar $WeakSet = typeof WeakSet === 'function' && WeakSet.prototype ? WeakSet : null;\n\nvar exported;\n\nif (!$WeakMap) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isWeakMap(x) {\n\t\t// `WeakMap` is not present in this environment.\n\t\treturn false;\n\t};\n}\n\nvar $mapHas = $WeakMap ? $WeakMap.prototype.has : null;\nvar $setHas = $WeakSet ? $WeakSet.prototype.has : null;\nif (!exported && !$mapHas) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isWeakMap(x) {\n\t\t// `WeakMap` does not have a `has` method\n\t\treturn false;\n\t};\n}\n\nmodule.exports = exported || function isWeakMap(x) {\n\tif (!x || typeof x !== 'object') {\n\t\treturn false;\n\t}\n\ttry {\n\t\t$mapHas.call(x, $mapHas);\n\t\tif ($setHas) {\n\t\t\ttry {\n\t\t\t\t$setHas.call(x, $setHas);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn x instanceof $WeakMap; // core-js workaround, pre-v3\n\t} catch (e) {}\n\treturn false;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\n\nvar $WeakSet = GetIntrinsic('%WeakSet%', true);\n\nvar $setHas = callBound('WeakSet.prototype.has', true);\n\nif ($setHas) {\n\tvar $mapHas = callBound('WeakMap.prototype.has', true);\n\n\tmodule.exports = function isWeakSet(x) {\n\t\tif (!x || typeof x !== 'object') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\t$setHas(x, $setHas);\n\t\t\tif ($mapHas) {\n\t\t\t\ttry {\n\t\t\t\t\t$mapHas(x, $mapHas);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn x instanceof $WeakSet; // core-js workaround, pre-v3\n\t\t} catch (e) {}\n\t\treturn false;\n\t};\n} else {\n\t// eslint-disable-next-line no-unused-vars\n\tmodule.exports = function isWeakSet(x) {\n\t\t// `WeakSet` does not exist, or does not have a `has` method\n\t\treturn false;\n\t};\n}\n","var map = require(\"./map\");\n\nvar getCountryCode = function(localeString) {\n var components = localeString.split(\"_\");\n if (components.length == 2) {\n return components.pop();\n }\n components = localeString.split(\"-\");\n if (components.length == 2) {\n return components.pop();\n }\n return localeString;\n}\n\nexports.getCurrency = function(locale) {\n var countryCode = getCountryCode(locale).toUpperCase();\n if (countryCode in map) {\n return map[countryCode];\n }\n return null;\n}\n\nexports.getLocales = function(currencyCode) {\n currencyCode = currencyCode.toUpperCase();\n var locales = [];\n for (countryCode in map) {\n if (map[countryCode] === currencyCode) {\n locales.push(countryCode);\n }\n }\n return locales;\n}","// Generated using ShowCurrencies.java\nvar map = {\nAD: 'EUR',\nAE: 'AED',\nAF: 'AFN',\nAG: 'XCD',\nAI: 'XCD',\nAL: 'ALL',\nAM: 'AMD',\nAN: 'ANG',\nAO: 'AOA',\nAR: 'ARS',\nAS: 'USD',\nAT: 'EUR',\nAU: 'AUD',\nAW: 'AWG',\nAX: 'EUR',\nAZ: 'AZN',\nBA: 'BAM',\nBB: 'BBD',\nBD: 'BDT',\nBE: 'EUR',\nBF: 'XOF',\nBG: 'BGN',\nBH: 'BHD',\nBI: 'BIF',\nBJ: 'XOF',\nBL: 'EUR',\nBM: 'BMD',\nBN: 'BND',\nBO: 'BOB',\nBQ: 'USD',\nBR: 'BRL',\nBS: 'BSD',\nBT: 'BTN',\nBV: 'NOK',\nBW: 'BWP',\nBY: 'BYR',\nBZ: 'BZD',\nCA: 'CAD',\nCC: 'AUD',\nCD: 'CDF',\nCF: 'XAF',\nCG: 'XAF',\nCH: 'CHF',\nCI: 'XOF',\nCK: 'NZD',\nCL: 'CLP',\nCM: 'XAF',\nCN: 'CNY',\nCO: 'COP',\nCR: 'CRC',\nCU: 'CUP',\nCV: 'CVE',\nCW: 'ANG',\nCX: 'AUD',\nCY: 'EUR',\nCZ: 'CZK',\nDE: 'EUR',\nDJ: 'DJF',\nDK: 'DKK',\nDM: 'XCD',\nDO: 'DOP',\nDZ: 'DZD',\nEC: 'USD',\nEE: 'EUR',\nEG: 'EGP',\nEH: 'MAD',\nER: 'ERN',\nES: 'EUR',\nET: 'ETB',\nFI: 'EUR',\nFJ: 'FJD',\nFK: 'FKP',\nFM: 'USD',\nFO: 'DKK',\nFR: 'EUR',\nGA: 'XAF',\nGB: 'GBP',\nGD: 'XCD',\nGE: 'GEL',\nGF: 'EUR',\nGG: 'GBP',\nGH: 'GHS',\nGI: 'GIP',\nGL: 'DKK',\nGM: 'GMD',\nGN: 'GNF',\nGP: 'EUR',\nGQ: 'XAF',\nGR: 'EUR',\nGS: 'GBP',\nGT: 'GTQ',\nGU: 'USD',\nGW: 'XOF',\nGY: 'GYD',\nHK: 'HKD',\nHM: 'AUD',\nHN: 'HNL',\nHR: 'HRK',\nHT: 'HTG',\nHU: 'HUF',\nID: 'IDR',\nIE: 'EUR',\nIL: 'ILS',\nIM: 'GBP',\nIN: 'INR',\nIO: 'USD',\nIQ: 'IQD',\nIR: 'IRR',\nIS: 'ISK',\nIT: 'EUR',\nJE: 'GBP',\nJM: 'JMD',\nJO: 'JOD',\nJP: 'JPY',\nKE: 'KES',\nKG: 'KGS',\nKH: 'KHR',\nKI: 'AUD',\nKM: 'KMF',\nKN: 'XCD',\nKP: 'KPW',\nKR: 'KRW',\nKW: 'KWD',\nKY: 'KYD',\nKZ: 'KZT',\nLA: 'LAK',\nLB: 'LBP',\nLC: 'XCD',\nLI: 'CHF',\nLK: 'LKR',\nLR: 'LRD',\nLS: 'LSL',\nLT: 'LTL',\nLU: 'EUR',\nLV: 'LVL',\nLY: 'LYD',\nMA: 'MAD',\nMC: 'EUR',\nMD: 'MDL',\nME: 'EUR',\nMF: 'EUR',\nMG: 'MGA',\nMH: 'USD',\nMK: 'MKD',\nML: 'XOF',\nMM: 'MMK',\nMN: 'MNT',\nMO: 'MOP',\nMP: 'USD',\nMQ: 'EUR',\nMR: 'MRO',\nMS: 'XCD',\nMT: 'EUR',\nMU: 'MUR',\nMV: 'MVR',\nMW: 'MWK',\nMX: 'MXN',\nMY: 'MYR',\nMZ: 'MZN',\nNA: 'NAD',\nNC: 'XPF',\nNE: 'XOF',\nNF: 'AUD',\nNG: 'NGN',\nNI: 'NIO',\nNL: 'EUR',\nNO: 'NOK',\nNP: 'NPR',\nNR: 'AUD',\nNU: 'NZD',\nNZ: 'NZD',\nOM: 'OMR',\nPA: 'PAB',\nPE: 'PEN',\nPF: 'XPF',\nPG: 'PGK',\nPH: 'PHP',\nPK: 'PKR',\nPL: 'PLN',\nPM: 'EUR',\nPN: 'NZD',\nPR: 'USD',\nPS: 'ILS',\nPT: 'EUR',\nPW: 'USD',\nPY: 'PYG',\nQA: 'QAR',\nRE: 'EUR',\nRO: 'RON',\nRS: 'RSD',\nRU: 'RUB',\nRW: 'RWF',\nSA: 'SAR',\nSB: 'SBD',\nSC: 'SCR',\nSD: 'SDG',\nSE: 'SEK',\nSG: 'SGD',\nSH: 'SHP',\nSI: 'EUR',\nSJ: 'NOK',\nSK: 'EUR',\nSL: 'SLL',\nSM: 'EUR',\nSN: 'XOF',\nSO: 'SOS',\nSR: 'SRD',\nST: 'STD',\nSV: 'SVC',\nSX: 'ANG',\nSY: 'SYP',\nSZ: 'SZL',\nTC: 'USD',\nTD: 'XAF',\nTF: 'EUR',\nTG: 'XOF',\nTH: 'THB',\nTJ: 'TJS',\nTK: 'NZD',\nTL: 'USD',\nTM: 'TMT',\nTN: 'TND',\nTO: 'TOP',\nTR: 'TRY',\nTT: 'TTD',\nTV: 'AUD',\nTW: 'TWD',\nTZ: 'TZS',\nUA: 'UAH',\nUG: 'UGX',\nUM: 'USD',\nUS: 'USD',\nUY: 'UYU',\nUZ: 'UZS',\nVA: 'EUR',\nVC: 'XCD',\nVE: 'VEF',\nVG: 'USD',\nVI: 'USD',\nVN: 'VND',\nVU: 'VUV',\nWF: 'XPF',\nWS: 'WST',\nYE: 'YER',\nYT: 'EUR',\nZA: 'ZAR',\nZM: 'ZMK',\nZW: 'ZWL'\n};\n\nmodule.exports = map;","'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest. the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node. This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n constructor (options) {\n if (typeof options === 'number')\n options = { max: options }\n\n if (!options)\n options = {}\n\n if (options.max && (typeof options.max !== 'number' || options.max < 0))\n throw new TypeError('max must be a non-negative number')\n // Kind of weird to have a default max of Infinity, but oh well.\n const max = this[MAX] = options.max || Infinity\n\n const lc = options.length || naiveLength\n this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n this[ALLOW_STALE] = options.stale || false\n if (options.maxAge && typeof options.maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n this[MAX_AGE] = options.maxAge || 0\n this[DISPOSE] = options.dispose\n this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n this.reset()\n }\n\n // resize the cache when the max changes.\n set max (mL) {\n if (typeof mL !== 'number' || mL < 0)\n throw new TypeError('max must be a non-negative number')\n\n this[MAX] = mL || Infinity\n trim(this)\n }\n get max () {\n return this[MAX]\n }\n\n set allowStale (allowStale) {\n this[ALLOW_STALE] = !!allowStale\n }\n get allowStale () {\n return this[ALLOW_STALE]\n }\n\n set maxAge (mA) {\n if (typeof mA !== 'number')\n throw new TypeError('maxAge must be a non-negative number')\n\n this[MAX_AGE] = mA\n trim(this)\n }\n get maxAge () {\n return this[MAX_AGE]\n }\n\n // resize the cache when the lengthCalculator changes.\n set lengthCalculator (lC) {\n if (typeof lC !== 'function')\n lC = naiveLength\n\n if (lC !== this[LENGTH_CALCULATOR]) {\n this[LENGTH_CALCULATOR] = lC\n this[LENGTH] = 0\n this[LRU_LIST].forEach(hit => {\n hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n this[LENGTH] += hit.length\n })\n }\n trim(this)\n }\n get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n get length () { return this[LENGTH] }\n get itemCount () { return this[LRU_LIST].length }\n\n rforEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].tail; walker !== null;) {\n const prev = walker.prev\n forEachStep(this, fn, walker, thisp)\n walker = prev\n }\n }\n\n forEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].head; walker !== null;) {\n const next = walker.next\n forEachStep(this, fn, walker, thisp)\n walker = next\n }\n }\n\n keys () {\n return this[LRU_LIST].toArray().map(k => k.key)\n }\n\n values () {\n return this[LRU_LIST].toArray().map(k => k.value)\n }\n\n reset () {\n if (this[DISPOSE] &&\n this[LRU_LIST] &&\n this[LRU_LIST].length) {\n this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n }\n\n this[CACHE] = new Map() // hash of items by key\n this[LRU_LIST] = new Yallist() // list of items in order of use recency\n this[LENGTH] = 0 // length of items in the list\n }\n\n dump () {\n return this[LRU_LIST].map(hit =>\n isStale(this, hit) ? false : {\n k: hit.key,\n v: hit.value,\n e: hit.now + (hit.maxAge || 0)\n }).toArray().filter(h => h)\n }\n\n dumpLru () {\n return this[LRU_LIST]\n }\n\n set (key, value, maxAge) {\n maxAge = maxAge || this[MAX_AGE]\n\n if (maxAge && typeof maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n\n const now = maxAge ? Date.now() : 0\n const len = this[LENGTH_CALCULATOR](value, key)\n\n if (this[CACHE].has(key)) {\n if (len > this[MAX]) {\n del(this, this[CACHE].get(key))\n return false\n }\n\n const node = this[CACHE].get(key)\n const item = node.value\n\n // dispose of the old one before overwriting\n // split out into 2 ifs for better coverage tracking\n if (this[DISPOSE]) {\n if (!this[NO_DISPOSE_ON_SET])\n this[DISPOSE](key, item.value)\n }\n\n item.now = now\n item.maxAge = maxAge\n item.value = value\n this[LENGTH] += len - item.length\n item.length = len\n this.get(key)\n trim(this)\n return true\n }\n\n const hit = new Entry(key, value, len, now, maxAge)\n\n // oversized objects fall out of cache automatically.\n if (hit.length > this[MAX]) {\n if (this[DISPOSE])\n this[DISPOSE](key, value)\n\n return false\n }\n\n this[LENGTH] += hit.length\n this[LRU_LIST].unshift(hit)\n this[CACHE].set(key, this[LRU_LIST].head)\n trim(this)\n return true\n }\n\n has (key) {\n if (!this[CACHE].has(key)) return false\n const hit = this[CACHE].get(key).value\n return !isStale(this, hit)\n }\n\n get (key) {\n return get(this, key, true)\n }\n\n peek (key) {\n return get(this, key, false)\n }\n\n pop () {\n const node = this[LRU_LIST].tail\n if (!node)\n return null\n\n del(this, node)\n return node.value\n }\n\n del (key) {\n del(this, this[CACHE].get(key))\n }\n\n load (arr) {\n // reset the cache\n this.reset()\n\n const now = Date.now()\n // A previous serialized cache has the most recent items first\n for (let l = arr.length - 1; l >= 0; l--) {\n const hit = arr[l]\n const expiresAt = hit.e || 0\n if (expiresAt === 0)\n // the item was created without expiration in a non aged cache\n this.set(hit.k, hit.v)\n else {\n const maxAge = expiresAt - now\n // dont add already expired items\n if (maxAge > 0) {\n this.set(hit.k, hit.v, maxAge)\n }\n }\n }\n }\n\n prune () {\n this[CACHE].forEach((value, key) => get(this, key, false))\n }\n}\n\nconst get = (self, key, doUse) => {\n const node = self[CACHE].get(key)\n if (node) {\n const hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n return undefined\n } else {\n if (doUse) {\n if (self[UPDATE_AGE_ON_GET])\n node.value.now = Date.now()\n self[LRU_LIST].unshiftNode(node)\n }\n }\n return hit.value\n }\n}\n\nconst isStale = (self, hit) => {\n if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n return false\n\n const diff = Date.now() - hit.now\n return hit.maxAge ? diff > hit.maxAge\n : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n if (self[LENGTH] > self[MAX]) {\n for (let walker = self[LRU_LIST].tail;\n self[LENGTH] > self[MAX] && walker !== null;) {\n // We know that we're about to delete this one, and also\n // what the next least recently used key will be, so just\n // go ahead and set it now.\n const prev = walker.prev\n del(self, walker)\n walker = prev\n }\n }\n}\n\nconst del = (self, node) => {\n if (node) {\n const hit = node.value\n if (self[DISPOSE])\n self[DISPOSE](hit.key, hit.value)\n\n self[LENGTH] -= hit.length\n self[CACHE].delete(hit.key)\n self[LRU_LIST].removeNode(node)\n }\n}\n\nclass Entry {\n constructor (key, value, length, now, maxAge) {\n this.key = key\n this.value = value\n this.length = length\n this.now = now\n this.maxAge = maxAge || 0\n }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n let hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n hit = undefined\n }\n if (hit)\n fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n","'use strict'\nmodule.exports = function (Yallist) {\n Yallist.prototype[Symbol.iterator] = function* () {\n for (let walker = this.head; walker; walker = walker.next) {\n yield walker.value\n }\n }\n}\n","'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n var self = this\n if (!(self instanceof Yallist)) {\n self = new Yallist()\n }\n\n self.tail = null\n self.head = null\n self.length = 0\n\n if (list && typeof list.forEach === 'function') {\n list.forEach(function (item) {\n self.push(item)\n })\n } else if (arguments.length > 0) {\n for (var i = 0, l = arguments.length; i < l; i++) {\n self.push(arguments[i])\n }\n }\n\n return self\n}\n\nYallist.prototype.removeNode = function (node) {\n if (node.list !== this) {\n throw new Error('removing node which does not belong to this list')\n }\n\n var next = node.next\n var prev = node.prev\n\n if (next) {\n next.prev = prev\n }\n\n if (prev) {\n prev.next = next\n }\n\n if (node === this.head) {\n this.head = next\n }\n if (node === this.tail) {\n this.tail = prev\n }\n\n node.list.length--\n node.next = null\n node.prev = null\n node.list = null\n\n return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n if (node === this.head) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var head = this.head\n node.list = this\n node.next = head\n if (head) {\n head.prev = node\n }\n\n this.head = node\n if (!this.tail) {\n this.tail = node\n }\n this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n if (node === this.tail) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var tail = this.tail\n node.list = this\n node.prev = tail\n if (tail) {\n tail.next = node\n }\n\n this.tail = node\n if (!this.head) {\n this.head = node\n }\n this.length++\n}\n\nYallist.prototype.push = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n push(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.unshift = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n unshift(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.pop = function () {\n if (!this.tail) {\n return undefined\n }\n\n var res = this.tail.value\n this.tail = this.tail.prev\n if (this.tail) {\n this.tail.next = null\n } else {\n this.head = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.shift = function () {\n if (!this.head) {\n return undefined\n }\n\n var res = this.head.value\n this.head = this.head.next\n if (this.head) {\n this.head.prev = null\n } else {\n this.tail = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.head, i = 0; walker !== null; i++) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.next\n }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.prev\n }\n}\n\nYallist.prototype.get = function (n) {\n for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.next\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.getReverse = function (n) {\n for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.prev\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.head; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.next\n }\n return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.tail; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.prev\n }\n return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n var acc\n var walker = this.head\n if (arguments.length > 1) {\n acc = initial\n } else if (this.head) {\n walker = this.head.next\n acc = this.head.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = 0; walker !== null; i++) {\n acc = fn(acc, walker.value, i)\n walker = walker.next\n }\n\n return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n var acc\n var walker = this.tail\n if (arguments.length > 1) {\n acc = initial\n } else if (this.tail) {\n walker = this.tail.prev\n acc = this.tail.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = this.length - 1; walker !== null; i--) {\n acc = fn(acc, walker.value, i)\n walker = walker.prev\n }\n\n return acc\n}\n\nYallist.prototype.toArray = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.head; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.next\n }\n return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.tail; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.prev\n }\n return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n walker = walker.next\n }\n for (; walker !== null && i < to; i++, walker = walker.next) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n walker = walker.prev\n }\n for (; walker !== null && i > from; i--, walker = walker.prev) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount /*, ...nodes */) {\n if (start > this.length) {\n start = this.length - 1\n }\n if (start < 0) {\n start = this.length + start;\n }\n\n for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n walker = walker.next\n }\n\n var ret = []\n for (var i = 0; walker && i < deleteCount; i++) {\n ret.push(walker.value)\n walker = this.removeNode(walker)\n }\n if (walker === null) {\n walker = this.tail\n }\n\n if (walker !== this.head && walker !== this.tail) {\n walker = walker.prev\n }\n\n for (var i = 2; i < arguments.length; i++) {\n walker = insert(this, walker, arguments[i])\n }\n return ret;\n}\n\nYallist.prototype.reverse = function () {\n var head = this.head\n var tail = this.tail\n for (var walker = head; walker !== null; walker = walker.prev) {\n var p = walker.prev\n walker.prev = walker.next\n walker.next = p\n }\n this.head = tail\n this.tail = head\n return this\n}\n\nfunction insert (self, node, value) {\n var inserted = node === self.head ?\n new Node(value, null, node, self) :\n new Node(value, node, node.next, self)\n\n if (inserted.next === null) {\n self.tail = inserted\n }\n if (inserted.prev === null) {\n self.head = inserted\n }\n\n self.length++\n\n return inserted\n}\n\nfunction push (self, item) {\n self.tail = new Node(item, self.tail, null, self)\n if (!self.head) {\n self.head = self.tail\n }\n self.length++\n}\n\nfunction unshift (self, item) {\n self.head = new Node(item, null, self.head, self)\n if (!self.tail) {\n self.tail = self.head\n }\n self.length++\n}\n\nfunction Node (value, prev, next, list) {\n if (!(this instanceof Node)) {\n return new Node(value, prev, next, list)\n }\n\n this.list = list\n this.value = value\n\n if (prev) {\n prev.next = this\n this.prev = prev\n } else {\n this.prev = null\n }\n\n if (next) {\n next.prev = this\n this.next = next\n } else {\n this.next = null\n }\n}\n\ntry {\n // add if support for Symbol.iterator is present\n require('./iterator.js')(Yallist)\n} catch (er) {}\n","(function(){\r\n var crypt = require('crypt'),\r\n utf8 = require('charenc').utf8,\r\n isBuffer = require('is-buffer'),\r\n bin = require('charenc').bin,\r\n\r\n // The core\r\n md5 = function (message, options) {\r\n // Convert to byte array\r\n if (message.constructor == String)\r\n if (options && options.encoding === 'binary')\r\n message = bin.stringToBytes(message);\r\n else\r\n message = utf8.stringToBytes(message);\r\n else if (isBuffer(message))\r\n message = Array.prototype.slice.call(message, 0);\r\n else if (!Array.isArray(message) && message.constructor !== Uint8Array)\r\n message = message.toString();\r\n // else, assume byte array already\r\n\r\n var m = crypt.bytesToWords(message),\r\n l = message.length * 8,\r\n a = 1732584193,\r\n b = -271733879,\r\n c = -1732584194,\r\n d = 271733878;\r\n\r\n // Swap endian\r\n for (var i = 0; i < m.length; i++) {\r\n m[i] = ((m[i] << 8) | (m[i] >>> 24)) & 0x00FF00FF |\r\n ((m[i] << 24) | (m[i] >>> 8)) & 0xFF00FF00;\r\n }\r\n\r\n // Padding\r\n m[l >>> 5] |= 0x80 << (l % 32);\r\n m[(((l + 64) >>> 9) << 4) + 14] = l;\r\n\r\n // Method shortcuts\r\n var FF = md5._ff,\r\n GG = md5._gg,\r\n HH = md5._hh,\r\n II = md5._ii;\r\n\r\n for (var i = 0; i < m.length; i += 16) {\r\n\r\n var aa = a,\r\n bb = b,\r\n cc = c,\r\n dd = d;\r\n\r\n a = FF(a, b, c, d, m[i+ 0], 7, -680876936);\r\n d = FF(d, a, b, c, m[i+ 1], 12, -389564586);\r\n c = FF(c, d, a, b, m[i+ 2], 17, 606105819);\r\n b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);\r\n a = FF(a, b, c, d, m[i+ 4], 7, -176418897);\r\n d = FF(d, a, b, c, m[i+ 5], 12, 1200080426);\r\n c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);\r\n b = FF(b, c, d, a, m[i+ 7], 22, -45705983);\r\n a = FF(a, b, c, d, m[i+ 8], 7, 1770035416);\r\n d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);\r\n c = FF(c, d, a, b, m[i+10], 17, -42063);\r\n b = FF(b, c, d, a, m[i+11], 22, -1990404162);\r\n a = FF(a, b, c, d, m[i+12], 7, 1804603682);\r\n d = FF(d, a, b, c, m[i+13], 12, -40341101);\r\n c = FF(c, d, a, b, m[i+14], 17, -1502002290);\r\n b = FF(b, c, d, a, m[i+15], 22, 1236535329);\r\n\r\n a = GG(a, b, c, d, m[i+ 1], 5, -165796510);\r\n d = GG(d, a, b, c, m[i+ 6], 9, -1069501632);\r\n c = GG(c, d, a, b, m[i+11], 14, 643717713);\r\n b = GG(b, c, d, a, m[i+ 0], 20, -373897302);\r\n a = GG(a, b, c, d, m[i+ 5], 5, -701558691);\r\n d = GG(d, a, b, c, m[i+10], 9, 38016083);\r\n c = GG(c, d, a, b, m[i+15], 14, -660478335);\r\n b = GG(b, c, d, a, m[i+ 4], 20, -405537848);\r\n a = GG(a, b, c, d, m[i+ 9], 5, 568446438);\r\n d = GG(d, a, b, c, m[i+14], 9, -1019803690);\r\n c = GG(c, d, a, b, m[i+ 3], 14, -187363961);\r\n b = GG(b, c, d, a, m[i+ 8], 20, 1163531501);\r\n a = GG(a, b, c, d, m[i+13], 5, -1444681467);\r\n d = GG(d, a, b, c, m[i+ 2], 9, -51403784);\r\n c = GG(c, d, a, b, m[i+ 7], 14, 1735328473);\r\n b = GG(b, c, d, a, m[i+12], 20, -1926607734);\r\n\r\n a = HH(a, b, c, d, m[i+ 5], 4, -378558);\r\n d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);\r\n c = HH(c, d, a, b, m[i+11], 16, 1839030562);\r\n b = HH(b, c, d, a, m[i+14], 23, -35309556);\r\n a = HH(a, b, c, d, m[i+ 1], 4, -1530992060);\r\n d = HH(d, a, b, c, m[i+ 4], 11, 1272893353);\r\n c = HH(c, d, a, b, m[i+ 7], 16, -155497632);\r\n b = HH(b, c, d, a, m[i+10], 23, -1094730640);\r\n a = HH(a, b, c, d, m[i+13], 4, 681279174);\r\n d = HH(d, a, b, c, m[i+ 0], 11, -358537222);\r\n c = HH(c, d, a, b, m[i+ 3], 16, -722521979);\r\n b = HH(b, c, d, a, m[i+ 6], 23, 76029189);\r\n a = HH(a, b, c, d, m[i+ 9], 4, -640364487);\r\n d = HH(d, a, b, c, m[i+12], 11, -421815835);\r\n c = HH(c, d, a, b, m[i+15], 16, 530742520);\r\n b = HH(b, c, d, a, m[i+ 2], 23, -995338651);\r\n\r\n a = II(a, b, c, d, m[i+ 0], 6, -198630844);\r\n d = II(d, a, b, c, m[i+ 7], 10, 1126891415);\r\n c = II(c, d, a, b, m[i+14], 15, -1416354905);\r\n b = II(b, c, d, a, m[i+ 5], 21, -57434055);\r\n a = II(a, b, c, d, m[i+12], 6, 1700485571);\r\n d = II(d, a, b, c, m[i+ 3], 10, -1894986606);\r\n c = II(c, d, a, b, m[i+10], 15, -1051523);\r\n b = II(b, c, d, a, m[i+ 1], 21, -2054922799);\r\n a = II(a, b, c, d, m[i+ 8], 6, 1873313359);\r\n d = II(d, a, b, c, m[i+15], 10, -30611744);\r\n c = II(c, d, a, b, m[i+ 6], 15, -1560198380);\r\n b = II(b, c, d, a, m[i+13], 21, 1309151649);\r\n a = II(a, b, c, d, m[i+ 4], 6, -145523070);\r\n d = II(d, a, b, c, m[i+11], 10, -1120210379);\r\n c = II(c, d, a, b, m[i+ 2], 15, 718787259);\r\n b = II(b, c, d, a, m[i+ 9], 21, -343485551);\r\n\r\n a = (a + aa) >>> 0;\r\n b = (b + bb) >>> 0;\r\n c = (c + cc) >>> 0;\r\n d = (d + dd) >>> 0;\r\n }\r\n\r\n return crypt.endian([a, b, c, d]);\r\n };\r\n\r\n // Auxiliary functions\r\n md5._ff = function (a, b, c, d, x, s, t) {\r\n var n = a + (b & c | ~b & d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._gg = function (a, b, c, d, x, s, t) {\r\n var n = a + (b & d | c & ~d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._hh = function (a, b, c, d, x, s, t) {\r\n var n = a + (b ^ c ^ d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._ii = function (a, b, c, d, x, s, t) {\r\n var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n\r\n // Package private blocksize\r\n md5._blocksize = 16;\r\n md5._digestsize = 16;\r\n\r\n module.exports = function (message, options) {\r\n if (message === undefined || message === null)\r\n throw new Error('Illegal argument ' + message);\r\n\r\n var digestbytes = crypt.wordsToBytes(md5(message, options));\r\n return options && options.asBytes ? digestbytes :\r\n options && options.asString ? bin.bytesToString(digestbytes) :\r\n crypt.bytesToHex(digestbytes);\r\n };\r\n\r\n})();\r\n","var simpleIsEqual = function simpleIsEqual(a, b) {\n return a === b;\n};\n\nfunction index (resultFn, isEqual) {\n if (isEqual === void 0) {\n isEqual = simpleIsEqual;\n }\n\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n\n var isNewArgEqualToLast = function isNewArgEqualToLast(newArg, index) {\n return isEqual(newArg, lastArgs[index], index);\n };\n\n var result = function result() {\n for (var _len = arguments.length, newArgs = new Array(_len), _key = 0; _key < _len; _key++) {\n newArgs[_key] = arguments[_key];\n }\n\n if (calledOnce && lastThis === this && newArgs.length === lastArgs.length && newArgs.every(isNewArgEqualToLast)) {\n return lastResult;\n }\n\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n };\n\n return result;\n}\n\nexport default index;\n","(function(){\n var _global = this;\n\n /**\n * JS Implementation of MurmurHash2\n *\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/murmurhash-js\n * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n function MurmurHashV2(str, seed) {\n var\n l = str.length,\n h = seed ^ l,\n i = 0,\n k;\n\n while (l >= 4) {\n k =\n ((str.charCodeAt(i) & 0xff)) |\n ((str.charCodeAt(++i) & 0xff) << 8) |\n ((str.charCodeAt(++i) & 0xff) << 16) |\n ((str.charCodeAt(++i) & 0xff) << 24);\n\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n k ^= k >>> 24;\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k;\n\n l -= 4;\n ++i;\n }\n\n switch (l) {\n case 3: h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n case 2: h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n case 1: h ^= (str.charCodeAt(i) & 0xff);\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n }\n\n h ^= h >>> 13;\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n h ^= h >>> 15;\n\n return h >>> 0;\n };\n\n /**\n * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)\n *\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/murmurhash-js\n * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} key ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n function MurmurHashV3(key, seed) {\n var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i;\n\n remainder = key.length & 3; // key.length % 4\n bytes = key.length - remainder;\n h1 = seed;\n c1 = 0xcc9e2d51;\n c2 = 0x1b873593;\n i = 0;\n\n while (i < bytes) {\n k1 =\n ((key.charCodeAt(i) & 0xff)) |\n ((key.charCodeAt(++i) & 0xff) << 8) |\n ((key.charCodeAt(++i) & 0xff) << 16) |\n ((key.charCodeAt(++i) & 0xff) << 24);\n ++i;\n\n k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\n\n h1 ^= k1;\n h1 = (h1 << 13) | (h1 >>> 19);\n h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\n h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\n }\n\n k1 = 0;\n\n switch (remainder) {\n case 3: k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;\n case 2: k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;\n case 1: k1 ^= (key.charCodeAt(i) & 0xff);\n\n k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= k1;\n }\n\n h1 ^= key.length;\n\n h1 ^= h1 >>> 16;\n h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= h1 >>> 13;\n h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\n h1 ^= h1 >>> 16;\n\n return h1 >>> 0;\n }\n\n var murmur = MurmurHashV3;\n murmur.v2 = MurmurHashV2;\n murmur.v3 = MurmurHashV3;\n\n if (typeof(module) != 'undefined') {\n module.exports = murmur;\n } else {\n var _previousRoot = _global.murmur;\n murmur.noConflict = function() {\n _global.murmur = _previousRoot;\n return murmur;\n }\n _global.murmur = murmur;\n }\n}());\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n ? Symbol.toStringTag\n : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nfunction addNumericSeparator(num, str) {\n if (\n num === Infinity\n || num === -Infinity\n || num !== num\n || (num && num > -1000 && num < 1000)\n || $test.call(/e/, str)\n ) {\n return str;\n }\n var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n if (typeof num === 'number') {\n var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n if (int !== num) {\n var intStr = String(int);\n var dec = $slice.call(str, intStr.length + 1);\n return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n }\n }\n return $replace.call(str, sepRegex, '$&_');\n}\n\nvar inspectCustom = require('./util.inspect').custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n }\n var numericSeparator = opts.numericSeparator;\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n var str = String(obj);\n return numericSeparator ? addNumericSeparator(obj, str) : str;\n }\n if (typeof obj === 'bigint') {\n var bigIntStr = String(obj) + 'n';\n return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = $arrSlice.call(seen);\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + $toLowerCase.call(String(obj.nodeName));\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + $join.call(xs, ', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if ('cause' in obj && !isEnumerable.call(obj, 'cause')) {\n return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n }\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + $join.call(ys, ', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return $replace.call(String(s), /\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = $replace.call($replace.call(str, /(['\\\\])/g, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = $join.call(Array(opts.indent + 1), ' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: $join.call(Array(depth + 1), baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ($test.call(/[^\\w$]/, key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n","module.exports = require('util').inspect;\n","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\nvar getPolyfill = require('./polyfill');\nvar define = require('define-properties');\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar keys = require('object-keys');\nvar canBeObject = function (obj) {\n\treturn typeof obj !== 'undefined' && obj !== null;\n};\nvar hasSymbols = require('has-symbols/shams')();\nvar callBound = require('call-bind/callBound');\nvar toObject = Object;\nvar $push = callBound('Array.prototype.push');\nvar $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable');\nvar originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null;\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function assign(target, source1) {\n\tif (!canBeObject(target)) { throw new TypeError('target must be an object'); }\n\tvar objTarget = toObject(target);\n\tvar s, source, i, props, syms, value, key;\n\tfor (s = 1; s < arguments.length; ++s) {\n\t\tsource = toObject(arguments[s]);\n\t\tprops = keys(source);\n\t\tvar getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols);\n\t\tif (getSymbols) {\n\t\t\tsyms = getSymbols(source);\n\t\t\tfor (i = 0; i < syms.length; ++i) {\n\t\t\t\tkey = syms[i];\n\t\t\t\tif ($propIsEnumerable(source, key)) {\n\t\t\t\t\t$push(props, key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (i = 0; i < props.length; ++i) {\n\t\t\tkey = props[i];\n\t\t\tvalue = source[key];\n\t\t\tif ($propIsEnumerable(source, key)) {\n\t\t\t\tobjTarget[key] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn objTarget;\n};\n","'use strict';\n\nvar defineProperties = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind.apply(getPolyfill());\n// eslint-disable-next-line no-unused-vars\nvar bound = function assign(target, source1) {\n\treturn polyfill(Object, arguments);\n};\n\ndefineProperties(bound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = bound;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar lacksProperEnumerationOrder = function () {\n\tif (!Object.assign) {\n\t\treturn false;\n\t}\n\t/*\n\t * v8, specifically in node 4.x, has a bug with incorrect property enumeration order\n\t * note: this does not detect the bug unless there's 20 characters\n\t */\n\tvar str = 'abcdefghijklmnopqrst';\n\tvar letters = str.split('');\n\tvar map = {};\n\tfor (var i = 0; i < letters.length; ++i) {\n\t\tmap[letters[i]] = letters[i];\n\t}\n\tvar obj = Object.assign({}, map);\n\tvar actual = '';\n\tfor (var k in obj) {\n\t\tactual += k;\n\t}\n\treturn str !== actual;\n};\n\nvar assignHasPendingExceptions = function () {\n\tif (!Object.assign || !Object.preventExtensions) {\n\t\treturn false;\n\t}\n\t/*\n\t * Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t * which is 72% slower than our shim, and Firefox 40's native implementation.\n\t */\n\tvar thrower = Object.preventExtensions({ 1: 2 });\n\ttry {\n\t\tObject.assign(thrower, 'xy');\n\t} catch (e) {\n\t\treturn thrower[1] === 'y';\n\t}\n\treturn false;\n};\n\nmodule.exports = function getPolyfill() {\n\tif (!Object.assign) {\n\t\treturn implementation;\n\t}\n\tif (lacksProperEnumerationOrder()) {\n\t\treturn implementation;\n\t}\n\tif (assignHasPendingExceptions()) {\n\t\treturn implementation;\n\t}\n\treturn Object.assign;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\nmodule.exports = function shimAssign() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tObject,\n\t\t{ assign: polyfill },\n\t\t{ assign: function () { return Object.assign !== polyfill; } }\n\t);\n\treturn polyfill;\n};\n","'use strict';\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.hasIndices) {\n\t\tresult += 'd';\n\t}\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar flagsBound = callBind(getPolyfill());\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function getPolyfill() {\n\tif (supportsDescriptors && (/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar getPolyfill = require('./polyfill');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n","'use strict';\nmodule.exports = path => {\n\tconst isExtendedLengthPath = /^\\\\\\\\\\?\\\\/.test(path);\n\tconst hasNonAscii = /[^\\u0000-\\u0080]+/.test(path); // eslint-disable-line no-control-regex\n\n\tif (isExtendedLengthPath || hasNonAscii) {\n\t\treturn path;\n\t}\n\n\treturn path.replace(/\\\\/g, '/');\n};\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([bth[buf[i++]], bth[buf[i++]], \n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]]]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Unique ID creation requires a high quality random # generator. In node.js\n// this is pretty straight-forward - we use the crypto API.\n\nvar crypto = require('crypto');\n\nmodule.exports = function nodeRNG() {\n return crypto.randomBytes(16);\n};\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [\n seedBytes[0] | 0x01,\n seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n ];\n }\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","'use strict';\n\nvar isString = require('is-string');\nvar isNumber = require('is-number-object');\nvar isBoolean = require('is-boolean-object');\nvar isSymbol = require('is-symbol');\nvar isBigInt = require('is-bigint');\n\n// eslint-disable-next-line consistent-return\nmodule.exports = function whichBoxedPrimitive(value) {\n\t// eslint-disable-next-line eqeqeq\n\tif (value == null || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\treturn null;\n\t}\n\tif (isString(value)) {\n\t\treturn 'String';\n\t}\n\tif (isNumber(value)) {\n\t\treturn 'Number';\n\t}\n\tif (isBoolean(value)) {\n\t\treturn 'Boolean';\n\t}\n\tif (isSymbol(value)) {\n\t\treturn 'Symbol';\n\t}\n\tif (isBigInt(value)) {\n\t\treturn 'BigInt';\n\t}\n};\n","'use strict';\n\nvar isMap = require('is-map');\nvar isSet = require('is-set');\nvar isWeakMap = require('is-weakmap');\nvar isWeakSet = require('is-weakset');\n\nmodule.exports = function whichCollection(value) {\n\tif (value && typeof value === 'object') {\n\t\tif (isMap(value)) {\n\t\t\treturn 'Map';\n\t\t}\n\t\tif (isSet(value)) {\n\t\t\treturn 'Set';\n\t\t}\n\t\tif (isWeakMap(value)) {\n\t\t\treturn 'WeakMap';\n\t\t}\n\t\tif (isWeakSet(value)) {\n\t\t\treturn 'WeakSet';\n\t\t}\n\t}\n\treturn false;\n};\n","'use strict';\n\nvar forEach = require('foreach');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof g[typedArray] === 'function') {\n\t\t\tvar arr = new g[typedArray]();\n\t\t\tif (Symbol.toStringTag in arr) {\n\t\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\t\tif (!descriptor) {\n\t\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t\t}\n\t\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t\t}\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = require('is-typed-array');\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\n};\n","class Query {\n constructor(state) {\n this.state = {\n filterExpressions: state.filterExpressions || [],\n selectExpressions: state.selectExpressions || [],\n groupExpressions: state.groupExpressions || [],\n orderExpressions: state.orderExpressions || [],\n calculation: false,\n rawMode: false,\n withDead: false,\n validateRefs: true,\n limit: null,\n offset: null,\n ...state\n };\n }\n\n filter(expr) {\n return new Query({\n ...this.state,\n filterExpressions: [...this.state.filterExpressions, expr]\n });\n }\n\n unfilter(exprs) {\n let exprSet = new Set(exprs);\n return new Query({\n ...this.state,\n filterExpressions: this.state.filterExpressions.filter(\n expr => !exprSet.has(Object.keys(expr)[0])\n )\n });\n }\n\n select(exprs = []) {\n if (!Array.isArray(exprs)) {\n exprs = [exprs];\n }\n\n let query = new Query({ ...this.state, selectExpressions: exprs });\n query.state.calculation = false;\n return query;\n }\n\n calculate(expr) {\n let query = this.select({ result: expr });\n query.state.calculation = true;\n return query;\n }\n\n groupBy(exprs) {\n if (!Array.isArray(exprs)) {\n exprs = [exprs];\n }\n\n return new Query({\n ...this.state,\n groupExpressions: [...this.state.groupExpressions, ...exprs]\n });\n }\n\n orderBy(exprs) {\n if (!Array.isArray(exprs)) {\n exprs = [exprs];\n }\n\n return new Query({\n ...this.state,\n orderExpressions: [...this.state.orderExpressions, ...exprs]\n });\n }\n\n limit(num) {\n return new Query({ ...this.state, limit: num });\n }\n\n offset(num) {\n return new Query({ ...this.state, offset: num });\n }\n\n raw() {\n return new Query({ ...this.state, rawMode: true });\n }\n\n withDead() {\n return new Query({ ...this.state, withDead: true });\n }\n\n withoutValidatedRefs() {\n return new Query({ ...this.state, validateRefs: false });\n }\n\n options(opts) {\n return new Query({ ...this.state, tableOptions: opts });\n }\n\n serialize() {\n return this.state;\n }\n}\n\nfunction getPrimaryOrderBy(query, defaultOrderBy) {\n let orderExprs = query.serialize().orderExpressions;\n if (orderExprs.length === 0) {\n if (defaultOrderBy) {\n return { order: 'asc', ...defaultOrderBy };\n }\n return null;\n }\n\n let firstOrder = orderExprs[0];\n if (typeof firstOrder === 'string') {\n return { field: firstOrder, order: 'asc' };\n }\n // Handle this form: { field: 'desc' }\n let [field] = Object.keys(firstOrder);\n return { field, order: firstOrder[field] };\n}\n\nmodule.exports = function q(table) {\n return new Query({ table });\n};\n","// TODO: comment on why it works this way\n\nlet send;\n\nmodule.exports = { send };\n","const q = require('./app/query');\nconst injected = require('./injected');\n\nfunction send(name, args) {\n return injected.send(name, args);\n}\n\nasync function runImport(name, func) {\n await send('api/start-import', { budgetName: name });\n try {\n await func();\n } catch (e) {\n await send('api/abort-import');\n throw e;\n }\n await send('api/finish-import');\n}\n\nasync function loadBudget(budgetId) {\n return send('api/load-budget', { id: budgetId });\n}\n\nasync function batchBudgetUpdates(func) {\n await send('api/batch-budget-start');\n try {\n await func();\n } finally {\n await send('api/batch-budget-end');\n }\n}\n\nfunction runQuery(query) {\n return send('api/query', { query: query.serialize() });\n}\n\nfunction getBudgetMonths() {\n return send('api/budget-months');\n}\n\nfunction getBudgetMonth(month) {\n return send('api/budget-month', { month });\n}\n\nfunction setBudgetAmount(month, categoryId, value) {\n return send('api/budget-set-amount', { month, categoryId, amount: value });\n}\n\nfunction setBudgetCarryover(month, categoryId, flag) {\n return send('api/budget-set-carryover', { month, categoryId, flag });\n}\n\nfunction addTransactions(accountId, transactions) {\n return send('api/transactions-add', { accountId, transactions });\n}\n\nfunction importTransactions(accountId, transactions) {\n return send('api/transactions-import', { accountId, transactions });\n}\n\nfunction getTransactions(accountId, startDate, endDate) {\n return send('api/transactions-get', { accountId, startDate, endDate });\n}\n\nfunction filterTransactions(accountId, text) {\n return send('api/transactions-filter', { accountId, text });\n}\n\nfunction updateTransaction(id, fields) {\n return send('api/transaction-update', { id, fields });\n}\n\nfunction deleteTransaction(id) {\n return send('api/transaction-delete', { id });\n}\n\nfunction getAccounts() {\n return send('api/accounts-get');\n}\n\nfunction createAccount(account, initialBalance) {\n return send('api/account-create', { account, initialBalance });\n}\n\nfunction updateAccount(id, fields) {\n return send('api/account-update', { id, fields });\n}\n\nfunction closeAccount(id, transferAccountId, transferCategoryId) {\n return send('api/account-close', {\n id,\n transferAccountId,\n transferCategoryId\n });\n}\n\nfunction reopenAccount(id) {\n return send('api/account-reopen', { id });\n}\n\nfunction deleteAccount(id) {\n return send('api/account-delete', { id });\n}\n\nfunction getCategoryGroups() {\n return send('api/categories-get', { grouped: true });\n}\n\nfunction createCategoryGroup(group) {\n return send('api/category-group-create', { group });\n}\n\nfunction updateCategoryGroup(id, fields) {\n return send('api/category-group-update', { id, fields });\n}\n\nfunction deleteCategoryGroup(id, transferCategoryId) {\n return send('api/category-group-delete', { id, transferCategoryId });\n}\n\nfunction getCategories() {\n return send('api/categories-get', { grouped: false });\n}\n\nfunction createCategory(category) {\n return send('api/category-create', { category });\n}\n\nfunction updateCategory(id, fields) {\n return send('api/category-update', { id, fields });\n}\n\nfunction deleteCategory(id, transferCategoryId) {\n return send('api/category-delete', { id, transferCategoryId });\n}\n\nfunction getPayees() {\n return send('api/payees-get');\n}\n\nfunction createPayee(payee) {\n return send('api/payee-create', { payee });\n}\n\nfunction updatePayee(id, fields) {\n return send('api/payee-update', { id, fields });\n}\n\nfunction deletePayee(id) {\n return send('api/payee-delete', { id });\n}\n\nfunction getPayeeRules(payeeId) {\n return send('api/payee-rules-get', { payeeId });\n}\n\nfunction createPayeeRule(payeeId, rule) {\n return send('api/payee-rule-create', { payee_id: payeeId, rule });\n}\n\nfunction updatePayeeRule(id, fields) {\n return send('api/payee-rule-update', { id, fields });\n}\n\nfunction deletePayeeRule(id) {\n return send('api/payee-rule-delete', { id });\n}\n\nmodule.exports = {\n runImport,\n\n runQuery,\n q,\n\n loadBudget,\n batchBudgetUpdates,\n getBudgetMonths,\n getBudgetMonth,\n setBudgetAmount,\n setBudgetCarryover,\n\n addTransactions,\n importTransactions,\n filterTransactions,\n getTransactions,\n updateTransaction,\n deleteTransaction,\n\n getAccounts,\n createAccount,\n updateAccount,\n closeAccount,\n reopenAccount,\n deleteAccount,\n\n getCategories,\n createCategoryGroup,\n updateCategoryGroup,\n deleteCategoryGroup,\n createCategory,\n updateCategory,\n deleteCategory,\n\n getPayees,\n createPayee,\n updatePayee,\n deletePayee,\n getPayeeRules,\n createPayeeRule,\n deletePayeeRule,\n updatePayeeRule\n};\n","const d = require('date-fns');\nconst normalizePathSep = require('slash');\nconst uuid = require('uuid');\nconst AdmZip = require('adm-zip');\nconst actual = require('@actual-app/api/methods');\nconst { amountToInteger } = require('@actual-app/api/utils');\n\n// Utils\n\nfunction mapAccountType(type) {\n switch (type) {\n case 'Cash':\n case 'Checking':\n return 'checking';\n case 'CreditCard':\n return 'credit';\n case 'Savings':\n return 'savings';\n case 'InvestmentAccount':\n return 'investment';\n case 'Mortgage':\n return 'mortgage';\n default:\n return 'other';\n }\n}\n\nfunction sortByKey(arr, key) {\n return [...arr].sort((item1, item2) => {\n if (item1[key] < item2[key]) {\n return -1;\n } else if (item1[key] > item2[key]) {\n return 1;\n }\n return 0;\n });\n}\n\nfunction groupBy(arr, keyName) {\n return arr.reduce(function(obj, item) {\n var key = item[keyName];\n if (!obj.hasOwnProperty(key)) {\n obj[key] = [];\n }\n obj[key].push(item);\n return obj;\n }, {});\n}\n\nfunction _parse(value) {\n if (typeof value === 'string') {\n // We don't want parsing to take local timezone into account,\n // which parsing a string does. Pass the integers manually to\n // bypass it.\n\n let [year, month, day] = value.split('-');\n if (day != null) {\n return new Date(parseInt(year), parseInt(month) - 1, parseInt(day));\n } else if (month != null) {\n return new Date(parseInt(year), parseInt(month) - 1, 1);\n } else {\n return new Date(parseInt(year), 0, 1);\n }\n }\n return value;\n}\n\nfunction monthFromDate(date) {\n return d.format(_parse(date), 'yyyy-MM');\n}\n\nfunction getCurrentMonth() {\n return d.format(new Date(), 'yyyy-MM');\n}\n\n// Importer\n\nasync function importAccounts(data, entityIdMap) {\n return Promise.all(\n data.accounts.map(async account => {\n if (!account.isTombstone) {\n const id = await actual.createAccount({\n type: mapAccountType(account.accountType),\n name: account.accountName,\n offbudget: account.onBudget ? false : true,\n closed: account.hidden ? true : false\n });\n entityIdMap.set(account.entityId, id);\n }\n })\n );\n}\n\nasync function importCategories(data, entityIdMap) {\n const masterCategories = sortByKey(data.masterCategories, 'sortableIndex');\n\n await Promise.all(\n masterCategories.map(async masterCategory => {\n if (\n masterCategory.type === 'OUTFLOW' &&\n !masterCategory.isTombstone &&\n masterCategory.subCategories &&\n masterCategory.subCategories.some(cat => !cat.isTombstone) > 0\n ) {\n const id = await actual.createCategoryGroup({\n name: masterCategory.name,\n is_income: false\n });\n entityIdMap.set(masterCategory.entityId, id);\n\n if (masterCategory.subCategories) {\n const subCategories = sortByKey(\n masterCategory.subCategories,\n 'sortableIndex'\n );\n subCategories.reverse();\n\n // This can't be done in parallel because sort order depends\n // on insertion order\n for (let category of subCategories) {\n if (!category.isTombstone) {\n const id = await actual.createCategory({\n name: category.name,\n group_id: entityIdMap.get(category.masterCategoryId)\n });\n entityIdMap.set(category.entityId, id);\n }\n }\n }\n }\n })\n );\n}\n\nasync function importPayees(data, entityIdMap) {\n for (let payee of data.payees) {\n if (!payee.isTombstone) {\n let id = await actual.createPayee({\n name: payee.name,\n category: entityIdMap.get(payee.autoFillCategoryId) || null,\n transfer_acct: entityIdMap.get(payee.targetAccountId) || null\n });\n\n // TODO: import payee rules\n\n entityIdMap.set(payee.entityId, id);\n }\n }\n}\n\nasync function importTransactions(data, entityIdMap) {\n const categories = await actual.getCategories();\n const incomeCategoryId = categories.find(cat => cat.name === 'Income').id;\n const accounts = await actual.getAccounts();\n const payees = await actual.getPayees();\n\n function getCategory(id) {\n if (id == null || id === 'Category/__Split__') {\n return null;\n } else if (\n id === 'Category/__ImmediateIncome__' ||\n id === 'Category/__DeferredIncome__'\n ) {\n return incomeCategoryId;\n }\n return entityIdMap.get(id);\n }\n\n function isOffBudget(acctId) {\n let acct = accounts.find(acct => acct.id === acctId);\n if (!acct) {\n throw new Error('Could not find account for transaction when importing');\n }\n return acct.offbudget;\n }\n\n // Go ahead and generate ids for all of the transactions so we can\n // reliably resolve transfers\n for (let transaction of data.transactions) {\n entityIdMap.set(transaction.entityId, uuid.v4());\n }\n\n let sortOrder = 1;\n let transactionsGrouped = groupBy(data.transactions, 'accountId');\n\n await Promise.all(\n Object.keys(transactionsGrouped).map(async accountId => {\n let transactions = transactionsGrouped[accountId];\n\n let toImport = transactions\n .map(transaction => {\n if (transaction.isTombstone) {\n return;\n }\n\n let id = entityIdMap.get(transaction.entityId);\n let transferId =\n entityIdMap.get(transaction.transferTransactionId) || null;\n\n let payee = null;\n if (transferId) {\n payee = payees.find(\n p =>\n p.transfer_acct === entityIdMap.get(transaction.targetAccountId)\n ).id;\n } else {\n payee = entityIdMap.get(transaction.payeeId);\n }\n\n let newTransaction = {\n id,\n amount: amountToInteger(transaction.amount),\n category: isOffBudget(entityIdMap.get(accountId))\n ? null\n : getCategory(transaction.categoryId),\n date: transaction.date,\n notes: transaction.memo || null,\n payee,\n transfer_id: transferId\n };\n\n newTransaction.subtransactions =\n transaction.subTransactions &&\n transaction.subTransactions.map((t, i) => {\n return {\n amount: amountToInteger(t.amount),\n category: getCategory(t.categoryId)\n };\n });\n\n return newTransaction;\n })\n .filter(x => x);\n\n await actual.addTransactions(entityIdMap.get(accountId), toImport);\n })\n );\n}\n\nfunction fillInBudgets(data, categoryBudgets) {\n // YNAB only contains entries for categories that have been actually\n // budgeted. That would be fine except that we need to set the\n // \"carryover\" flag on each month when carrying debt across months.\n // To make sure our system has a chance to set this flag on each\n // category, make sure a budget exists for every category of every\n // month.\n const budgets = [...categoryBudgets];\n data.masterCategories.forEach(masterCategory => {\n if (masterCategory.subCategories) {\n masterCategory.subCategories.forEach(category => {\n if (!budgets.find(b => b.categoryId === category.entityId)) {\n budgets.push({\n budgeted: 0,\n categoryId: category.entityId\n });\n }\n });\n }\n });\n return budgets;\n}\n\nasync function importBudgets(data, entityIdMap) {\n let budgets = sortByKey(data.monthlyBudgets, 'month');\n let earliestMonth = monthFromDate(budgets[0].month);\n let currentMonth = getCurrentMonth();\n\n await actual.batchBudgetUpdates(async () => {\n const carryoverFlags = {};\n\n for (let budget of budgets) {\n let filled = fillInBudgets(\n data,\n budget.monthlySubCategoryBudgets.filter(b => !b.isTombstone)\n );\n\n await Promise.all(\n filled.map(async catBudget => {\n let amount = amountToInteger(catBudget.budgeted);\n let catId = entityIdMap.get(catBudget.categoryId);\n let month = monthFromDate(budget.month);\n if (!catId) {\n return;\n }\n\n await actual.setBudgetAmount(month, catId, amount);\n\n if (catBudget.overspendingHandling === 'AffectsBuffer') {\n // Turn off the carryover flag so it doesn't propagate\n // to future months\n carryoverFlags[catId] = false;\n } else if (\n catBudget.overspendingHandling === 'Confined' ||\n carryoverFlags[catId]\n ) {\n // Overspending has switched to carryover, set the\n // flag so it propagates to future months\n carryoverFlags[catId] = true;\n\n await actual.setBudgetCarryover(month, catId, true);\n }\n })\n );\n }\n });\n}\n\nfunction estimateRecentness(str) {\n // The \"recentness\" is the total amount of changes that this device\n // is aware of, which is estimated by summing up all of the version\n // numbers that its aware of. This works because version numbers are\n // increasing integers.\n return str.split(',').reduce((total, version) => {\n const [_, number] = version.split('-');\n return total + parseInt(number);\n }, 0);\n}\n\nfunction findLatestDevice(zipped, entries) {\n let devices = entries\n .map(entry => {\n const contents = zipped.readFile(entry).toString('utf8');\n\n let data;\n try {\n data = JSON.parse(contents);\n } catch (e) {\n return null;\n }\n\n if (data.hasFullKnowledge) {\n return {\n deviceGUID: data.deviceGUID,\n shortName: data.shortDeviceId,\n recentness: estimateRecentness(data.knowledge)\n };\n }\n\n return null;\n })\n .filter(x => x);\n\n devices = sortByKey(devices, 'recentness');\n return devices[devices.length - 1].deviceGUID;\n}\n\nasync function doImport(data) {\n const entityIdMap = new Map();\n\n console.log('Importing Accounts...');\n await importAccounts(data, entityIdMap);\n\n console.log('Importing Categories...');\n await importCategories(data, entityIdMap);\n\n console.log('Importing Payees...');\n await importPayees(data, entityIdMap);\n\n console.log('Importing Transactions...');\n await importTransactions(data, entityIdMap);\n\n console.log('Importing Budgets...');\n await importBudgets(data, entityIdMap);\n\n console.log('Setting up...');\n}\n\nfunction getBudgetName(filepath) {\n let unixFilepath = normalizePathSep(filepath);\n\n if (!/\\.zip/.test(unixFilepath)) {\n return null;\n }\n\n unixFilepath = unixFilepath.replace(/\\.zip$/, '').replace(/.ynab4$/, '');\n\n // Most budgets are named like \"Budget~51938D82.ynab4\" but sometimes\n // they are only \"Budget.ynab4\". We only want to grab the name\n // before the ~ if it exists.\n let m = unixFilepath.match(/([^/~]+)[^/]*$/);\n if (!m) {\n return null;\n }\n return m[1];\n}\n\nfunction getFile(entries, path) {\n let files = entries.filter(e => e.entryName === path);\n if (files.length === 0) {\n throw new Error('Could not find file: ' + path);\n }\n if (files.length >= 2) {\n throw new Error('File name matches multiple files: ' + path);\n }\n return files[0];\n}\n\nfunction join(...paths) {\n return paths.slice(1).reduce((full, path) => {\n return full + '/' + path.replace(/^\\//, '');\n }, paths[0].replace(/\\/$/, ''));\n}\n\nasync function importBuffer(filepath, buffer) {\n let budgetName = getBudgetName(filepath);\n\n if (!budgetName) {\n throw new Error('Not a YNAB4 file: ' + filepath);\n }\n\n let zipped = new AdmZip(buffer);\n let entries = zipped.getEntries();\n\n let root = '';\n let dirMatch = entries[0].entryName.match(/([^/]*\\.ynab4)/);\n if (dirMatch) {\n root = dirMatch[1] + '/';\n }\n\n let metaStr = zipped.readFile(getFile(entries, root + 'Budget.ymeta'));\n let meta = JSON.parse(metaStr.toString('utf8'));\n let budgetPath = join(root, meta.relativeDataFolderName);\n\n let deviceFiles = entries.filter(e =>\n e.entryName.startsWith(join(budgetPath, 'devices'))\n );\n let deviceGUID = findLatestDevice(zipped, deviceFiles);\n\n const yfullPath = join(budgetPath, deviceGUID, 'Budget.yfull');\n let contents;\n try {\n contents = zipped.readFile(getFile(entries, yfullPath)).toString('utf8');\n } catch (e) {\n console.log(e);\n throw new Error('Error reading Budget.yfull file');\n }\n\n let data;\n try {\n data = JSON.parse(contents);\n } catch (e) {\n throw new Error('Error parsing Budget.yull file');\n }\n\n return actual.runImport(budgetName, () => doImport(data));\n}\n\nmodule.exports = { importBuffer };\n","function amountToInteger(n) {\n return Math.round(n * 100) | 0;\n}\n\nfunction integerToAmount(n) {\n return parseFloat((n / 100).toFixed(2));\n}\n\nmodule.exports = { amountToInteger, integerToAmount };\n","const d = require('date-fns');\nconst uuid = require('uuid');\nconst actual = require('@actual-app/api/methods');\nconst { amountToInteger } = require('@actual-app/api/utils');\n\nfunction amountFromYnab(amount) {\n // ynabs multiplies amount by 1000 and actual by 100\n // so, this function divides by 10\n return Math.round(amount / 10);\n}\n\nfunction monthFromDate(date) {\n let parts = date.split('-');\n return parts[0] + '-' + parts[1];\n}\n\nfunction mapAccountType(type) {\n switch (type) {\n case 'cash':\n case 'checking':\n return 'checking';\n case 'creditCard':\n case 'lineOfCredit':\n return 'credit';\n case 'savings':\n return 'savings';\n case 'investmentAccount':\n return 'investment';\n case 'mortgage':\n return 'mortgage';\n default:\n return 'other';\n }\n}\n\nfunction sortByKey(arr, key) {\n return [...arr].sort((item1, item2) => {\n if (item1[key] < item2[key]) {\n return -1;\n } else if (item1[key] > item2[key]) {\n return 1;\n }\n return 0;\n });\n}\n\nfunction groupBy(arr, keyName) {\n return arr.reduce(function(obj, item) {\n var key = item[keyName];\n if (!obj.hasOwnProperty(key)) {\n obj[key] = [];\n }\n obj[key].push(item);\n return obj;\n }, {});\n}\n\nfunction importAccounts(data, entityIdMap) {\n return Promise.all(\n data.accounts.map(async account => {\n if (!account.deleted) {\n let id = await actual.createAccount({\n type: mapAccountType(account.type),\n name: account.name,\n offbudget: account.on_budget ? false : true,\n closed: account.closed\n });\n entityIdMap.set(account.id, id);\n }\n })\n );\n}\n\nasync function importCategories(data, entityIdMap) {\n // Hidden categories are put in its own group by YNAB,\n // so it's already handled.\n\n const categories = await actual.getCategories();\n const incomeCatId = categories.find(cat => cat.name === 'Income').id;\n const ynabIncomeCategories = ['To be Budgeted', 'Inflow: Ready to Assign'];\n\n function checkSpecialCat(cat) {\n if (\n cat.category_group_id ===\n data.category_groups.find(\n group => group.name === 'Internal Master Category'\n ).id\n ) {\n if (ynabIncomeCategories.includes(cat.name)) {\n return 'income';\n } else {\n return 'internal';\n }\n } else if (\n cat.category_group_id ===\n data.category_groups.find(group => group.name === 'Credit Card Payments')\n .id\n ) {\n return 'creditCard';\n }\n }\n // Can't be done in parallel to have\n // correct sort order.\n\n for (let group of data.category_groups) {\n if (!group.deleted) {\n // Ignores internal category and credit cards\n if (\n group.name !== 'Internal Master Category' &&\n group.name !== 'Credit Card Payments'\n ) {\n var groupId = await actual.createCategoryGroup({\n name: group.name,\n is_income: false\n });\n entityIdMap.set(group.id, groupId);\n }\n\n let cats = data.categories.filter(\n cat => cat.category_group_id === group.id\n );\n\n for (let cat of cats.reverse()) {\n if (!cat.deleted) {\n let newCategory = {};\n newCategory.name = cat.name;\n\n // Handles special categories. Starting balance is a payee\n // in YNAB so it's handled in importTransactions\n switch (checkSpecialCat(cat)) {\n case 'income': {\n // doesn't create new category, only assigns id\n let id = incomeCatId;\n entityIdMap.set(cat.id, id);\n break;\n }\n case 'creditCard': // ignores it\n case 'internal': // uncategorized is ignored too, handled by actual\n break;\n default: {\n newCategory.group_id = groupId;\n let id = await actual.createCategory(newCategory);\n entityIdMap.set(cat.id, id);\n break;\n }\n }\n }\n }\n }\n }\n}\n\nfunction importPayees(data, entityIdMap) {\n return Promise.all(\n data.payees.map(async payee => {\n if (!payee.deleted) {\n let id = await actual.createPayee({\n name: payee.name\n });\n entityIdMap.set(payee.id, id);\n }\n })\n );\n}\n\nasync function importTransactions(data, entityIdMap) {\n const payees = await actual.getPayees();\n const categories = await actual.getCategories();\n const incomeCatId = categories.find(cat => cat.name === 'Income').id;\n const startingBalanceCatId = categories.find(\n cat => cat.name === 'Starting Balances'\n ).id; //better way to do it?\n const startingPayeeYNAB = data.payees.find(\n payee => payee.name === 'Starting Balance'\n ).id;\n\n let transactionsGrouped = groupBy(data.transactions, 'account_id');\n let subtransactionsGrouped = groupBy(data.subtransactions, 'transaction_id');\n\n // Go ahead and generate ids for all of the transactions so we can\n // reliably resolve transfers\n for (let transaction of data.transactions) {\n entityIdMap.set(transaction.id, uuid.v4());\n }\n\n await Promise.all(\n Object.keys(transactionsGrouped).map(async accountId => {\n let transactions = transactionsGrouped[accountId];\n\n let toImport = transactions\n .map(transaction => {\n if (transaction.deleted) {\n return null;\n }\n\n // Handle subtransactions\n let subtransactions = subtransactionsGrouped[transaction.id];\n if (subtransactions) {\n subtransactions = subtransactions.map(subtrans => {\n return {\n amount: amountFromYnab(subtrans.amount),\n category: entityIdMap.get(subtrans.category_id) || null,\n notes: subtrans.memo\n };\n });\n }\n\n // Add transaction\n let newTransaction = {\n id: entityIdMap.get(transaction.id),\n account: entityIdMap.get(transaction.account_id),\n date: transaction.date,\n amount: amountFromYnab(transaction.amount),\n category: entityIdMap.get(transaction.category_id) || null,\n cleared: ['cleared', 'reconciled'].includes(transaction.cleared),\n notes: transaction.memo || null,\n imported_id: transaction.import_id || null,\n transfer_id:\n entityIdMap.get(transaction.transfer_transaction_id) || null,\n subtransactions: subtransactions\n };\n\n // Handle transfer payee\n if (transaction.transfer_account_id) {\n newTransaction.payee = payees.find(\n p =>\n p.transfer_acct ===\n entityIdMap.get(transaction.transfer_account_id)\n ).id;\n } else {\n newTransaction.payee = entityIdMap.get(transaction.payee_id);\n }\n\n // Handle starting balances\n if (\n transaction.payee_id === startingPayeeYNAB &&\n entityIdMap.get(transaction.category_id) === incomeCatId\n ) {\n newTransaction.category = startingBalanceCatId;\n newTransaction.payee = null;\n }\n return newTransaction;\n })\n .filter(x => x);\n\n await actual.addTransactions(entityIdMap.get(accountId), toImport);\n })\n );\n}\n\nasync function importBudgets(data, entityIdMap) {\n // There should be info in the docs to deal with\n // no credit card category and how YNAB and Actual\n // handle differently the amount To be Budgeted\n // i.e. Actual considers the cc debt while YNAB doesn't\n //\n // Also, there could be a way to set rollover using\n // Deferred Income Subcat and Immediate Income Subcat\n\n let budgets = sortByKey(data.months, 'month');\n\n const internalCatIdYnab = data.category_groups.find(\n group => group.name === 'Internal Master Category'\n ).id;\n const creditcardCatIdYnab = data.category_groups.find(\n group => group.name === 'Credit Card Payments'\n ).id;\n\n await actual.batchBudgetUpdates(async () => {\n for (let budget of budgets) {\n let month = monthFromDate(budget.month);\n\n await Promise.all(\n budget.categories.map(async catBudget => {\n let catId = entityIdMap.get(catBudget.id);\n let amount = catBudget.budgeted / 10;\n\n if (\n !catId ||\n catBudget.category_group_id === internalCatIdYnab ||\n catBudget.category_group_id === creditcardCatIdYnab\n ) {\n return;\n }\n\n await actual.setBudgetAmount(month, catId, amount);\n })\n );\n }\n });\n}\n\n// Utils\n\nasync function doImport(data) {\n const entityIdMap = new Map();\n\n console.log('Importing Accounts...');\n await importAccounts(data, entityIdMap);\n\n console.log('Importing Categories...');\n await importCategories(data, entityIdMap);\n\n console.log('Importing Payees...');\n await importPayees(data, entityIdMap);\n\n console.log('Importing Transactions...');\n await importTransactions(data, entityIdMap);\n\n console.log('Importing Budgets...');\n await importBudgets(data, entityIdMap);\n\n console.log('Setting up...');\n}\n\nasync function importYNAB5(data) {\n if (data.data) {\n data = data.data;\n }\n\n return actual.runImport(data.budget.name, () => doImport(data.budget));\n}\n\nmodule.exports = { importYNAB5 };\n","function amountToInteger(n) {\n return Math.round(n * 100) | 0;\n}\n\nfunction integerToAmount(n) {\n return parseFloat((n / 100).toFixed(2));\n}\n\nmodule.exports = { amountToInteger, integerToAmount };\n","export default async function runMigration(db, uuid) {\n function getValue(node) {\n return node.expr != null ? node.expr : node.cachedValue;\n }\n\n db.execQuery(`\nCREATE TABLE zero_budget_months\n (id TEXT PRIMARY KEY,\n buffered INTEGER DEFAULT 0); \n\nCREATE TABLE zero_budgets\n (id TEXT PRIMARY KEY,\n month INTEGER,\n category TEXT,\n amount INTEGER DEFAULT 0,\n carryover INTEGER DEFAULT 0);\n\nCREATE TABLE reflect_budgets\n (id TEXT PRIMARY KEY,\n month INTEGER,\n category TEXT,\n amount INTEGER DEFAULT 0,\n carryover INTEGER DEFAULT 0);\n\nCREATE TABLE notes\n (id TEXT PRIMARY KEY,\n note TEXT);\n\nCREATE TABLE kvcache (key TEXT PRIMARY KEY, value TEXT);\nCREATE TABLE kvcache_key (id INTEGER PRIMARY KEY, key REAL);\n`);\n\n // Migrate budget amounts and carryover\n let budget = db.runQuery(\n `SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!budget-%'`,\n [],\n true\n );\n db.transaction(() => {\n budget.map(monthBudget => {\n let match = monthBudget.name.match(\n /^(budget-report|budget)(\\d+)!budget-(.+)$/\n );\n if (match == null) {\n console.log('Warning: invalid budget month name', monthBudget.name);\n return;\n }\n\n let type = match[1];\n let month = match[2].slice(0, 4) + '-' + match[2].slice(4);\n let dbmonth = parseInt(match[2]);\n let cat = match[3];\n\n let amount = parseInt(getValue(monthBudget));\n if (isNaN(amount)) {\n amount = 0;\n }\n\n let sheetName = monthBudget.name.split('!')[0];\n let carryover = db.runQuery(\n 'SELECT * FROM spreadsheet_cells WHERE name = ?',\n [`${sheetName}!carryover-${cat}`],\n true\n );\n\n let table = type === 'budget-report' ? 'reflect_budgets' : 'zero_budgets';\n db.runQuery(\n `INSERT INTO ${table} (id, month, category, amount, carryover) VALUES (?, ?, ?, ?, ?)`,\n [\n `${month}-${cat}`,\n dbmonth,\n cat,\n amount,\n carryover.length > 0 && getValue(carryover[0]) === 'true' ? 1 : 0\n ]\n );\n });\n });\n\n // Migrate buffers\n let buffers = db.runQuery(\n `SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!buffered'`,\n [],\n true\n );\n db.transaction(() => {\n buffers.map(buffer => {\n let match = buffer.name.match(/^budget(\\d+)!buffered$/);\n if (match) {\n let month = match[1].slice(0, 4) + '-' + match[1].slice(4);\n let amount = parseInt(getValue(buffer));\n if (isNaN(amount)) {\n amount = 0;\n }\n\n db.runQuery(\n `INSERT INTO zero_budget_months (id, buffered) VALUES (?, ?)`,\n [month, amount]\n );\n }\n });\n });\n\n // Migrate notes\n let notes = db.runQuery(\n `SELECT * FROM spreadsheet_cells WHERE name LIKE 'notes!%'`,\n [],\n true\n );\n\n let parseNote = str => {\n try {\n let value = JSON.parse(str);\n return value && value !== '' ? value : null;\n } catch (e) {\n return null;\n }\n };\n\n db.transaction(() => {\n notes.forEach(note => {\n let parsed = parseNote(getValue(note));\n if (parsed) {\n let [, id] = note.name.split('!');\n db.runQuery(`INSERT INTO notes (id, note) VALUES (?, ?)`, [id, parsed]);\n }\n });\n });\n\n db.execQuery(`\n DROP TABLE spreadsheet_cells;\n ANALYZE;\n VACUUM;\n `);\n}\n","var Utils = require(\"./util\");\nvar fs = Utils.FileSystem.require(),\n\tpth = require(\"path\");\n\nfs.existsSync = fs.existsSync || pth.existsSync;\n\nvar ZipEntry = require(\"./zipEntry\"),\n\tZipFile = require(\"./zipFile\");\n\nvar isWin = /^win/.test(process.platform);\n\n\nmodule.exports = function (/*String*/input) {\n\tvar _zip = undefined,\n\t\t_filename = \"\";\n\n\tif (input && typeof input === \"string\") { // load zip file\n\t\tif (fs.existsSync(input)) {\n\t\t\t_filename = input;\n\t\t\t_zip = new ZipFile(input, Utils.Constants.FILE);\n\t\t} else {\n\t\t\tthrow Utils.Errors.INVALID_FILENAME;\n\t\t}\n\t} else if (input && Buffer.isBuffer(input)) { // load buffer\n\t\t_zip = new ZipFile(input, Utils.Constants.BUFFER);\n\t} else { // create new zip file\n\t\t_zip = new ZipFile(null, Utils.Constants.NONE);\n\t}\n\n\tfunction sanitize(prefix, name) {\n\t\tprefix = pth.resolve(pth.normalize(prefix));\n\t\tvar parts = name.split('/');\n\t\tfor (var i = 0, l = parts.length; i < l; i++) {\n\t\t\tvar path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));\n\t\t\tif (path.indexOf(prefix) === 0) {\n\t\t\t\treturn path;\n\t\t\t}\n\t\t}\n\t\treturn pth.normalize(pth.join(prefix, pth.basename(name)));\n\t}\n\n\tfunction getEntry(/*Object*/entry) {\n\t\tif (entry && _zip) {\n\t\t\tvar item;\n\t\t\t// If entry was given as a file name\n\t\t\tif (typeof entry === \"string\")\n\t\t\t\titem = _zip.getEntry(entry);\n\t\t\t// if entry was given as a ZipEntry object\n\t\t\tif (typeof entry === \"object\" && typeof entry.entryName !== \"undefined\" && typeof entry.header !== \"undefined\")\n\t\t\t\titem = _zip.getEntry(entry.entryName);\n\n\t\t\tif (item) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\treturn {\n\t\t/**\n\t\t * Extracts the given entry from the archive and returns the content as a Buffer object\n\t\t * @param entry ZipEntry object or String with the full path of the entry\n\t\t *\n\t\t * @return Buffer or Null in case of error\n\t\t */\n\t\treadFile: function (/*Object*/entry) {\n\t\t\tvar item = getEntry(entry);\n\t\t\treturn item && item.getData() || null;\n\t\t},\n\n\t\t/**\n\t\t * Asynchronous readFile\n\t\t * @param entry ZipEntry object or String with the full path of the entry\n\t\t * @param callback\n\t\t *\n\t\t * @return Buffer or Null in case of error\n\t\t */\n\t\treadFileAsync: function (/*Object*/entry, /*Function*/callback) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\titem.getDataAsync(callback);\n\t\t\t} else {\n\t\t\t\tcallback(null, \"getEntry failed for:\" + entry)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Extracts the given entry from the archive and returns the content as plain text in the given encoding\n\t\t * @param entry ZipEntry object or String with the full path of the entry\n\t\t * @param encoding Optional. If no encoding is specified utf8 is used\n\t\t *\n\t\t * @return String\n\t\t */\n\t\treadAsText: function (/*Object*/entry, /*String - Optional*/encoding) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\tvar data = item.getData();\n\t\t\t\tif (data && data.length) {\n\t\t\t\t\treturn data.toString(encoding || \"utf8\");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn \"\";\n\t\t},\n\n\t\t/**\n\t\t * Asynchronous readAsText\n\t\t * @param entry ZipEntry object or String with the full path of the entry\n\t\t * @param callback\n\t\t * @param encoding Optional. If no encoding is specified utf8 is used\n\t\t *\n\t\t * @return String\n\t\t */\n\t\treadAsTextAsync: function (/*Object*/entry, /*Function*/callback, /*String - Optional*/encoding) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\titem.getDataAsync(function (data, err) {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tcallback(data, err);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data && data.length) {\n\t\t\t\t\t\tcallback(data.toString(encoding || \"utf8\"));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcallback(\"\");\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tcallback(\"\");\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory\n\t\t *\n\t\t * @param entry\n\t\t */\n\t\tdeleteFile: function (/*Object*/entry) { // @TODO: test deleteFile\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\t_zip.deleteEntry(item.entryName);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Adds a comment to the zip. The zip must be rewritten after adding the comment.\n\t\t *\n\t\t * @param comment\n\t\t */\n\t\taddZipComment: function (/*String*/comment) { // @TODO: test addZipComment\n\t\t\t_zip.comment = comment;\n\t\t},\n\n\t\t/**\n\t\t * Returns the zip comment\n\t\t *\n\t\t * @return String\n\t\t */\n\t\tgetZipComment: function () {\n\t\t\treturn _zip.comment || '';\n\t\t},\n\n\t\t/**\n\t\t * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment\n\t\t * The comment cannot exceed 65535 characters in length\n\t\t *\n\t\t * @param entry\n\t\t * @param comment\n\t\t */\n\t\taddZipEntryComment: function (/*Object*/entry, /*String*/comment) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\titem.comment = comment;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Returns the comment of the specified entry\n\t\t *\n\t\t * @param entry\n\t\t * @return String\n\t\t */\n\t\tgetZipEntryComment: function (/*Object*/entry) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\treturn item.comment || '';\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\n\t\t/**\n\t\t * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content\n\t\t *\n\t\t * @param entry\n\t\t * @param content\n\t\t */\n\t\tupdateFile: function (/*Object*/entry, /*Buffer*/content) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\titem.setData(content);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Adds a file from the disk to the archive\n\t\t *\n\t\t * @param localPath File to add to zip\n\t\t * @param zipPath Optional path inside the zip\n\t\t * @param zipName Optional name for the file\n\t\t */\n\t\taddLocalFile: function (/*String*/localPath, /*String*/zipPath, /*String*/zipName) {\n\t\t\tif (fs.existsSync(localPath)) {\n\t\t\t\tif (zipPath) {\n\t\t\t\t\tzipPath = zipPath.split(\"\\\\\").join(\"/\");\n\t\t\t\t\tif (zipPath.charAt(zipPath.length - 1) !== \"/\") {\n\t\t\t\t\t\tzipPath += \"/\";\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tzipPath = \"\";\n\t\t\t\t}\n\t\t\t\tvar p = localPath.split(\"\\\\\").join(\"/\").split(\"/\").pop();\n\n\t\t\t\tif (zipName) {\n\t\t\t\t\tthis.addFile(zipPath + zipName, fs.readFileSync(localPath), \"\", 0)\n\t\t\t\t} else {\n\t\t\t\t\tthis.addFile(zipPath + p, fs.readFileSync(localPath), \"\", 0)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Adds a local directory and all its nested files and directories to the archive\n\t\t *\n\t\t * @param localPath\n\t\t * @param zipPath optional path inside zip\n\t\t * @param filter optional RegExp or Function if files match will\n\t\t * be included.\n\t\t */\n\t\taddLocalFolder: function (/*String*/localPath, /*String*/zipPath, /*RegExp|Function*/filter) {\n\t\t\tif (filter === undefined) {\n\t\t\t\tfilter = function () {\n\t\t\t\t\treturn true;\n\t\t\t\t};\n\t\t\t} else if (filter instanceof RegExp) {\n\t\t\t\tfilter = function (filter) {\n\t\t\t\t\treturn function (filename) {\n\t\t\t\t\t\treturn filter.test(filename);\n\t\t\t\t\t}\n\t\t\t\t}(filter);\n\t\t\t}\n\n\t\t\tif (zipPath) {\n\t\t\t\tzipPath = zipPath.split(\"\\\\\").join(\"/\");\n\t\t\t\tif (zipPath.charAt(zipPath.length - 1) !== \"/\") {\n\t\t\t\t\tzipPath += \"/\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tzipPath = \"\";\n\t\t\t}\n\t\t\t// normalize the path first\n\t\t\tlocalPath = pth.normalize(localPath);\n\t\t\tlocalPath = localPath.split(\"\\\\\").join(\"/\"); //windows fix\n\t\t\tif (localPath.charAt(localPath.length - 1) !== \"/\")\n\t\t\t\tlocalPath += \"/\";\n\n\t\t\tif (fs.existsSync(localPath)) {\n\n\t\t\t\tvar items = Utils.findFiles(localPath),\n\t\t\t\t\tself = this;\n\n\t\t\t\tif (items.length) {\n\t\t\t\t\titems.forEach(function (path) {\n\t\t\t\t\t\tvar p = path.split(\"\\\\\").join(\"/\").replace(new RegExp(localPath.replace(/(\\(|\\))/g, '\\\\$1'), 'i'), \"\"); //windows fix\n\t\t\t\t\t\tif (filter(p)) {\n\t\t\t\t\t\t\tif (p.charAt(p.length - 1) !== \"/\") {\n\t\t\t\t\t\t\t\tself.addFile(zipPath + p, fs.readFileSync(path), \"\", 0)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tself.addFile(zipPath + p, Buffer.alloc(0), \"\", 0)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Allows you to create a entry (file or directory) in the zip file.\n\t\t * If you want to create a directory the entryName must end in / and a null buffer should be provided.\n\t\t * Comment and attributes are optional\n\t\t *\n\t\t * @param entryName\n\t\t * @param content\n\t\t * @param comment\n\t\t * @param attr\n\t\t */\n\t\taddFile: function (/*String*/entryName, /*Buffer*/content, /*String*/comment, /*Number*/attr) {\n\t\t\tvar entry = new ZipEntry();\n\t\t\tentry.entryName = entryName;\n\t\t\tentry.comment = comment || \"\";\n\n\t\t\tif (!attr) {\n\t\t\t\tif (entry.isDirectory) {\n\t\t\t\t\tattr = (0o40755 << 16) | 0x10; // (permissions drwxr-xr-x) + (MS-DOS directory flag)\n\t\t\t\t} else {\n\t\t\t\t\tattr = 0o644 << 16; // permissions -r-wr--r--\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tentry.attr = attr;\n\n\t\t\tentry.setData(content);\n\t\t\t_zip.setEntry(entry);\n\t\t},\n\n\t\t/**\n\t\t * Returns an array of ZipEntry objects representing the files and folders inside the archive\n\t\t *\n\t\t * @return Array\n\t\t */\n\t\tgetEntries: function () {\n\t\t\tif (_zip) {\n\t\t\t\treturn _zip.entries;\n\t\t\t} else {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Returns a ZipEntry object representing the file or folder specified by ``name``.\n\t\t *\n\t\t * @param name\n\t\t * @return ZipEntry\n\t\t */\n\t\tgetEntry: function (/*String*/name) {\n\t\t\treturn getEntry(name);\n\t\t},\n\n\t\t/**\n\t\t * Extracts the given entry to the given targetPath\n\t\t * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted\n\t\t *\n\t\t * @param entry ZipEntry object or String with the full path of the entry\n\t\t * @param targetPath Target folder where to write the file\n\t\t * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder\n\t\t * will be created in targetPath as well. Default is TRUE\n\t\t * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n\t\t * Default is FALSE\n\t\t *\n\t\t * @return Boolean\n\t\t */\n\t\textractEntryTo: function (/*Object*/entry, /*String*/targetPath, /*Boolean*/maintainEntryPath, /*Boolean*/overwrite) {\n\t\t\toverwrite = overwrite || false;\n\t\t\tmaintainEntryPath = typeof maintainEntryPath === \"undefined\" ? true : maintainEntryPath;\n\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (!item) {\n\t\t\t\tthrow Utils.Errors.NO_ENTRY;\n\t\t\t}\n\n\t\t\tvar entryName = item.entryName;\n\n\t\t\tvar target = sanitize(targetPath, maintainEntryPath ? entryName : pth.basename(entryName));\n\n\t\t\tif (item.isDirectory) {\n\t\t\t\ttarget = pth.resolve(target, \"..\");\n\t\t\t\tvar children = _zip.getEntryChildren(item);\n\t\t\t\tchildren.forEach(function (child) {\n\t\t\t\t\tif (child.isDirectory) return;\n\t\t\t\t\tvar content = child.getData();\n\t\t\t\t\tif (!content) {\n\t\t\t\t\t\tthrow Utils.Errors.CANT_EXTRACT_FILE;\n\t\t\t\t\t}\n\t\t\t\t\tvar childName = sanitize(targetPath, maintainEntryPath ? child.entryName : pth.basename(child.entryName));\n\n\t\t\t\t\tUtils.writeFileTo(childName, content, overwrite);\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar content = item.getData();\n\t\t\tif (!content) throw Utils.Errors.CANT_EXTRACT_FILE;\n\n\t\t\tif (fs.existsSync(target) && !overwrite) {\n\t\t\t\tthrow Utils.Errors.CANT_OVERRIDE;\n\t\t\t}\n\t\t\tUtils.writeFileTo(target, content, overwrite);\n\n\t\t\treturn true;\n\t\t},\n\n\t\t/**\n\t\t * Test the archive\n\t\t *\n\t\t */\n\t\ttest: function () {\n\t\t\tif (!_zip) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfor (var entry in _zip.entries) {\n\t\t\t\ttry {\n\t\t\t\t\tif (entry.isDirectory) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tvar content = _zip.entries[entry].getData();\n\t\t\t\t\tif (!content) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t/**\n\t\t * Extracts the entire archive to the given location\n\t\t *\n\t\t * @param targetPath Target location\n\t\t * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n\t\t * Default is FALSE\n\t\t */\n\t\textractAllTo: function (/*String*/targetPath, /*Boolean*/overwrite) {\n\t\t\toverwrite = overwrite || false;\n\t\t\tif (!_zip) {\n\t\t\t\tthrow Utils.Errors.NO_ZIP;\n\t\t\t}\n\t\t\t_zip.entries.forEach(function (entry) {\n\t\t\t\tvar entryName = sanitize(targetPath, entry.entryName.toString());\n\t\t\t\tif (entry.isDirectory) {\n\t\t\t\t\tUtils.makeDir(entryName);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar content = entry.getData();\n\t\t\t\tif (!content) {\n\t\t\t\t\tthrow Utils.Errors.CANT_EXTRACT_FILE;\n\t\t\t\t}\n\t\t\t\tUtils.writeFileTo(entryName, content, overwrite);\n\t\t\t\ttry {\n\t\t\t\t\tfs.utimesSync(entryName, entry.header.time, entry.header.time)\n\t\t\t\t} catch (err) {\n\t\t\t\t\tthrow Utils.Errors.CANT_EXTRACT_FILE;\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Asynchronous extractAllTo\n\t\t *\n\t\t * @param targetPath Target location\n\t\t * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n\t\t * Default is FALSE\n\t\t * @param callback\n\t\t */\n\t\textractAllToAsync: function (/*String*/targetPath, /*Boolean*/overwrite, /*Function*/callback) {\n\t\t\tif (!callback) {\n\t\t\t\tcallback = function() {}\n\t\t\t}\n\t\t\toverwrite = overwrite || false;\n\t\t\tif (!_zip) {\n\t\t\t\tcallback(new Error(Utils.Errors.NO_ZIP));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar entries = _zip.entries;\n\t\t\tvar i = entries.length;\n\t\t\tentries.forEach(function (entry) {\n\t\t\t\tif (i <= 0) return; // Had an error already\n\n\t\t\t\tvar entryName = pth.normalize(entry.entryName.toString());\n\n\t\t\t\tif (entry.isDirectory) {\n\t\t\t\t\tUtils.makeDir(sanitize(targetPath, entryName));\n\t\t\t\t\tif (--i === 0)\n\t\t\t\t\t\tcallback(undefined);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tentry.getDataAsync(function (content, err) {\n\t\t\t\t\tif (i <= 0) return;\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tcallback(new Error(err));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!content) {\n\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\tcallback(new Error(Utils.Errors.CANT_EXTRACT_FILE));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tUtils.writeFileToAsync(sanitize(targetPath, entryName), content, overwrite, function (succ) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tfs.utimesSync(pth.resolve(targetPath, entryName), entry.header.time, entry.header.time);\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tcallback(new Error('Unable to set utimes'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (i <= 0) return;\n\t\t\t\t\t\tif (!succ) {\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\tcallback(new Error('Unable to write'));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (--i === 0)\n\t\t\t\t\t\t\tcallback(undefined);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip\n\t\t *\n\t\t * @param targetFileName\n\t\t * @param callback\n\t\t */\n\t\twriteZip: function (/*String*/targetFileName, /*Function*/callback) {\n\t\t\tif (arguments.length === 1) {\n\t\t\t\tif (typeof targetFileName === \"function\") {\n\t\t\t\t\tcallback = targetFileName;\n\t\t\t\t\ttargetFileName = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!targetFileName && _filename) {\n\t\t\t\ttargetFileName = _filename;\n\t\t\t}\n\t\t\tif (!targetFileName) return;\n\n\t\t\tvar zipData = _zip.compressToBuffer();\n\t\t\tif (zipData) {\n\t\t\t\tvar ok = Utils.writeFileTo(targetFileName, zipData, true);\n\t\t\t\tif (typeof callback === 'function') callback(!ok ? new Error(\"failed\") : null, \"\");\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Returns the content of the entire zip file as a Buffer object\n\t\t *\n\t\t * @return Buffer\n\t\t */\n\t\ttoBuffer: function (/*Function*/onSuccess, /*Function*/onFail, /*Function*/onItemStart, /*Function*/onItemEnd) {\n\t\t\tthis.valueOf = 2;\n\t\t\tif (typeof onSuccess === \"function\") {\n\t\t\t\t_zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn _zip.compressToBuffer()\n\t\t}\n\t}\n};\n","var Utils = require(\"../util\"),\n Constants = Utils.Constants;\n\n/* The central directory file header */\nmodule.exports = function () {\n var _verMade = 0x0A,\n _version = 0x0A,\n _flags = 0,\n _method = 0,\n _time = 0,\n _crc = 0,\n _compressedSize = 0,\n _size = 0,\n _fnameLen = 0,\n _extraLen = 0,\n\n _comLen = 0,\n _diskStart = 0,\n _inattr = 0,\n _attr = 0,\n _offset = 0;\n\n var _dataHeader = {};\n\n function setTime(val) {\n val = new Date(val);\n _time = (val.getFullYear() - 1980 & 0x7f) << 25 // b09-16 years from 1980\n | (val.getMonth() + 1) << 21 // b05-08 month\n | val.getDate() << 16 // b00-04 hour\n\n // 2 bytes time\n | val.getHours() << 11 // b11-15 hour\n | val.getMinutes() << 5 // b05-10 minute\n | val.getSeconds() >> 1; // b00-04 seconds divided by 2\n }\n\n setTime(+new Date());\n\n return {\n get made () { return _verMade; },\n set made (val) { _verMade = val; },\n\n get version () { return _version; },\n set version (val) { _version = val },\n\n get flags () { return _flags },\n set flags (val) { _flags = val; },\n\n get method () { return _method; },\n set method (val) { _method = val; },\n\n get time () { return new Date(\n ((_time >> 25) & 0x7f) + 1980,\n ((_time >> 21) & 0x0f) - 1,\n (_time >> 16) & 0x1f,\n (_time >> 11) & 0x1f,\n (_time >> 5) & 0x3f,\n (_time & 0x1f) << 1\n );\n },\n set time (val) {\n setTime(val);\n },\n\n get crc () { return _crc; },\n set crc (val) { _crc = val; },\n\n get compressedSize () { return _compressedSize; },\n set compressedSize (val) { _compressedSize = val; },\n\n get size () { return _size; },\n set size (val) { _size = val; },\n\n get fileNameLength () { return _fnameLen; },\n set fileNameLength (val) { _fnameLen = val; },\n\n get extraLength () { return _extraLen },\n set extraLength (val) { _extraLen = val; },\n\n get commentLength () { return _comLen },\n set commentLength (val) { _comLen = val },\n\n get diskNumStart () { return _diskStart },\n set diskNumStart (val) { _diskStart = val },\n\n get inAttr () { return _inattr },\n set inAttr (val) { _inattr = val },\n\n get attr () { return _attr },\n set attr (val) { _attr = val },\n\n get offset () { return _offset },\n set offset (val) { _offset = val },\n\n get encripted () { return (_flags & 1) === 1 },\n\n get entryHeaderSize () {\n return Constants.CENHDR + _fnameLen + _extraLen + _comLen;\n },\n\n get realDataOffset () {\n return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen;\n },\n\n get dataHeader () {\n return _dataHeader;\n },\n\n loadDataHeaderFromBinary : function(/*Buffer*/input) {\n var data = input.slice(_offset, _offset + Constants.LOCHDR);\n // 30 bytes and should start with \"PK\\003\\004\"\n if (data.readUInt32LE(0) !== Constants.LOCSIG) {\n throw Utils.Errors.INVALID_LOC;\n }\n _dataHeader = {\n // version needed to extract\n version : data.readUInt16LE(Constants.LOCVER),\n // general purpose bit flag\n flags : data.readUInt16LE(Constants.LOCFLG),\n // compression method\n method : data.readUInt16LE(Constants.LOCHOW),\n // modification time (2 bytes time, 2 bytes date)\n time : data.readUInt32LE(Constants.LOCTIM),\n // uncompressed file crc-32 value\n crc : data.readUInt32LE(Constants.LOCCRC),\n // compressed size\n compressedSize : data.readUInt32LE(Constants.LOCSIZ),\n // uncompressed size\n size : data.readUInt32LE(Constants.LOCLEN),\n // filename length\n fnameLen : data.readUInt16LE(Constants.LOCNAM),\n // extra field length\n extraLen : data.readUInt16LE(Constants.LOCEXT)\n }\n },\n\n loadFromBinary : function(/*Buffer*/data) {\n // data should be 46 bytes and start with \"PK 01 02\"\n if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {\n throw Utils.Errors.INVALID_CEN;\n }\n // version made by\n _verMade = data.readUInt16LE(Constants.CENVEM);\n // version needed to extract\n _version = data.readUInt16LE(Constants.CENVER);\n // encrypt, decrypt flags\n _flags = data.readUInt16LE(Constants.CENFLG);\n // compression method\n _method = data.readUInt16LE(Constants.CENHOW);\n // modification time (2 bytes time, 2 bytes date)\n _time = data.readUInt32LE(Constants.CENTIM);\n // uncompressed file crc-32 value\n _crc = data.readUInt32LE(Constants.CENCRC);\n // compressed size\n _compressedSize = data.readUInt32LE(Constants.CENSIZ);\n // uncompressed size\n _size = data.readUInt32LE(Constants.CENLEN);\n // filename length\n _fnameLen = data.readUInt16LE(Constants.CENNAM);\n // extra field length\n _extraLen = data.readUInt16LE(Constants.CENEXT);\n // file comment length\n _comLen = data.readUInt16LE(Constants.CENCOM);\n // volume number start\n _diskStart = data.readUInt16LE(Constants.CENDSK);\n // internal file attributes\n _inattr = data.readUInt16LE(Constants.CENATT);\n // external file attributes\n _attr = data.readUInt32LE(Constants.CENATX);\n // LOC header offset\n _offset = data.readUInt32LE(Constants.CENOFF);\n },\n\n dataHeaderToBinary : function() {\n // LOC header size (30 bytes)\n var data = Buffer.alloc(Constants.LOCHDR);\n // \"PK\\003\\004\"\n data.writeUInt32LE(Constants.LOCSIG, 0);\n // version needed to extract\n data.writeUInt16LE(_version, Constants.LOCVER);\n // general purpose bit flag\n data.writeUInt16LE(_flags, Constants.LOCFLG);\n // compression method\n data.writeUInt16LE(_method, Constants.LOCHOW);\n // modification time (2 bytes time, 2 bytes date)\n data.writeUInt32LE(_time, Constants.LOCTIM);\n // uncompressed file crc-32 value\n data.writeUInt32LE(_crc, Constants.LOCCRC);\n // compressed size\n data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);\n // uncompressed size\n data.writeUInt32LE(_size, Constants.LOCLEN);\n // filename length\n data.writeUInt16LE(_fnameLen, Constants.LOCNAM);\n // extra field length\n data.writeUInt16LE(_extraLen, Constants.LOCEXT);\n return data;\n },\n\n entryHeaderToBinary : function() {\n // CEN header size (46 bytes)\n var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen);\n // \"PK\\001\\002\"\n data.writeUInt32LE(Constants.CENSIG, 0);\n // version made by\n data.writeUInt16LE(_verMade, Constants.CENVEM);\n // version needed to extract\n data.writeUInt16LE(_version, Constants.CENVER);\n // encrypt, decrypt flags\n data.writeUInt16LE(_flags, Constants.CENFLG);\n // compression method\n data.writeUInt16LE(_method, Constants.CENHOW);\n // modification time (2 bytes time, 2 bytes date)\n data.writeUInt32LE(_time, Constants.CENTIM);\n // uncompressed file crc-32 value\n data.writeUInt32LE(_crc, Constants.CENCRC);\n // compressed size\n data.writeUInt32LE(_compressedSize, Constants.CENSIZ);\n // uncompressed size\n data.writeUInt32LE(_size, Constants.CENLEN);\n // filename length\n data.writeUInt16LE(_fnameLen, Constants.CENNAM);\n // extra field length\n data.writeUInt16LE(_extraLen, Constants.CENEXT);\n // file comment length\n data.writeUInt16LE(_comLen, Constants.CENCOM);\n // volume number start\n data.writeUInt16LE(_diskStart, Constants.CENDSK);\n // internal file attributes\n data.writeUInt16LE(_inattr, Constants.CENATT);\n // external file attributes\n data.writeUInt32LE(_attr, Constants.CENATX);\n // LOC header offset\n data.writeUInt32LE(_offset, Constants.CENOFF);\n // fill all with\n data.fill(0x00, Constants.CENHDR);\n return data;\n },\n\n toString : function() {\n return '{\\n' +\n '\\t\"made\" : ' + _verMade + \",\\n\" +\n '\\t\"version\" : ' + _version + \",\\n\" +\n '\\t\"flags\" : ' + _flags + \",\\n\" +\n '\\t\"method\" : ' + Utils.methodToString(_method) + \",\\n\" +\n '\\t\"time\" : ' + this.time + \",\\n\" +\n '\\t\"crc\" : 0x' + _crc.toString(16).toUpperCase() + \",\\n\" +\n '\\t\"compressedSize\" : ' + _compressedSize + \" bytes,\\n\" +\n '\\t\"size\" : ' + _size + \" bytes,\\n\" +\n '\\t\"fileNameLength\" : ' + _fnameLen + \",\\n\" +\n '\\t\"extraLength\" : ' + _extraLen + \" bytes,\\n\" +\n '\\t\"commentLength\" : ' + _comLen + \" bytes,\\n\" +\n '\\t\"diskNumStart\" : ' + _diskStart + \",\\n\" +\n '\\t\"inAttr\" : ' + _inattr + \",\\n\" +\n '\\t\"attr\" : ' + _attr + \",\\n\" +\n '\\t\"offset\" : ' + _offset + \",\\n\" +\n '\\t\"entryHeaderSize\" : ' + (Constants.CENHDR + _fnameLen + _extraLen + _comLen) + \" bytes\\n\" +\n '}';\n }\n }\n};\n","exports.EntryHeader = require(\"./entryHeader\");\r\nexports.MainHeader = require(\"./mainHeader\");\r\n","var Utils = require(\"../util\"),\n Constants = Utils.Constants;\n\n/* The entries in the end of central directory */\nmodule.exports = function () {\n var _volumeEntries = 0,\n _totalEntries = 0,\n _size = 0,\n _offset = 0,\n _commentLength = 0;\n\n return {\n get diskEntries () { return _volumeEntries },\n set diskEntries (/*Number*/val) { _volumeEntries = _totalEntries = val; },\n\n get totalEntries () { return _totalEntries },\n set totalEntries (/*Number*/val) { _totalEntries = _volumeEntries = val; },\n\n get size () { return _size },\n set size (/*Number*/val) { _size = val; },\n\n get offset () { return _offset },\n set offset (/*Number*/val) { _offset = val; },\n\n get commentLength () { return _commentLength },\n set commentLength (/*Number*/val) { _commentLength = val; },\n\n get mainHeaderSize () {\n return Constants.ENDHDR + _commentLength;\n },\n\n loadFromBinary : function(/*Buffer*/data) {\n // data should be 22 bytes and start with \"PK 05 06\"\n if (data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG)\n throw Utils.Errors.INVALID_END;\n\n // number of entries on this volume\n _volumeEntries = data.readUInt16LE(Constants.ENDSUB);\n // total number of entries\n _totalEntries = data.readUInt16LE(Constants.ENDTOT);\n // central directory size in bytes\n _size = data.readUInt32LE(Constants.ENDSIZ);\n // offset of first CEN header\n _offset = data.readUInt32LE(Constants.ENDOFF);\n // zip file comment length\n _commentLength = data.readUInt16LE(Constants.ENDCOM);\n },\n\n toBinary : function() {\n var b = Buffer.alloc(Constants.ENDHDR + _commentLength);\n // \"PK 05 06\" signature\n b.writeUInt32LE(Constants.ENDSIG, 0);\n b.writeUInt32LE(0, 4);\n // number of entries on this volume\n b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);\n // total number of entries\n b.writeUInt16LE(_totalEntries, Constants.ENDTOT);\n // central directory size in bytes\n b.writeUInt32LE(_size, Constants.ENDSIZ);\n // offset of first CEN header\n b.writeUInt32LE(_offset, Constants.ENDOFF);\n // zip file comment length\n b.writeUInt16LE(_commentLength, Constants.ENDCOM);\n // fill comment memory with spaces so no garbage is left there\n b.fill(\" \", Constants.ENDHDR);\n\n return b;\n },\n\n toString : function() {\n return '{\\n' +\n '\\t\"diskEntries\" : ' + _volumeEntries + \",\\n\" +\n '\\t\"totalEntries\" : ' + _totalEntries + \",\\n\" +\n '\\t\"size\" : ' + _size + \" bytes,\\n\" +\n '\\t\"offset\" : 0x' + _offset.toString(16).toUpperCase() + \",\\n\" +\n '\\t\"commentLength\" : 0x' + _commentLength + \"\\n\" +\n '}';\n }\n }\n};","module.exports = function (/*Buffer*/inbuf) {\n\n var zlib = require(\"zlib\");\n \n var opts = {chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024};\n \n return {\n deflate: function () {\n return zlib.deflateRawSync(inbuf, opts);\n },\n\n deflateAsync: function (/*Function*/callback) {\n var tmp = zlib.createDeflateRaw(opts), parts = [], total = 0;\n tmp.on('data', function (data) {\n parts.push(data);\n total += data.length;\n });\n tmp.on('end', function () {\n var buf = Buffer.alloc(total), written = 0;\n buf.fill(0);\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i];\n part.copy(buf, written);\n written += part.length;\n }\n callback && callback(buf);\n });\n tmp.end(inbuf);\n }\n }\n};\n","exports.Deflater = require(\"./deflater\");\r\nexports.Inflater = require(\"./inflater\");","module.exports = function (/*Buffer*/inbuf) {\n\n var zlib = require(\"zlib\");\n\n return {\n inflate: function () {\n return zlib.inflateRawSync(inbuf);\n },\n\n inflateAsync: function (/*Function*/callback) {\n var tmp = zlib.createInflateRaw(), parts = [], total = 0;\n tmp.on('data', function (data) {\n parts.push(data);\n total += data.length;\n });\n tmp.on('end', function () {\n var buf = Buffer.alloc(total), written = 0;\n buf.fill(0);\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i];\n part.copy(buf, written);\n written += part.length;\n }\n callback && callback(buf);\n });\n tmp.end(inbuf);\n }\n }\n};\n","module.exports = {\r\n /* The local file header */\r\n LOCHDR : 30, // LOC header size\r\n LOCSIG : 0x04034b50, // \"PK\\003\\004\"\r\n LOCVER : 4,\t// version needed to extract\r\n LOCFLG : 6, // general purpose bit flag\r\n LOCHOW : 8, // compression method\r\n LOCTIM : 10, // modification time (2 bytes time, 2 bytes date)\r\n LOCCRC : 14, // uncompressed file crc-32 value\r\n LOCSIZ : 18, // compressed size\r\n LOCLEN : 22, // uncompressed size\r\n LOCNAM : 26, // filename length\r\n LOCEXT : 28, // extra field length\r\n\r\n /* The Data descriptor */\r\n EXTSIG : 0x08074b50, // \"PK\\007\\008\"\r\n EXTHDR : 16, // EXT header size\r\n EXTCRC : 4, // uncompressed file crc-32 value\r\n EXTSIZ : 8, // compressed size\r\n EXTLEN : 12, // uncompressed size\r\n\r\n /* The central directory file header */\r\n CENHDR : 46, // CEN header size\r\n CENSIG : 0x02014b50, // \"PK\\001\\002\"\r\n CENVEM : 4, // version made by\r\n CENVER : 6, // version needed to extract\r\n CENFLG : 8, // encrypt, decrypt flags\r\n CENHOW : 10, // compression method\r\n CENTIM : 12, // modification time (2 bytes time, 2 bytes date)\r\n CENCRC : 16, // uncompressed file crc-32 value\r\n CENSIZ : 20, // compressed size\r\n CENLEN : 24, // uncompressed size\r\n CENNAM : 28, // filename length\r\n CENEXT : 30, // extra field length\r\n CENCOM : 32, // file comment length\r\n CENDSK : 34, // volume number start\r\n CENATT : 36, // internal file attributes\r\n CENATX : 38, // external file attributes (host system dependent)\r\n CENOFF : 42, // LOC header offset\r\n\r\n /* The entries in the end of central directory */\r\n ENDHDR : 22, // END header size\r\n ENDSIG : 0x06054b50, // \"PK\\005\\006\"\r\n ENDSUB : 8, // number of entries on this disk\r\n ENDTOT : 10, // total number of entries\r\n ENDSIZ : 12, // central directory size in bytes\r\n ENDOFF : 16, // offset of first CEN header\r\n ENDCOM : 20, // zip file comment length\r\n\r\n /* Compression methods */\r\n STORED : 0, // no compression\r\n SHRUNK : 1, // shrunk\r\n REDUCED1 : 2, // reduced with compression factor 1\r\n REDUCED2 : 3, // reduced with compression factor 2\r\n REDUCED3 : 4, // reduced with compression factor 3\r\n REDUCED4 : 5, // reduced with compression factor 4\r\n IMPLODED : 6, // imploded\r\n // 7 reserved\r\n DEFLATED : 8, // deflated\r\n ENHANCED_DEFLATED: 9, // enhanced deflated\r\n PKWARE : 10,// PKWare DCL imploded\r\n // 11 reserved\r\n BZIP2 : 12, // compressed using BZIP2\r\n // 13 reserved\r\n LZMA : 14, // LZMA\r\n // 15-17 reserved\r\n IBM_TERSE : 18, // compressed using IBM TERSE\r\n IBM_LZ77 : 19, //IBM LZ77 z\r\n\r\n /* General purpose bit flag */\r\n FLG_ENC : 0, // encripted file\r\n FLG_COMP1 : 1, // compression option\r\n FLG_COMP2 : 2, // compression option\r\n FLG_DESC : 4, // data descriptor\r\n FLG_ENH : 8, // enhanced deflation\r\n FLG_STR : 16, // strong encryption\r\n FLG_LNG : 1024, // language encoding\r\n FLG_MSK : 4096, // mask header values\r\n\r\n /* Load type */\r\n FILE : 0,\r\n BUFFER : 1,\r\n NONE : 2,\r\n\r\n /* 4.5 Extensible data fields */\r\n EF_ID : 0,\r\n EF_SIZE : 2,\r\n\r\n /* Header IDs */\r\n ID_ZIP64 : 0x0001,\r\n ID_AVINFO : 0x0007,\r\n ID_PFS : 0x0008,\r\n ID_OS2 : 0x0009,\r\n ID_NTFS : 0x000a,\r\n ID_OPENVMS : 0x000c,\r\n ID_UNIX : 0x000d,\r\n ID_FORK : 0x000e,\r\n ID_PATCH : 0x000f,\r\n ID_X509_PKCS7 : 0x0014,\r\n ID_X509_CERTID_F : 0x0015,\r\n ID_X509_CERTID_C : 0x0016,\r\n ID_STRONGENC : 0x0017,\r\n ID_RECORD_MGT : 0x0018,\r\n ID_X509_PKCS7_RL : 0x0019,\r\n ID_IBM1 : 0x0065,\r\n ID_IBM2 : 0x0066,\r\n ID_POSZIP : 0x4690,\r\n\r\n EF_ZIP64_OR_32 : 0xffffffff,\r\n EF_ZIP64_OR_16 : 0xffff,\r\n EF_ZIP64_SUNCOMP : 0,\r\n EF_ZIP64_SCOMP : 8,\r\n EF_ZIP64_RHO : 16,\r\n EF_ZIP64_DSN : 24\r\n};\r\n","module.exports = {\r\n /* Header error messages */\r\n \"INVALID_LOC\" : \"Invalid LOC header (bad signature)\",\r\n \"INVALID_CEN\" : \"Invalid CEN header (bad signature)\",\r\n \"INVALID_END\" : \"Invalid END header (bad signature)\",\r\n\r\n /* ZipEntry error messages*/\r\n \"NO_DATA\" : \"Nothing to decompress\",\r\n \"BAD_CRC\" : \"CRC32 checksum failed\",\r\n \"FILE_IN_THE_WAY\" : \"There is a file in the way: %s\",\r\n \"UNKNOWN_METHOD\" : \"Invalid/unsupported compression method\",\r\n\r\n /* Inflater error messages */\r\n \"AVAIL_DATA\" : \"inflate::Available inflate data did not terminate\",\r\n \"INVALID_DISTANCE\" : \"inflate::Invalid literal/length or distance code in fixed or dynamic block\",\r\n \"TO_MANY_CODES\" : \"inflate::Dynamic block code description: too many length or distance codes\",\r\n \"INVALID_REPEAT_LEN\" : \"inflate::Dynamic block code description: repeat more than specified lengths\",\r\n \"INVALID_REPEAT_FIRST\" : \"inflate::Dynamic block code description: repeat lengths with no first length\",\r\n \"INCOMPLETE_CODES\" : \"inflate::Dynamic block code description: code lengths codes incomplete\",\r\n \"INVALID_DYN_DISTANCE\": \"inflate::Dynamic block code description: invalid distance code lengths\",\r\n \"INVALID_CODES_LEN\": \"inflate::Dynamic block code description: invalid literal/length code lengths\",\r\n \"INVALID_STORE_BLOCK\" : \"inflate::Stored block length did not match one's complement\",\r\n \"INVALID_BLOCK_TYPE\" : \"inflate::Invalid block type (type == 3)\",\r\n\r\n /* ADM-ZIP error messages */\r\n \"CANT_EXTRACT_FILE\" : \"Could not extract the file\",\r\n \"CANT_OVERRIDE\" : \"Target file already exists\",\r\n \"NO_ZIP\" : \"No zip file was loaded\",\r\n \"NO_ENTRY\" : \"Entry doesn't exist\",\r\n \"DIRECTORY_CONTENT_ERROR\" : \"A directory cannot have content\",\r\n \"FILE_NOT_FOUND\" : \"File not found: %s\",\r\n \"NOT_IMPLEMENTED\" : \"Not implemented\",\r\n \"INVALID_FILENAME\" : \"Invalid filename\",\r\n \"INVALID_FORMAT\" : \"Invalid or unsupported zip format. No END header found\"\r\n};","var fs = require(\"./fileSystem\").require(),\r\n pth = require(\"path\");\r\n\t\r\nfs.existsSync = fs.existsSync || pth.existsSync;\r\n\r\nmodule.exports = function(/*String*/path) {\r\n\r\n var _path = path || \"\",\r\n _permissions = 0,\r\n _obj = newAttr(),\r\n _stat = null;\r\n\r\n function newAttr() {\r\n return {\r\n directory : false,\r\n readonly : false,\r\n hidden : false,\r\n executable : false,\r\n mtime : 0,\r\n atime : 0\r\n }\r\n }\r\n\r\n if (_path && fs.existsSync(_path)) {\r\n _stat = fs.statSync(_path);\r\n _obj.directory = _stat.isDirectory();\r\n _obj.mtime = _stat.mtime;\r\n _obj.atime = _stat.atime;\r\n _obj.executable = !!(1 & parseInt ((_stat.mode & parseInt (\"777\", 8)).toString (8)[0]));\r\n _obj.readonly = !!(2 & parseInt ((_stat.mode & parseInt (\"777\", 8)).toString (8)[0]));\r\n _obj.hidden = pth.basename(_path)[0] === \".\";\r\n } else {\r\n console.warn(\"Invalid path: \" + _path)\r\n }\r\n\r\n return {\r\n\r\n get directory () {\r\n return _obj.directory;\r\n },\r\n\r\n get readOnly () {\r\n return _obj.readonly;\r\n },\r\n\r\n get hidden () {\r\n return _obj.hidden;\r\n },\r\n\r\n get mtime () {\r\n return _obj.mtime;\r\n },\r\n\r\n get atime () {\r\n return _obj.atime;\r\n },\r\n\r\n\r\n get executable () {\r\n return _obj.executable;\r\n },\r\n\r\n decodeAttributes : function(val) {\r\n\r\n },\r\n\r\n encodeAttributes : function (val) {\r\n\r\n },\r\n\r\n toString : function() {\r\n return '{\\n' +\r\n '\\t\"path\" : \"' + _path + \",\\n\" +\r\n '\\t\"isDirectory\" : ' + _obj.directory + \",\\n\" +\r\n '\\t\"isReadOnly\" : ' + _obj.readonly + \",\\n\" +\r\n '\\t\"isHidden\" : ' + _obj.hidden + \",\\n\" +\r\n '\\t\"isExecutable\" : ' + _obj.executable + \",\\n\" +\r\n '\\t\"mTime\" : ' + _obj.mtime + \"\\n\" +\r\n '\\t\"aTime\" : ' + _obj.atime + \"\\n\" +\r\n '}';\r\n }\r\n }\r\n\r\n};\r\n","exports.require = function() {\n var fs = require(\"fs\");\n if (process.versions['electron']) {\n\t try {\n\t originalFs = require(\"original-fs\");\n\t if (Object.keys(originalFs).length > 0) {\n\t fs = originalFs;\n }\n\t } catch (e) {}\n }\n return fs\n};\n","module.exports = require(\"./utils\");\r\nmodule.exports.FileSystem = require(\"./fileSystem\");\r\nmodule.exports.Constants = require(\"./constants\");\r\nmodule.exports.Errors = require(\"./errors\");\r\nmodule.exports.FileAttr = require(\"./fattr\");","var fs = require(\"./fileSystem\").require(),\r\n pth = require('path');\r\n\r\nfs.existsSync = fs.existsSync || pth.existsSync;\r\n\r\nmodule.exports = (function() {\r\n\r\n var crcTable = [],\r\n Constants = require('./constants'),\r\n Errors = require('./errors'),\r\n\r\n PATH_SEPARATOR = pth.sep;\r\n\r\n\r\n function mkdirSync(/*String*/path) {\r\n var resolvedPath = path.split(PATH_SEPARATOR)[0];\r\n path.split(PATH_SEPARATOR).forEach(function(name) {\r\n if (!name || name.substr(-1,1) === \":\") return;\r\n resolvedPath += PATH_SEPARATOR + name;\r\n var stat;\r\n try {\r\n stat = fs.statSync(resolvedPath);\r\n } catch (e) {\r\n fs.mkdirSync(resolvedPath);\r\n }\r\n if (stat && stat.isFile())\r\n throw Errors.FILE_IN_THE_WAY.replace(\"%s\", resolvedPath);\r\n });\r\n }\r\n\r\n function findSync(/*String*/dir, /*RegExp*/pattern, /*Boolean*/recoursive) {\r\n if (typeof pattern === 'boolean') {\r\n recoursive = pattern;\r\n pattern = undefined;\r\n }\r\n var files = [];\r\n fs.readdirSync(dir).forEach(function(file) {\r\n var path = pth.join(dir, file);\r\n\r\n if (fs.statSync(path).isDirectory() && recoursive)\r\n files = files.concat(findSync(path, pattern, recoursive));\r\n\r\n if (!pattern || pattern.test(path)) {\r\n files.push(pth.normalize(path) + (fs.statSync(path).isDirectory() ? PATH_SEPARATOR : \"\"));\r\n }\r\n\r\n });\r\n return files;\r\n }\r\n\r\n return {\r\n makeDir : function(/*String*/path) {\r\n mkdirSync(path);\r\n },\r\n\r\n crc32 : function(buf) {\r\n if (typeof buf === 'string') {\r\n buf = Buffer.alloc(buf.length, buf);\r\n }\r\n var b = Buffer.alloc(4);\r\n if (!crcTable.length) {\r\n for (var n = 0; n < 256; n++) {\r\n var c = n;\r\n for (var k = 8; --k >= 0;) //\r\n if ((c & 1) !== 0) { c = 0xedb88320 ^ (c >>> 1); } else { c = c >>> 1; }\r\n if (c < 0) {\r\n b.writeInt32LE(c, 0);\r\n c = b.readUInt32LE(0);\r\n }\r\n crcTable[n] = c;\r\n }\r\n }\r\n var crc = 0, off = 0, len = buf.length, c1 = ~crc;\r\n while(--len >= 0) c1 = crcTable[(c1 ^ buf[off++]) & 0xff] ^ (c1 >>> 8);\r\n crc = ~c1;\r\n b.writeInt32LE(crc & 0xffffffff, 0);\r\n return b.readUInt32LE(0);\r\n },\r\n\r\n methodToString : function(/*Number*/method) {\r\n switch (method) {\r\n case Constants.STORED:\r\n return 'STORED (' + method + ')';\r\n case Constants.DEFLATED:\r\n return 'DEFLATED (' + method + ')';\r\n default:\r\n return 'UNSUPPORTED (' + method + ')';\r\n }\r\n\r\n },\r\n\r\n writeFileTo : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr) {\r\n if (fs.existsSync(path)) {\r\n if (!overwrite)\r\n return false; // cannot overwrite\r\n\r\n var stat = fs.statSync(path);\r\n if (stat.isDirectory()) {\r\n return false;\r\n }\r\n }\r\n var folder = pth.dirname(path);\r\n if (!fs.existsSync(folder)) {\r\n mkdirSync(folder);\r\n }\r\n\r\n var fd;\r\n try {\r\n fd = fs.openSync(path, 'w', 438); // 0666\r\n } catch(e) {\r\n fs.chmodSync(path, 438);\r\n fd = fs.openSync(path, 'w', 438);\r\n }\r\n if (fd) {\r\n try {\r\n fs.writeSync(fd, content, 0, content.length, 0);\r\n }\r\n catch (e){\r\n throw e;\r\n }\r\n finally {\r\n fs.closeSync(fd);\r\n }\r\n }\r\n fs.chmodSync(path, attr || 438);\r\n return true;\r\n },\r\n\r\n writeFileToAsync : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr, /*Function*/callback) {\r\n if(typeof attr === 'function') {\r\n callback = attr;\r\n attr = undefined;\r\n }\r\n\r\n fs.exists(path, function(exists) {\r\n if(exists && !overwrite)\r\n return callback(false);\r\n\r\n fs.stat(path, function(err, stat) {\r\n if(exists &&stat.isDirectory()) {\r\n return callback(false);\r\n }\r\n\r\n var folder = pth.dirname(path);\r\n fs.exists(folder, function(exists) {\r\n if(!exists)\r\n mkdirSync(folder);\r\n\r\n fs.open(path, 'w', 438, function(err, fd) {\r\n if(err) {\r\n fs.chmod(path, 438, function() {\r\n fs.open(path, 'w', 438, function(err, fd) {\r\n fs.write(fd, content, 0, content.length, 0, function() {\r\n fs.close(fd, function() {\r\n fs.chmod(path, attr || 438, function() {\r\n callback(true);\r\n })\r\n });\r\n });\r\n });\r\n })\r\n } else {\r\n if(fd) {\r\n fs.write(fd, content, 0, content.length, 0, function() {\r\n fs.close(fd, function() {\r\n fs.chmod(path, attr || 438, function() {\r\n callback(true);\r\n })\r\n });\r\n });\r\n } else {\r\n fs.chmod(path, attr || 438, function() {\r\n callback(true);\r\n })\r\n }\r\n }\r\n });\r\n })\r\n })\r\n })\r\n },\r\n\r\n findFiles : function(/*String*/path) {\r\n return findSync(path, true);\r\n },\r\n\r\n getAttributes : function(/*String*/path) {\r\n\r\n },\r\n\r\n setAttributes : function(/*String*/path) {\r\n\r\n },\r\n\r\n toBuffer : function(input) {\r\n if (Buffer.isBuffer(input)) {\r\n return input;\r\n } else {\r\n if (input.length === 0) {\r\n return Buffer.alloc(0)\r\n }\r\n return Buffer.from(input, 'utf8');\r\n }\r\n },\r\n\r\n Constants : Constants,\r\n Errors : Errors\r\n }\r\n})();\r\n","var Utils = require(\"./util\"),\n Headers = require(\"./headers\"),\n Constants = Utils.Constants,\n Methods = require(\"./methods\");\n\nmodule.exports = function (/*Buffer*/input) {\n\n var _entryHeader = new Headers.EntryHeader(),\n _entryName = Buffer.alloc(0),\n _comment = Buffer.alloc(0),\n _isDirectory = false,\n uncompressedData = null,\n _extra = Buffer.alloc(0);\n\n function getCompressedDataFromZip() {\n if (!input || !Buffer.isBuffer(input)) {\n return Buffer.alloc(0);\n }\n _entryHeader.loadDataHeaderFromBinary(input);\n return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize)\n }\n\n function crc32OK(data) {\n // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written\n if ((_entryHeader.flags & 0x8) !== 0x8) {\n if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) {\n return false;\n }\n } else {\n // @TODO: load and check data descriptor header\n // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure\n // (optionally preceded by a 4-byte signature) immediately after the compressed data:\n }\n return true;\n }\n\n function decompress(/*Boolean*/async, /*Function*/callback, /*String*/pass) {\n if(typeof callback === 'undefined' && typeof async === 'string') {\n pass=async;\n async=void 0;\n }\n if (_isDirectory) {\n if (async && callback) {\n callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.\n }\n return Buffer.alloc(0);\n }\n\n var compressedData = getCompressedDataFromZip();\n \n if (compressedData.length === 0) {\n if (async && callback) callback(compressedData, Utils.Errors.NO_DATA);//si added error.\n return compressedData;\n }\n\n var data = Buffer.alloc(_entryHeader.size);\n\n switch (_entryHeader.method) {\n case Utils.Constants.STORED:\n compressedData.copy(data);\n if (!crc32OK(data)) {\n if (async && callback) callback(data, Utils.Errors.BAD_CRC);//si added error\n return Utils.Errors.BAD_CRC;\n } else {//si added otherwise did not seem to return data.\n if (async && callback) callback(data);\n return data;\n }\n case Utils.Constants.DEFLATED:\n var inflater = new Methods.Inflater(compressedData);\n if (!async) {\n var result = inflater.inflate(data);\n result.copy(data, 0);\n if (!crc32OK(data)) {\n console.warn(Utils.Errors.BAD_CRC + \" \" + _entryName.toString())\n }\n return data;\n } else {\n inflater.inflateAsync(function(result) {\n result.copy(data, 0);\n if (!crc32OK(data)) {\n if (callback) callback(data, Utils.Errors.BAD_CRC); //si added error\n } else { //si added otherwise did not seem to return data.\n if (callback) callback(data);\n }\n })\n }\n break;\n default:\n if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);\n return Utils.Errors.UNKNOWN_METHOD;\n }\n }\n\n function compress(/*Boolean*/async, /*Function*/callback) {\n if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {\n // no data set or the data wasn't changed to require recompression\n if (async && callback) callback(getCompressedDataFromZip());\n return getCompressedDataFromZip();\n }\n\n if (uncompressedData.length && !_isDirectory) {\n var compressedData;\n // Local file header\n switch (_entryHeader.method) {\n case Utils.Constants.STORED:\n _entryHeader.compressedSize = _entryHeader.size;\n\n compressedData = Buffer.alloc(uncompressedData.length);\n uncompressedData.copy(compressedData);\n\n if (async && callback) callback(compressedData);\n return compressedData;\n default:\n case Utils.Constants.DEFLATED:\n\n var deflater = new Methods.Deflater(uncompressedData);\n if (!async) {\n var deflated = deflater.deflate();\n _entryHeader.compressedSize = deflated.length;\n return deflated;\n } else {\n deflater.deflateAsync(function(data) {\n compressedData = Buffer.alloc(data.length);\n _entryHeader.compressedSize = data.length;\n data.copy(compressedData);\n callback && callback(compressedData);\n })\n }\n deflater = null;\n break;\n }\n } else {\n if (async && callback) {\n callback(Buffer.alloc(0));\n } else {\n return Buffer.alloc(0);\n }\n }\n }\n\n function readUInt64LE(buffer, offset) {\n return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);\n }\n\n function parseExtra(data) {\n var offset = 0;\n var signature, size, part;\n while(offset<data.length) {\n signature = data.readUInt16LE(offset);\n offset += 2;\n size = data.readUInt16LE(offset);\n offset += 2;\n part = data.slice(offset, offset+size);\n offset += size;\n if(Constants.ID_ZIP64 === signature) {\n parseZip64ExtendedInformation(part);\n }\n }\n }\n\n //Override header field values with values from the ZIP64 extra field\n function parseZip64ExtendedInformation(data) {\n var size, compressedSize, offset, diskNumStart;\n\n if(data.length >= Constants.EF_ZIP64_SCOMP) {\n size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);\n if(_entryHeader.size === Constants.EF_ZIP64_OR_32) {\n _entryHeader.size = size;\n }\n }\n if(data.length >= Constants.EF_ZIP64_RHO) {\n compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);\n if(_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {\n _entryHeader.compressedSize = compressedSize;\n }\n }\n if(data.length >= Constants.EF_ZIP64_DSN) {\n offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);\n if(_entryHeader.offset === Constants.EF_ZIP64_OR_32) {\n _entryHeader.offset = offset;\n }\n }\n if(data.length >= Constants.EF_ZIP64_DSN+4) {\n diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);\n if(_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {\n _entryHeader.diskNumStart = diskNumStart;\n }\n }\n }\n\n\n return {\n get entryName () { return _entryName.toString(); },\n get rawEntryName() { return _entryName; },\n set entryName (val) {\n _entryName = Utils.toBuffer(val);\n var lastChar = _entryName[_entryName.length - 1];\n _isDirectory = (lastChar === 47) || (lastChar === 92);\n _entryHeader.fileNameLength = _entryName.length;\n },\n\n get extra () { return _extra; },\n set extra (val) {\n _extra = val;\n _entryHeader.extraLength = val.length;\n parseExtra(val);\n },\n\n get comment () { return _comment.toString(); },\n set comment (val) {\n _comment = Utils.toBuffer(val);\n _entryHeader.commentLength = _comment.length;\n },\n\n get name () { var n = _entryName.toString(); return _isDirectory ? n.substr(n.length - 1).split(\"/\").pop() : n.split(\"/\").pop(); },\n get isDirectory () { return _isDirectory },\n\n getCompressedData : function() {\n return compress(false, null)\n },\n\n getCompressedDataAsync : function(/*Function*/callback) {\n compress(true, callback)\n },\n\n setData : function(value) {\n uncompressedData = Utils.toBuffer(value);\n if (!_isDirectory && uncompressedData.length) {\n _entryHeader.size = uncompressedData.length;\n _entryHeader.method = Utils.Constants.DEFLATED;\n _entryHeader.crc = Utils.crc32(value);\n _entryHeader.changed = true;\n } else { // folders and blank files should be stored\n _entryHeader.method = Utils.Constants.STORED;\n }\n },\n\n getData : function(pass) {\n if (_entryHeader.changed) {\n\t\t\t\treturn uncompressedData;\n\t\t\t} else {\n\t\t\t\treturn decompress(false, null, pass);\n }\n },\n\n getDataAsync : function(/*Function*/callback, pass) {\n\t\t\tif (_entryHeader.changed) {\n\t\t\t\tcallback(uncompressedData)\n\t\t\t} else {\n\t\t\t\tdecompress(true, callback, pass)\n }\n },\n\n set attr(attr) { _entryHeader.attr = attr; },\n get attr() { return _entryHeader.attr; },\n\n set header(/*Buffer*/data) {\n _entryHeader.loadFromBinary(data);\n },\n\n get header() {\n return _entryHeader;\n },\n\n packHeader : function() {\n var header = _entryHeader.entryHeaderToBinary();\n // add\n _entryName.copy(header, Utils.Constants.CENHDR);\n if (_entryHeader.extraLength) {\n _extra.copy(header, Utils.Constants.CENHDR + _entryName.length)\n }\n if (_entryHeader.commentLength) {\n _comment.copy(header, Utils.Constants.CENHDR + _entryName.length + _entryHeader.extraLength, _comment.length);\n }\n return header;\n },\n\n toString : function() {\n return '{\\n' +\n '\\t\"entryName\" : \"' + _entryName.toString() + \"\\\",\\n\" +\n '\\t\"name\" : \"' + (_isDirectory ? _entryName.toString().replace(/\\/$/, '').split(\"/\").pop() : _entryName.toString().split(\"/\").pop()) + \"\\\",\\n\" +\n '\\t\"comment\" : \"' + _comment.toString() + \"\\\",\\n\" +\n '\\t\"isDirectory\" : ' + _isDirectory + \",\\n\" +\n '\\t\"header\" : ' + _entryHeader.toString().replace(/\\t/mg, \"\\t\\t\").replace(/}/mg, \"\\t}\") + \",\\n\" +\n '\\t\"compressedData\" : <' + (input && input.length + \" bytes buffer\" || \"null\") + \">\\n\" +\n '\\t\"data\" : <' + (uncompressedData && uncompressedData.length + \" bytes buffer\" || \"null\") + \">\\n\" +\n '}';\n }\n }\n};\n","var ZipEntry = require(\"./zipEntry\"),\n\tHeaders = require(\"./headers\"),\n\tUtils = require(\"./util\");\n\nmodule.exports = function (/*String|Buffer*/input, /*Number*/inputType) {\n\tvar entryList = [],\n\t\tentryTable = {},\n\t\t_comment = Buffer.alloc(0),\n\t\tfilename = \"\",\n\t\tfs = Utils.FileSystem.require(),\n\t\tinBuffer = null,\n\t\tmainHeader = new Headers.MainHeader();\n\n\tif (inputType === Utils.Constants.FILE) {\n\t\t// is a filename\n\t\tfilename = input;\n\t\tinBuffer = fs.readFileSync(filename);\n\t\treadMainHeader();\n\t} else if (inputType === Utils.Constants.BUFFER) {\n\t\t// is a memory buffer\n\t\tinBuffer = input;\n\t\treadMainHeader();\n\t} else {\n\t\t// none. is a new file\n\t}\n\n\tfunction readEntries() {\n\t\tentryTable = {};\n\t\tentryList = new Array(mainHeader.diskEntries); // total number of entries\n\t\tvar index = mainHeader.offset; // offset of first CEN header\n\t\tfor (var i = 0; i < entryList.length; i++) {\n\n\t\t\tvar tmp = index,\n\t\t\t\tentry = new ZipEntry(inBuffer);\n\t\t\tentry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR);\n\n\t\t\tentry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength);\n\n\t\t\tif (entry.header.extraLength) {\n\t\t\t\tentry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength);\n\t\t\t}\n\n\t\t\tif (entry.header.commentLength)\n\t\t\t\tentry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);\n\n\t\t\tindex += entry.header.entryHeaderSize;\n\n\t\t\tentryList[i] = entry;\n\t\t\tentryTable[entry.entryName] = entry;\n\t\t}\n\t}\n\n\tfunction readMainHeader() {\n\t\tvar i = inBuffer.length - Utils.Constants.ENDHDR, // END header size\n\t\t\tn = Math.max(0, i - 0xFFFF), // 0xFFFF is the max zip file comment length\n\t\t\tendOffset = -1; // Start offset of the END header\n\n\t\tfor (i; i >= n; i--) {\n\t\t\tif (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'\n\t\t\tif (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) { // \"PK\\005\\006\"\n\t\t\t\tendOffset = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!~endOffset)\n\t\t\tthrow Utils.Errors.INVALID_FORMAT;\n\n\t\tmainHeader.loadFromBinary(inBuffer.slice(endOffset, endOffset + Utils.Constants.ENDHDR));\n\t\tif (mainHeader.commentLength) {\n\t\t\t_comment = inBuffer.slice(endOffset + Utils.Constants.ENDHDR);\n\t\t}\n\t\treadEntries();\n\t}\n\n\treturn {\n\t\t/**\n\t\t * Returns an array of ZipEntry objects existent in the current opened archive\n\t\t * @return Array\n\t\t */\n\t\tget entries() {\n\t\t\treturn entryList;\n\t\t},\n\n\t\t/**\n\t\t * Archive comment\n\t\t * @return {String}\n\t\t */\n\t\tget comment() {\n\t\t\treturn _comment.toString();\n\t\t},\n\t\tset comment(val) {\n\t\t\tmainHeader.commentLength = val.length;\n\t\t\t_comment = val;\n\t\t},\n\n\t\t/**\n\t\t * Returns a reference to the entry with the given name or null if entry is inexistent\n\t\t *\n\t\t * @param entryName\n\t\t * @return ZipEntry\n\t\t */\n\t\tgetEntry: function (/*String*/entryName) {\n\t\t\treturn entryTable[entryName] || null;\n\t\t},\n\n\t\t/**\n\t\t * Adds the given entry to the entry list\n\t\t *\n\t\t * @param entry\n\t\t */\n\t\tsetEntry: function (/*ZipEntry*/entry) {\n\t\t\tentryList.push(entry);\n\t\t\tentryTable[entry.entryName] = entry;\n\t\t\tmainHeader.totalEntries = entryList.length;\n\t\t},\n\n\t\t/**\n\t\t * Removes the entry with the given name from the entry list.\n\t\t *\n\t\t * If the entry is a directory, then all nested files and directories will be removed\n\t\t * @param entryName\n\t\t */\n\t\tdeleteEntry: function (/*String*/entryName) {\n\t\t\tvar entry = entryTable[entryName];\n\t\t\tif (entry && entry.isDirectory) {\n\t\t\t\tvar _self = this;\n\t\t\t\tthis.getEntryChildren(entry).forEach(function (child) {\n\t\t\t\t\tif (child.entryName !== entryName) {\n\t\t\t\t\t\t_self.deleteEntry(child.entryName)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\tentryList.splice(entryList.indexOf(entry), 1);\n\t\t\tdelete(entryTable[entryName]);\n\t\t\tmainHeader.totalEntries = entryList.length;\n\t\t},\n\n\t\t/**\n\t\t * Iterates and returns all nested files and directories of the given entry\n\t\t *\n\t\t * @param entry\n\t\t * @return Array\n\t\t */\n\t\tgetEntryChildren: function (/*ZipEntry*/entry) {\n\t\t\tif (entry.isDirectory) {\n\t\t\t\tvar list = [],\n\t\t\t\t\tname = entry.entryName,\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\tentryList.forEach(function (zipEntry) {\n\t\t\t\t\tif (zipEntry.entryName.substr(0, len) === name) {\n\t\t\t\t\t\tlist.push(zipEntry);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn list;\n\t\t\t}\n\t\t\treturn []\n\t\t},\n\n\t\t/**\n\t\t * Returns the zip file\n\t\t *\n\t\t * @return Buffer\n\t\t */\n\t\tcompressToBuffer: function () {\n\t\t\tif (entryList.length > 1) {\n\t\t\t\tentryList.sort(function (a, b) {\n\t\t\t\t\tvar nameA = a.entryName.toLowerCase();\n\t\t\t\t\tvar nameB = b.entryName.toLowerCase();\n\t\t\t\t\tif (nameA < nameB) {\n\t\t\t\t\t\treturn -1\n\t\t\t\t\t}\n\t\t\t\t\tif (nameA > nameB) {\n\t\t\t\t\t\treturn 1\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar totalSize = 0,\n\t\t\t\tdataBlock = [],\n\t\t\t\tentryHeaders = [],\n\t\t\t\tdindex = 0;\n\n\t\t\tmainHeader.size = 0;\n\t\t\tmainHeader.offset = 0;\n\n\t\t\tentryList.forEach(function (entry) {\n\t\t\t\t// compress data and set local and entry header accordingly. Reason why is called first\n\t\t\t\tvar compressedData = entry.getCompressedData();\n\t\t\t\t// data header\n\t\t\t\tentry.header.offset = dindex;\n\t\t\t\tvar dataHeader = entry.header.dataHeaderToBinary();\n\t\t\t\tvar entryNameLen = entry.rawEntryName.length;\n\t\t\t\tvar extra = entry.extra.toString();\n\t\t\t\tvar postHeader = Buffer.alloc(entryNameLen + extra.length);\n\t\t\t\tentry.rawEntryName.copy(postHeader, 0);\n\t\t\t\tpostHeader.fill(extra, entryNameLen);\n\n\t\t\t\tvar dataLength = dataHeader.length + postHeader.length + compressedData.length;\n\n\t\t\t\tdindex += dataLength;\n\n\t\t\t\tdataBlock.push(dataHeader);\n\t\t\t\tdataBlock.push(postHeader);\n\t\t\t\tdataBlock.push(compressedData);\n\n\t\t\t\tvar entryHeader = entry.packHeader();\n\t\t\t\tentryHeaders.push(entryHeader);\n\t\t\t\tmainHeader.size += entryHeader.length;\n\t\t\t\ttotalSize += (dataLength + entryHeader.length);\n\t\t\t});\n\n\t\t\ttotalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n\t\t\t// point to end of data and beginning of central directory first record\n\t\t\tmainHeader.offset = dindex;\n\n\t\t\tdindex = 0;\n\t\t\tvar outBuffer = Buffer.alloc(totalSize);\n\t\t\tdataBlock.forEach(function (content) {\n\t\t\t\tcontent.copy(outBuffer, dindex); // write data blocks\n\t\t\t\tdindex += content.length;\n\t\t\t});\n\t\t\tentryHeaders.forEach(function (content) {\n\t\t\t\tcontent.copy(outBuffer, dindex); // write central directory entries\n\t\t\t\tdindex += content.length;\n\t\t\t});\n\n\t\t\tvar mh = mainHeader.toBinary();\n\t\t\tif (_comment) {\n\t\t\t\t_comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n\t\t\t}\n\n\t\t\tmh.copy(outBuffer, dindex); // write main header\n\n\t\t\treturn outBuffer\n\t\t},\n\n\t\ttoAsyncBuffer: function (/*Function*/onSuccess, /*Function*/onFail, /*Function*/onItemStart, /*Function*/onItemEnd) {\n\t\t\tif (entryList.length > 1) {\n\t\t\t\tentryList.sort(function (a, b) {\n\t\t\t\t\tvar nameA = a.entryName.toLowerCase();\n\t\t\t\t\tvar nameB = b.entryName.toLowerCase();\n\t\t\t\t\tif (nameA > nameB) {\n\t\t\t\t\t\treturn -1\n\t\t\t\t\t}\n\t\t\t\t\tif (nameA < nameB) {\n\t\t\t\t\t\treturn 1\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar totalSize = 0,\n\t\t\t\tdataBlock = [],\n\t\t\t\tentryHeaders = [],\n\t\t\t\tdindex = 0;\n\n\t\t\tmainHeader.size = 0;\n\t\t\tmainHeader.offset = 0;\n\n\t\t\tvar compress = function (entryList) {\n\t\t\t\tvar self = arguments.callee;\n\t\t\t\tif (entryList.length) {\n\t\t\t\t\tvar entry = entryList.pop();\n\t\t\t\t\tvar name = entry.entryName + entry.extra.toString();\n\t\t\t\t\tif (onItemStart) onItemStart(name);\n\t\t\t\t\tentry.getCompressedDataAsync(function (compressedData) {\n\t\t\t\t\t\tif (onItemEnd) onItemEnd(name);\n\n\t\t\t\t\t\tentry.header.offset = dindex;\n\t\t\t\t\t\t// data header\n\t\t\t\t\t\tvar dataHeader = entry.header.dataHeaderToBinary();\n\t\t\t\t\t\tvar postHeader;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpostHeader = Buffer.alloc(name.length, name); // using alloc will work on node 5.x+\n\t\t\t\t\t\t} catch(e){\n\t\t\t\t\t\t\tpostHeader = new Buffer(name); // use deprecated method if alloc fails...\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar dataLength = dataHeader.length + postHeader.length + compressedData.length;\n\n\t\t\t\t\t\tdindex += dataLength;\n\n\t\t\t\t\t\tdataBlock.push(dataHeader);\n\t\t\t\t\t\tdataBlock.push(postHeader);\n\t\t\t\t\t\tdataBlock.push(compressedData);\n\n\t\t\t\t\t\tvar entryHeader = entry.packHeader();\n\t\t\t\t\t\tentryHeaders.push(entryHeader);\n\t\t\t\t\t\tmainHeader.size += entryHeader.length;\n\t\t\t\t\t\ttotalSize += (dataLength + entryHeader.length);\n\n\t\t\t\t\t\tif (entryList.length) {\n\t\t\t\t\t\t\tself(entryList);\n\t\t\t\t\t\t} else {\n\n\n\t\t\t\t\t\t\ttotalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n\t\t\t\t\t\t\t// point to end of data and beginning of central directory first record\n\t\t\t\t\t\t\tmainHeader.offset = dindex;\n\n\t\t\t\t\t\t\tdindex = 0;\n\t\t\t\t\t\t\tvar outBuffer = Buffer.alloc(totalSize);\n\t\t\t\t\t\t\tdataBlock.forEach(function (content) {\n\t\t\t\t\t\t\t\tcontent.copy(outBuffer, dindex); // write data blocks\n\t\t\t\t\t\t\t\tdindex += content.length;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tentryHeaders.forEach(function (content) {\n\t\t\t\t\t\t\t\tcontent.copy(outBuffer, dindex); // write central directory entries\n\t\t\t\t\t\t\t\tdindex += content.length;\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tvar mh = mainHeader.toBinary();\n\t\t\t\t\t\t\tif (_comment) {\n\t\t\t\t\t\t\t\t_comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmh.copy(outBuffer, dindex); // write main header\n\n\t\t\t\t\t\t\tonSuccess(outBuffer);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tcompress(entryList);\n\t\t}\n\t}\n};\n","export type EventType = string | symbol;\n\n// An event handler can take an optional event argument\n// and should not return a value\nexport type Handler<T = any> = (event?: T) => void;\nexport type WildcardHandler = (type: EventType, event?: any) => void;\n\n// An array of all currently registered event handlers for a type\nexport type EventHandlerList = Array<Handler>;\nexport type WildCardEventHandlerList = Array<WildcardHandler>;\n\n// A map of event types and their corresponding event handlers.\nexport type EventHandlerMap = Map<EventType, EventHandlerList | WildCardEventHandlerList>;\n\nexport interface Emitter {\n\tall: EventHandlerMap;\n\n\ton<T = any>(type: EventType, handler: Handler<T>): void;\n\ton(type: '*', handler: WildcardHandler): void;\n\n\toff<T = any>(type: EventType, handler: Handler<T>): void;\n\toff(type: '*', handler: WildcardHandler): void;\n\n\temit<T = any>(type: EventType, event?: T): void;\n\temit(type: '*', event?: any): void;\n}\n\n/**\n * Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nexport default function mitt(all?: EventHandlerMap): Emitter {\n\tall = all || new Map();\n\n\treturn {\n\n\t\t/**\n\t\t * A Map of event names to registered handler functions.\n\t\t */\n\t\tall,\n\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t * @param {string|symbol} type Type of event to listen for, or `\"*\"` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton<T = any>(type: EventType, handler: Handler<T>) {\n\t\t\tconst handlers = all.get(type);\n\t\t\tconst added = handlers && handlers.push(handler);\n\t\t\tif (!added) {\n\t\t\t\tall.set(type, [handler]);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t * @param {string|symbol} type Type of event to unregister `handler` from, or `\"*\"`\n\t\t * @param {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff<T = any>(type: EventType, handler: Handler<T>) {\n\t\t\tconst handlers = all.get(type);\n\t\t\tif (handlers) {\n\t\t\t\thandlers.splice(handlers.indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `\"*\"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * Note: Manually firing \"*\" handlers is not supported.\n\t\t *\n\t\t * @param {string|symbol} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit<T = any>(type: EventType, evt: T) {\n\t\t\t((all.get(type) || []) as EventHandlerList).slice().map((handler) => { handler(evt); });\n\t\t\t((all.get('*') || []) as WildCardEventHandlerList).slice().map((handler) => { handler(type, evt); });\n\t\t}\n\t};\n}\n","import * as monthUtils from '../shared/months';\nimport * as sheet from '../server/sheet';\nimport * as budget from '../server/budget/base';\nimport * as db from '../server/db';\nimport * as prefs from '../server/prefs';\nimport * as budgetActions from '../server/budget/actions';\nimport { runQuery as aqlQuery } from '../server/aql/schema/run-query';\nimport { batchMessages, setSyncingMode } from '../server/sync';\nimport { runHandler, runMutator } from '../server/mutators';\nimport { addTransactions } from '../server/accounts/sync';\nimport q from '../shared/query';\n\nfunction pickRandom(list) {\n return list[((Math.random() * list.length) | 0) % list.length];\n}\n\nfunction number(start, end) {\n return start + (end - start) * Math.random();\n}\n\nfunction integer(start, end) {\n return number(start, end) | 0;\n}\n\nfunction findMin(items, field) {\n let item = items[0];\n for (let i = 0; i < items.length; i++) {\n if (items[i][field] < item[field]) {\n item = items[i];\n }\n }\n return item;\n}\n\nfunction getStartingBalanceCat(categories) {\n return categories.find(c => c.name === 'Starting Balances').id;\n}\n\nfunction extractCommonThings(payees, groups) {\n let incomePayee = payees.find(p => p.name === 'Deposit');\n let expensePayees = payees.filter(\n p => p.name !== 'Deposit' && p.name !== 'Starting Balance'\n );\n let expenseGroup = groups.find(g => g.is_income === 0);\n let incomeGroup = groups.find(g => g.is_income === 1);\n let categories = expenseGroup.categories.filter(\n c =>\n [\n 'Food',\n 'Restaurants',\n 'Entertainment',\n 'Clothing',\n 'General',\n 'Gift',\n 'Medical'\n ].indexOf(c.name) !== -1\n );\n\n return {\n incomePayee,\n expensePayees: expensePayees.filter(p => !p.bill),\n incomeGroup,\n expenseCategories: categories,\n billCategories: groups.find(g => g.name === 'Bills').categories,\n billPayees: expensePayees.filter(p => p.bill)\n };\n}\n\nasync function fillPrimaryChecking(handlers, account, payees, groups) {\n let {\n incomePayee,\n expensePayees,\n incomeGroup,\n expenseCategories,\n billCategories,\n billPayees\n } = extractCommonThings(payees, groups);\n let numTransactions = integer(100, 200);\n\n let transactions = [];\n for (let i = 0; i < numTransactions; i++) {\n let payee;\n if (Math.random() < 0.09) {\n payee = incomePayee;\n } else {\n payee = pickRandom(expensePayees);\n }\n\n let category;\n if (payee.name === 'Deposit') {\n category = incomeGroup.categories.find(c => c.name === 'Income');\n } else {\n category = pickRandom(expenseCategories);\n }\n\n let amount;\n if (payee.name === 'Deposit') {\n amount = integer(50000, 70000);\n } else {\n amount = integer(0, Math.random() < 0.05 ? -8000 : -700);\n }\n\n let transaction = {\n amount,\n payee: payee.id,\n account: account.id,\n date: monthUtils.subDays(monthUtils.currentDay(), (i / 3) | 0),\n category: category.id\n };\n transactions.push(transaction);\n\n if (Math.random() < 0.2) {\n let a = (transaction.amount / 3) | 0;\n let pick = () =>\n payee === incomePayee\n ? incomeGroup.categories.find(c => c.name === 'Income').id\n : pickRandom(expenseCategories).id;\n transaction.subtransactions = [\n { amount: a, category: pick() },\n { amount: a, category: pick() },\n {\n amount: transaction.amount - a * 2,\n category: pick()\n }\n ];\n }\n }\n\n let earliestMonth = monthUtils.monthFromDate(\n transactions[transactions.length - 1].date\n );\n let months = monthUtils.rangeInclusive(\n earliestMonth,\n monthUtils.currentMonth()\n );\n let currentDay = monthUtils.currentDay();\n for (let month of months) {\n let date = monthUtils.addDays(month, '12');\n if (monthUtils.isBefore(date, currentDay)) {\n transactions.push({\n amount: -10000,\n payee: billPayees.find(p => p.name.toLowerCase().includes('power')).id,\n account: account.id,\n date,\n category: billCategories.find(c => c.name === 'Power').id\n });\n }\n\n date = monthUtils.addDays(month, '18');\n if (monthUtils.isBefore(date, currentDay)) {\n transactions.push({\n amount: -9000,\n payee: billPayees.find(p => p.name.toLowerCase().includes('water')).id,\n account: account.id,\n date,\n category: billCategories.find(c => c.name === 'Water').id\n });\n }\n\n date = monthUtils.addDays(month, '2');\n if (monthUtils.isBefore(date, currentDay)) {\n transactions.push({\n amount: -120000,\n payee: billPayees.find(p => p.name.toLowerCase().includes('housy')).id,\n account: account.id,\n date,\n category: billCategories.find(c => c.name === 'Mortgage').id\n });\n }\n\n date = monthUtils.addDays(month, '20');\n if (monthUtils.isBefore(date, currentDay)) {\n transactions.push({\n amount: -6000,\n payee: billPayees.find(p => p.name.toLowerCase().includes('internet'))\n .id,\n account: account.id,\n date,\n category: billCategories.find(c => c.name === 'Internet').id\n });\n }\n\n date = monthUtils.addDays(month, '23');\n if (monthUtils.isBefore(date, currentDay)) {\n transactions.push({\n amount: -7500,\n payee: billPayees.find(p => p.name.toLowerCase().includes('t-mobile'))\n .id,\n account: account.id,\n date,\n category: billCategories.find(c => c.name === 'Cell').id\n });\n }\n }\n\n let earliestDate = null;\n transactions.forEach(t => {\n if (earliestDate == null || t.date < earliestDate) {\n earliestDate = t.date;\n }\n });\n\n transactions.unshift({\n amount: 100000,\n payee: payees.find(p => p.name === 'Starting Balance').id,\n account: account.id,\n date: earliestDate,\n category: getStartingBalanceCat(incomeGroup.categories),\n starting_balance_flag: true\n });\n\n return addTransactions(account.id, transactions);\n}\n\nasync function fillChecking(handlers, account, payees, groups) {\n let {\n incomePayee,\n expensePayees,\n incomeGroup,\n expenseCategories\n } = extractCommonThings(payees, groups);\n let numTransactions = integer(20, 40);\n\n let transactions = [];\n for (let i = 0; i < numTransactions; i++) {\n let payee;\n if (Math.random() < 0.04) {\n payee = incomePayee;\n } else {\n payee = pickRandom(expensePayees);\n }\n\n let category;\n if (payee.name === 'Deposit') {\n category = incomeGroup.categories.find(c => c.name === 'Income');\n } else {\n category = pickRandom(expenseCategories);\n }\n\n let amount =\n payee.name === 'Deposit' ? integer(50000, 70000) : integer(0, -10000);\n\n transactions.push({\n amount,\n payee: payee.id,\n account: account.id,\n date: monthUtils.subDays(monthUtils.currentDay(), (i * 2) | 0),\n category: category.id\n });\n }\n\n transactions.unshift({\n amount: integer(90000, 120000),\n payee: payees.find(p => p.name === 'Starting Balance').id,\n account: account.id,\n date: transactions[transactions.length - 1].date,\n category: getStartingBalanceCat(incomeGroup.categories),\n starting_balance_flag: true\n });\n\n await handlers['transactions-batch-update']({\n added: transactions,\n fastMode: true\n });\n}\n\nasync function fillInvestment(handlers, account, payees, groups) {\n let {\n incomePayee,\n expensePayees,\n incomeGroup,\n expenseCategories\n } = extractCommonThings(payees, groups);\n\n let numTransactions = integer(10, 30);\n\n let transactions = [];\n for (let i = 0; i < numTransactions; i++) {\n let payee = incomePayee;\n let category = incomeGroup.categories.find(c => c.name === 'Income');\n\n let amount = integer(10000, 20000);\n\n transactions.push({\n amount,\n payee: payee.id,\n account: account.id,\n date: monthUtils.subDays(monthUtils.currentDay(), integer(10, 360)),\n category: category.id\n });\n }\n\n transactions.unshift({\n amount: integer(10000, 20000),\n payee: payees.find(p => p.name === 'Starting Balance').id,\n account: account.id,\n date: findMin(transactions, 'date').date,\n category: getStartingBalanceCat(incomeGroup.categories),\n starting_balance_flag: true\n });\n\n await handlers['transactions-batch-update']({\n added: transactions,\n fastMode: true\n });\n}\n\nasync function fillSavings(handlers, account, payees, groups) {\n let {\n incomePayee,\n expensePayees,\n incomeGroup,\n expenseCategories\n } = extractCommonThings(payees, groups);\n\n let numTransactions = integer(15, 40);\n\n let transactions = [];\n for (let i = 0; i < numTransactions; i++) {\n let payee;\n if (Math.random() < 0.3) {\n payee = incomePayee;\n } else {\n payee = pickRandom(expensePayees);\n }\n let category =\n payee === incomePayee\n ? incomeGroup.categories.find(c => c.name === 'Income')\n : pickRandom(expenseCategories);\n let amount =\n payee === incomePayee ? integer(10000, 80000) : integer(-10000, -2000);\n\n transactions.push({\n amount,\n payee: payee.id,\n account: account.id,\n date: monthUtils.subDays(monthUtils.currentDay(), (i * 5) | 0),\n category: category.id\n });\n }\n\n transactions.unshift({\n amount: 30000,\n payee: payees.find(p => p.name === 'Starting Balance').id,\n account: account.id,\n date: transactions[transactions.length - 1].date,\n category: getStartingBalanceCat(incomeGroup.categories),\n starting_balance_flag: true\n });\n\n await handlers['transactions-batch-update']({\n added: transactions,\n fastMode: true\n });\n}\n\nasync function fillMortgage(handlers, account, payees, groups) {\n let {\n incomePayee,\n expensePayees,\n incomeGroup,\n expenseCategories\n } = extractCommonThings(payees, groups);\n\n let numTransactions = integer(7, 10);\n let amount = integer(100000, 200000);\n let category = incomeGroup.categories.find(c => c.name === 'Income');\n\n let transactions = [\n {\n amount: integer(-3000, -3500) * 100 * 100,\n payee: payees.find(p => p.name === 'Starting Balance').id,\n account: account.id,\n date:\n monthUtils.subMonths(monthUtils.currentDay(), numTransactions) + '-02',\n category: getStartingBalanceCat(incomeGroup.categories),\n starting_balance_flag: true\n }\n ];\n for (let i = 0; i < numTransactions; i++) {\n let payee = incomePayee;\n\n transactions.push({\n amount,\n payee: payee.id,\n account: account.id,\n date: monthUtils.subMonths(monthUtils.currentDay(), i) + '-02',\n category: category.id,\n starting_balance_flag: true\n });\n }\n\n await handlers['transactions-batch-update']({\n added: transactions,\n fastMode: true\n });\n}\n\nasync function fillOther(handlers, account, payees, groups) {\n let {\n incomePayee,\n expensePayees,\n incomeGroup,\n expenseCategories\n } = extractCommonThings(payees, groups);\n\n let numTransactions = integer(3, 6);\n let category = incomeGroup.categories.find(c => c.name === 'Income');\n\n let transactions = [\n {\n amount: integer(3250, 3700) * 100 * 100,\n payee: payees.find(p => p.name === 'Starting Balance').id,\n account: account.id,\n date:\n monthUtils.subMonths(monthUtils.currentDay(), numTransactions) + '-02',\n category: getStartingBalanceCat(incomeGroup.categories),\n starting_balance_flag: true\n }\n ];\n for (let i = 0; i < numTransactions; i++) {\n let payee = incomePayee;\n let amount = integer(4, 9) * 100 * 100;\n\n transactions.push({\n amount,\n payee: payee.id,\n account: account.id,\n date: monthUtils.subMonths(monthUtils.currentDay(), i) + '-02',\n category: category.id\n });\n }\n\n await handlers['transactions-batch-update']({\n added: transactions,\n fastMode: true\n });\n}\n\nasync function createBudget(accounts, payees, groups) {\n let primaryAccount = accounts.find(a => (a.name = 'Bank of America'));\n let earliestDate = (await db.first(\n `SELECT * FROM v_transactions t LEFT JOIN accounts a ON t.account = a.id\n WHERE a.offbudget = 0 AND t.is_child = 0 ORDER BY date ASC LIMIT 1`\n )).date;\n let earliestPrimaryDate = (await db.first(\n `SELECT * FROM v_transactions t LEFT JOIN accounts a ON t.account = a.id\n WHERE a.id = ? AND a.offbudget = 0 AND t.is_child = 0 ORDER BY date ASC LIMIT 1`,\n [primaryAccount.id]\n )).date;\n\n let start = monthUtils.monthFromDate(db.fromDateRepr(earliestDate));\n let end = monthUtils.currentMonth();\n let months = monthUtils.rangeInclusive(start, end);\n\n function category(name) {\n for (let group of groups) {\n let cat = group.categories.find(c => c.name === name);\n if (cat) {\n return cat;\n }\n }\n }\n\n function setBudget(month, category, amount) {\n return budgetActions.setBudget({ month, category: category.id, amount });\n }\n\n function setBudgetIfSpent(month, cat) {\n let spent = sheet.getCellValue(\n monthUtils.sheetForMonth(month),\n `sum-amount-${cat.id}`\n );\n\n if (spent < 0) {\n setBudget(month, cat, -spent);\n }\n }\n\n await runMutator(() =>\n batchMessages(async () => {\n for (let month of months) {\n if (\n month >=\n monthUtils.monthFromDate(db.fromDateRepr(earliestPrimaryDate))\n ) {\n setBudget(month, category('Food'), 40000);\n setBudget(month, category('Restaurants'), 30000);\n setBudget(month, category('Entertainment'), 10000);\n setBudget(month, category('Clothing'), 3000);\n setBudget(month, category('General'), 50000);\n setBudget(month, category('Gift'), 7500);\n setBudget(month, category('Medical'), 10000);\n\n setBudget(month, category('Cell'), 7500);\n setBudget(month, category('Internet'), 6000);\n setBudget(month, category('Mortgage'), 120000);\n setBudget(month, category('Water'), 9000);\n setBudget(month, category('Power'), 10000);\n } else {\n setBudgetIfSpent(month, category('Food'));\n setBudgetIfSpent(month, category('Restaurants'));\n setBudgetIfSpent(month, category('Entertainment'));\n setBudgetIfSpent(month, category('Clothing'));\n setBudgetIfSpent(month, category('General'));\n setBudgetIfSpent(month, category('Gift'));\n setBudgetIfSpent(month, category('Medical'));\n\n setBudgetIfSpent(month, category('Cell'));\n setBudgetIfSpent(month, category('Internet'));\n setBudgetIfSpent(month, category('Mortgage'));\n setBudgetIfSpent(month, category('Water'));\n setBudgetIfSpent(month, category('Power'));\n }\n }\n })\n );\n\n await sheet.waitOnSpreadsheet();\n\n await runMutator(() =>\n batchMessages(async () => {\n let prevSaved = 0;\n for (let month of months) {\n if (\n month >=\n monthUtils.monthFromDate(db.fromDateRepr(earliestPrimaryDate)) &&\n month <= monthUtils.currentMonth()\n ) {\n let sheetName = monthUtils.sheetForMonth(month);\n let toBudget = sheet.getCellValue(sheetName, 'to-budget');\n let available = toBudget - prevSaved;\n\n if (available - 403000 > 0) {\n setBudget(month, category('Savings'), available - 403000);\n budgetActions.setBuffer(month, 403000);\n\n prevSaved += available - 403000;\n } else if (available > 0) {\n budgetActions.setBuffer(month, available);\n }\n }\n }\n })\n );\n\n await sheet.waitOnSpreadsheet();\n\n let sheetName = monthUtils.sheetForMonth(monthUtils.currentMonth());\n let toBudget = sheet.getCellValue(sheetName, 'to-budget');\n if (toBudget < 0) {\n await addTransactions(primaryAccount.id, [\n {\n amount: -toBudget,\n category: category('Income').id,\n date: monthUtils.currentMonth() + '-01'\n }\n ]);\n }\n\n // let sheetName = monthUtils.sheetForMonth(monthUtils.currentMonth());\n // let toBudget = sheet.getCellValue(sheetName, 'to-budget');\n // setBudget(monthUtils.currentMonth(), category('Savings'), toBudget);\n\n await sheet.waitOnSpreadsheet();\n}\n\nexport async function createTestBudget(handlers) {\n setSyncingMode('import');\n\n await db.execQuery('PRAGMA journal_mode = OFF');\n\n // Clear out the default categories. This is fine to do without\n // going through the sync system because we are in import mode and\n // these aren't tracked through messages anyway.\n await db.runQuery('DELETE FROM categories;');\n await db.runQuery('DELETE FROM category_groups');\n\n let accounts = [\n { name: 'Bank of America', type: 'checking' },\n { name: 'Ally Savings', type: 'savings' },\n { name: 'Capital One Checking', type: 'checking' },\n { name: 'HSBC', type: 'checking' },\n { name: 'Vanguard 401k', type: 'investment', offBudget: 1 },\n { name: 'Mortgage', type: 'mortgage', offBudget: 1 },\n { name: 'House Asset', type: 'other', offBudget: 1 },\n { name: 'Roth IRA', type: 'investment', offBudget: 1 }\n ];\n await runMutator(() =>\n batchMessages(async () => {\n for (let account of accounts) {\n account.id = await handlers['account-create'](account);\n }\n })\n );\n\n let payees = [\n { name: 'Starting Balance' },\n { name: 'Kroger' },\n { name: 'Publix' },\n { name: 'Home Depot' },\n { name: 'Movies' },\n { name: 'Online store' },\n { name: 'Deposit' },\n { name: 'Dominion Power', bill: true },\n { name: 'Extra Watery', bill: true },\n { name: 'Housy House', bill: true },\n { name: 'Fast Internet', bill: true },\n { name: 'T-mobile', bill: true }\n ];\n\n await runMutator(() =>\n batchMessages(async () => {\n for (let payee of payees) {\n payee.id = await handlers['payee-create']({ name: payee.name });\n }\n })\n );\n\n let categoryGroups = [\n {\n name: 'Usual Expenses',\n categories: [\n { name: 'Savings' },\n { name: 'Medical' },\n { name: 'Gift' },\n { name: 'General' },\n { name: 'Clothing' },\n { name: 'Entertainment' },\n { name: 'Restaurants' },\n { name: 'Food' }\n ]\n },\n {\n name: 'Bills',\n categories: [\n { name: 'Power' },\n { name: 'Water' },\n { name: 'Mortgage' },\n { name: 'Internet' },\n { name: 'Cell' }\n ]\n },\n {\n name: 'Income',\n is_income: true,\n categories: [\n { name: 'Income', is_income: true },\n { name: 'Misc', is_income: true },\n { name: 'Starting Balances', is_income: true }\n ]\n }\n ];\n\n await runMutator(async () => {\n for (let group of categoryGroups) {\n group.id = await handlers['category-group-create']({\n name: group.name,\n isIncome: group.is_income ? 1 : 0\n });\n\n for (let category of group.categories) {\n category.id = await handlers['category-create']({\n ...category,\n isIncome: category.is_income ? 1 : 0,\n groupId: group.id\n });\n }\n }\n });\n\n let allGroups = (await runHandler(handlers['get-categories'])).grouped;\n\n setSyncingMode('import');\n\n await runMutator(() =>\n batchMessages(async () => {\n for (let account of accounts) {\n switch (account.type) {\n case 'checking':\n if (account.name === 'Bank of America') {\n await fillPrimaryChecking(handlers, account, payees, allGroups);\n } else {\n await fillChecking(handlers, account, payees, allGroups);\n }\n break;\n case 'investment':\n await fillInvestment(handlers, account, payees, allGroups);\n break;\n case 'savings':\n await fillSavings(handlers, account, payees, allGroups);\n break;\n case 'mortgage':\n await fillMortgage(handlers, account, payees, allGroups);\n break;\n case 'other':\n if (account.name === 'House Asset') {\n await fillOther(handlers, account, payees, allGroups);\n } else {\n await fillChecking(handlers, account, payees, allGroups);\n }\n break;\n default:\n }\n }\n })\n );\n\n setSyncingMode('import');\n\n // This checks to see if the primary account is in the negative.\n // This might happen depending on the transactions added, but we\n // don't want to show that as it'd be weird. We modify the latest\n // deposit transaction to force it to be positive\n let primaryAccount = accounts.find(a => (a.name = 'Bank of America'));\n let { data: primaryBalance } = await aqlQuery(\n q('transactions')\n .filter({ account: primaryAccount.id })\n .calculate({ $sum: '$amount' })\n .serialize()\n );\n if (primaryBalance < 0) {\n let { data: results } = await aqlQuery(\n q('transactions')\n .filter({ account: primaryAccount.id, amount: { $gt: 0 } })\n .limit(1)\n .select(['id', 'amount'])\n .serialize()\n );\n let lastDeposit = results[0];\n\n await runHandler(handlers['transaction-update'], {\n ...lastDeposit,\n amount: lastDeposit.amount + -primaryBalance + integer(10000, 20000)\n });\n }\n\n // Bust the cache and reload the spreadsheet\n setSyncingMode('disabled');\n await prefs.savePrefs({ isCached: false });\n await sheet.reloadSpreadsheet(db);\n await budget.createAllBudgets();\n\n await sheet.waitOnSpreadsheet();\n\n // Create a budget\n await createBudget(accounts, payees, allGroups);\n}\n","export function captureException(exc) {\n console.log('[Exception]', exc);\n if (global.SentryClient) {\n global.SentryClient.captureException(exc);\n }\n}\n\nexport function captureBreadcrumb(breadcrumb) {\n if (global.SentryClient) {\n global.SentryClient.addBreadcrumb(breadcrumb);\n }\n}\n","const lootFs = require('../fs');\nconst fs = require('fs');\nconst { join } = require('path');\n\nlet getStorePath = () => join(lootFs.getDataDir(), 'global-store.json');\nlet store;\nlet persisted = true;\n\nfunction init({ persist = true } = {}) {\n if (persist) {\n try {\n store = JSON.parse(fs.readFileSync(getStorePath(), 'utf8'));\n } catch (e) {\n store = {};\n }\n } else {\n store = {};\n }\n\n persisted = persist;\n}\n\nfunction _saveStore() {\n if (persisted) {\n return new Promise(function(resolve, reject) {\n fs.writeFile(getStorePath(), JSON.stringify(store), 'utf8', function(\n err,\n _\n ) {\n return err ? reject(err) : resolve();\n });\n });\n }\n}\n\nfunction getItem(key) {\n return new Promise(function(resolve) {\n return resolve(store[key]);\n });\n}\n\nfunction setItem(key, value) {\n store[key] = value;\n return _saveStore();\n}\n\nfunction removeItem(key) {\n delete store[key];\n return _saveStore();\n}\n\nfunction multiGet(keys) {\n return new Promise(function(resolve) {\n return resolve(\n keys.map(function(key) {\n return [key, store[key]];\n })\n );\n });\n}\n\nfunction multiSet(keyValues) {\n keyValues.forEach(function([key, value]) {\n store[key] = value;\n });\n return _saveStore();\n}\n\nfunction multiRemove(keys) {\n keys.forEach(function(key) {\n delete store[key];\n });\n return _saveStore();\n}\n\nmodule.exports = {\n init,\n getItem,\n setItem,\n removeItem,\n multiGet,\n multiSet,\n multiRemove\n};\n","function init() {}\n\nfunction send(type, args) {\n // Nothing\n}\n\nmodule.exports = { init, send };\n","let fs = require('fs');\nlet fetch = require('node-fetch');\n\nasync function fetchBinary(url, filepath) {\n const res = await fetch(url);\n return new Promise((resolve, reject) => {\n const fileStream = fs.createWriteStream(filepath);\n res.body.pipe(fileStream);\n res.body.on('error', err => {\n reject(err);\n });\n fileStream.on('finish', function() {\n resolve();\n });\n });\n}\n\nmodule.exports = { fetch, fetchBinary };\n","const fs = require('fs');\nconst path = require('path');\n\nlet documentDir;\n\nlet rootPath = path.join(__dirname, '..', '..', '..', '..');\n\nif (__filename.match('bundle')) {\n // The file name is not our filename and indicates that we're in the\n // bundled form. Because of this, the root path is different.\n rootPath = path.join(__dirname, '..');\n}\n\nmodule.exports = {\n init: () => {\n // Nothing to do\n },\n getDataDir: () => {\n if (!process.env.ACTUAL_DATA_DIR) {\n throw new Error('ACTUAL_DATA_DIR env variable is required');\n }\n return process.env.ACTUAL_DATA_DIR;\n },\n _setDocumentDir: dir => (documentDir = dir),\n getDocumentDir: () => {\n if (!documentDir) {\n throw new Error('Document directory is not set');\n }\n return documentDir;\n },\n getBudgetDir: id => {\n if (!id) {\n throw new Error('getDocumentDir: id is falsy: ' + id);\n }\n\n // TODO: This should be better\n //\n // A cheesy safe guard. The id is generated from the budget name,\n // so it provides an entry point for the user to accidentally (or\n // intentionally) access other parts of the system. Always\n // restrict it to only access files within the budget directory by\n // never allowing slashes.\n if (id.match(/[^A-Za-z0-9\\-_]/)) {\n throw new Error(\n `Invalid budget id \"${id}\". Check the id of your budget in the \"Advanced\" section of the settings page.`\n );\n }\n\n return path.join(module.exports.getDocumentDir(), id);\n },\n bundledDatabasePath: path.join(rootPath, 'default-db.sqlite'),\n migrationsPath: path.join(rootPath, 'migrations'),\n demoBudgetPath: path.join(rootPath, 'demo-budget'),\n join: path.join,\n basename: filepath => path.basename(filepath),\n listDir: filepath =>\n new Promise((resolve, reject) => {\n fs.readdir(filepath, (err, files) => {\n if (err) {\n reject(err);\n } else {\n resolve(files);\n }\n });\n }),\n exists: filepath =>\n new Promise(resolve => {\n fs.access(filepath, fs.constants.F_OK, err => {\n return resolve(!err);\n });\n }),\n mkdir: filepath =>\n new Promise((resolve, reject) => {\n fs.mkdir(filepath, err => {\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n });\n }),\n size: filepath =>\n new Promise((resolve, reject) => {\n fs.stat(filepath, (err, stats) => {\n if (err) {\n reject(err);\n } else {\n resolve(stats.size);\n }\n });\n }),\n copyFile: (frompath, topath) => {\n return new Promise((resolve, reject) => {\n const readStream = fs.createReadStream(frompath);\n const writeStream = fs.createWriteStream(topath);\n\n readStream.on('error', reject);\n writeStream.on('error', reject);\n\n writeStream.on('open', () => readStream.pipe(writeStream));\n writeStream.once('close', resolve);\n });\n },\n readFile: (filepath, encoding = 'utf8') => {\n if (encoding === 'binary') {\n // `binary` is not actually a valid encoding, you pass `null` into node if\n // you want a buffer\n encoding = null;\n }\n return new Promise((resolve, reject) => {\n fs.readFile(filepath, encoding, (err, data) => {\n if (err) {\n reject(err);\n } else {\n resolve(data);\n }\n });\n });\n },\n writeFile: (filepath, contents) => {\n return new Promise(function(resolve, reject) {\n fs.writeFile(filepath, contents, 'utf8', function(err, _) {\n return err ? reject(err) : resolve();\n });\n });\n },\n removeFile: filepath => {\n return new Promise(function(resolve, reject) {\n fs.unlink(filepath, err => {\n return err ? reject(err) : resolve();\n });\n });\n },\n removeDir: dirpath => {\n return new Promise(function(resolve, reject) {\n fs.rmdir(dirpath, err => {\n return err ? reject(err) : resolve();\n });\n });\n },\n removeDirRecursively: async dirpath => {\n const f = module.exports;\n if (await f.exists(dirpath)) {\n for (let file of await f.listDir(dirpath)) {\n const fullpath = f.join(dirpath, file);\n if (fs.statSync(fullpath).isDirectory()) {\n await f.removeDirRecursively(fullpath);\n } else {\n await f.removeFile(fullpath);\n }\n }\n\n await f.removeDir(dirpath);\n }\n },\n getModifiedTime: filepath => {\n return new Promise(function(resolve, reject) {\n fs.stat(filepath, (err, stats) => {\n if (err) {\n reject(err);\n } else {\n resolve(new Date(stats.mtime));\n }\n });\n });\n }\n};\n","export default {\n info: (...args) => {\n console.log(...args);\n },\n warn: (...args) => {\n console.warn(...args);\n }\n};\n","const Database = require('better-sqlite3');\n\nfunction verifyParamTypes(sql, arr) {\n arr.forEach(val => {\n if (typeof val !== 'string' && typeof val !== 'number' && val !== null) {\n console.log(sql, arr);\n throw new Error('Invalid field type ' + val + ' for sql ' + sql);\n }\n });\n}\n\nexport async function init() {}\n\nexport function prepare(db, sql) {\n return db.prepare(sql);\n}\n\nexport function runQuery(db, sql, params = [], fetchAll) {\n if (params) {\n verifyParamTypes(sql, params);\n }\n\n let stmt;\n try {\n stmt = typeof sql === 'string' ? db.prepare(sql) : sql;\n } catch (e) {\n console.log('error', sql);\n throw e;\n }\n\n if (fetchAll) {\n try {\n let result = stmt.all(...params);\n return result;\n } catch (e) {\n console.log('error', sql);\n throw e;\n }\n } else {\n try {\n let info = stmt.run(...params);\n return { changes: info.changes, insertId: info.lastInsertRowid };\n } catch (e) {\n // console.log('error', sql);\n throw e;\n }\n }\n}\n\nexport function execQuery(db, sql) {\n db.exec(sql);\n}\n\nexport function transaction(db, fn) {\n db.transaction(fn)();\n}\n\n// **Important**: this is an unsafe function since sqlite executes\n// executes statements sequentially. It would be easy for other code\n// to run statements in between our transaction and get caught up in\n// it. This is rarely used, and only needed for specific cases (like\n// batch importing a bunch of data). Don't use this.\nlet transactionDepth = 0;\nexport async function asyncTransaction(db, fn) {\n // Support nested transactions by \"coalescing\" them into the parent\n // one if one is already started\n if (transactionDepth === 0) {\n db.exec('BEGIN TRANSACTION');\n }\n transactionDepth++;\n\n try {\n await fn();\n } finally {\n transactionDepth--;\n // We always commit because rollback is more dangerous - any\n // queries that ran *in-between* this async function would be\n // lost. Right now we are only using transactions for speed\n // purposes unfortunately\n if (transactionDepth === 0) {\n db.exec('COMMIT');\n }\n }\n}\n\nexport function openDatabase(pathOrBuffer) {\n return new Database(pathOrBuffer);\n}\n\nexport function closeDatabase(db) {\n return db.close();\n}\n\nexport function exportDatabase(db) {\n return db.serialize();\n}\n","const uuid = require('uuid');\n\nmodule.exports = {\n v4: function() {\n return Promise.resolve(uuid.v4());\n },\n\n v4Sync: function() {\n return uuid.v4();\n }\n};\n","import fs from 'fs';\nimport csvStringify from 'csv-stringify/lib/sync';\nimport { runQuery as aqlQuery } from '../aql/schema/run-query';\nimport { integerToAmount } from '../../shared/util';\n\nexport async function exportToCSV(\n transactions,\n accounts,\n categoryGroups,\n payees\n) {\n const accountNamesById = accounts.reduce((reduced, { id, name }) => {\n reduced[id] = name;\n return reduced;\n }, {});\n\n const categoryNamesById = categoryGroups.reduce(\n (reduced, { name, categories: subCategories }) => {\n subCategories.forEach(\n subCategory =>\n (reduced[subCategory.id] = `${name}: ${subCategory.name}`)\n );\n return reduced;\n },\n {}\n );\n\n const payeeNamesById = payees.reduce((reduced, { id, name }) => {\n reduced[id] = name;\n return reduced;\n }, {});\n\n const transactionsForExport = transactions.map(\n ({ account, date, payee, notes, category, amount }) => ({\n Account: accountNamesById[account],\n Date: date,\n Payee: payeeNamesById[payee],\n Notes: notes,\n Category: categoryNamesById[category],\n Amount: amount == null ? 0 : integerToAmount(amount)\n })\n );\n\n return csvStringify(transactionsForExport, { header: true });\n}\n\nexport async function exportQueryToCSV(query) {\n let { data: transactions } = await aqlQuery(\n query\n .select([\n { Id: 'id' },\n { Account: 'account.name' },\n { Date: 'date' },\n { Payee: 'payee.name' },\n { ParentId: 'parent_id' },\n { IsParent: 'is_parent' },\n { Notes: 'notes' },\n { Category: 'category.name' },\n { Amount: 'amount' }\n ])\n .options({ splits: 'all' })\n );\n\n let parentsPayees = new Map();\n for (let trans of transactions) {\n if (trans.IsParent) {\n parentsPayees.set(trans.Id, trans.Payee);\n }\n }\n\n // filter out any parent transactions\n let noParents = transactions.filter(t => !t.IsParent);\n\n // map final properties for export and grab the payee for splits from their parent transaction\n let transactionsForExport = noParents.map(trans => {\n return {\n Account: trans.Account,\n Date: trans.Date,\n Payee: trans.ParentId ? parentsPayees.get(trans.ParentId) : trans.Payee,\n Notes: trans.Notes,\n Category: trans.Category,\n Amount: trans.Amount == null ? 0 : integerToAmount(trans.Amount)\n };\n });\n\n return csvStringify(transactionsForExport, { header: true });\n}\n","import asyncStorage from '../../platform/server/asyncStorage';\nimport * as db from '../db';\nimport { getServer } from '../server-config';\nimport * as bankSync from './sync';\nimport { fromPlaidAccountType } from '../../shared/accounts';\nimport { amountToInteger } from '../../shared/util';\nimport { post } from '../post';\nimport { runMutator } from '../mutators';\nconst uuid = require('../../platform/uuid');\n\nexport async function handoffPublicToken(institution, publicToken) {\n let [[, userId], [, key]] = await asyncStorage.multiGet([\n 'user-id',\n 'user-key'\n ]);\n\n if (institution == null || !institution.institution_id || !institution.name) {\n throw new Error('Invalid institution object');\n }\n\n let id = uuid.v4Sync();\n\n // Make sure to generate an access token first before inserting it\n // into our local database in case it fails\n await post(getServer().PLAID_SERVER + '/handoff_public_token', {\n userId,\n key,\n item_id: id,\n public_token: publicToken\n });\n\n await runMutator(() =>\n db.insertWithUUID('banks', {\n id,\n bank_id: institution.institution_id,\n name: institution.name\n })\n );\n\n return id;\n}\n\nexport async function addAccounts(bankId, accountIds, offbudgetIds = []) {\n let [[, userId], [, userKey]] = await asyncStorage.multiGet([\n 'user-id',\n 'user-key'\n ]);\n\n // Get all the available accounts\n let accounts = await bankSync.getAccounts(userId, userKey, bankId);\n\n // Only add the selected accounts\n accounts = accounts.filter(acct => accountIds.includes(acct.account_id));\n\n return Promise.all(\n accounts.map(async acct => {\n let id = await runMutator(async () => {\n let id = await db.insertAccount({\n account_id: acct.account_id,\n name: acct.name,\n official_name: acct.official_name,\n type: fromPlaidAccountType(acct.type),\n balance_current: amountToInteger(acct.balances.current),\n mask: acct.mask,\n bank: bankId,\n offbudget: offbudgetIds.includes(acct.account_id) ? 1 : 0\n });\n\n // Create a transfer payee\n await db.insertPayee({\n name: '',\n transfer_acct: id\n });\n\n return id;\n });\n\n // Do an initial sync\n await bankSync.syncAccount(userId, userKey, id, acct.account_id, bankId);\n\n return id;\n })\n );\n}\n","import fs from '../../platform/server/fs';\nimport qif2json from './qif2json';\nimport csv2json from 'csv-parse/lib/sync';\nimport { dayFromDate } from '../../shared/months';\nimport { looselyParseAmount } from '../../shared/util';\n\nexport function parseFile(filepath, options) {\n let errors = [];\n let m = filepath.match(/\\.[^.]*$/);\n\n if (m) {\n let ext = m[0];\n\n switch (ext.toLowerCase()) {\n case '.qif':\n return parseQIF(filepath);\n case '.csv':\n return parseCSV(filepath, options);\n case '.ofx':\n case '.qfx':\n return parseOFX(filepath);\n default:\n }\n }\n\n errors.push({\n message: 'Invalid file type',\n internal: ''\n });\n return { errors };\n}\n\nasync function parseCSV(filepath, options = {}) {\n let errors = [];\n let contents = await fs.readFile(filepath);\n\n let data;\n try {\n data = csv2json(contents, {\n columns: true,\n bom: true,\n delimiter: options.delimiter || ',',\n quote: '\"',\n trim: true,\n relax_column_count: true\n });\n } catch (err) {\n errors.push({\n message: 'Failed parsing: ' + err.message,\n internal: err.message\n });\n return { errors, transactions: [] };\n }\n\n return { errors, transactions: data };\n}\n\nasync function parseQIF(filepath) {\n let errors = [];\n let contents = await fs.readFile(filepath);\n\n let data;\n try {\n data = qif2json(contents);\n } catch (err) {\n errors.push({\n message: \"Failed parsing: doesn't look like a valid QIF file.\",\n internal: err.stack\n });\n return { errors, transactions: [] };\n }\n\n return {\n errors,\n transactions: data.transactions.map(trans => ({\n amount: trans.amount != null ? looselyParseAmount(trans.amount) : null,\n date: trans.date,\n payee_name: trans.payee,\n imported_payee: trans.payee,\n notes: trans.memo || null\n }))\n };\n}\n\nasync function parseOFX(filepath) {\n let { getOFXTransactions, initModule } = await import(\n /* webpackChunkName: 'xfo' */ 'node-libofx'\n );\n await initModule();\n\n let errors = [];\n let contents = await fs.readFile(filepath);\n\n let data;\n try {\n data = getOFXTransactions(contents);\n } catch (err) {\n errors.push({\n message: 'Failed importing file',\n internal: err.stack\n });\n return { errors };\n }\n\n return {\n errors,\n transactions: data.map(trans => ({\n amount: trans.amount,\n imported_id: trans.fi_id,\n date: trans.date ? dayFromDate(trans.date * 1000) : null,\n payee_name: trans.name,\n imported_payee: trans.name,\n notes: trans.memo || null\n }))\n };\n}\n","import * as db from '../db';\n\nexport async function createPayee(description) {\n // Check to make sure no payee already exists with exactly the same\n // name\n let row = await db.first(\n `SELECT id FROM payees WHERE LOWER(name) = ? AND tombstone = 0`,\n [description.toLowerCase()]\n );\n\n if (row) {\n return row.id;\n } else {\n return db.insertPayee({ name: description });\n }\n}\n\nexport async function getStartingBalancePayee() {\n let category = await db.first(`\n SELECT * FROM categories\n WHERE is_income = 1 AND\n LOWER(name) = 'starting balances' AND\n tombstone = 0\n `);\n if (category === null) {\n category = await db.first(\n 'SELECT * FROM categories WHERE is_income = 1 AND tombstone = 0'\n );\n }\n\n let id = await createPayee('Starting Balance');\n return {\n id,\n category: category ? category.id : null\n };\n}\n","export default function parse(qif, options) {\n var lines = qif.split('\\n'),\n line = lines.shift(),\n type = /!Type:([^$]*)$/.exec(line.trim()),\n data = {},\n transactions = (data.transactions = []),\n transaction = {};\n\n options = options || {};\n\n if (!type || !type.length) {\n throw new Error('File does not appear to be a valid qif file: ' + line);\n }\n data.type = type[1];\n\n var division = {};\n\n while ((line = lines.shift())) {\n line = line.trim();\n if (line === '^') {\n transactions.push(transaction);\n transaction = {};\n continue;\n }\n switch (line[0]) {\n case 'D':\n transaction.date = line.substring(1);\n break;\n case 'T':\n transaction.amount = line.substring(1);\n break;\n case 'N':\n transaction.number = line.substring(1);\n break;\n case 'M':\n transaction.memo = line.substring(1);\n break;\n case 'A':\n transaction.address = (transaction.address || []).concat(\n line.substring(1)\n );\n break;\n case 'P':\n transaction.payee = line.substring(1).replace(/&/g, '&');\n break;\n case 'L':\n var lArray = line.substring(1).split(':');\n transaction.category = lArray[0];\n if (lArray[1] !== undefined) {\n transaction.subcategory = lArray[1];\n }\n break;\n case 'C':\n transaction.clearedStatus = line.substring(1);\n break;\n case 'S':\n var sArray = line.substring(1).split(':');\n division.category = sArray[0];\n if (sArray[1] !== undefined) {\n division.subcategory = sArray[1];\n }\n break;\n case 'E':\n division.description = line.substring(1);\n break;\n case '$':\n division.amount = parseFloat(line.substring(1));\n if (!(transaction.division instanceof Array)) {\n transaction.division = [];\n }\n transaction.division.push(division);\n division = {};\n\n break;\n\n default:\n throw new Error('Unknown Detail Code: ' + line[0]);\n }\n }\n\n if (Object.keys(transaction).length) {\n transactions.push(transaction);\n }\n\n data.dateFormat = options.dateFormat;\n return data;\n}\n","import { RuleError } from '../errors';\nimport * as dateFns from 'date-fns';\nimport {\n monthFromDate,\n yearFromDate,\n isBefore,\n isAfter,\n addDays,\n subDays,\n format as formatDate,\n parseDate\n} from '../../shared/months';\nimport { fastSetMerge } from '../../shared/util';\nimport { sortNumbers, getApproxNumberThreshold } from '../../shared/rules';\nimport { recurConfigToRSchedule } from '../../shared/schedules';\nimport { Schedule as RSchedule } from '../util/rschedule';\n\nfunction safeNumber(n) {\n return isNaN(n) ? null : n;\n}\n\nfunction safeParseInt(n) {\n return safeNumber(parseInt(n));\n}\n\nfunction assert(test, type, msg) {\n if (!test) {\n throw new RuleError(type, msg);\n }\n}\n\nexport function parseRecurDate(desc) {\n try {\n let rules = recurConfigToRSchedule(desc);\n\n return {\n type: 'recur',\n schedule: new RSchedule({ rrules: rules })\n };\n } catch (e) {\n throw new RuleError('parse-recur-date', e.message);\n }\n}\n\nexport function parseDateString(str) {\n if (typeof str !== 'string') {\n return null;\n } else if (str.length === 10) {\n // YYYY-MM-DD\n if (!dateFns.isValid(dateFns.parseISO(str))) {\n return null;\n }\n\n return { type: 'date', date: str };\n } else if (str.length === 7) {\n // YYYY-MM\n if (!dateFns.isValid(dateFns.parseISO(str + '-01'))) {\n return null;\n }\n\n return { type: 'month', date: str };\n } else if (str.length === 4) {\n // YYYY\n if (!dateFns.isValid(dateFns.parseISO(str + '-01-01'))) {\n return null;\n }\n\n return { type: 'year', date: str };\n }\n\n return null;\n}\n\nexport function parseBetweenAmount(between) {\n let { num1, num2 } = between;\n if (typeof num1 !== 'number' || typeof num2 !== 'number') {\n return null;\n }\n return { type: 'between', num1, num2 };\n}\n\nlet CONDITION_TYPES = {\n date: {\n ops: ['is', 'isapprox', 'gt', 'gte', 'lt', 'lte'],\n nullable: false,\n parse(op, value, fieldName) {\n let parsed =\n typeof value === 'string'\n ? parseDateString(value)\n : value.frequency != null\n ? parseRecurDate(value)\n : null;\n assert(\n parsed,\n 'date-format',\n `Invalid date format (field: ${fieldName})`\n );\n\n // Approximate only works with exact & recurring dates\n if (op === 'isapprox') {\n assert(\n parsed.type === 'date' || parsed.type === 'recur',\n 'date-format',\n `Invalid date value for \"isapprox\" (field: ${fieldName})`\n );\n }\n // These only work with exact dates\n else if (op === 'gt' || op === 'gte' || op === 'lt' || op === 'lte') {\n assert(\n parsed.type === 'date',\n 'date-format',\n `Invalid date value for \"${op}\" (field: ${fieldName})`\n );\n }\n\n return parsed;\n }\n },\n id: {\n ops: ['is', 'contains', 'oneOf'],\n nullable: true,\n parse(op, value, fieldName) {\n if (op === 'oneOf') {\n assert(\n Array.isArray(value),\n 'no-empty-array',\n `oneOf must have an array value (field: ${fieldName})`\n );\n return value;\n }\n return value;\n }\n },\n string: {\n ops: ['is', 'contains', 'oneOf'],\n nullable: false,\n parse(op, value, fieldName) {\n if (op === 'oneOf') {\n assert(\n Array.isArray(value),\n 'no-empty-array',\n `oneOf must have an array value (field: ${fieldName}): ${JSON.stringify(\n value\n )}`\n );\n return value.filter(Boolean).map(val => val.toLowerCase());\n }\n\n if (op === 'contains') {\n assert(\n typeof value === 'string' && value.length > 0,\n 'no-empty-string',\n `contains must have non-empty string (field: ${fieldName})`\n );\n }\n\n return value.toLowerCase();\n }\n },\n number: {\n ops: ['is', 'isapprox', 'isbetween', 'gt', 'gte', 'lt', 'lte'],\n nullable: false,\n parse(op, value, fieldName) {\n let parsed =\n typeof value === 'number'\n ? { type: 'literal', value }\n : parseBetweenAmount(value);\n\n assert(\n parsed != null,\n 'not-number',\n `Value must be a number or between amount: ${JSON.stringify(\n value\n )} (field: ${fieldName})`\n );\n\n if (op === 'isbetween') {\n assert(\n parsed.type === 'between',\n 'number-format',\n `Invalid between value for \"${op}\" (field: ${fieldName})`\n );\n } else {\n assert(\n parsed.type === 'literal',\n 'number-format',\n `Invalid number value for \"${op}\" (field: ${fieldName})`\n );\n }\n\n return parsed;\n }\n },\n boolean: {\n ops: ['is'],\n nullable: false,\n parse(op, value, fieldName) {\n assert(\n typeof value === 'boolean',\n 'not-boolean',\n `Value must be a boolean: ${value} (field: ${fieldName})`\n );\n\n return value;\n }\n }\n};\n\nexport class Condition {\n constructor(op, field, value, options, fieldTypes) {\n let typeName = fieldTypes.get(field);\n assert(typeName, 'internal', 'Invalid condition field: ' + field);\n\n let type = CONDITION_TYPES[typeName];\n\n // It's important to validate rules because a faulty rule might mess\n // up the user's transaction (and be very confusing)\n assert(\n type,\n 'internal',\n `Invalid condition type: ${typeName} (field: ${field})`\n );\n assert(\n type.ops.includes(op),\n 'internal',\n `Invalid condition operator: ${op} (type: ${typeName}, field: ${field})`\n );\n\n if (type.nullable !== true) {\n assert(value != null, 'no-null', `Field cannot be empty: ${field}`);\n }\n\n // For strings, an empty string is equal to null\n if (typeName === 'string' && type.nullable !== true) {\n assert(value !== '', 'no-null', `Field cannot be empty: ${field}`);\n }\n\n this.rawValue = value;\n this.unparsedValue = value;\n this.op = op;\n this.field = field;\n this.value = type.parse ? type.parse(op, value, field) : value;\n this.options = options;\n this.type = typeName;\n }\n\n eval(object) {\n let fieldValue = object[this.field];\n if (fieldValue === undefined) {\n return false;\n }\n\n if (typeof fieldValue === 'string') {\n fieldValue = fieldValue.toLowerCase();\n }\n\n let type = this.type;\n\n if (type === 'number' && this.options) {\n if (this.options.outflow) {\n if (fieldValue > 0) {\n return false;\n }\n\n fieldValue = -fieldValue;\n } else if (this.options.inflow) {\n if (fieldValue < 0) {\n return false;\n }\n }\n }\n\n let extractValue = v => (type === 'number' ? v.value : v);\n\n switch (this.op) {\n case 'isapprox':\n case 'is':\n if (type === 'date') {\n if (fieldValue == null) {\n return false;\n }\n\n if (this.value.type === 'recur') {\n let { schedule } = this.value;\n if (this.op === 'isapprox') {\n let fieldDate = parseDate(fieldValue);\n return schedule.occursBetween(\n dateFns.subDays(fieldDate, 2),\n dateFns.addDays(fieldDate, 2)\n );\n } else {\n return schedule.occursOn({ date: parseDate(fieldValue) });\n }\n } else {\n let { date } = this.value;\n\n if (this.op === 'isapprox') {\n let fullDate = parseDate(date);\n let high = addDays(fullDate, 2);\n let low = subDays(fullDate, 2);\n\n return fieldValue >= low && fieldValue <= high;\n } else {\n switch (this.value.type) {\n case 'date':\n return fieldValue === date;\n case 'month':\n return monthFromDate(fieldValue) === date;\n case 'year':\n return yearFromDate(fieldValue) === date;\n default:\n }\n }\n }\n } else if (type === 'number') {\n let number = this.value.value;\n if (this.op === 'isapprox') {\n let threshold = getApproxNumberThreshold(number);\n return (\n fieldValue >= number - threshold &&\n fieldValue <= number + threshold\n );\n }\n return fieldValue === number;\n }\n\n return fieldValue === this.value;\n case 'isbetween': {\n // The parsing logic already checks that the value is of the\n // right type (only numbers with high and low)\n let [low, high] = sortNumbers(this.value.num1, this.value.num2);\n return fieldValue >= low && fieldValue <= high;\n }\n case 'contains':\n if (fieldValue === null) {\n return false;\n }\n return fieldValue.indexOf(this.value) !== -1;\n case 'oneOf':\n if (fieldValue === null) {\n return false;\n }\n return this.value.indexOf(fieldValue) !== -1;\n case 'gt':\n if (fieldValue === null) {\n return false;\n } else if (type === 'date') {\n return isAfter(fieldValue, this.value.date);\n }\n\n return fieldValue > extractValue(this.value);\n case 'gte':\n if (fieldValue === null) {\n return false;\n } else if (type === 'date') {\n return (\n fieldValue === this.value.date ||\n isAfter(fieldValue, this.value.date)\n );\n }\n\n return fieldValue >= extractValue(this.value);\n case 'lt':\n if (fieldValue === null) {\n return false;\n } else if (type === 'date') {\n return isBefore(fieldValue, this.value.date);\n }\n return fieldValue < extractValue(this.value);\n case 'lte':\n if (fieldValue === null) {\n return false;\n } else if (type === 'date') {\n return (\n fieldValue === this.value.date ||\n isBefore(fieldValue, this.value.date)\n );\n }\n return fieldValue <= extractValue(this.value);\n default:\n }\n\n return false;\n }\n\n getValue() {\n return this.value;\n }\n\n serialize() {\n return {\n op: this.op,\n field: this.field,\n value: this.unparsedValue,\n type: this.type,\n ...(this.options ? { options: this.options } : null)\n };\n }\n}\n\nlet ACTION_OPS = ['set', 'link-schedule'];\n\nexport class Action {\n constructor(op, field, value, options, fieldTypes) {\n assert(\n ACTION_OPS.includes(op),\n 'internal',\n `Invalid action operation: ${op}`\n );\n\n if (op === 'set') {\n let typeName = fieldTypes.get(field);\n assert(typeName, 'internal', `Invalid field for action: ${field}`);\n this.field = field;\n this.type = typeName;\n } else if (op === 'link-schedule') {\n this.field = null;\n this.type = 'id';\n }\n\n this.op = op;\n this.rawValue = value;\n this.value = value;\n this.options = options;\n }\n\n exec(object) {\n switch (this.op) {\n case 'set':\n object[this.field] = this.value;\n break;\n case 'link-schedule':\n object.schedule = this.value;\n break;\n default:\n }\n }\n\n serialize() {\n return {\n op: this.op,\n field: this.field,\n value: this.value,\n type: this.type,\n ...(this.options ? { options: this.options } : null)\n };\n }\n}\n\nexport class Rule {\n constructor({ id, stage, conditions, actions, fieldTypes }) {\n this.id = id;\n this.stage = stage;\n this.conditions = conditions.map(\n c => new Condition(c.op, c.field, c.value, c.options, fieldTypes)\n );\n this.actions = actions.map(\n a => new Action(a.op, a.field, a.value, a.options, fieldTypes)\n );\n }\n\n evalConditions(object) {\n if (this.conditions.length === 0) {\n return false;\n }\n\n return this.conditions.every(condition => {\n return condition.eval(object);\n });\n }\n\n execActions(object) {\n let changes = {};\n this.actions.forEach(action => action.exec(changes));\n return changes;\n }\n\n exec(object) {\n if (this.evalConditions(object)) {\n return this.execActions(object);\n }\n return null;\n }\n\n // Apply is similar to exec but applies the changes for you\n apply(object) {\n let changes = this.exec(object);\n return Object.assign({}, object, changes);\n }\n\n getId() {\n return this.id;\n }\n\n serialize() {\n return {\n id: this.id,\n stage: this.stage,\n conditions: this.conditions.map(c => c.serialize()),\n actions: this.actions.map(a => a.serialize())\n };\n }\n}\n\nexport class RuleIndexer {\n constructor({ field, method }) {\n this.field = field;\n this.method = method;\n this.rules = new Map();\n }\n\n getIndex(key) {\n if (!this.rules.has(key)) {\n this.rules.set(key, new Set());\n }\n return this.rules.get(key);\n }\n\n getIndexForValue(value) {\n return this.getIndex(this.getKey(value) || '*');\n }\n\n getKey(value) {\n if (typeof value === 'string' && value !== '') {\n if (this.method === 'firstchar') {\n return value[0].toLowerCase();\n }\n return value.toLowerCase();\n }\n return null;\n }\n\n getIndexes(rule) {\n let cond = rule.conditions.find(cond => cond.field === this.field);\n let indexes = [];\n\n if (cond && (cond.op === 'oneOf' || cond.op === 'is')) {\n if (cond.op === 'oneOf') {\n cond.value.forEach(val => indexes.push(this.getIndexForValue(val)));\n } else {\n indexes.push(this.getIndexForValue(cond.value));\n }\n } else {\n indexes.push(this.getIndex('*'));\n }\n\n return indexes;\n }\n\n index(rule) {\n let indexes = this.getIndexes(rule);\n indexes.forEach(index => {\n index.add(rule);\n });\n }\n\n remove(rule) {\n let indexes = this.getIndexes(rule);\n indexes.forEach(index => {\n index.delete(rule);\n });\n }\n\n getApplicableRules(object) {\n let indexedRules;\n if (this.field in object) {\n let key = this.getKey(object[this.field]);\n if (key) {\n indexedRules = this.rules.get(key);\n }\n }\n\n return fastSetMerge(\n indexedRules || new Set(),\n this.rules.get('*') || new Set()\n );\n }\n}\n\nconst OP_SCORES = {\n is: 10,\n oneOf: 9,\n isapprox: 5,\n isbetween: 5,\n gt: 1,\n gte: 1,\n lt: 1,\n lte: 1,\n contains: 0\n};\n\nfunction computeScore(rule) {\n let initialScore = rule.conditions.reduce((score, condition) => {\n if (OP_SCORES[condition.op] == null) {\n console.log(`Found invalid operation while ranking: ${condition.op}`);\n return 0;\n }\n\n return score + OP_SCORES[condition.op];\n }, 0);\n\n if (\n rule.conditions.every(\n cond => cond.op === 'is' || cond.op === 'isapprox' || cond.op === 'oneOf'\n )\n ) {\n return initialScore * 2;\n }\n return initialScore;\n}\n\nfunction _rankRules(rules) {\n let scores = new Map();\n rules.forEach(rule => {\n scores.set(rule, computeScore(rule));\n });\n\n // No matter the order of rules, this must always return exactly the same\n // order. That's why rules have ids: if two rules have the same score, it\n // sorts by id\n return [...rules].sort((r1, r2) => {\n let score1 = scores.get(r1);\n let score2 = scores.get(r2);\n if (score1 < score2) {\n return -1;\n } else if (score1 > score2) {\n return 1;\n } else {\n let id1 = r1.getId();\n let id2 = r2.getId();\n return id1 < id2 ? -1 : id1 > id2 ? 1 : 0;\n }\n });\n}\n\nexport function rankRules(rules) {\n let pre = [];\n let normal = [];\n let post = [];\n\n for (let rule of rules) {\n switch (rule.stage) {\n case 'pre':\n pre.push(rule);\n break;\n case 'post':\n post.push(rule);\n break;\n default:\n normal.push(rule);\n }\n }\n\n pre = _rankRules(pre);\n normal = _rankRules(normal);\n post = _rankRules(post);\n\n return pre.concat(normal).concat(post);\n}\n\nexport function migrateIds(rule, mappings) {\n // Go through the in-memory rules and patch up ids that have been\n // \"migrated\" to other ids. This is a little tricky, but a lot\n // easier than trying to keep an up-to-date mapping in the db. This\n // is necessary because ids can be transparently mapped as items are\n // merged/deleted in the system.\n //\n // It's very important here that we look at `rawValue` specifically,\n // and only apply the patches to the other `value` fields. We always\n // need to keep the original id around because undo can walk\n // backwards, and we need to be able to consistently apply a\n // \"projection\" of these mapped values. For example: if we have ids\n // [1, 2] and applying mappings transforms it to [2, 2], if `1` gets\n // mapped to something else there's no way to no to map *only* the\n // first id back to make [1, 2]. Keeping the original value around\n // solves this.\n for (let ci = 0; ci < rule.conditions.length; ci++) {\n let cond = rule.conditions[ci];\n if (cond.type === 'id') {\n switch (cond.op) {\n case 'is':\n cond.value = mappings.get(cond.rawValue) || cond.rawValue;\n cond.unparsedValue = cond.value;\n break;\n case 'oneOf':\n cond.value = cond.rawValue.map(v => mappings.get(v) || v);\n cond.unparsedValue = [...cond.value];\n break;\n default:\n }\n }\n }\n\n for (let ai = 0; ai < rule.actions.length; ai++) {\n let action = rule.actions[ai];\n if (action.type === 'id') {\n if (action.op === 'set') {\n action.value = mappings.get(action.rawValue) || action.rawValue;\n }\n }\n }\n}\n\n// This finds all the rules that reference the `id`\nexport function iterateIds(rules, fieldName, func) {\n let counts = {};\n let i;\n\n ruleiter: for (i = 0; i < rules.length; i++) {\n let rule = rules[i];\n for (let ci = 0; ci < rule.conditions.length; ci++) {\n let cond = rule.conditions[ci];\n if (cond.type === 'id' && cond.field === fieldName) {\n switch (cond.op) {\n case 'is':\n if (func(rule, cond.value)) {\n continue ruleiter;\n }\n break;\n case 'oneOf':\n for (let vi = 0; vi < cond.value.length; vi++) {\n if (func(rule, cond.value[vi])) {\n continue ruleiter;\n }\n }\n break;\n default:\n }\n }\n }\n\n for (let ai = 0; ai < rule.actions.length; ai++) {\n let action = rule.actions[ai];\n if (action.type === 'id' && action.field === fieldName) {\n // Currently `set` is the only op, but if we add more this\n // will need to be extended\n if (action.op === 'set') {\n if (func(rule, action.value)) {\n break;\n }\n }\n }\n }\n }\n}\n","import title from './title';\nimport * as db from '../db';\nimport {\n mergeObjects,\n hasFieldsChanged,\n toRelaxedNumber,\n amountToInteger,\n integerToAmount\n} from '../../shared/util';\nimport {\n makeChild as makeChildTransaction,\n recalculateSplit\n} from '../../shared/transactions';\nimport * as monthUtils from '../../shared/months';\nimport { transactionModel } from '../api-models';\nimport { getServer } from '../server-config';\nimport { batchMessages } from '../sync';\nimport { runMutator } from '../mutators';\nimport { getStartingBalancePayee } from './payees';\nimport * as transfer from './transfer';\nimport { TransactionError } from '../errors';\nimport { runRules } from './transaction-rules';\nimport { batchUpdateTransactions } from './transactions';\n\nconst dateFns = require('date-fns');\nconst { post } = require('../post');\nconst levenshtein = require('damerau-levenshtein');\nconst uuid = require('../../platform/uuid');\n\n// Plaid article about API options:\n// https://support.plaid.com/customer/en/portal/articles/2612155-transactions-returned-per-request\n\nfunction BankSyncError(type, code) {\n return { type: 'BankSyncError', category: type, code };\n}\n\nfunction makeSplitTransaction(trans, subtransactions) {\n // We need to calculate the final state of split transactions\n let { subtransactions: sub, ...parent } = recalculateSplit({\n ...trans,\n is_parent: true,\n subtransactions: subtransactions.map((transaction, idx) =>\n makeChildTransaction(trans, {\n ...transaction,\n sort_order: 0 - idx\n })\n )\n });\n return [parent, ...sub];\n}\n\nfunction getAccountBalance(account) {\n // Debt account types need their balance reversed\n switch (account.type) {\n case 'credit':\n case 'loan':\n return -account.balances.current;\n default:\n return account.balances.current;\n }\n}\n\nasync function updateAccountBalance(id, balance) {\n await db.runQuery('UPDATE accounts SET balance_current = ? WHERE id = ?', [\n amountToInteger(balance),\n id\n ]);\n}\n\nexport async function getAccounts(userId, userKey, id) {\n let res = await post(getServer().PLAID_SERVER + '/accounts', {\n userId,\n key: userKey,\n item_id: id\n });\n\n let { accounts } = res;\n\n accounts.forEach(acct => {\n acct.balances.current = getAccountBalance(acct);\n });\n\n return accounts;\n}\n\nexport function fromPlaid(trans) {\n return {\n imported_id: trans.transaction_id,\n payee_name: trans.name,\n imported_payee: trans.name,\n amount: -amountToInteger(trans.amount),\n date: trans.date\n };\n}\n\nasync function downloadTransactions(\n userId,\n userKey,\n acctId,\n bankId,\n since,\n count\n) {\n let allTransactions = [];\n let accountBalance = null;\n let pageSize = 100;\n let offset = 0;\n let numDownloaded = 0;\n\n while (1) {\n const endDate = monthUtils.currentDay();\n\n const res = await post(getServer().PLAID_SERVER + '/transactions', {\n userId: userId,\n key: userKey,\n item_id: '' + bankId,\n account_id: acctId,\n start_date: since,\n end_date: endDate,\n count: pageSize,\n offset\n });\n\n if (res.error_code) {\n throw BankSyncError(res.error_type, res.error_code);\n }\n\n if (res.transactions.length === 0) {\n break;\n }\n\n numDownloaded += res.transactions.length;\n\n // Remove pending transactions for now - we will handle them in\n // the future.\n allTransactions = allTransactions.concat(\n res.transactions.filter(t => !t.pending)\n );\n accountBalance = getAccountBalance(res.accounts[0]);\n\n if (\n numDownloaded === res.total_transactions ||\n (count != null && allTransactions.length >= count)\n ) {\n break;\n }\n\n offset += pageSize;\n }\n\n allTransactions =\n count != null ? allTransactions.slice(0, count) : allTransactions;\n\n return {\n transactions: allTransactions.map(fromPlaid),\n accountBalance\n };\n}\n\nasync function resolvePayee(trans, payeeName, payeesToCreate) {\n if (trans.payee == null && payeeName) {\n // First check our registry of new payees (to avoid a db access)\n // then check the db for existing payees\n let payee = payeesToCreate.get(payeeName.toLowerCase());\n payee = payee || (await db.getPayeeByName(payeeName));\n\n if (payee != null) {\n return payee.id;\n } else {\n // Otherwise we're going to create a new one\n let newPayee = { id: uuid.v4Sync(), name: payeeName };\n payeesToCreate.set(payeeName.toLowerCase(), newPayee);\n return newPayee.id;\n }\n }\n\n return trans.payee;\n}\n\nasync function normalizeTransactions(\n transactions,\n acctId,\n { rawPayeeName } = {}\n) {\n let payeesToCreate = new Map();\n\n let normalized = [];\n for (let trans of transactions) {\n // Validate the date because we do some stuff with it. The db\n // layer does better validation, but this will give nicer errors\n if (trans.date == null) {\n throw new Error('`date` is required when adding a transaction');\n }\n\n // Strip off the irregular properties\n let { payee_name, subtransactions, ...rest } = trans;\n trans = rest;\n\n if (payee_name) {\n let trimmed = payee_name.trim();\n if (trimmed === '') {\n payee_name = null;\n } else {\n payee_name = rawPayeeName ? trimmed : title(trimmed);\n }\n }\n\n trans.imported_payee = trans.imported_payee || payee_name;\n if (trans.imported_payee) {\n trans.imported_payee = trans.imported_payee.trim();\n }\n\n // It's important to resolve both the account and payee early so\n // when rules are run, they have the right data. Resolving payees\n // also simplifies the payee creation process\n trans.account = acctId;\n trans.payee = await resolvePayee(trans, payee_name, payeesToCreate);\n\n normalized.push({\n payee_name,\n subtransactions: subtransactions\n ? subtransactions.map(t => ({ ...t, account: acctId }))\n : null,\n trans\n });\n }\n\n return { normalized, payeesToCreate };\n}\n\nasync function createNewPayees(payeesToCreate, addsAndUpdates) {\n let usedPayeeIds = new Set(addsAndUpdates.map(t => t.payee));\n\n await batchMessages(async () => {\n for (let payee of payeesToCreate.values()) {\n // Only create the payee if it ended up being used\n if (usedPayeeIds.has(payee.id)) {\n await db.insertPayee(payee);\n }\n }\n });\n}\n\nexport async function reconcileTransactions(acctId, transactions) {\n const hasMatched = new Set();\n const updated = [];\n const added = [];\n\n let { normalized, payeesToCreate } = await normalizeTransactions(\n transactions,\n acctId\n );\n\n // The first pass runs the rules, and preps data for fuzzy matching\n let transactionsStep1 = [];\n for (let { payee_name, trans, subtransactions } of normalized) {\n // Run the rules\n trans = runRules(trans);\n\n let match = null;\n let fuzzyDataset = null;\n\n // First, match with an existing transaction's imported_id. This\n // is the highest fidelity match and should always be attempted\n // first.\n if (trans.imported_id) {\n match = await db.first(\n 'SELECT * FROM v_transactions WHERE imported_id = ? AND account = ?',\n [trans.imported_id, acctId]\n );\n\n // TODO: Pending transactions\n\n if (match) {\n hasMatched.add(match.id);\n }\n }\n\n // If it didn't match, query data needed for fuzzy matching\n if (!match) {\n // Look 1 day ahead and 4 days back when fuzzy matching. This\n // needs to select all fields that need to be read from the\n // matched transaction. See the final pass below for the needed\n // fields.\n fuzzyDataset = await db.all(\n `SELECT id, date, imported_id, payee, category, notes FROM v_transactions\n WHERE date >= ? AND date <= ? AND amount = ? AND account = ? AND is_child = 0`,\n [\n db.toDateRepr(monthUtils.subDays(trans.date, 4)),\n db.toDateRepr(monthUtils.addDays(trans.date, 1)),\n trans.amount || 0,\n acctId\n ]\n );\n }\n\n transactionsStep1.push({\n payee_name,\n trans,\n subtransactions,\n match,\n fuzzyDataset\n });\n }\n\n // Next, do the fuzzy matching. This first pass matches based on the\n // payee id. We do this in multiple passes so that higher fidelity\n // matching always happens first, i.e. a transaction should match\n // match with low fidelity if a later transaction is going to match\n // the same one with high fidelity.\n let transactionsStep2 = transactionsStep1.map(data => {\n if (!data.match && data.fuzzyDataset) {\n // Try to find one where the payees match.\n let match = data.fuzzyDataset.find(\n row => !hasMatched.has(row.id) && data.trans.payee === row.payee\n );\n\n if (match) {\n hasMatched.add(match.id);\n return { ...data, match };\n }\n }\n return data;\n });\n\n // The final fuzzy matching pass. This is the lowest fidelity\n // matching: it just find the first transaction that hasn't been\n // matched yet. Remember the the dataset only contains transactions\n // around the same date with the same amount.\n let transactionsStep3 = transactionsStep2.map(data => {\n if (!data.match && data.fuzzyDataset) {\n let match = data.fuzzyDataset.find(row => !hasMatched.has(row.id));\n if (match) {\n hasMatched.add(match.id);\n return { ...data, match };\n }\n }\n return data;\n });\n\n // Finally, generate & commit the changes\n for (let { payee_name, trans, subtransactions, match } of transactionsStep3) {\n if (match) {\n // TODO: change the above sql query to use aql\n let existing = {\n ...match,\n cleared: match.cleared === 1,\n date: db.fromDateRepr(match.date)\n };\n\n // Update the transaction\n const updates = {\n date: trans.date,\n imported_id: trans.imported_id || null,\n payee: existing.payee || trans.payee || null,\n category: existing.category || trans.category || null,\n imported_payee: trans.imported_payee || null,\n notes: existing.notes || trans.notes || null,\n cleared: trans.cleared != null ? trans.cleared : true\n };\n\n if (hasFieldsChanged(existing, updates, Object.keys(updates))) {\n updated.push({ id: existing.id, ...updates });\n }\n } else {\n // Insert a new transaction\n let finalTransaction = {\n ...trans,\n id: uuid.v4Sync(),\n category: trans.category || null,\n cleared: trans.cleared != null ? trans.cleared : true\n };\n\n if (subtransactions && subtransactions.length > 0) {\n added.push(...makeSplitTransaction(finalTransaction, subtransactions));\n } else {\n added.push(finalTransaction);\n }\n }\n }\n\n await createNewPayees(payeesToCreate, [...added, ...updated]);\n await batchUpdateTransactions({ added, updated });\n\n return {\n added: added.map(trans => trans.id),\n updated: updated.map(trans => trans.id)\n };\n}\n\n// This is similar to `reconcileTransactions` except much simpler: it\n// does not try to match any transactions. It just adds them\nexport async function addTransactions(\n acctId,\n transactions,\n { runTransfers = true } = {}\n) {\n const added = [];\n\n let { normalized, payeesToCreate } = await normalizeTransactions(\n transactions,\n acctId,\n { rawPayeeName: true }\n );\n\n for (let { payee_name, trans, subtransactions } of normalized) {\n // Run the rules\n trans = runRules(trans);\n\n let finalTransaction = {\n id: uuid.v4Sync(),\n ...trans,\n account: acctId,\n cleared: trans.cleared != null ? trans.cleared : true\n };\n\n // Add split transactions if they are given\n if (subtransactions && subtransactions.length > 0) {\n added.push(...makeSplitTransaction(finalTransaction, subtransactions));\n } else {\n added.push(finalTransaction);\n }\n }\n\n await createNewPayees(payeesToCreate, added);\n\n let newTransactions;\n if (runTransfers) {\n let res = await batchUpdateTransactions({ added });\n newTransactions = res.added.map(t => t.id);\n } else {\n await batchMessages(async () => {\n newTransactions = await Promise.all(\n added.map(async trans => db.insertTransaction(trans))\n );\n });\n }\n return newTransactions;\n}\n\nexport async function syncAccount(userId, userKey, id, acctId, bankId) {\n // TODO: Handle the case where transactions exist in the future\n // (that will make start date after end date)\n const latestTransaction = await db.first(\n 'SELECT * FROM v_transactions WHERE account = ? ORDER BY date DESC LIMIT 1',\n [id]\n );\n\n if (latestTransaction) {\n const startingTransaction = await db.first(\n 'SELECT date FROM v_transactions WHERE account = ? ORDER BY date ASC LIMIT 1',\n [id]\n );\n const startingDate = db.fromDateRepr(startingTransaction.date);\n // assert(startingTransaction)\n\n // Get all transactions since the latest transaction, plus any 5\n // days before the latest transaction. This gives us a chance to\n // resolve any transactions that were entered manually.\n //\n // TODO: What this really should do is query the last imported_id\n // and since then\n let date = monthUtils.subDays(db.fromDateRepr(latestTransaction.date), 31);\n\n // Never download transactions before the starting date. This was\n // when the account was added to the system.\n if (date < startingDate) {\n date = startingDate;\n }\n\n let { transactions, accountBalance } = await downloadTransactions(\n userId,\n userKey,\n acctId,\n bankId,\n date\n );\n if (transactions.length === 0) {\n return { added: [], updated: [] };\n }\n\n transactions = transactions.map(trans => ({ ...trans, account: id }));\n\n return runMutator(async () => {\n const result = await reconcileTransactions(id, transactions);\n await updateAccountBalance(id, accountBalance);\n return result;\n });\n } else {\n const acctRow = await db.select('accounts', id);\n\n // Otherwise, download transaction for the last few days if it's an\n // on-budget account, or for the past 30 days if off-budget\n const startingDay = monthUtils.subDays(\n monthUtils.currentDay(),\n acctRow.offbudget === 0 ? 1 : 30\n );\n\n const { transactions } = await downloadTransactions(\n userId,\n userKey,\n acctId,\n bankId,\n dateFns.format(dateFns.parseISO(startingDay), 'yyyy-MM-dd')\n );\n\n // We need to add a transaction that represents the starting\n // balance for everything to balance out. In order to get balance\n // before the first imported transaction, we need to get the\n // current balance from the accounts table and subtract all the\n // imported transactions.\n let currentBalance = acctRow.balance_current;\n\n const previousBalance = transactions.reduce((total, trans) => {\n return total - trans.amount;\n }, currentBalance);\n\n const oldestDate =\n transactions.length > 0\n ? transactions[transactions.length - 1].date\n : monthUtils.currentDay();\n\n let payee = await getStartingBalancePayee();\n\n return runMutator(async () => {\n let initialId = await db.insertTransaction({\n account: id,\n amount: previousBalance,\n category: acctRow.offbudget === 0 ? payee.category : null,\n payee: payee.id,\n date: oldestDate,\n cleared: true,\n starting_balance_flag: true\n });\n\n let result = await reconcileTransactions(id, transactions);\n return {\n ...result,\n added: [initialId, ...result.added]\n };\n });\n }\n}\n","// Utilities\nconst lowerCase = require('./lower-case');\nconst specials = require('./specials');\n\nlet character =\n '[0-9\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376-\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0523\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u064A\\u066E-\\u066F\\u0671-\\u06D3\\u06D5\\u06E5-\\u06E6\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4-\\u07F5\\u07FA\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0972\\u097B-\\u097F\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0-\\u0AE1\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58-\\u0C59\\u0C60-\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0-\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D3D\\u0D60-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E46\\u0E81-\\u0E82\\u0E84\\u0E87-\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA-\\u0EAB\\u0EAD-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8B\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065-\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1159\\u115F-\\u11A2\\u11A8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19A9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE-\\u1BAF\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2C6F\\u2C71-\\u2C7D\\u2C80-\\u2CE4\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400\\u4DB5\\u4E00\\u9FC3\\uA000-\\uA48C\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A-\\uA62B\\uA640-\\uA65F\\uA662-\\uA66E\\uA67F-\\uA697\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78C\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA90A-\\uA925\\uA930-\\uA946\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAC00\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]';\nlet regex = new RegExp(\n `(?:(?:(\\\\s?(?:^|[.\\\\(\\\\)!?;:\"-])\\\\s*)(${character}))|(${character}))(${character}*[’']*${character}*)`,\n 'g'\n);\n\nlet convertToRegExp = specials =>\n specials.map(s => [new RegExp(`\\\\b${s}\\\\b`, 'gi'), s]);\n\nfunction parseMatch(match) {\n const firstCharacter = match[0];\n\n // test first character\n if (/\\s/.test(firstCharacter)) {\n // if whitespace - trim and return\n return match.substr(1);\n }\n if (/[()]/.test(firstCharacter)) {\n // if parens - this shouldn't be replaced\n return null;\n }\n\n return match;\n}\n\nmodule.exports = (str, options = {}) => {\n str = str\n .toLowerCase()\n .replace(regex, (m, lead = '', forced, lower, rest) => {\n const parsedMatch = parseMatch(m);\n if (!parsedMatch) {\n return m;\n }\n if (!forced) {\n const fullLower = lower + rest;\n\n if (lowerCase.has(fullLower)) {\n return parsedMatch;\n }\n }\n\n return lead + (lower || forced).toUpperCase() + rest;\n });\n\n const customSpecials = options.special || [];\n const replace = [...specials, ...customSpecials];\n const replaceRegExp = convertToRegExp(replace);\n\n replaceRegExp.forEach(([pattern, s]) => {\n str = str.replace(pattern, s);\n });\n\n return str;\n};\n","const conjunctions = [\n 'for',\n 'and',\n 'nor',\n 'but',\n 'or',\n 'yet',\n 'so'\n]\n\nconst articles = [\n 'a',\n 'an',\n 'the'\n]\n\nconst prepositions = [\n 'aboard',\n 'about',\n 'above',\n 'across',\n 'after',\n 'against',\n 'along',\n 'amid',\n 'among',\n 'anti',\n 'around',\n 'as',\n 'at',\n 'before',\n 'behind',\n 'below',\n 'beneath',\n 'beside',\n 'besides',\n 'between',\n 'beyond',\n 'but',\n 'by',\n 'concerning',\n 'considering',\n 'despite',\n 'down',\n 'during',\n 'except',\n 'excepting',\n 'excluding',\n 'following',\n 'for',\n 'from',\n 'in',\n 'inside',\n 'into',\n 'like',\n 'minus',\n 'near',\n 'of',\n 'off',\n 'on',\n 'onto',\n 'opposite',\n 'over',\n 'past',\n 'per',\n 'plus',\n 'regarding',\n 'round',\n 'save',\n 'since',\n 'than',\n 'through',\n 'to',\n 'toward',\n 'towards',\n 'under',\n 'underneath',\n 'unlike',\n 'until',\n 'up',\n 'upon',\n 'versus',\n 'via',\n 'with',\n 'within',\n 'without'\n]\n\nmodule.exports = new Set([\n ...conjunctions,\n ...articles,\n ...prepositions\n])\n","const intended = [\n 'CLI',\n 'API',\n 'HTTP',\n 'HTTPS',\n 'JSX',\n 'DNS',\n 'URL',\n 'CI',\n 'CDN',\n 'GitHub',\n 'CSS',\n 'JS',\n 'JavaScript',\n 'TypeScript',\n 'HTML',\n 'WordPress',\n 'JavaScript',\n 'Next.js',\n 'Node.js'\n];\n\nmodule.exports = intended;\n","import * as db from '../db';\nimport {\n Condition,\n Action,\n Rule,\n RuleIndexer,\n rankRules,\n migrateIds,\n iterateIds\n} from './rules';\nimport { getMappings } from '../db/mappings';\nimport { addDays, subDays, parseDate, dayFromDate } from '../../shared/months';\nimport { addSyncListener } from '../sync/index';\nimport { RuleError } from '../errors';\nimport {\n FIELD_TYPES,\n sortNumbers,\n getApproxNumberThreshold\n} from '../../shared/rules';\nimport q from '../../shared/query';\nimport { requiredFields, toDateRepr } from '../models';\nimport { currentDay } from '../../shared/months';\nimport { partitionByField, fastSetMerge } from '../../shared/util';\nimport { setSyncingMode, batchMessages } from '../sync';\nimport { schemaConfig } from '../aql/schema';\nconst uuid = require('../../platform/uuid');\n\n// TODO: Detect if it looks like the user is creating a rename rule\n// and prompt to create it in the pre phase instead\n// * We could also make the \"create rule\" button a dropdown that\n// provides different \"templates\" like \"create renaming rule\"\n\nexport { iterateIds } from './rules';\n\nlet allRules;\nlet unlistenSync;\nlet firstcharIndexer;\nlet payeeIndexer;\n\nexport function resetState() {\n allRules = new Map();\n firstcharIndexer = new RuleIndexer({\n field: 'imported_payee',\n method: 'firstchar'\n });\n payeeIndexer = new RuleIndexer({ field: 'payee' });\n}\n\n// Database functions\n\nfunction invert(obj) {\n return Object.fromEntries(\n Object.entries(obj).map(entry => {\n return [entry[1], entry[0]];\n })\n );\n}\n\nlet internalFields = schemaConfig.views.transactions.fields;\nlet publicFields = invert(schemaConfig.views.transactions.fields);\n\nfunction fromInternalField(obj) {\n return {\n ...obj,\n field: publicFields[obj.field] || obj.field\n };\n}\n\nfunction toInternalField(obj) {\n return {\n ...obj,\n field: internalFields[obj.field] || obj.field\n };\n}\n\nexport const ruleModel = {\n validate(rule, { update } = {}) {\n requiredFields('rules', rule, ['conditions', 'actions'], update);\n\n if (!update || 'stage' in rule) {\n if (\n rule.stage !== 'pre' &&\n rule.stage !== 'post' &&\n rule.stage !== null\n ) {\n throw new Error('Invalid rule stage: ' + rule.stage);\n }\n }\n\n return rule;\n },\n\n toJS(row) {\n function parseArray(str) {\n let value;\n try {\n value = typeof str === 'string' ? JSON.parse(str) : str;\n } catch (e) {\n throw new RuleError('internal', 'Cannot parse rule json');\n }\n\n if (!Array.isArray(value)) {\n throw new RuleError('internal', 'Rule json must be an array');\n }\n return value;\n }\n\n let rule = { ...row };\n rule.conditions = rule.conditions\n ? parseArray(rule.conditions).map(cond => fromInternalField(cond))\n : [];\n rule.actions = rule.actions\n ? parseArray(rule.actions).map(action => fromInternalField(action))\n : [];\n return rule;\n },\n\n fromJS(rule) {\n let row = { ...rule };\n if ('conditions' in row) {\n let conditions = row.conditions.map(cond => toInternalField(cond));\n row.conditions = JSON.stringify(conditions);\n }\n if ('actions' in row) {\n let actions = row.actions.map(action => toInternalField(action));\n row.actions = JSON.stringify(actions);\n }\n return row;\n }\n};\n\nexport function makeRule(data) {\n let rule;\n try {\n rule = new Rule({\n ...ruleModel.toJS(data),\n fieldTypes: FIELD_TYPES\n });\n } catch (e) {\n console.warn('Invalid rule', e);\n if (e instanceof RuleError) {\n return null;\n }\n throw e;\n }\n\n // This is needed because we map ids on the fly, and they might\n // not be persisted into the db. Mappings allow items to\n // transparently merge with other items\n migrateIds(rule, getMappings());\n\n return rule;\n}\n\nexport async function loadRules() {\n resetState();\n\n let rules = await db.all(`\n SELECT * FROM rules\n WHERE conditions IS NOT NULL AND actions IS NOT NULL AND tombstone = 0\n `);\n\n for (let i = 0; i < rules.length; i++) {\n let desc = rules[i];\n // These are old stages, can be removed before release\n if (desc.stage === 'cleanup' || desc.stage === 'modify') {\n desc.stage = 'pre';\n }\n\n let rule = makeRule(desc);\n if (rule) {\n allRules.set(rule.id, rule);\n firstcharIndexer.index(rule);\n payeeIndexer.index(rule);\n }\n }\n\n if (unlistenSync) {\n unlistenSync();\n }\n unlistenSync = addSyncListener(onApplySync);\n}\n\nexport function getRules() {\n // This can simply return the in-memory data\n return [...allRules.values()];\n}\n\nexport async function insertRule(rule) {\n rule = ruleModel.validate(rule);\n return db.insertWithUUID('rules', ruleModel.fromJS(rule));\n}\n\nexport async function updateRule(rule) {\n rule = ruleModel.validate(rule, { update: true });\n return db.update('rules', ruleModel.fromJS(rule));\n}\n\nexport async function deleteRule(rule) {\n let schedule = await db.first('SELECT id FROM schedules WHERE rule = ?', [\n rule.id\n ]);\n\n if (schedule) {\n return false;\n }\n\n return db.delete_('rules', rule.id);\n}\n\n// Sync projections\n\nfunction onApplySync(oldValues, newValues) {\n newValues.forEach((items, table) => {\n if (table === 'rules') {\n items.forEach(newValue => {\n let oldRule = allRules.get(newValue.id);\n\n if (newValue.tombstone === 1) {\n // Deleted, need to remove it from in-memory\n let rule = allRules.get(newValue.id);\n if (rule) {\n allRules.delete(rule.getId());\n firstcharIndexer.remove(rule);\n payeeIndexer.remove(rule);\n }\n } else {\n // Inserted/updated\n let rule = makeRule(newValue);\n if (rule) {\n if (oldRule) {\n firstcharIndexer.remove(oldRule);\n payeeIndexer.remove(oldRule);\n }\n allRules.set(newValue.id, rule);\n firstcharIndexer.index(rule);\n payeeIndexer.index(rule);\n }\n }\n });\n }\n });\n\n // If any of the mapping tables have changed, we need to refresh the\n // ids\n let tables = [...newValues.keys()];\n if (tables.find(table => table.indexOf('mapping') !== -1)) {\n getRules().forEach(rule => {\n migrateIds(rule, getMappings());\n });\n }\n}\n\n// Runner\nexport function runRules(trans) {\n let finalTrans = { ...trans };\n let allChanges = {};\n\n let rules = rankRules(\n fastSetMerge(\n firstcharIndexer.getApplicableRules(trans),\n payeeIndexer.getApplicableRules(trans)\n )\n );\n\n for (let i = 0; i < rules.length; i++) {\n finalTrans = rules[i].apply(finalTrans);\n }\n\n return finalTrans;\n}\n\n// This does the inverse: finds all the transactions matching a rule\nexport function conditionsToAQL(conditions, { recurDateBounds = 100 } = {}) {\n let errors = [];\n\n conditions = conditions\n .map(cond => {\n if (cond instanceof Condition) {\n return cond;\n }\n\n try {\n return new Condition(\n cond.op,\n cond.field,\n cond.value,\n cond.options,\n FIELD_TYPES\n );\n } catch (e) {\n errors.push(e.type || 'internal');\n console.log('conditionsToAQL: invalid condition: ' + e.message);\n return null;\n }\n })\n .filter(Boolean);\n\n // rule -> actualql\n let filters = conditions.map(cond => {\n let { type, field, op, value, options } = cond;\n\n let getValue = value => {\n if (type === 'number') {\n return value.value;\n }\n return value;\n };\n\n let apply = (field, op, value) => {\n if (type === 'number') {\n if (options) {\n if (options.outflow) {\n return {\n $and: [\n { amount: { $lt: 0 } },\n { [field]: { $transform: '$neg', [op]: value } }\n ]\n };\n } else if (options.inflow) {\n return {\n $and: [{ amount: { $gt: 0 } }, { [field]: { [op]: value } }]\n };\n }\n }\n\n return { amount: { [op]: value } };\n } else if (type === 'string') {\n return { [field]: { $transform: '$lower', [op]: value } };\n } else if (type === 'date') {\n return { [field]: { [op]: value.date } };\n }\n return { [field]: { [op]: value } };\n };\n\n switch (op) {\n case 'isapprox':\n case 'is':\n if (type === 'date') {\n if (value.type === 'recur') {\n let dates = value.schedule\n .occurrences({ take: recurDateBounds })\n .toArray()\n .map(d => dayFromDate(d.date));\n\n let compare = d => ({ $eq: d });\n\n return {\n $or: dates.map(d => {\n if (op === 'isapprox') {\n return {\n $and: [\n { date: { $gte: subDays(d, 2) } },\n { date: { $lte: addDays(d, 2) } }\n ]\n };\n }\n return { date: d };\n })\n };\n } else {\n let { date } = value;\n\n if (op === 'isapprox') {\n let fullDate = parseDate(value.date);\n let high = addDays(fullDate, 2);\n let low = subDays(fullDate, 2);\n\n return {\n $and: [{ date: { $gte: low } }, { date: { $lte: high } }]\n };\n } else {\n switch (value.type) {\n case 'date':\n return { date: value.date };\n case 'month': {\n let low = value.date + '-00';\n let high = value.date + '-99';\n return {\n $and: [{ date: { $gte: low } }, { date: { $lte: high } }]\n };\n }\n case 'year': {\n let low = value.date + '-00-00';\n let high = value.date + '-99-99';\n return {\n $and: [{ date: { $gte: low } }, { date: { $lte: high } }]\n };\n }\n default:\n }\n }\n }\n } else if (type === 'number') {\n let number = value.value;\n if (op === 'isapprox') {\n let threshold = getApproxNumberThreshold(number);\n\n return {\n $and: [\n apply(field, '$gte', number - threshold),\n apply(field, '$lte', number + threshold)\n ]\n };\n }\n return apply(field, '$eq', number);\n }\n\n return apply(field, '$eq', value);\n\n case 'isbetween':\n // This operator is only applicable to the specific `between`\n // number type so we don't use `apply`\n let [low, high] = sortNumbers(value.num1, value.num2);\n return {\n [field]: [{ $gte: low }, { $lte: high }]\n };\n case 'contains':\n // Running contains with id will automatically reach into\n // the `name` of the referenced table and do a string match\n return apply(\n type === 'id' ? field + '.name' : field,\n '$like',\n '%' + value + '%'\n );\n case 'oneOf':\n let values = value;\n if (values.length === 0) {\n // This forces it to match nothing\n return { id: null };\n }\n return { $or: values.map(v => apply(field, '$eq', v)) };\n case 'gt':\n return apply(field, '$gt', getValue(value));\n case 'gte':\n return apply(field, '$gte', getValue(value));\n case 'lt':\n return apply(field, '$lt', getValue(value));\n case 'lte':\n return apply(field, '$lte', getValue(value));\n case 'true':\n return apply(field, '$eq', true);\n case 'false':\n return apply(field, '$eq', false);\n default:\n throw new Error('Unhandled operator: ' + op);\n }\n });\n\n return { filters, errors };\n}\n\nexport function applyActions(transactionIds, actions, handlers) {\n let parsedActions = actions\n .map(action => {\n if (action instanceof Action) {\n return action;\n }\n\n try {\n return new Action(\n action.op,\n action.field,\n action.value,\n action.options,\n FIELD_TYPES\n );\n } catch (e) {\n console.log('Action error', e);\n return null;\n }\n })\n .filter(Boolean);\n\n if (parsedActions.length !== actions.length) {\n // An error happened while parsing\n return null;\n }\n\n let updated = transactionIds.map(id => {\n let update = { id };\n for (let action of parsedActions) {\n action.exec(update);\n }\n return update;\n });\n\n return handlers['transactions-batch-update']({ updated });\n}\n\nexport function getRulesForPayee(payeeId) {\n let rules = new Set();\n iterateIds(getRules(), 'payee', (rule, id) => {\n if (id === payeeId) {\n rules.add(rule);\n }\n });\n\n return rankRules([...rules]);\n}\n\nfunction* getIsSetterRules(\n stage,\n condField,\n actionField,\n { condValue, actionValue }\n) {\n let rules = getRules();\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i];\n\n if (\n rule.stage === stage &&\n rule.actions.length === 1 &&\n rule.actions[0].op === 'set' &&\n rule.actions[0].field === actionField &&\n (actionValue === undefined || rule.actions[0].value === actionValue) &&\n rule.conditions.length === 1 &&\n rule.conditions[0].op === 'is' &&\n rule.conditions[0].field === condField &&\n (condValue === undefined || rule.conditions[0].value === condValue)\n ) {\n yield rule.serialize();\n }\n }\n\n return null;\n}\n\nfunction* getOneOfSetterRules(\n stage,\n condField,\n actionField,\n { condValue, actionValue }\n) {\n let rules = getRules();\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i];\n\n if (\n rule.stage === stage &&\n rule.actions.length === 1 &&\n rule.actions[0].op === 'set' &&\n rule.actions[0].field === actionField &&\n (actionValue == null || rule.actions[0].value === actionValue) &&\n rule.conditions.length === 1 &&\n rule.conditions[0].op === 'oneOf' &&\n rule.conditions[0].field === condField &&\n (condValue == null || rule.conditions[0].value.indexOf(condValue) !== -1)\n ) {\n yield rule.serialize();\n }\n }\n\n return null;\n}\n\nexport async function updatePayeeRenameRule(fromNames, to) {\n let renameRule = getOneOfSetterRules('pre', 'imported_payee', 'payee', {\n actionValue: to\n }).next().value;\n\n // Note that we don't check for existing rules that set this\n // `imported_payee` to something else. It's important to do\n // that for categories because categories will be changes frequently\n // for the same payee, but renames won't be changed much. It's a use\n // case we could improve in the future, but this is fine for now.\n\n if (renameRule) {\n let condition = renameRule.conditions[0];\n let newValue = [\n ...fastSetMerge(\n new Set(condition.value),\n new Set(fromNames.filter(name => name !== ''))\n )\n ];\n let rule = {\n ...renameRule,\n conditions: [{ ...condition, value: newValue }]\n };\n await updateRule(rule);\n return renameRule.id;\n } else {\n let rule = new Rule({\n stage: 'pre',\n conditions: [{ op: 'oneOf', field: 'imported_payee', value: fromNames }],\n actions: [{ op: 'set', field: 'payee', value: to }],\n fieldTypes: FIELD_TYPES\n });\n return insertRule(rule.serialize());\n }\n}\n\nexport function getProbableCategory(transactions) {\n let scores = new Map();\n\n transactions.forEach(trans => {\n if (trans.category) {\n scores.set(trans.category, (scores.get(trans.category) || 0) + 1);\n }\n });\n\n let winner = transactions.reduce((winner, trans) => {\n let score = scores.get(trans.category);\n if (!winner || score > winner.score) {\n return { score, category: trans.category };\n }\n return winner;\n }, null);\n\n return winner.score >= 3 ? winner.category : null;\n}\n\nexport async function updateCategoryRules(transactions) {\n if (transactions.length === 0) {\n return;\n }\n\n let payeeIds = new Set(transactions.map(trans => trans.payee));\n let transIds = new Set(transactions.map(trans => trans.id));\n\n // It's going to be quickest to get the oldest date and then query\n // all transactions since then so we can work in memory\n let oldestDate = null;\n for (let i = 0; i < transactions.length; i++) {\n if (oldestDate === null || transactions[i].date < oldestDate) {\n oldestDate = transactions[i].date;\n }\n }\n\n // We look 6 months behind to include any other transaction. This\n // makes it so we, 1. don't have to load in all transactions ever\n // and 2. \"forget\" really old transactions which might be nice and\n // 3. don't have to individually run a query for each payee\n oldestDate = subDays(oldestDate, 180);\n\n // Also look 180 days in the future to get any future transactions\n // (this might change when we think about scheduled transactions)\n let register = await db.all(\n `SELECT t.* FROM v_transactions t\n LEFT JOIN accounts a ON a.id = t.account\n WHERE date >= ? AND date <= ? AND is_parent = 0 AND a.closed = 0`,\n [toDateRepr(oldestDate), toDateRepr(addDays(currentDay(), 180))]\n );\n\n let allTransactions = partitionByField(register, 'payee');\n let categoriesToSet = new Map();\n\n for (let payeeId of payeeIds) {\n // Don't do anything if payee is null\n if (payeeId) {\n let latestTrans = (allTransactions.get(payeeId) || []).slice(0, 5);\n\n // Check if one of the latest transactions was one that was\n // updated. We only want to update anything if so.\n if (latestTrans.find(trans => transIds.has(trans.id))) {\n let category = getProbableCategory(latestTrans);\n if (category) {\n categoriesToSet.set(payeeId, category);\n }\n }\n }\n }\n\n await batchMessages(async () => {\n for (let [payeeId, category] of categoriesToSet.entries()) {\n let ruleSetters = [\n ...getIsSetterRules(null, 'payee', 'category', {\n condValue: payeeId\n })\n ];\n\n if (ruleSetters.length > 0) {\n // If there are existing rules, change all of them to the new\n // category (if they aren't already using it). We set all of\n // them because it's possible that multiple rules exist\n // because 2 clients made them independently. Not really a big\n // deal, but to make sure our update gets applied set it to\n // all of them\n for (let rule of ruleSetters) {\n let action = rule.actions[0];\n if (action.value !== category) {\n await updateRule({\n ...rule,\n actions: [{ ...action, value: category }]\n });\n }\n }\n } else {\n // No existing rules, so create one\n let newRule = new Rule({\n stage: null,\n conditions: [{ op: 'is', field: 'payee', value: payeeId }],\n actions: [{ op: 'set', field: 'category', value: category }],\n fieldTypes: FIELD_TYPES\n });\n await insertRule(newRule.serialize());\n }\n }\n });\n}\n\n// This can be removed in the future\nexport async function migrateOldRules() {\n let allPayees = await db.all(\n `SELECT p.*, c.id as category FROM payees p\n LEFT JOIN category_mapping cm ON cm.id = p.category\n LEFT JOIN categories c ON (c.id = cm.transferId AND c.tombstone = 0)\n WHERE p.tombstone = 0 AND transfer_acct IS NULL`\n );\n let allRules = await db.all(\n `SELECT pr.*, pm.targetId as payee_id FROM payee_rules pr\n LEFT JOIN payee_mapping pm ON pm.id = pr.payee_id\n WHERE pr.tombstone = 0`\n );\n\n let payeesById = new Map();\n for (let i = 0; i < allPayees.length; i++) {\n payeesById.set(allPayees[i].id, allPayees[i]);\n }\n\n let rulesByPayeeId = new Map();\n for (let i = 0; i < allRules.length; i++) {\n let item = allRules[i];\n let rules = rulesByPayeeId.get(item.payee_id) || [];\n rules.push(item);\n rulesByPayeeId.set(item.payee_id, rules);\n }\n\n let rules = [];\n\n // Convert payee name rules\n for (let [payeeId, payeeRules] of rulesByPayeeId.entries()) {\n let equals = payeeRules.filter(r => {\n let payee = payeesById.get(r.payee_id);\n\n return (\n (r.type === 'equals' || r.type == null) &&\n (!payee || r.value.toLowerCase() !== payee.name.toLowerCase())\n );\n });\n let contains = payeeRules.filter(r => r.type === 'contains');\n let actions = [{ op: 'set', field: 'payee', value: payeeId }];\n\n if (equals.length > 0) {\n rules.push({\n stage: null,\n conditions: [\n {\n op: 'oneOf',\n field: 'imported_payee',\n value: equals.map(payeeRule => payeeRule.value)\n }\n ],\n actions\n });\n }\n\n if (contains.length > 0) {\n rules = rules.concat(\n contains.map(payeeRule => ({\n stage: null,\n conditions: [\n {\n op: 'contains',\n field: 'imported_payee',\n value: payeeRule.value\n }\n ],\n actions\n }))\n );\n }\n }\n\n // Convert category rules\n let catRules = allPayees\n .filter(p => p.category)\n .reduce((map, payee) => {\n let ids = map.get(payee.category) || new Set();\n ids.add(payee.id);\n map.set(payee.category, ids);\n return map;\n }, new Map());\n\n for (let [catId, payeeIds] of catRules) {\n rules.push({\n stage: null,\n conditions: [\n {\n op: 'oneOf',\n field: 'payee',\n value: [...payeeIds]\n }\n ],\n actions: [\n {\n op: 'set',\n field: 'category',\n value: catId\n }\n ]\n });\n }\n\n // Very important: we never want to sync migration changes, but it\n // still has to run through the syncing layer to make sure\n // projections are correct. This is only OK because we require a\n // sync reset after this.\n let prevMode = setSyncingMode('disabled');\n await batchMessages(async () => {\n for (let rule of rules) {\n await insertRule({\n stage: rule.stage,\n conditions: rule.conditions,\n actions: rule.actions\n });\n }\n\n await db.runQuery('DELETE FROM payee_rules', []);\n });\n setSyncingMode(prevMode);\n}\n","import * as sheet from '../sheet';\nimport { batchMessages } from '../sync';\nimport * as db from '../db';\nimport { incrFetch, whereIn } from '../db/util';\nimport * as transfer from './transfer';\nimport * as rules from './transaction-rules';\nconst connection = require('../../platform/server/connection');\n\nasync function idsWithChildren(ids) {\n let whereIds = whereIn(ids, 'parent_id');\n let rows = await db.all(\n `SELECT id FROM v_transactions_internal WHERE ${whereIds}`\n );\n let set = new Set(ids);\n for (let row of rows) {\n set.add(row.id);\n }\n return [...set];\n}\n\nasync function getTransactionsByIds(ids) {\n // TODO: convert to whereIn\n //\n // or better yet, use ActualQL\n return incrFetch(\n (query, params) => db.selectWithSchema('transactions', query, params),\n ids,\n id => `id = '${id}'`,\n where => `SELECT * FROM v_transactions_internal WHERE ${where}`\n );\n}\n\nexport async function batchUpdateTransactions({\n added,\n deleted,\n updated,\n learnCategories = false,\n detectOrphanPayees = true\n}) {\n // Track the ids of each type of transaction change (see below for why)\n let addedIds = [];\n let updatedIds = updated ? updated.map(u => u.id) : [];\n let deletedIds = deleted ? await idsWithChildren(deleted.map(d => d.id)) : [];\n\n let oldPayees = new Set();\n let accounts = await db.all('SELECT * FROM accounts WHERE tombstone = 0');\n\n // We need to get all the payees of updated transactions _before_\n // making changes\n if (updated) {\n let descUpdatedIds = updated\n .filter(update => update.payee)\n .map(update => update.id);\n\n let transactions = await getTransactionsByIds(descUpdatedIds);\n\n for (let i = 0; i < transactions.length; i++) {\n oldPayees.add(transactions[i].payee);\n }\n }\n\n // Apply all the updates. We can batch this now! This is important\n // and makes bulk updates much faster\n await batchMessages(async () => {\n if (added) {\n addedIds = await Promise.all(\n added.map(async t => db.insertTransaction(t))\n );\n }\n\n if (deleted) {\n await Promise.all(\n // It's important to use `deletedIds` and not `deleted` here\n // because we've expanded it to include children above. The\n // inconsistency of the delete APIs is annoying and should\n // be fixed (it should only take an id)\n deletedIds.map(async id => {\n await db.deleteTransaction({ id });\n })\n );\n }\n\n if (updated) {\n await Promise.all(\n updated.map(async t => {\n if (t.account) {\n // Moving transactions off budget should always clear the\n // category\n let account = accounts.find(acct => acct.id === t.account);\n if (account.offbudget === 1) {\n t.category = null;\n }\n }\n\n await db.updateTransaction(t);\n })\n );\n }\n });\n\n // Get all of the full transactions that were changed. This is\n // needed to run any cascading logic that depends on the full\n // transaction. Things like transfers, analyzing rule updates, and\n // more\n let allAdded = await getTransactionsByIds(addedIds);\n let allUpdated = await getTransactionsByIds(updatedIds);\n let allDeleted = await getTransactionsByIds(deletedIds);\n\n // Post-processing phase: first do any updates to transfers.\n // Transfers update the transactions and we need to return updates\n // to the client so that can apply them. Note that added\n // transactions just return the full transaction.\n let resultAdded = allAdded;\n let resultUpdated;\n\n await batchMessages(async () => {\n await Promise.all(allAdded.map(t => transfer.onInsert(t)));\n\n // Return any updates from here\n resultUpdated = (await Promise.all(\n allUpdated.map(t => transfer.onUpdate(t))\n )).filter(Boolean);\n\n await Promise.all(allDeleted.map(t => transfer.onDelete(t)));\n });\n\n if (learnCategories) {\n // Analyze any updated categories and update rules to learn from\n // the user's activity\n let ids = new Set([\n ...(added ? added.filter(add => add.category).map(add => add.id) : []),\n ...(updated\n ? updated.filter(update => update.category).map(update => update.id)\n : [])\n ]);\n await rules.updateCategoryRules(\n allAdded.concat(allUpdated).filter(trans => ids.has(trans.id))\n );\n }\n\n if (detectOrphanPayees) {\n // Look for any orphaned payees and notify the user about merging\n // them\n\n if (updated) {\n let newPayeeIds = updated.map(u => u.payee).filter(Boolean);\n if (newPayeeIds.length > 0) {\n let allOrphaned = new Set(await db.getOrphanedPayees());\n\n let orphanedIds = [...oldPayees].filter(id => allOrphaned.has(id));\n\n if (orphanedIds.length > 0) {\n connection.send('orphaned-payees', {\n orphanedIds,\n updatedPayeeIds: newPayeeIds\n });\n }\n }\n }\n }\n\n return {\n added: resultAdded,\n updated: resultUpdated\n };\n}\n","import * as db from '../db';\n\nasync function getPayee(acct) {\n return db.first('SELECT * FROM payees WHERE transfer_acct = ?', [acct]);\n}\n\nasync function getTransferredAccount(transaction) {\n if (transaction.payee) {\n let { transfer_acct, id } = await db.first(\n 'SELECT id, transfer_acct FROM v_payees WHERE id = ?',\n [transaction.payee]\n );\n return transfer_acct;\n }\n return null;\n}\n\nasync function clearCategory(transaction, transferAcct) {\n const { offbudget: fromOffBudget } = await db.first(\n 'SELECT offbudget FROM accounts WHERE id = ?',\n [transaction.account]\n );\n const { offbudget: toOffBudget } = await db.first(\n 'SELECT offbudget FROM accounts WHERE id = ?',\n [transferAcct]\n );\n\n // We should clear the category to make sure it's not being\n // accounted for in the budget, unless it should be in the case of\n // transferring from an on-budget to off-budget account\n if (fromOffBudget === toOffBudget) {\n await db.updateTransaction({ id: transaction.id, category: null });\n return true;\n }\n return false;\n}\n\nexport async function addTransfer(transaction, transferredAccount) {\n let { id: fromPayee } = await db.first(\n 'SELECT id FROM payees WHERE transfer_acct = ?',\n [transaction.account]\n );\n\n // We need to enforce certain constraints with child transaction transfers\n if (transaction.parent_id) {\n let row = await db.first(\n `\n SELECT p.id, p.transfer_acct FROM v_transactions t\n LEFT JOIN payees p ON p.id = t.payee\n WHERE t.id = ?\n `,\n [transaction.parent_id]\n );\n\n if (row.transfer_acct) {\n if (row.id !== transaction.payee) {\n // This child transaction is trying to use a transfer payee,\n // but the parent is already using a different transfer payee.\n // This is not allowed, so not only do we do nothing, we clear\n // the payee of the child transaction to make it clear\n await db.updateTransaction({ id: transaction.id, payee: null });\n return { id: transaction.id, payee: null };\n }\n\n // The parent has the same transfer payee, so it \"owns\" the\n // transfer logic\n return null;\n }\n }\n\n const id = await db.insertTransaction({\n account: transferredAccount,\n amount: -transaction.amount,\n payee: fromPayee,\n date: transaction.date,\n transfer_id: transaction.id,\n notes: transaction.notes || null,\n cleared: false\n });\n\n await db.updateTransaction({ id: transaction.id, transfer_id: id });\n const categoryCleared = await clearCategory(transaction, transferredAccount);\n\n return {\n id: transaction.id,\n transfer_id: id,\n ...(categoryCleared ? { category: null } : {})\n };\n}\n\nexport async function removeTransfer(transaction) {\n let transferTrans = await db.getTransaction(transaction.transfer_id);\n if (transferTrans.is_child) {\n // If it's a child transaction, we don't delete it because that\n // would invalidate the whole split transaction. Instead of turn\n // it into a normal transaction\n await db.updateTransaction({\n id: transaction.transfer_id,\n transfer_id: null,\n payee: null\n });\n } else {\n await db.deleteTransaction({ id: transaction.transfer_id });\n }\n await db.updateTransaction({ id: transaction.id, transfer_id: null });\n return { id: transaction.id, transfer_id: null };\n}\n\nexport async function updateTransfer(transaction, transferredAccount) {\n let payee = await getPayee(transaction.account);\n\n await db.updateTransaction({\n id: transaction.transfer_id,\n account: transferredAccount,\n // Make sure to update the payee on the other side in case the\n // user moved this transaction into another account\n payee: payee.id,\n date: transaction.date,\n notes: transaction.notes,\n amount: -transaction.amount\n });\n\n const categoryCleared = await clearCategory(transaction, transferredAccount);\n if (categoryCleared) {\n return { id: transaction.id, category: null };\n }\n}\n\nexport async function onInsert(transaction) {\n let transferredAccount = await getTransferredAccount(transaction);\n\n if (transferredAccount) {\n return addTransfer(transaction, transferredAccount);\n }\n}\n\nexport async function onDelete(transaction) {\n if (transaction.transfer_id) {\n await removeTransfer(transaction);\n }\n}\n\nexport async function onUpdate(transaction) {\n const transferredAccount = await getTransferredAccount(transaction);\n\n if (transferredAccount && !transaction.transfer_id) {\n return addTransfer(transaction, transferredAccount);\n }\n\n if (!transferredAccount && transaction.transfer_id) {\n return removeTransfer(transaction);\n }\n\n if (transferredAccount && transaction.transfer_id) {\n return updateTransfer(transaction, transferredAccount);\n }\n}\n","import * as models from './models';\n\nexport const transactionModel = {\n ...models.transactionModel,\n\n toExternal(transactions, idx, payees) {\n return transactions;\n // function convert(t, payee) {\n // return {\n // id: t.id,\n // account_id: t.acct,\n // amount: t.amount,\n // payee_id: payee ? payee.id : null,\n // payee: payee ? payee.name : null,\n // imported_payee: t.imported_description,\n // category_id: t.category,\n // date: t.date,\n // notes: t.notes,\n // imported_id: t.financial_id,\n // transfer_id: t.transferred_id,\n // cleared: t.cleared\n // };\n // }\n\n // let splits = getAllSplitTransactions(transactions, idx);\n // if (splits) {\n // let payee =\n // splits.parent.description && payees[splits.parent.description];\n\n // return {\n // ...convert(splits.parent, payee),\n // subtransactions: splits.children.map(child => convert(child, payee))\n // };\n // }\n\n // let transaction = transactions[idx];\n // let payee = transaction.description && payees[transaction.description];\n // return convert(transaction, payee);\n },\n\n fromExternal(transaction) {\n let result = {};\n if ('id' in transaction) {\n result.id = transaction.id;\n }\n if ('account_id' in transaction) {\n result.acct = transaction.account_id;\n }\n if ('amount' in transaction) {\n result.amount = transaction.amount;\n }\n if ('payee_id' in transaction) {\n result.description = transaction.payee_id;\n }\n if ('imported_payee' in transaction) {\n result.imported_description = transaction.imported_payee;\n }\n if ('category_id' in transaction) {\n result.category = transaction.category_id;\n }\n if ('date' in transaction) {\n result.date = transaction.date;\n }\n if ('notes' in transaction) {\n result.notes = transaction.notes;\n }\n if ('imported_id' in transaction) {\n result.financial_id = transaction.imported_id;\n }\n if ('transfer_id' in transaction) {\n result.transferred_id = transaction.transfer_id;\n }\n if ('cleared' in transaction) {\n result.cleared = transaction.cleared;\n }\n return result;\n }\n};\n\nexport const accountModel = {\n ...models.accountModel,\n\n toExternal(account) {\n return {\n id: account.id,\n name: account.name,\n type: account.type,\n offbudget: account.offbudget ? true : false,\n closed: account.closed ? true : false\n };\n },\n\n fromExternal(account) {\n let result = { ...account };\n if ('offbudget' in account) {\n result.offbudget = account.offbudget ? 1 : 0;\n }\n if ('closed' in account) {\n result.closed = account.closed ? 1 : 0;\n }\n return result;\n }\n};\n\nexport const categoryModel = {\n ...models.categoryModel,\n\n toExternal(category) {\n return {\n id: category.id,\n name: category.name,\n is_income: category.is_income ? true : false,\n group_id: category.cat_group\n };\n },\n\n fromExternal(category) {\n let { group_id: _, ...result } = category;\n if ('is_income' in category) {\n result.is_income = category.is_income ? 1 : 0;\n }\n if ('group_id' in category) {\n result.cat_group = category.group_id;\n }\n return result;\n }\n};\n\nexport const categoryGroupModel = {\n ...models.categoryGroupModel,\n\n toExternal(group) {\n return {\n id: group.id,\n name: group.name,\n is_income: group.is_income ? true : false,\n categories: group.categories.map(categoryModel.toExternal)\n };\n },\n\n fromExternal(group) {\n let result = { ...group };\n if ('is_income' in group) {\n result.is_income = group.is_income ? 1 : 0;\n }\n if ('categories' in group) {\n result.categories = group.categories.map(categoryModel.fromExternal);\n }\n return result;\n }\n};\n\nexport const payeeModel = {\n ...models.payeeModel,\n\n toExternal(payee) {\n return {\n id: payee.id,\n name: payee.name,\n category: payee.category,\n transfer_acct: payee.transfer_acct\n };\n },\n\n fromExternal(payee) {\n // No translation is needed\n return payee;\n }\n};\n\nexport const payeeRuleModel = {\n ...models.payeeRuleModel,\n\n toExternal(rule) {\n let { tombstone, ...result } = rule;\n return result;\n },\n\n fromExternal(rule) {\n return rule;\n }\n};\n","import { addTransactions } from './accounts/sync';\nimport {\n transactionModel,\n accountModel,\n categoryModel,\n categoryGroupModel,\n payeeModel,\n payeeRuleModel\n} from './api-models';\nimport {\n ungroupTransactions,\n updateTransaction,\n deleteTransaction\n} from '../shared/transactions';\nimport * as db from './db';\nimport * as sheet from './sheet';\nimport * as prefs from './prefs';\nimport * as monthUtils from '../shared/months';\nimport * as update from './update';\nimport * as cloudStorage from './cloud-storage';\nimport { setSyncingMode, batchMessages } from './sync';\nimport { groupById, cleanUUID } from '../shared/util';\nimport { getClock } from './timestamp';\nimport { runMutator } from './mutators';\nimport { integerToAmount } from '../shared/util';\nimport { runQuery as aqlQuery } from './aql/schema/run-query';\nimport q from '../shared/query';\n\nconst { resolveName } = require('./spreadsheet/util');\nconst connection = require('../platform/server/connection');\n\nlet IMPORT_MODE = false;\n\n// This is duplicate from main.js...\nfunction APIError(msg, meta) {\n return { type: 'APIError', message: msg, meta };\n}\n\n// The API is different in two ways: we never want undo enabled, and\n// we also need to notify the UI manually if stuff has changed (if\n// they are connecting to an already running instance, the UI should\n// update). The wrapper handles that.\nfunction withMutation(handler) {\n return args => {\n return runMutator(\n async () => {\n let latestTimestamp = getClock().timestamp.toString();\n let result = await handler(args);\n\n let rows = await db.all(\n 'SELECT DISTINCT dataset FROM messages_crdt WHERE timestamp > ?',\n [latestTimestamp]\n );\n\n // Only send the sync event if anybody else is connected\n if (connection.getNumClients() > 1) {\n connection.send('sync-event', {\n type: 'success',\n tables: rows.map(row => row.dataset)\n });\n }\n\n return result;\n },\n { undoDisabled: true }\n );\n };\n}\n\nlet handlers = {};\n\nasync function validateMonth(month) {\n if (!month.match(/^\\d{4}-\\d{2}$/)) {\n throw APIError('Invalid month format, use YYYY-MM: ' + month);\n }\n\n if (!IMPORT_MODE) {\n let { start, end } = await handlers['get-budget-bounds']();\n let range = monthUtils.range(start, end);\n if (!range.includes(month)) {\n throw APIError('No budget exists for month: ' + month);\n }\n }\n}\n\nasync function validateExpenseCategory(debug, id) {\n if (id == null) {\n throw APIError(`${debug}: category id is required`);\n }\n\n let row = await db.first('SELECT is_income FROM categories WHERE id = ?', [\n id\n ]);\n\n if (!row) {\n throw APIError(`${debug}: category \"${id}\" does not exist`);\n }\n\n if (row.is_income !== 0) {\n throw APIError(`${debug}: category \"${id}\" is not an expense category`);\n }\n}\n\nlet batchPromise = null;\n\nhandlers['api/batch-budget-start'] = async function() {\n if (batchPromise) {\n throw APIError('Cannot start a batch process: batch already started');\n }\n\n // If we are importing, all we need to do is start a raw database\n // transaction. Updating spreadsheet cells doesn't go through the\n // syncing layer in that case.\n if (IMPORT_MODE) {\n db.asyncTransaction(() => {\n return new Promise((resolve, reject) => {\n batchPromise = { resolve, reject };\n });\n });\n } else {\n batchMessages(() => {\n return new Promise((resolve, reject) => {\n batchPromise = { resolve, reject };\n });\n });\n }\n};\n\nhandlers['api/batch-budget-end'] = async function() {\n if (!batchPromise) {\n throw APIError('Cannot end a batch process: no batch started');\n }\n\n batchPromise.resolve();\n batchPromise = null;\n};\n\nhandlers['api/load-budget'] = async function({ id }) {\n let { id: currentId } = prefs.getPrefs() || {};\n\n if (currentId !== id) {\n connection.send('start-load');\n let { error } = await handlers['load-budget']({ id });\n\n if (!error) {\n connection.send('finish-load');\n } else {\n connection.send('show-budgets');\n\n if (error === 'out-of-sync-migrations' || error === 'out-of-sync-data') {\n throw new Error(\n 'This budget cannot be loaded with this version of the app.'\n );\n } else if (error === 'budget-not-found') {\n throw new Error(\n 'Budget \"' +\n id +\n '\" not found. Check the id of your budget in the \"Advanced\" section of the settings page.'\n );\n } else {\n throw new Error('We had an unknown problem opening \"' + id + '\".');\n }\n }\n }\n};\n\nhandlers['api/start-import'] = async function({ budgetName }) {\n // Notify UI to close budget\n await handlers['close-budget']();\n\n // Create the budget\n await handlers['create-budget']({ budgetName, avoidUpload: true });\n\n // Clear out the default expense categories\n await db.runQuery('DELETE FROM categories WHERE is_income = 0');\n await db.runQuery('DELETE FROM category_groups WHERE is_income = 0');\n\n // Turn syncing off\n setSyncingMode('import');\n\n connection.send('start-import');\n IMPORT_MODE = true;\n};\n\nhandlers['api/finish-import'] = async function() {\n sheet.get().markCacheDirty();\n\n // We always need to fully reload the app. Importing doesn't touch\n // the spreadsheet, but we can't just recreate the spreadsheet\n // either; there is other internal state that isn't created\n let { id } = prefs.getPrefs();\n await handlers['close-budget']();\n await handlers['load-budget']({ id });\n\n await handlers['get-budget-bounds']();\n await sheet.waitOnSpreadsheet();\n\n await cloudStorage.upload().catch(err => {});\n\n connection.send('finish-import');\n IMPORT_MODE = false;\n};\n\nhandlers['api/abort-import'] = async function() {\n if (IMPORT_MODE) {\n let { id } = prefs.getPrefs();\n\n await handlers['close-budget']();\n await handlers['delete-budget']({ id });\n connection.send('show-budgets');\n }\n\n IMPORT_MODE = false;\n};\n\nhandlers['api/query'] = async function({ query }) {\n return aqlQuery(query);\n};\n\nhandlers['api/budget-months'] = async function() {\n let { start, end } = await handlers['get-budget-bounds']();\n return monthUtils.range(start, end);\n};\n\nhandlers['api/budget-month'] = async function({ month }) {\n await validateMonth(month);\n\n let groups = await db.getCategoriesGrouped();\n let sheetName = monthUtils.sheetForMonth(month);\n\n function value(name) {\n let v = sheet.get().getCellValue(sheetName, name);\n return v === '' ? 0 : v;\n }\n\n // This is duplicated from main.js because the return format is\n // different (for now)\n return {\n month,\n incomeAvailable: value('available-funds'),\n lastMonthOverspent: value('last-month-overspent'),\n forNextMonth: value('buffered'),\n totalBudgeted: value('total-budgeted'),\n toBudget: value('to-budget'),\n\n fromLastMonth: value('from-last-month'),\n totalIncome: value('total-income'),\n totalSpent: value('total-spent'),\n totalBalance: value('total-leftover'),\n\n categoryGroups: groups.map(group => {\n if (group.is_income) {\n return {\n ...categoryGroupModel.toExternal(group),\n received: value('total-income'),\n\n categories: group.categories.map(cat => ({\n ...categoryModel.toExternal(cat),\n received: value(`sum-amount-${cat.id}`)\n }))\n };\n }\n\n return {\n ...categoryGroupModel.toExternal(group),\n budgeted: value(`group-budget-${group.id}`),\n spent: value(`group-sum-amount-${group.id}`),\n balance: value(`group-leftover-${group.id}`),\n\n categories: group.categories.map(cat => ({\n ...categoryModel.toExternal(cat),\n budgeted: value(`budget-${cat.id}`),\n spent: value(`sum-amount-${cat.id}`),\n balance: value(`leftover-${cat.id}`),\n carryover: value(`carryover-${cat.id}`)\n }))\n };\n })\n };\n};\n\nhandlers['api/budget-set-amount'] = withMutation(async function({\n month,\n categoryId,\n amount\n}) {\n return handlers['budget/budget-amount']({\n month,\n category: categoryId,\n amount\n });\n});\n\nhandlers['api/budget-set-carryover'] = withMutation(async function({\n month,\n categoryId,\n flag\n}) {\n await validateMonth(month);\n await validateExpenseCategory('budget-set-carryover', categoryId);\n return handlers['budget/set-carryover']({\n startMonth: month,\n category: categoryId,\n flag\n });\n});\n\nhandlers['api/transactions-export'] = async function({\n transactions,\n categoryGroups,\n payees\n}) {\n return handlers['transactions-export']({\n transactions,\n categoryGroups,\n payees\n });\n};\n\nhandlers['api/transactions-import'] = withMutation(async function({\n accountId,\n transactions\n}) {\n return handlers['transactions-import']({ accountId, transactions });\n});\n\nhandlers['api/transactions-add'] = withMutation(async function({\n accountId,\n transactions\n}) {\n await addTransactions(accountId, transactions, { runTransfers: false });\n return 'ok';\n});\n\nhandlers['api/transactions-get'] = async function({\n accountId,\n startDate,\n endDate\n}) {\n let { data } = await aqlQuery(\n q('transactions')\n .filter({\n $and: [\n accountId && { account: accountId },\n startDate && { date: { $gte: startDate } },\n endDate && { date: { $lte: endDate } }\n ].filter(Boolean)\n })\n .select('*')\n .options({ splits: 'grouped' })\n );\n return data;\n};\n\nhandlers['api/transactions-filter'] = async function({ text, accountId }) {\n throw new Error('`filterTransactions` is deprecated, use `runQuery` instead');\n};\n\nhandlers['api/transaction-update'] = withMutation(async function({\n id,\n fields\n}) {\n let { data } = await aqlQuery(\n q('transactions')\n .filter({ id })\n .select('*')\n .options({ splits: 'grouped' })\n );\n let transactions = ungroupTransactions(data);\n\n if (transactions.length === 0) {\n return [];\n }\n\n let { diff } = updateTransaction(transactions, fields);\n return handlers['transactions-batch-update'](diff);\n});\n\nhandlers['api/transaction-delete'] = withMutation(async function({ id }) {\n let { data } = await aqlQuery(\n q('transactions')\n .filter({ id })\n .select('*')\n .options({ splits: 'grouped' })\n );\n let transactions = ungroupTransactions(data);\n\n if (transactions.length === 0) {\n return [];\n }\n\n let { diff } = deleteTransaction(transactions, id);\n return handlers['transactions-batch-update'](diff);\n});\n\nhandlers['api/accounts-get'] = async function() {\n let accounts = await db.getAccounts();\n return accounts.map(account => accountModel.toExternal(account));\n};\n\nhandlers['api/account-create'] = withMutation(async function({\n account,\n initialBalance = null\n}) {\n return handlers['account-create']({\n name: account.name,\n type: account.type,\n offBudget: account.offbudget,\n closed: account.closed,\n // Current the API expects an amount but it really should expect\n // an integer\n balance: initialBalance != null ? integerToAmount(initialBalance) : null\n });\n});\n\nhandlers['api/account-update'] = withMutation(async function({ id, fields }) {\n return db.updateAccount({ id, ...accountModel.fromExternal(fields) });\n});\n\nhandlers['api/account-close'] = withMutation(async function({\n id,\n transferAccountId,\n transferCategoryId\n}) {\n return handlers['account-close']({\n id,\n transferAccountId,\n categoryId: transferCategoryId\n });\n});\n\nhandlers['api/account-reopen'] = withMutation(async function({ id }) {\n return handlers['account-reopen']({ id });\n});\n\nhandlers['api/account-delete'] = withMutation(async function({ id }) {\n return handlers['account-close']({ id, forced: true });\n});\n\nhandlers['api/categories-get'] = async function({ grouped } = {}) {\n let result = await handlers['get-categories']();\n return grouped\n ? result.grouped.map(categoryGroupModel.toExternal)\n : result.list.map(categoryModel.toExternal);\n};\n\nhandlers['api/category-group-create'] = withMutation(async function({ group }) {\n return handlers['category-group-create']({ name: group.name });\n});\n\nhandlers['api/category-group-update'] = withMutation(async function({\n id,\n fields\n}) {\n return handlers['category-group-update']({\n id,\n ...categoryGroupModel.fromExternal(fields)\n });\n});\n\nhandlers['api/category-group-delete'] = withMutation(async function({\n id,\n transferCategoryId\n}) {\n return handlers['category-group-delete']({\n id,\n transferId: transferCategoryId\n });\n});\n\nhandlers['api/category-create'] = withMutation(async function({ category }) {\n return handlers['category-create']({\n name: category.name,\n groupId: category.group_id,\n isIncome: category.is_income\n });\n});\n\nhandlers['api/category-update'] = withMutation(async function({ id, fields }) {\n return handlers['category-update']({\n id,\n ...categoryModel.fromExternal(fields)\n });\n});\n\nhandlers['api/category-delete'] = withMutation(async function({\n id,\n transferCategoryId\n}) {\n return handlers['category-delete']({\n id,\n transferId: transferCategoryId\n });\n});\n\nhandlers['api/payees-get'] = async function() {\n let payees = await handlers['payees-get']();\n return payees.map(payeeModel.toExternal);\n};\n\nhandlers['api/payee-create'] = withMutation(async function({ payee }) {\n return handlers['payee-create']({ name: payee.name });\n});\n\nhandlers['api/payee-update'] = withMutation(async function({ id, fields }) {\n return handlers['payees-batch-change']({\n updated: [{ id, ...payeeModel.fromExternal(fields) }]\n });\n});\n\nhandlers['api/payee-delete'] = withMutation(async function({ id }) {\n return handlers['payees-batch-change']({ deleted: [{ id }] });\n});\n\nhandlers['api/payee-rules-get'] = async function({ payeeId }) {\n let rules = await handlers['payees-get-rules']({ id: payeeId });\n return rules.map(payeeRuleModel.toExternal);\n};\n\nhandlers['api/payee-rule-create'] = withMutation(async function({\n payee_id,\n rule\n}) {\n return handlers['payees-add-rule']({\n payee_id,\n type: rule.type,\n value: rule.value || null\n });\n});\n\nhandlers['api/payee-rule-update'] = withMutation(async function({\n id,\n fields\n}) {\n return handlers['payees-update-rule']({\n id,\n ...payeeRuleModel.fromExternal(fields)\n });\n});\n\nhandlers['api/payee-rule-delete'] = withMutation(async function({ id }) {\n return handlers['payees-delete-rule']({ id });\n});\n\nexport default function(serverHandlers) {\n handlers = Object.assign({}, serverHandlers, handlers);\n return handlers;\n}\n","import mitt from 'mitt';\nimport { captureException } from '../platform/exceptions';\n\n// This is a simple helper abstraction for defining methods exposed to\n// the client. It doesn't do much, but checks for naming conflicts and\n// makes it cleaner to combine methods. We call a group of related\n// methods an \"app\".\n\nclass App {\n constructor() {\n this.handlers = {};\n this.services = [];\n this.events = mitt();\n this.unlistenServices = [];\n }\n\n method(name, func) {\n if (this.handlers[name] != null) {\n throw new Error(\n 'Conflicting method name, names must be globally unique: ' + name\n );\n }\n this.handlers[name] = func;\n }\n\n service(func) {\n this.services.push(func);\n }\n\n combine(...apps) {\n for (let app of apps) {\n Object.keys(app.handlers).forEach(name => {\n this.method(name, app.handlers[name]);\n });\n\n app.services.forEach(service => {\n this.service(service);\n });\n\n for (let [name, listeners] of app.events.all.entries()) {\n for (let listener of listeners) {\n this.events.on(name, listener);\n }\n }\n }\n }\n\n startServices() {\n if (this.unlistenServices.length > 0) {\n captureException(\n new Error(\n 'App: startServices called while services are already running'\n )\n );\n }\n this.unlistenServices = this.services.map(service => service());\n }\n\n stopServices() {\n this.unlistenServices.forEach(unlisten => {\n if (unlisten) {\n unlisten();\n }\n });\n this.unlistenServices = [];\n }\n}\n\nexport function createApp() {\n return new App();\n}\n","let _uid = 0;\nfunction resetUid() {\n _uid = 0;\n}\n\nfunction uid(tableName) {\n _uid++;\n return tableName + _uid;\n}\n\nclass CompileError extends Error {}\n\nfunction nativeDateToInt(date) {\n let pad = x => (x < 10 ? '0' : '') + x;\n return date.getFullYear() + pad(date.getMonth() + 1) + pad(date.getDate());\n}\n\nfunction dateToInt(date) {\n return parseInt(date.replace(/-/g, ''));\n}\n\nexport function addTombstone(schema, tableName, tableId, whereStr) {\n let hasTombstone = schema[tableName].tombstone != null;\n return hasTombstone ? `${whereStr} AND ${tableId}.tombstone = 0` : whereStr;\n}\n\nfunction popPath(path) {\n let parts = path.split('.');\n return { path: parts.slice(0, -1).join('.'), field: parts[parts.length - 1] };\n}\n\nfunction isKeyword(str) {\n return str === 'group';\n}\n\nexport function quoteAlias(alias) {\n return alias.indexOf('.') === -1 && !isKeyword(alias) ? alias : `\"${alias}\"`;\n}\n\nfunction typed(value, type, { literal = false } = {}) {\n return { value, type, literal };\n}\n\nfunction getFieldDescription(schema, tableName, field) {\n if (schema[tableName] == null) {\n throw new CompileError(`Table \"${tableName}\" does not exist in the schema`);\n }\n\n let fieldDesc = schema[tableName][field];\n if (fieldDesc == null) {\n throw new CompileError(\n `Field \"${field}\" does not exist in table \"${tableName}\"`\n );\n }\n return fieldDesc;\n}\n\nfunction makePath(state, path) {\n let { schema, paths } = state;\n\n let parts = path.split('.');\n if (parts.length < 2) {\n throw new CompileError('Invalid path: ' + path);\n }\n\n let initialTable = parts[0];\n\n let tableName = parts.slice(1).reduce((tableName, field) => {\n let table = schema[tableName];\n\n if (table == null) {\n throw new CompileError(`Path error: ${tableName} table does not exist`);\n }\n\n if (!table[field] || table[field].ref == null) {\n throw new CompileError(\n `Field not joinable on table ${tableName}: \"${field}\"`\n );\n }\n\n return table[field].ref;\n }, initialTable);\n\n let joinTable;\n let parentParts = parts.slice(0, -1);\n if (parentParts.length === 1) {\n joinTable = parentParts[0];\n } else {\n let parentPath = parentParts.join('.');\n let parentDesc = paths.get(parentPath);\n if (!parentDesc) {\n throw new CompileError('Path does not exist: ' + parentPath);\n }\n joinTable = parentDesc.tableId;\n }\n\n return {\n tableName: tableName,\n tableId: uid(tableName),\n joinField: parts[parts.length - 1],\n joinTable\n };\n}\n\nfunction resolvePath(state, path) {\n let paths = path.split('.');\n let tableId;\n\n paths = paths.reduce(\n (acc, name) => {\n let fullName = acc.context + '.' + name;\n return {\n context: fullName,\n path: [...acc.path, fullName]\n };\n },\n { context: state.implicitTableName, path: [] }\n ).path;\n\n paths.forEach(path => {\n if (!state.paths.get(path)) {\n state.paths.set(path, makePath(state, path));\n }\n });\n\n let pathInfo = state.paths.get(paths[paths.length - 1]);\n return pathInfo;\n}\n\nfunction transformField(state, name) {\n if (typeof name !== 'string') {\n throw new CompileError('Invalid field name, must be a string');\n }\n\n let { path, field } = popPath(name);\n\n let pathInfo;\n if (path === '') {\n pathInfo = {\n tableName: state.implicitTableName,\n tableId: state.implicitTableId\n };\n } else {\n pathInfo = resolvePath(state, path);\n }\n\n let fieldDesc = getFieldDescription(state.schema, pathInfo.tableName, field);\n\n // If this is a field that references an item in another table, that\n // item could have been deleted. If that's the case, we want to\n // return `null` instead of an id pointing to a deleted item. This\n // converts an id reference into a path that pulls the id through a\n // table join which will filter out dead items, resulting in a\n // `null` id if the item is deleted\n if (\n state.validateRefs &&\n fieldDesc.ref &&\n fieldDesc.type === 'id' &&\n field !== 'id'\n ) {\n let refPath = state.implicitTableName + '.' + name;\n let refPathInfo = state.paths.get(refPath);\n\n if (!refPathInfo) {\n refPathInfo = makePath(state, refPath);\n refPathInfo.noMapping = true;\n state.paths.set(refPath, refPathInfo);\n }\n\n field = 'id';\n pathInfo = refPathInfo;\n }\n\n let fieldStr = pathInfo.tableId + '.' + field;\n return typed(fieldStr, fieldDesc.type);\n}\n\nfunction parseDate(str) {\n let m = str.match(/^(\\d{4}-\\d{2}-\\d{2})$/);\n if (m) {\n return typed(dateToInt(m[1]), 'date', { literal: true });\n }\n return null;\n}\n\nfunction parseMonth(str) {\n let m = str.match(/^(\\d{4}-\\d{2})$/);\n if (m) {\n return typed(dateToInt(m[1]), 'date', { literal: true });\n }\n return null;\n}\n\nfunction parseYear(str) {\n let m = str.match(/^(\\d{4})$/);\n if (m) {\n return typed(dateToInt(m[1]), 'date', { literal: true });\n }\n return null;\n}\n\nfunction badDateFormat(str, type) {\n throw new CompileError(`Bad ${type} format: ${str}`);\n}\n\nfunction inferParam(param, type) {\n let existingType = param.paramType;\n if (existingType) {\n let casts = {\n date: ['string'],\n 'date-month': ['date'],\n 'date-year': ['date', 'date-month'],\n id: ['string'],\n float: ['integer']\n };\n\n if (\n existingType !== type &&\n (!casts[type] || !casts[type].includes(existingType))\n ) {\n throw new Error(\n `Parameter \"${name}\" can't convert to ${type} (already inferred as ${existingType})`\n );\n }\n } else {\n param.paramType = type;\n }\n}\n\nfunction castInput(state, expr, type) {\n if (expr.type === type) {\n return expr;\n } else if (expr.type === 'param') {\n inferParam(expr, type);\n return typed(expr.value, type);\n } else if (expr.type === 'null') {\n if (!expr.literal) {\n throw new CompileError(\"A non-literal null doesn't make sense\");\n }\n\n if (type === 'boolean') {\n return typed(0, 'boolean', { literal: true });\n }\n return expr;\n }\n\n // These are all things that can be safely casted automatically\n if (type === 'date') {\n if (expr.type === 'string') {\n if (expr.literal) {\n return parseDate(expr.value) || badDateFormat(expr.value, 'date');\n } else {\n throw new CompileError(\n 'Casting string fields to dates is not supported'\n );\n }\n }\n\n throw new CompileError(`Can't cast ${expr.type} to date`);\n } else if (type === 'date-month') {\n let expr2;\n if (expr.type === 'date') {\n expr2 = expr;\n } else if (expr.type === 'string' || expr.type === 'any') {\n expr2 =\n parseMonth(expr.value) ||\n parseDate(expr.value) ||\n badDateFormat(expr.value, 'date-month');\n } else {\n throw new CompileError(`Can't cast ${expr.type} to date-month`);\n }\n\n if (expr2.literal) {\n return typed(\n dateToInt(expr2.value.toString().slice(0, 6)),\n 'date-month',\n { literal: true }\n );\n } else {\n return typed(\n `CAST(SUBSTR(${expr2.value}, 1, 6) AS integer)`,\n 'date-month'\n );\n }\n } else if (type === 'date-year') {\n let expr2;\n if (expr.type === 'date' || expr.type === 'date-month') {\n expr2 = expr;\n } else if (expr.type === 'string') {\n expr2 =\n parseYear(expr.value) ||\n parseMonth(expr.value) ||\n parseDate(expr.value) ||\n badDateFormat(expr.value, 'date-year');\n } else {\n throw new CompileError(`Can't cast ${expr.type} to date-year`);\n }\n\n if (expr2.literal) {\n return typed(dateToInt(expr2.value.toString().slice(0, 4)), 'date-year', {\n literal: true\n });\n } else {\n return typed(\n `CAST(SUBSTR(${expr2.value}, 1, 4) AS integer)`,\n 'date-year'\n );\n }\n } else if (type === 'id') {\n if (expr.type === 'string') {\n return typed(expr.value, 'id', { literal: expr.literal });\n }\n } else if (type === 'float') {\n if (expr.type === 'integer') {\n return typed(expr.value, 'float', { literal: expr.literal });\n }\n }\n\n if (expr.type === 'any') {\n return typed(expr.value, type, { literal: expr.literal });\n }\n\n throw new CompileError(`Can't convert ${expr.type} to ${type}`);\n}\n\n// TODO: remove state from these functions\nfunction val(state, expr, type) {\n let castedExpr = expr;\n\n // Cast the type if necessary\n if (type) {\n castedExpr = castInput(state, expr, type);\n }\n\n if (castedExpr.literal) {\n if (castedExpr.type === 'id') {\n return `'${castedExpr.value}'`;\n } else if (castedExpr.type === 'string') {\n // Escape quotes\n let value = castedExpr.value.replace(/'/g, \"''\");\n return `'${value}'`;\n }\n }\n\n return castedExpr.value;\n}\n\nfunction valArray(state, arr, types) {\n return arr.map((value, idx) => val(state, value, types ? types[idx] : null));\n}\n\nfunction validateArgLength(arr, min, max) {\n if (max == null) {\n max = min;\n }\n\n if (min != null && arr.length < min) {\n throw new CompileError('Too few arguments');\n }\n if (max != null && arr.length > max) {\n throw new CompileError('Too many arguments');\n }\n}\n\n//// Nice errors\n\nfunction saveStack(type, func) {\n return (state, ...args) => {\n if (state == null || state.compileStack == null) {\n throw new CompileError(\n 'This function cannot track error data. ' +\n 'It needs to accept the compiler state as the first argument.'\n );\n }\n\n state.compileStack.push({ type, args });\n let ret = func(state, ...args);\n state.compileStack.pop();\n return ret;\n };\n}\n\nfunction prettyValue(value) {\n if (typeof value === 'string') {\n return value;\n } else if (value === undefined) {\n return 'undefined';\n }\n\n let str = JSON.stringify(value);\n if (str.length > 70) {\n let expanded = JSON.stringify(value, null, 2);\n return expanded.split('\\n').join('\\n ');\n }\n return str;\n}\n\nfunction getCompileError(error, stack) {\n if (stack.length === 0) {\n return error;\n }\n\n let stackStr = stack\n .slice(1)\n .reverse()\n .map(entry => {\n switch (entry.type) {\n case 'expr':\n case 'function':\n return prettyValue(entry.args[0]);\n case 'op': {\n let [fieldRef, opData] = entry.args;\n return prettyValue({ [fieldRef]: opData });\n }\n case 'value':\n return prettyValue(entry.value);\n default:\n return '';\n }\n })\n .map(str => '\\n ' + str)\n .join('');\n\n const rootMethod = stack[0].type;\n const methodArgs = stack[0].args[0];\n stackStr += `\\n ${rootMethod}(${prettyValue(\n methodArgs.length === 1 ? methodArgs[0] : methodArgs\n )})`;\n\n // In production, hide internal stack traces\n if (process.env.NODE_ENV === 'production') {\n const err = new CompileError();\n err.message = `${error.message}\\n\\nExpression stack:` + stackStr;\n err.stack = null;\n return err;\n }\n\n error.message = `${error.message}\\n\\nExpression stack:` + stackStr;\n return error;\n}\n\n//// Compiler\n\nfunction compileLiteral(value) {\n if (value === undefined) {\n throw new CompileError('`undefined` is not a valid query value');\n } else if (value === null) {\n return typed('NULL', 'null', { literal: true });\n } else if (value instanceof Date) {\n return typed(nativeDateToInt(value), 'date', { literal: true });\n } else if (typeof value === 'string') {\n // Allow user to escape $, and quote the string to make it a\n // string literal in the output\n value = value.replace(/\\\\\\$/g, '$');\n return typed(value, 'string', { literal: true });\n } else if (typeof value === 'boolean') {\n return typed(value ? 1 : 0, 'boolean', { literal: true });\n } else if (typeof value === 'number') {\n return typed(value, (value | 0) === value ? 'integer' : 'float', {\n literal: true\n });\n } else if (Array.isArray(value)) {\n return typed(value, 'array', { literal: true });\n } else {\n throw new CompileError(\n 'Unsupported type of expression: ' + JSON.stringify(value)\n );\n }\n}\n\nconst compileExpr = saveStack('expr', (state, expr) => {\n if (typeof expr === 'string') {\n // Field reference\n if (expr[0] === '$') {\n let fieldRef = expr === '$' ? state.implicitField : expr.slice(1);\n\n if (fieldRef == null || fieldRef === '') {\n throw new CompileError('Invalid field reference: ' + expr);\n }\n\n return transformField(state, fieldRef);\n }\n\n // Named parameter\n if (expr[0] === ':') {\n let param = { value: '?', type: 'param', paramName: expr.slice(1) };\n state.namedParameters.push(param);\n return param;\n }\n }\n\n if (expr !== null) {\n if (Array.isArray(expr)) {\n return compileLiteral(expr);\n } else if (\n typeof expr === 'object' &&\n Object.keys(expr).find(k => k[0] === '$')\n ) {\n // It's a function call\n return compileFunction(state, expr);\n }\n }\n\n return compileLiteral(expr);\n});\n\nfunction assertType(name, data, acceptedTypes) {\n if (acceptedTypes.indexOf(data.type) === -1) {\n throw new CompileError(\n `Invalid type of expression to ${name}, must be one of ${JSON.stringify(\n acceptedTypes\n )}: ${JSON.stringify(data.value)}`\n );\n }\n}\n\nfunction assertArgLength(name, args, len) {\n if (args.length !== len) {\n throw new CompileError(\n `Invalid number of args to ${name}: expected ${len} but received ${args.length}`\n )();\n }\n}\n\nconst compileFunction = saveStack('function', (state, func) => {\n let [name] = Object.keys(func);\n let argExprs = func[name];\n if (!Array.isArray(argExprs)) {\n argExprs = [argExprs];\n }\n\n if (name[0] !== '$') {\n throw new CompileError(\n `Unknown property \"${name}\". Did you mean to call a function? Try prefixing it with $`\n );\n }\n\n let args = argExprs;\n // `$condition` is a special-case where it will be evaluated later\n if (name !== '$condition') {\n args = argExprs.map(arg => compileExpr(state, arg));\n }\n\n switch (name) {\n // aggregate functions\n case '$sum': {\n validateArgLength(args, 1);\n let [arg1] = valArray(state, args, ['float']);\n return typed(`SUM(${arg1})`, args[0].type);\n }\n\n case '$sumOver': {\n let [arg1] = valArray(state, args, ['float']);\n let order = state.orders\n ? 'ORDER BY ' + compileOrderBy(state, state.orders)\n : '';\n\n return typed(\n `(SUM(${arg1}) OVER (${order} ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING))`,\n args[0].type\n );\n }\n\n case '$count': {\n validateArgLength(args, 1);\n let [arg1] = valArray(state, args);\n return typed(`COUNT(${arg1})`, 'integer');\n }\n\n // string functions\n case '$substr': {\n validateArgLength(args, 2, 3);\n let [arg1, arg2, arg3] = valArray(state, args, [\n 'string',\n 'integer',\n 'integer'\n ]);\n return typed(`SUBSTR(${arg1}, ${arg2}, ${arg3})`, 'string');\n }\n case '$lower': {\n validateArgLength(args, 1);\n let [arg1] = valArray(state, args, ['string']);\n return typed(`LOWER(${arg1})`, 'string');\n }\n\n // integer/float functions\n case '$neg': {\n validateArgLength(args, 1);\n let [arg1] = valArray(state, args, ['float']);\n return typed(`(-${val(state, args[0])})`, args[0].type);\n }\n case '$abs': {\n validateArgLength(args, 1);\n let [arg1] = valArray(state, args, ['float']);\n return typed(`ABS(${val(state, args[0])})`, args[0].type);\n }\n case '$idiv': {\n validateArgLength(args, 2);\n let [arg1, arg2] = valArray(state, args, ['integer', 'integer']);\n return typed(\n `(${val(state, args[0])} / ${val(state, args[1])})`,\n args[0].type\n );\n }\n\n // date functions\n case '$month': {\n validateArgLength(args, 1);\n return castInput(state, args[0], 'date-month');\n }\n case '$year': {\n validateArgLength(args, 1);\n return castInput(state, args[0], 'date-year');\n }\n\n // various functions\n case '$condition':\n validateArgLength(args, 1);\n let conds = compileConditions(state, args[0]);\n return typed(conds.join(' AND '), 'boolean');\n\n case '$nocase':\n validateArgLength(args, 1);\n let [arg1] = valArray(state, args, ['string']);\n return typed(`${arg1} COLLATE NOCASE`, args[0].type);\n\n case '$literal': {\n validateArgLength(args, 1);\n if (!args[0].literal) {\n throw new CompileError('Literal not passed to $literal');\n }\n return args[0];\n }\n default:\n throw new CompileError(`Unknown function: ${name}`);\n }\n});\n\nconst compileOp = saveStack('op', (state, fieldRef, opData) => {\n let { $transform, ...opExpr } = opData;\n let [op] = Object.keys(opExpr);\n\n let rhs = compileExpr(state, opData[op]);\n\n let lhs;\n if ($transform) {\n lhs = compileFunction(\n { ...state, implicitField: fieldRef },\n typeof $transform === 'string' ? { [$transform]: '$' } : $transform\n );\n } else {\n lhs = compileExpr(state, '$' + fieldRef);\n }\n\n switch (op) {\n case '$gte': {\n let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n return `${left} >= ${right}`;\n }\n case '$lte': {\n let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n return `${left} <= ${right}`;\n }\n case '$gt': {\n let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n return `${left} > ${right}`;\n }\n case '$lt': {\n let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n return `${left} < ${right}`;\n }\n case '$eq': {\n if (castInput(state, rhs, lhs.type).type === 'null') {\n return `${val(state, lhs)} IS NULL`;\n }\n\n let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n\n if (rhs.type === 'param') {\n let orders = state.namedParameters.map(param => {\n return param === rhs || param === lhs ? [param, { ...param }] : param;\n });\n state.namedParameters = [].concat.apply([], orders);\n\n return `CASE\n WHEN ${left} IS NULL THEN ${right} IS NULL\n ELSE ${left} = ${right}\n END`;\n }\n\n return `${left} = ${right}`;\n }\n case '$oneof': {\n let [left, right] = valArray(state, [lhs, rhs], [null, 'array']);\n // Dedupe the ids\n let ids = [...new Set(right)];\n return `${left} IN (` + ids.map(id => `'${id}'`).join(',') + ')';\n }\n case '$like': {\n let [left, right] = valArray(state, [lhs, rhs], ['string', 'string']);\n return `${left} LIKE ${right}`;\n }\n default:\n throw new CompileError(`Unknown operator: ${op}`);\n }\n});\n\nfunction compileConditions(state, conds) {\n if (!Array.isArray(conds)) {\n // Convert the object form `{foo: 1, bar:2}` into the array form\n // `[{foo: 1}, {bar:2}]`\n conds = Object.entries(conds).map(cond => {\n return { [cond[0]]: cond[1] };\n });\n }\n\n return conds.filter(Boolean).reduce((res, condsObj) => {\n let compiled = Object.entries(condsObj)\n .map(([field, cond]) => {\n // Allow a falsy value in the lhs of $and and $or to allow for\n // quick forms like `$or: amount != 0 && ...`\n if (field === '$and') {\n if (!cond) {\n return null;\n }\n return compileAnd(state, cond);\n } else if (field === '$or') {\n if (!cond) {\n return null;\n }\n return compileOr(state, cond);\n }\n\n if (\n typeof cond === 'string' ||\n typeof cond === 'number' ||\n typeof cond === 'boolean' ||\n cond instanceof Date ||\n cond == null\n ) {\n return compileOp(state, field, { $eq: cond });\n }\n\n if (Array.isArray(cond)) {\n // An array of conditions for a field is implicitly an `and`\n return cond.map(c => compileOp(state, field, c)).join(' AND ');\n }\n return compileOp(state, field, cond);\n })\n .filter(Boolean);\n\n return [...res, ...compiled];\n }, []);\n}\n\nfunction compileOr(state, conds) {\n // Same as above\n if (!conds) {\n return '0';\n }\n let res = compileConditions(state, conds);\n if (res.length === 0) {\n return '0';\n }\n return '(' + res.join('\\n OR ') + ')';\n}\n\nfunction compileAnd(state, conds) {\n // Same as above\n if (!conds) {\n return '1';\n }\n let res = compileConditions(state, conds);\n if (res.length === 0) {\n return '1';\n }\n return '(' + res.join('\\n AND ') + ')';\n}\n\nconst compileWhere = saveStack('filter', (state, conds) => {\n return compileAnd(state, conds);\n});\n\nfunction compileJoins(state, tableRef, internalTableFilters) {\n let joins = [];\n state.paths.forEach((desc, path) => {\n let {\n tableName,\n tableId,\n joinField,\n joinTable,\n noMapping\n } = state.paths.get(path);\n\n let on = `${tableId}.id = ${tableRef(joinTable)}.${quoteAlias(joinField)}`;\n\n let filters = internalTableFilters(tableName);\n if (filters.length > 0) {\n on +=\n ' AND ' +\n compileAnd(\n { ...state, implicitTableName: tableName, implicitTableId: tableId },\n filters\n );\n }\n\n joins.push(\n `LEFT JOIN ${\n noMapping ? tableName : tableRef(tableName, true)\n } ${tableId} ON ${addTombstone(state.schema, tableName, tableId, on)}`\n );\n\n if (state.dependencies.indexOf(tableName) === -1) {\n state.dependencies.push(tableName);\n }\n });\n return joins.join('\\n');\n}\n\nfunction expandStar(state, expr) {\n let path;\n let pathInfo;\n if (expr === '*') {\n pathInfo = {\n tableName: state.implicitTableName,\n tableId: state.implicitTableId\n };\n } else if (expr.match(/\\.\\*$/)) {\n let result = popPath(expr);\n path = result.path;\n pathInfo = resolvePath(state, result.path);\n }\n\n let table = state.schema[pathInfo.tableName];\n if (table == null) {\n throw new Error(`Table \"${pathInfo.tableName}\" does not exist`);\n }\n\n return Object.keys(table).map(field => (path ? `${path}.${field}` : field));\n}\n\nconst compileSelect = saveStack(\n 'select',\n (state, exprs, isAggregate, orders) => {\n // Always include the id if it's not an aggregate\n if (!isAggregate && !exprs.includes('id') && !exprs.includes('*')) {\n exprs = exprs.concat(['id']);\n }\n\n let select = exprs.map(expr => {\n if (typeof expr === 'string') {\n if (expr.indexOf('*') !== -1) {\n let fields = expandStar(state, expr);\n\n return fields\n .map(field => {\n let compiled = compileExpr(state, '$' + field);\n state.outputTypes.set(field, compiled.type);\n return compiled.value + ' AS ' + quoteAlias(field);\n })\n .join(', ');\n }\n\n let compiled = compileExpr(state, '$' + expr);\n state.outputTypes.set(expr, compiled.type);\n return compiled.value + ' AS ' + quoteAlias(expr);\n }\n\n let [name, value] = Object.entries(expr)[0];\n if (name[0] === '$') {\n state.compileStack.push({ type: 'value', value: expr });\n throw new CompileError(\n `Invalid field \"${name}\", are you trying to select a function? You need to name the expression`\n );\n }\n\n if (typeof value === 'string') {\n let compiled = compileExpr(state, '$' + value);\n state.outputTypes.set(name, compiled.type);\n return `${compiled.value} AS ${quoteAlias(name)}`;\n }\n\n let compiled = compileFunction({ ...state, orders }, value);\n state.outputTypes.set(name, compiled.type);\n return compiled.value + ` AS ${quoteAlias(name)}`;\n });\n\n return select.join(', ');\n }\n);\n\nconst compileGroupBy = saveStack('groupBy', (state, exprs) => {\n let groupBy = exprs.map(expr => {\n if (typeof expr === 'string') {\n return compileExpr(state, '$' + expr).value;\n }\n\n return compileFunction(state, expr).value;\n });\n\n return groupBy.join(', ');\n});\n\nconst compileOrderBy = saveStack('orderBy', (state, exprs) => {\n let orderBy = exprs.map(expr => {\n let compiled;\n let dir = null;\n\n if (typeof expr === 'string') {\n compiled = compileExpr(state, '$' + expr).value;\n } else {\n let entries = Object.entries(expr);\n let entry = entries[0];\n\n // Check if this is a field reference\n if (entries.length === 1 && entry[0][0] !== '$') {\n dir = entry[1];\n compiled = compileExpr(state, '$' + entry[0]).value;\n } else {\n // Otherwise it's a function\n let { $dir, ...func } = expr;\n dir = $dir;\n compiled = compileFunction(state, func).value;\n }\n }\n\n if (dir != null) {\n if (dir !== 'desc' && dir !== 'asc') {\n throw new CompileError('Invalid order direction: ' + dir);\n }\n return `${compiled} ${dir}`;\n }\n return compiled;\n });\n\n return orderBy.join(', ');\n});\n\nlet AGGREGATE_FUNCTIONS = ['$sum', '$count'];\nfunction isAggregateFunction(expr) {\n if (typeof expr !== 'object' || Array.isArray(expr)) {\n return false;\n }\n\n let [name, argExprs] = Object.entries(expr)[0];\n if (!Array.isArray(argExprs)) {\n argExprs = [argExprs];\n }\n\n if (AGGREGATE_FUNCTIONS.indexOf(name) !== -1) {\n return true;\n }\n\n return argExprs.find(ex => isAggregateFunction(ex));\n}\n\nexport function isAggregateQuery(queryState) {\n // it's aggregate if:\n // either an aggregate function is used in `select`\n // or a `groupBy` exists\n\n if (queryState.groupExpressions.length > 0) {\n return true;\n }\n\n return queryState.selectExpressions.find(expr => {\n if (typeof expr !== 'string') {\n let [name, value] = Object.entries(expr)[0];\n return isAggregateFunction(value);\n }\n return false;\n });\n}\n\nexport function compileQuery(queryState, schema, schemaConfig = {}) {\n let { withDead, validateRefs = true, tableOptions, rawMode } = queryState;\n\n let {\n tableViews = {},\n tableFilters = name => [],\n customizeQuery = queryState => queryState\n } = schemaConfig;\n\n let internalTableFilters = name => {\n let filters = tableFilters(name);\n // These filters cannot join tables and must be simple strings\n for (let filter of filters) {\n if (Array.isArray(filter)) {\n throw new CompileError(\n 'Invalid internal table filter: only object filters are supported'\n );\n }\n if (Object.keys(filter)[0].indexOf('.') !== -1) {\n throw new CompileError(\n 'Invalid internal table filter: field names cannot contain paths'\n );\n }\n }\n return filters;\n };\n\n let tableRef = (name, isJoin) => {\n let view =\n typeof tableViews === 'function'\n ? tableViews(name, { withDead, isJoin, tableOptions })\n : tableViews[name];\n return view || name;\n };\n\n let tableName = queryState.table;\n\n let {\n filterExpressions,\n selectExpressions,\n groupExpressions,\n orderExpressions,\n limit,\n offset,\n calculation\n } = customizeQuery(queryState);\n\n let select = '';\n let where = '';\n let joins = '';\n let groupBy = '';\n let orderBy = '';\n let dependences = [];\n let state = {\n schema,\n implicitTableName: tableName,\n implicitTableId: tableRef(tableName),\n paths: new Map(),\n dependencies: [tableName],\n compileStack: [],\n outputTypes: new Map(),\n validateRefs,\n namedParameters: []\n };\n\n resetUid();\n\n try {\n select = compileSelect(\n state,\n selectExpressions,\n isAggregateQuery(queryState),\n orderExpressions\n );\n\n if (filterExpressions.length > 0) {\n let result = compileWhere(state, filterExpressions);\n where = 'WHERE ' + result;\n } else {\n where = 'WHERE 1';\n }\n\n if (!rawMode) {\n let filters = internalTableFilters(tableName);\n if (filters.length > 0) {\n where += ' AND ' + compileAnd(state, filters);\n }\n }\n\n if (groupExpressions.length > 0) {\n let result = compileGroupBy(state, groupExpressions);\n groupBy = 'GROUP BY ' + result;\n }\n\n // Orders don't matter if doing a single calculation\n if (orderExpressions.length > 0) {\n let result = compileOrderBy(state, orderExpressions);\n orderBy = 'ORDER BY ' + result;\n }\n\n if (state.paths.size > 0) {\n joins = compileJoins(state, tableRef, internalTableFilters);\n }\n } catch (e) {\n if (e instanceof CompileError) {\n throw getCompileError(e, state.compileStack);\n }\n\n throw e;\n }\n\n let sqlPieces = {\n select,\n from: tableRef(tableName),\n joins,\n where,\n groupBy,\n orderBy,\n limit,\n offset\n };\n\n return {\n sqlPieces,\n state\n };\n}\n\nexport function defaultConstructQuery(queryState, state, sqlPieces) {\n let s = sqlPieces;\n\n let where = queryState.withDead\n ? s.where\n : addTombstone(\n state.schema,\n state.implicitTableName,\n state.implicitTableId,\n s.where\n );\n\n return `\n SELECT ${s.select} FROM ${s.from}\n ${s.joins}\n ${where}\n ${s.groupBy}\n ${s.orderBy}\n ${s.limit != null ? `LIMIT ${s.limit}` : ''}\n ${s.offset != null ? `OFFSET ${s.offset}` : ''}\n `;\n}\n\nexport function generateSQLWithState(queryState, schema, schemaConfig) {\n let { sqlPieces, state } = compileQuery(queryState, schema, schemaConfig);\n return { sql: defaultConstructQuery(queryState, state, sqlPieces), state };\n}\n\nexport function generateSQL(queryState) {\n return generateSQLWithState(queryState).sql;\n}\n","import * as db from '../db';\nimport { compileQuery, defaultConstructQuery } from './compiler';\nimport { convertInputType, convertOutputType } from './schema-helpers';\n\n// TODO (compiler):\n// * Properly safeguard all inputs against SQL injection\n// * Functions for incr/decr dates\n// * Support HAVING\n// * Allow creating in-memory tables to run queries against static\n// data\n// * For aggregate functions on selected ids, manually implement\n// them only only support a specific few (sum amount / etc)\n// * Select expressions should be evaluated first, and added to a\n// global \"field lookup\" table that other filter/groupBy/etc\n// expressions can reference\n\nfunction applyTypes(data, outputTypes) {\n for (let i = 0; i < data.length; i++) {\n let item = data[i];\n Object.keys(item).forEach(name => {\n item[name] = convertOutputType(item[name], outputTypes.get(name));\n });\n }\n}\n\nexport async function execQuery(\n queryState,\n state,\n sqlPieces,\n params,\n outputTypes\n) {\n let sql = defaultConstructQuery(queryState, state, sqlPieces);\n let data = await db.all(sql, params);\n applyTypes(data, outputTypes);\n return data;\n}\n\nexport async function runCompiledQuery(\n query,\n pieces,\n state,\n { params = {}, executors = {} } = {}\n) {\n let paramArray = state.namedParameters.map(param => {\n let name = param.paramName;\n if (params[name] === undefined) {\n throw new Error(`Parameter ${name} not provided to query`);\n }\n return convertInputType(params[name], param.paramType);\n });\n\n let data;\n if (executors[state.implicitTableName]) {\n data = await executors[state.implicitTableName](\n state,\n query,\n pieces,\n paramArray,\n state.outputTypes\n );\n } else {\n data = await execQuery(query, state, pieces, paramArray, state.outputTypes);\n }\n\n if (query.calculation) {\n if (data.length > 0) {\n let row = data[0];\n let k = Object.keys(row)[0];\n // TODO: the function being run should be the one to\n // determine the default value, not hardcoded as 0\n data = row[k] || 0;\n } else {\n data = null;\n }\n }\n return data;\n}\n\nexport async function runQuery(schema, schemaConfig, query, options) {\n let { sqlPieces, state } = compileQuery(query, schema, schemaConfig);\n let data = await runCompiledQuery(query, sqlPieces, state, options);\n return { data, dependencies: state.dependencies };\n}\n","import { toDateRepr, fromDateRepr } from '../models';\nimport { dayFromDate } from '../../shared/months';\n\nfunction isRequired(name, fieldDesc) {\n return fieldDesc.required || name === 'id';\n}\n\n// TODO: All of the data type needs to check the input value. This\n// doesn't just convert, it casts. See integer handling.\nexport function convertInputType(value, type) {\n if (value === undefined) {\n throw new Error('Query value cannot be undefined');\n } else if (value === null) {\n if (type === 'boolean') {\n return 0;\n }\n\n return null;\n }\n\n switch (type) {\n case 'date':\n if (value instanceof Date) {\n return toDateRepr(dayFromDate(value));\n } else if (\n value.match(/^\\d{4}-\\d{2}-\\d{2}$/) == null ||\n value.date < '2000-01-01'\n ) {\n throw new Error('Invalid date: ' + value);\n }\n\n return toDateRepr(value);\n case 'date-month':\n return toDateRepr(value.slice(0, 7));\n case 'date-year':\n return toDateRepr(value.slice(0, 4));\n case 'boolean':\n return value ? 1 : 0;\n case 'id':\n if (typeof value !== 'string' && value !== null) {\n throw new Error('Invalid id, must be string: ' + value);\n }\n return value;\n case 'integer':\n if (typeof value === 'number' && (value | 0) === value) {\n return value;\n } else {\n throw new Error(\"Can't convert to integer: \" + JSON.stringify(value));\n }\n case 'json':\n return JSON.stringify(value);\n default:\n }\n return value;\n}\n\nexport function convertOutputType(value, type) {\n if (value === null) {\n if (type === 'boolean') {\n return false;\n }\n return null;\n }\n\n switch (type) {\n case 'date':\n return fromDateRepr(value);\n case 'date-month':\n return fromDateRepr(value).slice(0, 7);\n case 'date-year':\n return fromDateRepr(value).slice(0, 4);\n case 'boolean':\n return value === 1;\n case 'json':\n case 'json/fallback':\n try {\n return JSON.parse(value);\n } catch (e) {\n return type === 'json/fallback' ? value : null;\n }\n default:\n }\n\n return value;\n}\n\nexport function conform(schema, schemaConfig, table, obj, { skipNull } = {}) {\n let tableSchema = schema[table];\n if (tableSchema == null) {\n throw new Error(`Table \"${table}\" does not exist`);\n }\n\n let views = schemaConfig.views || {};\n\n // Rename fields if necessary\n let fieldRef = field => {\n if (views[table] && views[table].fields) {\n return views[table].fields[field] || field;\n }\n return field;\n };\n\n return Object.fromEntries(\n Object.keys(obj)\n .map(field => {\n // Fields that start with an underscore are ignored\n if (field[0] === '_') {\n return null;\n }\n\n let fieldDesc = tableSchema[field];\n if (fieldDesc == null) {\n throw new Error(\n `Field \"${field}\" does not exist on table ${table}: ${JSON.stringify(\n obj\n )}`\n );\n }\n\n if (isRequired(field, fieldDesc) && obj[field] == null) {\n throw new Error(\n `\"${field}\" is required for table \"${table}\": ${JSON.stringify(\n obj\n )}`\n );\n }\n\n // This option removes null values (see `convertForInsert`)\n if (skipNull && obj[field] == null) {\n return null;\n }\n\n return [fieldRef(field), convertInputType(obj[field], fieldDesc.type)];\n })\n .filter(Boolean)\n );\n}\n\nexport function convertForInsert(schema, schemaConfig, table, rawObj) {\n let obj = { ...rawObj };\n\n let tableSchema = schema[table];\n if (tableSchema == null) {\n throw new Error(`Error inserting: table \"${table}\" does not exist`);\n }\n\n // Inserting checks all the fields in the table and adds any default\n // values necessary\n Object.keys(tableSchema).forEach(field => {\n let fieldDesc = tableSchema[field];\n\n if (obj[field] == null) {\n if (fieldDesc.default !== undefined) {\n obj[field] =\n typeof fieldDesc.default === 'function'\n ? fieldDesc.default()\n : fieldDesc.default;\n } else if (isRequired(field, fieldDesc)) {\n // Although this check is also done in `conform`, it only\n // checks the fields in `obj`. For insert, we need to do it\n // here to check that all required fields in the table exist\n throw new Error(\n `\"${field}\" is required for table \"${table}\": ${JSON.stringify(obj)}`\n );\n }\n }\n });\n\n // We use `skipNull` to remove any null values. There's no need to\n // set those when inserting, that will be the default and it reduces\n // the amount of messages generated to sync\n return conform(schema, schemaConfig, table, obj, { skipNull: true });\n}\n\nexport function convertForUpdate(schema, schemaConfig, table, rawObj) {\n let obj = { ...rawObj };\n\n let tableSchema = schema[table];\n if (tableSchema == null) {\n throw new Error(`Error updating: table \"${table}\" does not exist`);\n }\n\n return conform(schema, schemaConfig, table, obj);\n}\n\nexport function convertFromSelect(schema, schemaConfig, table, obj) {\n let tableSchema = schema[table];\n if (tableSchema == null) {\n throw new Error(`Table \"${table}\" does not exist`);\n }\n\n let fields = Object.keys(tableSchema);\n let result = {};\n for (let i = 0; i < fields.length; i++) {\n let fieldName = fields[i];\n let fieldDesc = tableSchema[fieldName];\n\n result[fieldName] = convertOutputType(obj[fieldName], fieldDesc.type);\n }\n return result;\n}\n","import * as db from '../../db';\nimport { whereIn } from '../../db/util';\nimport { groupBy } from '../../../shared/util';\nimport { isAggregateQuery } from '../compiler';\nimport { convertOutputType } from '../schema-helpers';\nimport { execQuery } from '../exec';\n\n// Transactions executor\n\nexport function toGroup(parents, children, mapper = x => x) {\n return parents.reduce((list, parent) => {\n let childs = children.get(parent.id) || [];\n list.push({\n ...mapper(parent),\n subtransactions: childs.map(mapper)\n });\n return list;\n }, []);\n}\n\n// These two queries will return very different things:\n//\n// q('transactions').select({ $count: 'id' })\n// q('transactions', { splits: \"grouped\" }).select({ $count: 'id' })\n//\n// The first will return the count of non-split and child\n// transactions, and the second will return the count of all parent\n// (or non-split) transactions\n\nfunction execTransactions(state, query, sql, params, outputTypes) {\n let tableOptions = query.tableOptions || {};\n let splitType = tableOptions.splits || 'inline';\n\n if (['all', 'inline', 'none', 'grouped'].indexOf(splitType) === -1) {\n throw new Error(`Invalid \"splits\" option for transactions: \"${splitType}\"`);\n }\n\n if (splitType === 'all' || splitType === 'inline' || splitType === 'none') {\n return execTransactionsBasic(\n state,\n query,\n sql,\n params,\n splitType,\n outputTypes\n );\n } else if (splitType === 'grouped') {\n return execTransactionsGrouped(\n state,\n query,\n sql,\n params,\n splitType,\n outputTypes\n );\n }\n}\n\nfunction _isUnhappy(filter) {\n // These fields can be filtered - all split transactions will\n // still be returned regardless\n for (let key of Object.keys(filter)) {\n if (key === '$or' || key === '$and') {\n if (filter[key] && _isUnhappy(filter[key])) {\n return true;\n }\n } else if (!(key.indexOf('account') === 0 || key === 'date')) {\n return true;\n }\n }\n return false;\n}\n\nexport function isHappyPathQuery(queryState) {\n return queryState.filterExpressions.find(_isUnhappy) == null;\n}\n\nasync function execTransactionsGrouped(\n state,\n queryState,\n sql,\n params,\n splitType,\n outputTypes\n) {\n let { table: tableName, withDead } = queryState;\n let whereDead = withDead ? '' : `AND ${sql.from}.tombstone = 0`;\n\n if (isAggregateQuery(queryState)) {\n let allSql = `\n SELECT ${sql.select}\n FROM ${sql.from}\n ${sql.joins}\n ${sql.where} AND is_parent = 0 ${whereDead}\n ${sql.groupBy}\n ${sql.orderBy}\n ${sql.limit != null ? `LIMIT ${sql.limit}` : ''}\n ${sql.offset != null ? `OFFSET ${sql.offset}` : ''}\n `;\n return db.all(allSql);\n }\n\n let rows;\n let matched = null;\n\n if (isHappyPathQuery(queryState)) {\n // This is just an optimization - we can just filter out children\n // directly and only list parents\n let rowSql = `\n SELECT ${sql.from}.id as group_id\n FROM ${sql.from}\n ${sql.joins}\n ${sql.where} AND is_child = 0 ${whereDead}\n ${sql.orderBy}\n ${sql.limit != null ? `LIMIT ${sql.limit}` : ''}\n ${sql.offset != null ? `OFFSET ${sql.offset}` : ''}\n `;\n rows = await db.all(rowSql, params);\n } else {\n // TODO: phew, what a doozy. write docs why it works this way\n //\n // prettier-ignore\n let rowSql = `\n SELECT group_id, matched FROM (\n SELECT\n group_id,\n GROUP_CONCAT(id) as matched\n FROM (\n SELECT ${sql.from}.id, IFNULL(${sql.from}.parent_id, ${sql.from}.id) as group_id\n FROM ${sql.from}\n LEFT JOIN transactions _t2 ON ${sql.from}.is_child = 1 AND _t2.id = ${sql.from}.parent_id\n ${sql.joins}\n ${sql.where} AND ${sql.from}.tombstone = 0 AND IFNULL(_t2.tombstone, 0) = 0\n )\n GROUP BY group_id\n )\n LEFT JOIN ${sql.from} ON ${sql.from}.id = group_id\n ${sql.joins}\n ${sql.orderBy}\n ${sql.limit != null ? `LIMIT ${sql.limit}` : ''}\n ${sql.offset != null ? `OFFSET ${sql.offset}` : ''}\n `;\n\n rows = await db.all(rowSql, params);\n matched = new Set(\n [].concat.apply([], rows.map(row => row.matched.split(',')))\n );\n }\n\n let where = whereIn(\n rows.map(row => row.group_id),\n `IFNULL(${sql.from}.parent_id, ${sql.from}.id)`\n );\n let finalSql = `\n SELECT ${sql.select}, parent_id AS _parent_id FROM ${sql.from}\n ${sql.joins}\n WHERE ${where} ${whereDead}\n ${sql.orderBy}\n `;\n\n let start = Date.now();\n let allRows = await db.all(finalSql);\n\n // Group the parents and children up\n let { parents, children } = allRows.reduce(\n (acc, trans) => {\n let pid = trans._parent_id;\n delete trans._parent_id;\n\n if (pid == null) {\n acc.parents.push(trans);\n } else {\n let arr = acc.children.get(pid) || [];\n arr.push(trans);\n acc.children.set(pid, arr);\n }\n return acc;\n },\n { parents: [], children: new Map() }\n );\n\n let mapper = trans => {\n Object.keys(trans).forEach(name => {\n trans[name] = convertOutputType(trans[name], outputTypes.get(name));\n });\n\n if (matched && !matched.has(trans.id)) {\n trans._unmatched = true;\n }\n return trans;\n };\n\n return toGroup(parents, children, mapper);\n}\n\nasync function execTransactionsBasic(\n state,\n queryState,\n sql,\n params,\n splitType,\n outputTypes\n) {\n let s = { ...sql };\n\n if (splitType !== 'all') {\n if (splitType === 'none') {\n s.where = `${s.where} AND ${s.from}.parent_id IS NULL`;\n } else {\n s.where = `${s.where} AND ${s.from}.is_parent = 0`;\n }\n }\n\n return execQuery(queryState, state, s, params, outputTypes);\n}\n\nexport default {\n transactions: execTransactions\n};\n","function f(type, opts) {\n return { type, ...opts };\n}\n\n// This is the table schema!\n//\n// The schema itself is the public API for querying and updating data.\n// The schema config provides a lot of control over how queries are\n// constructed other metadata used by the executors. The goal is to\n// provide a simple interface to the app, but allow the backend to\n// highly optimize how queries are run.\n//\n// A few notes:\n//\n// * `transactions` is a special table and is has a highly customized\n// executor (see `executors.js`) for performace. It should mostly be\n// transparent to you, but it's worth reading the comments in there if\n// requirements change, especially regarding split transactions.\n//\n// * You should rarely change the schema and only add to it, but it is\n// relatively safe to change if needed. The only problem is changing a\n// public API, but that could be mitigated with an option in schema\n// config to map field name for backwards compatibility.\n//\n// * It's important that the table names here in the schema map to the\n// real tables in sqlite that are updated. Otherwise subscriptions\n// might not work because the dependencies are wrong. If needed in the\n// future, we can provide another option in the schema config to map a\n// table name the internal table that is updated.\n\nexport const schema = {\n transactions: {\n id: f('id'),\n is_parent: f('boolean'),\n is_child: f('boolean'),\n parent_id: f('id'),\n account: f('id', { ref: 'accounts', required: true }),\n category: f('id', { ref: 'categories' }),\n amount: f('integer', { default: 0, required: true }),\n payee: f('id', { ref: 'payees' }),\n notes: f('string'),\n date: f('date', { required: true }),\n imported_id: f('string'),\n error: f('json'),\n imported_payee: f('string'),\n starting_balance_flag: f('boolean'),\n transfer_id: f('id'),\n sort_order: f('float', { default: () => Date.now() }),\n cleared: f('boolean', { default: true }),\n tombstone: f('boolean'),\n schedule: f('id', { ref: 'schedules' })\n // subtransactions is a special field added if the table has the\n // `splits: grouped` option\n },\n payees: {\n id: f('id'),\n name: f('string', { required: true }),\n transfer_acct: f('id', { ref: 'accounts' }),\n tombstone: f('boolean')\n },\n accounts: {\n id: f('id'),\n name: f('string', { required: true }),\n // TODO: enum\n type: f('string'),\n offbudget: f('boolean'),\n closed: f('boolean'),\n sort_order: f('float'),\n tombstone: f('boolean')\n },\n categories: {\n id: f('id'),\n name: f('string'),\n is_income: f('boolean'),\n group: f('id', { ref: 'category_groups' }),\n sort_order: f('float'),\n tombstone: f('boolean')\n },\n category_groups: {\n id: f('id'),\n name: f('string'),\n is_income: f('boolean'),\n sort_order: f('float'),\n tombstone: f('boolean')\n },\n schedules: {\n id: f('id'),\n rule: f('id', { ref: 'rules', required: true }),\n next_date: f('date'),\n completed: f('boolean'),\n posts_transaction: f('boolean'),\n tombstone: f('boolean'),\n\n // These are special fields that are actually pulled from the\n // underlying rule\n _payee: f('id', { ref: 'payees' }),\n _account: f('id', { ref: 'accounts' }),\n _amount: f('json/fallback'),\n _amountOp: f('string'),\n _date: f('json/fallback'),\n _conditions: f('json'),\n _actions: f('json')\n },\n rules: {\n id: f('id'),\n stage: f('string'),\n conditions: f('json'),\n actions: f('json'),\n tombstone: f('boolean')\n },\n notes: {\n id: f('id'),\n note: f('string')\n }\n};\n\nexport const schemaConfig = {\n // Note: these views *must* represent the underlying table that we\n // are mapping here. The compiler makes optimizations with this\n // assumption\n tableViews(name, { isJoin, withDead, tableOptions = {} }) {\n switch (name) {\n case 'transactions': {\n // If joining, we always only show alive transactions. There's\n // no way to configure join behavior yet\n if (isJoin) {\n return 'v_transactions_internal_alive';\n }\n\n let splitType = tableOptions.splits || 'inline';\n // Use the view to exclude dead transactions if using `inline` or `none`\n if (!withDead && (splitType === 'inline' || splitType === 'none')) {\n return 'v_transactions_internal_alive';\n }\n\n // Otherwse we disregard the `withDead` option here and handle\n // that in the executors to improve performance\n return 'v_transactions_internal';\n }\n\n case 'schedules':\n return 'v_schedules';\n\n case 'categories':\n return 'v_categories';\n\n case 'payees':\n return 'v_payees';\n\n default:\n }\n return name;\n },\n\n customizeQuery(queryState) {\n let { table: tableName, tableOptions = {} } = queryState;\n\n function orderBy(orders) {\n // If order was specified, always add id as the last sort to make\n // it deterministic\n if (orders.length > 0) {\n return orders.concat(['id']);\n }\n\n // Otherwise, these are the default orders for each table\n switch (tableName) {\n case 'transactions':\n return [\n { date: 'desc' },\n 'starting_balance_flag',\n { sort_order: 'desc' },\n 'id'\n ];\n case 'payees':\n return [\n { $condition: { transfer_acct: null }, $dir: 'desc' },\n { $nocase: '$name' }\n ];\n case 'accounts':\n return ['sort_order', 'name'];\n case 'schedules':\n return [{ $condition: { completed: true } }, 'next_date'];\n default:\n }\n\n return [];\n }\n\n return {\n ...queryState,\n orderExpressions: orderBy(queryState.orderExpressions)\n };\n },\n\n views: {\n payees: {\n v_payees: internalFields => {\n let fields = internalFields({\n name: 'COALESCE(__accounts.name, _.name)'\n });\n\n return `\n SELECT ${fields} FROM payees _\n LEFT JOIN accounts __accounts ON (_.transfer_acct = __accounts.id AND __accounts.tombstone = 0)\n -- We never want to show transfer payees that are pointing to deleted accounts.\n -- Either this isn't a transfer payee, if the account exists\n WHERE _.transfer_acct IS NULL OR __accounts.id IS NOT NULL\n `;\n }\n },\n\n categories: {\n fields: {\n group: 'cat_group'\n },\n\n v_categories: internalFields => {\n let fields = internalFields({ group: 'cat_group' });\n return `SELECT ${fields} FROM categories _`;\n }\n },\n\n schedules: {\n v_schedules: internalFields => {\n let fields = internalFields({\n next_date: `\n CASE\n WHEN _nd.local_next_date_ts = _nd.base_next_date_ts THEN _nd.local_next_date\n ELSE _nd.base_next_date\n END\n `,\n _payee: `pm.targetId`,\n _account: `json_extract(_rules.conditions, _paths.account || '.value')`,\n _amount: `json_extract(_rules.conditions, _paths.amount || '.value')`,\n _amountOp: `json_extract(_rules.conditions, _paths.amount || '.op')`,\n _date: `json_extract(_rules.conditions, _paths.date || '.value')`,\n _conditions: '_rules.conditions',\n _actions: '_rules.actions'\n });\n\n return `\n SELECT ${fields} FROM schedules _\n LEFT JOIN schedules_next_date _nd ON _nd.schedule_id = _.id\n LEFT JOIN schedules_json_paths _paths ON _paths.schedule_id = _.id\n LEFT JOIN rules _rules ON _rules.id = _.rule\n LEFT JOIN payee_mapping pm ON pm.id = json_extract(_rules.conditions, _paths.payee || '.value')\n `;\n }\n },\n\n transactions: {\n fields: {\n is_parent: 'isParent',\n is_child: 'isChild',\n account: 'acct',\n imported_id: 'financial_id',\n imported_payee: 'imported_description',\n transfer_id: 'transferred_id',\n payee: 'description'\n },\n\n v_transactions_internal: internalFields => {\n // Override some fields to make custom stuff\n let fields = internalFields({\n payee: 'pm.targetId',\n category: `CASE WHEN _.isParent = 1 THEN NULL ELSE cm.transferId END`,\n amount: `IFNULL(_.amount, 0)`,\n parent_id: 'CASE WHEN _.isChild = 0 THEN NULL ELSE _.parent_id END'\n });\n\n return `\n SELECT ${fields} FROM transactions _\n LEFT JOIN category_mapping cm ON cm.id = _.category\n LEFT JOIN payee_mapping pm ON pm.id = _.description\n WHERE\n _.date IS NOT NULL AND\n _.acct IS NOT NULL AND\n (_.isChild = 0 OR _.parent_id IS NOT NULL)\n `;\n },\n\n // We join on t2 to only include valid child transactions. We\n // want to only include ones with valid parents, which is when\n // an alive parent transaction exists\n v_transactions_internal_alive: `\n SELECT _.* FROM v_transactions_internal _\n LEFT JOIN transactions t2 ON (_.is_child = 1 AND t2.id = _.parent_id)\n WHERE IFNULL(_.tombstone, 0) = 0 AND (_.is_child = 0 OR t2.tombstone = 0)\n `,\n\n v_transactions: (_, publicFields) => {\n let fields = publicFields({\n payee: 'p.id',\n category: 'c.id',\n account: 'a.id'\n });\n\n // This adds an order, and also validates any id references by\n // selecting the ids through a join which return null if they\n // are dead\n return `\n SELECT ${fields} FROM v_transactions_internal_alive _\n LEFT JOIN payees p ON (p.id = _.payee AND p.tombstone = 0)\n LEFT JOIN categories c ON (c.id = _.category AND c.tombstone = 0)\n LEFT JOIN accounts a ON (a.id = _.account AND a.tombstone = 0)\n ORDER BY _.date desc, _.starting_balance_flag, _.sort_order desc, _.id;\n `;\n }\n }\n }\n};\n","import { schema, schemaConfig } from './index';\nimport schemaExecutors from './executors';\nimport {\n runQuery as _runQuery,\n runCompiledQuery as _runCompiledQuery\n} from '../exec';\nimport { Query } from '../../../shared/query';\n\nexport function runCompiledQuery(query, sqlPieces, state, params) {\n return _runCompiledQuery(query, sqlPieces, state, {\n params,\n executors: schemaExecutors\n });\n}\n\nexport function runQuery(query, params) {\n if (query instanceof Query) {\n query = query.serialize();\n }\n\n return _runQuery(schema, schemaConfig, query, {\n params,\n executors: schemaExecutors\n });\n}\n","import { quoteAlias } from './compiler';\n\nfunction selectFields(fields) {\n return Object.keys(fields)\n .map(as => {\n let field = fields[as];\n let needsAs = field !== as;\n // If it's just an identifier, we automatically prefix it with\n // `_.` which makes sure it references the root table\n if (!field.match(/[ .]/)) {\n field = `_.${field}`;\n }\n return needsAs ? `${field} AS ${quoteAlias(as)}` : `${field}`;\n })\n .join(', ');\n}\n\nexport function makeViews(schema, schemaConfig) {\n let views = schemaConfig.views;\n let viewStrs = [];\n\n Object.keys(views).forEach(table => {\n let { fields: fieldMappings = {}, ...tableViews } = views[table];\n\n let publicFields = Object.fromEntries(\n Object.keys(schema[table]).map(name => [name, name])\n );\n let internalFields = { ...publicFields, ...fieldMappings };\n\n Object.keys(tableViews).forEach(viewName => {\n let publicMaker = overrides => {\n let fields = { ...publicFields, ...overrides };\n return selectFields(fields);\n };\n let internalMaker = overrides => {\n let fields = { ...internalFields, ...overrides };\n return selectFields(fields);\n };\n\n let sql;\n if (typeof tableViews[viewName] === 'function') {\n sql = tableViews[viewName](internalMaker, publicMaker);\n } else {\n sql = tableViews[viewName];\n }\n sql = sql.trim().replace(/;$/, '');\n\n viewStrs.push(`\n DROP VIEW IF EXISTS ${viewName};\n CREATE VIEW ${viewName} AS ${sql};\n `);\n });\n });\n\n return viewStrs.join('\\n');\n}\n","import fs from '../platform/server/fs';\nimport * as monthUtils from '../shared/months';\nimport * as sqlite from '../platform/server/sqlite';\nimport * as prefs from './prefs';\nimport * as cloudStorage from './cloud-storage';\nconst connection = require('../platform/server/connection');\nconst uuid = require('../platform/uuid');\nconst dateFns = require('date-fns');\n\n// A special backup that represents the latest version of the db that\n// can be reverted to after loading a backup\nconst LATEST_BACKUP_FILENAME = 'db.latest.sqlite';\nlet serviceInterval = null;\n\nexport async function getBackups(id) {\n const budgetDir = fs.getBudgetDir(id);\n const backupDir = fs.join(budgetDir, 'backups');\n\n let paths = [];\n if (await fs.exists(backupDir)) {\n paths = await fs.listDir(backupDir);\n paths = paths.filter(file => file.match(/\\.sqlite$/));\n }\n\n const backups = await Promise.all(\n paths.map(async path => {\n const mtime = await fs.getModifiedTime(fs.join(backupDir, path));\n return {\n id: path,\n date: new Date(mtime)\n };\n })\n );\n\n backups.sort((b1, b2) => {\n if (b1.date < b2.date) {\n return 1;\n } else if (b1.date > b2.date) {\n return -1;\n }\n return 0;\n });\n\n return backups;\n}\n\nexport async function getLatestBackup(id) {\n const budgetDir = fs.getBudgetDir(id);\n if (await fs.exists(fs.join(budgetDir, LATEST_BACKUP_FILENAME))) {\n return {\n id: LATEST_BACKUP_FILENAME,\n date: null,\n isLatest: true\n };\n }\n return null;\n}\n\nexport async function getAvailableBackups(id) {\n let backups = await getBackups(id);\n\n let latestBackup = await getLatestBackup(id);\n if (latestBackup) {\n backups.unshift(latestBackup);\n }\n\n backups = backups.map(backup => ({\n ...backup,\n date: backup.date ? dateFns.format(backup.date, 'yyyy-MM-dd h:mm') : null\n }));\n\n return backups;\n}\n\nexport async function updateBackups(backups) {\n const byDay = backups.reduce((groups, backup) => {\n const day = dateFns.format(backup.date, 'yyyy-MM-dd');\n groups[day] = groups[day] || [];\n groups[day].push(backup);\n return groups;\n }, {});\n\n const removed = [];\n for (let day of Object.keys(byDay)) {\n const dayBackups = byDay[day];\n const isToday = day === monthUtils.currentDay();\n // Allow 3 backups of the current day (so fine-grained edits are\n // kept around). Otherwise only keep around one backup per day.\n // And only keep a total of 10 backups.\n for (let backup of dayBackups.slice(isToday ? 3 : 1)) {\n removed.push(backup.id);\n }\n }\n\n // Get the list of remaining backups and only keep the latest 10\n const currentBackups = backups.filter(backup => !removed.includes(backup.id));\n return removed.concat(currentBackups.slice(10).map(backup => backup.id));\n}\n\nexport async function makeBackup(id) {\n const budgetDir = fs.getBudgetDir(id);\n\n // When making a backup, we no longer consider the user to be\n // viewing any backups. If there exists a \"latest backup\" we should\n // delete it and consider whatever is current as the latest\n if (await fs.exists(fs.join(budgetDir, LATEST_BACKUP_FILENAME))) {\n await fs.removeFile(fs.join(fs.getBudgetDir(id), LATEST_BACKUP_FILENAME));\n }\n\n let backupId = `${uuid.v4Sync()}.sqlite`;\n let backupPath = fs.join(budgetDir, 'backups', backupId);\n\n if (!(await fs.exists(fs.join(budgetDir, 'backups')))) {\n await fs.mkdir(fs.join(budgetDir, 'backups'));\n }\n\n await fs.copyFile(fs.join(budgetDir, 'db.sqlite'), backupPath);\n\n // Remove all the messages from the backup\n const db = sqlite.openDatabase(backupPath);\n await sqlite.runQuery(db, 'DELETE FROM messages_crdt');\n await sqlite.runQuery(db, 'DELETE FROM messages_clock');\n sqlite.closeDatabase(db);\n\n const toRemove = await updateBackups(await getBackups(id));\n for (let id of toRemove) {\n await fs.removeFile(fs.join(budgetDir, 'backups', id));\n }\n\n connection.send('backups-updated', await getAvailableBackups(id));\n}\n\nexport async function loadBackup(id, backupId) {\n const budgetDir = fs.getBudgetDir(id);\n\n if (!(await fs.exists(fs.join(budgetDir, LATEST_BACKUP_FILENAME)))) {\n // If this is the first time we're loading a backup, save the\n // current version so the user can easily revert back to it\n await fs.copyFile(\n fs.join(budgetDir, 'db.sqlite'),\n fs.join(budgetDir, LATEST_BACKUP_FILENAME)\n );\n\n await fs.copyFile(\n fs.join(budgetDir, 'metadata.json'),\n fs.join(budgetDir, 'metadata.latest.json')\n );\n\n // Restart the backup service to make sure the user has the full\n // amount of time to figure out which one they want\n stopBackupService();\n startBackupService(id);\n\n await prefs.loadPrefs(id);\n }\n\n if (backupId === LATEST_BACKUP_FILENAME) {\n console.log('Reverting backup');\n\n // If reverting back to the latest, copy and delete the latest\n // backup\n await fs.copyFile(\n fs.join(budgetDir, LATEST_BACKUP_FILENAME),\n fs.join(budgetDir, 'db.sqlite')\n );\n await fs.copyFile(\n fs.join(budgetDir, 'metadata.latest.json'),\n fs.join(budgetDir, 'metadata.json')\n );\n await fs.removeFile(fs.join(budgetDir, LATEST_BACKUP_FILENAME));\n await fs.removeFile(fs.join(budgetDir, 'metadata.latest.json'));\n\n // Re-upload the new file\n try {\n await cloudStorage.upload();\n } catch (e) {}\n prefs.unloadPrefs();\n } else {\n console.log('Loading backup', backupId);\n\n // This function is only ever called when a budget isn't loaded,\n // so it's safe to load our prefs in. We need to forget about any\n // syncing data if we are loading a backup (the current sync data\n // will be restored if the user reverts to the original version)\n await prefs.loadPrefs(id);\n await prefs.savePrefs({\n groupId: null,\n lastSyncedTimestamp: null,\n lastUploaded: null\n });\n\n // Re-upload the new file\n try {\n await cloudStorage.upload();\n } catch (e) {}\n\n prefs.unloadPrefs();\n\n await fs.copyFile(\n fs.join(budgetDir, 'backups', backupId),\n fs.join(budgetDir, 'db.sqlite')\n );\n }\n}\n\nexport function startBackupService(id) {\n if (serviceInterval) {\n clearInterval(serviceInterval);\n }\n\n // Make a backup every 15 minutes\n serviceInterval = setInterval(async () => {\n console.log('Making backup');\n await makeBackup(id);\n }, 1000 * 60 * 15);\n}\n\nexport function stopBackupService() {\n clearInterval(serviceInterval);\n serviceInterval = null;\n}\n","import * as monthUtils from '../../shared/months';\nimport * as db from '../db';\nimport { batchMessages } from '../sync';\nimport { groupBySingle } from '../../shared/util';\nimport * as prefs from '../prefs';\nimport * as sheet from '../sheet';\n\nasync function getSheetValue(sheetName, cell) {\n const node = await sheet.getCell(sheetName, cell);\n return typeof node.value === 'number' ? node.value : 0;\n}\n\n// We want to only allow the positive movement of money back and\n// forth. buffered should never be allowed to go into the negative,\n// and you shouldn't be allowed to pull non-existant money from\n// leftover.\nfunction calcBufferedAmount(toBudget, buffered, amount) {\n amount = Math.min(Math.max(amount, -buffered), Math.max(toBudget, 0));\n return buffered + amount;\n}\n\nfunction getBudgetTable() {\n let { budgetType } = prefs.getPrefs() || {};\n return budgetType === 'report' ? 'reflect_budgets' : 'zero_budgets';\n}\n\nfunction isReflectBudget() {\n let { budgetType } = prefs.getPrefs();\n return budgetType === 'report';\n}\n\nfunction isZeroBudget() {\n let { budgetType } = prefs.getPrefs();\n return budgetType === 'rollover';\n}\n\nfunction dbMonth(month) {\n return parseInt(month.replace('-', ''));\n}\n\nfunction getBudgetData(table, month) {\n return db.all(\n `\n SELECT b.*, c.is_income FROM v_categories c\n LEFT JOIN ${table} b ON b.category = c.id\n WHERE c.tombstone = 0 AND b.month = ?\n `,\n [month]\n );\n}\n\nfunction getAllMonths(startMonth) {\n let { createdMonths } = sheet.get().meta();\n let latest = null;\n for (let month of createdMonths) {\n if (latest == null || month > latest) {\n latest = month;\n }\n }\n return monthUtils.rangeInclusive(startMonth, latest);\n}\n\n// TODO: Valid month format in all the functions below\n\nexport function getBudget({ category, month }) {\n let table = getBudgetTable();\n let existing = db.firstSync(\n `SELECT * FROM ${table} WHERE month = ? AND category = ?`,\n [dbMonth(month), category]\n );\n return existing ? existing.amount || 0 : 0;\n}\n\nexport function setBudget({ category, month, amount }) {\n if (typeof amount !== 'number') {\n amount = 0;\n }\n const table = getBudgetTable();\n\n let existing = db.firstSync(\n `SELECT id FROM ${table} WHERE month = ? AND category = ?`,\n [dbMonth(month), category]\n );\n if (existing) {\n return db.update(table, { id: existing.id, amount });\n }\n return db.insert(table, {\n id: `${dbMonth(month)}-${category}`,\n month: dbMonth(month),\n category,\n amount\n });\n}\n\nexport function setBuffer(month, amount) {\n let existing = db.firstSync(\n `SELECT id FROM zero_budget_months WHERE id = ?`,\n [month]\n );\n if (existing) {\n return db.update('zero_budget_months', {\n id: existing.id,\n buffered: amount\n });\n }\n return db.insert('zero_budget_months', { id: month, buffered: amount });\n}\n\nfunction setCarryover(table, category, month, flag) {\n let existing = db.firstSync(\n `SELECT id FROM ${table} WHERE month = ? AND category = ?`,\n [month, category]\n );\n if (existing) {\n return db.update(table, { id: existing.id, carryover: flag ? 1 : 0 });\n }\n return db.insert(table, {\n id: `${month}-${category}`,\n month,\n category,\n carryover: flag ? 1 : 0\n });\n}\n\n// Actions\n\nexport async function copyPreviousMonth({ month }) {\n let prevMonth = dbMonth(monthUtils.prevMonth(month));\n let table = getBudgetTable();\n let budgetData = await getBudgetData(table, prevMonth);\n\n await batchMessages(() => {\n budgetData.forEach(prevBudget => {\n if (prevBudget.is_income === 1 && !isReflectBudget()) {\n return;\n }\n setBudget({\n category: prevBudget.category,\n month,\n amount: prevBudget.amount\n });\n });\n });\n}\n\nexport async function setZero({ month }) {\n let categories = await db.all(\n 'SELECT * FROM v_categories WHERE tombstone = 0'\n );\n\n await batchMessages(() => {\n categories.forEach(cat => {\n if (cat.is_income === 1 && !isReflectBudget()) {\n return;\n }\n setBudget({ category: cat.id, month, amount: 0 });\n });\n });\n}\n\nexport async function set3MonthAvg({ month }) {\n let categories = await db.all(\n 'SELECT * FROM v_categories WHERE tombstone = 0'\n );\n\n let prevMonth1 = monthUtils.prevMonth(month);\n let prevMonth2 = monthUtils.prevMonth(prevMonth1);\n let prevMonth3 = monthUtils.prevMonth(prevMonth2);\n\n await batchMessages(async () => {\n for (let cat of categories) {\n if (cat.is_income === 1 && !isReflectBudget()) {\n continue;\n }\n\n let spent1 = await getSheetValue(\n monthUtils.sheetForMonth(prevMonth1),\n 'sum-amount-' + cat.id\n );\n let spent2 = await getSheetValue(\n monthUtils.sheetForMonth(prevMonth2),\n 'sum-amount-' + cat.id\n );\n let spent3 = await getSheetValue(\n monthUtils.sheetForMonth(prevMonth3),\n 'sum-amount-' + cat.id\n );\n\n const avg = ((spent1 + spent2 + spent3) / 3) | 0;\n setBudget({ category: cat.id, month, amount: -avg });\n }\n });\n}\n\nexport async function setAllFuture({ startMonth }) {\n if (!isReflectBudget()) {\n throw new Error('setAllFuture only applies to report budget type');\n }\n let table = getBudgetTable();\n let budgetData = await getBudgetData(table, dbMonth(startMonth));\n let months = getAllMonths(monthUtils.addMonths(startMonth, 1));\n\n batchMessages(() => {\n for (let month of months) {\n budgetData.forEach(budget => {\n if (budget.is_income === 1 && !isReflectBudget()) {\n return;\n }\n setBudget({ category: budget.category, month, amount: budget.amount });\n });\n }\n });\n}\n\nexport async function holdForNextMonth({ month, amount }) {\n let row = await db.first(\n 'SELECT buffered FROM zero_budget_months WHERE id = ?',\n [month]\n );\n\n let sheetName = monthUtils.sheetForMonth(month);\n let toBudget = await getSheetValue(sheetName, 'to-budget');\n\n if (toBudget > 0) {\n let bufferedAmount = calcBufferedAmount(\n toBudget,\n (row && row.buffered) || 0,\n amount\n );\n\n await setBuffer(month, bufferedAmount);\n return true;\n }\n return false;\n}\n\nexport async function holdForFutureMonths({ startMonth, amount }) {\n let months = getAllMonths(startMonth);\n\n await batchMessages(async () => {\n for (let month of months) {\n if (!(await holdForNextMonth({ month, amount }))) {\n break;\n }\n }\n });\n}\n\nexport async function resetHold({ month }) {\n await setBuffer(month, 0);\n}\n\nexport async function coverOverspending({ month, to, from }) {\n let sheetName = monthUtils.sheetForMonth(month);\n let toBudgeted = await getSheetValue(sheetName, 'budget-' + to);\n let leftover = await getSheetValue(sheetName, 'leftover-' + to);\n let leftoverFrom = await getSheetValue(\n sheetName,\n from === 'to-be-budgeted' ? 'to-budget' : 'leftover-' + from\n );\n\n if (leftover >= 0 || leftoverFrom <= 0) {\n return;\n }\n\n let amountCovered = Math.min(-leftover, leftoverFrom);\n\n // If we are covering it from the to be budgeted amount, ignore this\n if (from !== 'to-be-budgeted') {\n const fromBudgeted = await getSheetValue(sheetName, 'budget-' + from);\n await setBudget({\n category: from,\n month,\n amount: fromBudgeted - amountCovered\n });\n }\n\n await setBudget({ category: to, month, amount: toBudgeted + amountCovered });\n}\n\nexport async function transferAvailable({ month, amount, category }) {\n let sheetName = monthUtils.sheetForMonth(month);\n let leftover = await getSheetValue(sheetName, 'to-budget');\n amount = Math.max(Math.min(amount, leftover), 0);\n\n let budgeted = await getSheetValue(sheetName, 'budget-' + category);\n await setBudget({ category, month, amount: budgeted + amount });\n}\n\nexport async function transferCategory({ month, amount, from, to }) {\n const sheetName = monthUtils.sheetForMonth(month);\n const fromBudgeted = await getSheetValue(sheetName, 'budget-' + from);\n\n await setBudget({ category: from, month, amount: fromBudgeted - amount });\n\n // If we are simply moving it back into available cash to budget,\n // don't do anything else\n if (to !== 'to-be-budgeted') {\n const toBudgeted = await getSheetValue(sheetName, 'budget-' + to);\n await setBudget({ category: to, month, amount: toBudgeted + amount });\n }\n}\n\nexport async function setCategoryCarryover({ startMonth, category, flag }) {\n let table = getBudgetTable();\n let months = getAllMonths(startMonth);\n\n await batchMessages(() => {\n for (let month of months) {\n setCarryover(table, category, dbMonth(month), flag);\n }\n });\n}\n","import { createApp } from '../app';\nimport { mutator } from '../mutators';\nimport { undoable } from '../undo';\nimport * as actions from './actions';\n\n\nlet app = createApp();\n\napp.method('budget/budget-amount', mutator(undoable(actions.setBudget)));\napp.method(\n 'budget/copy-previous-month',\n mutator(undoable(actions.copyPreviousMonth))\n);\napp.method('budget/set-zero', mutator(undoable(actions.setZero)));\napp.method('budget/set-3month-avg', mutator(undoable(actions.set3MonthAvg)));\napp.method('budget/set-all-future', mutator(undoable(actions.setAllFuture)));\napp.method(\n 'budget/hold-for-next-month',\n mutator(undoable(actions.holdForNextMonth))\n);\napp.method(\n 'budget/hold-for-future-months',\n mutator(undoable(actions.holdForFutureMonths))\n);\napp.method('budget/reset-hold', mutator(undoable(actions.resetHold)));\napp.method(\n 'budget/cover-overspending',\n mutator(undoable(actions.coverOverspending))\n);\napp.method(\n 'budget/transfer-available',\n mutator(undoable(actions.transferAvailable))\n);\napp.method(\n 'budget/transfer-category',\n mutator(undoable(actions.transferCategory))\n);\napp.method(\n 'budget/set-carryover',\n mutator(undoable(actions.setCategoryCarryover))\n);\n\nexport default app;\n","import * as sheet from '../sheet';\nimport * as db from '../db';\nimport * as monthUtils from '../../shared/months';\nimport { getChangedValues } from '../../shared/util';\nimport { resolveName } from '../spreadsheet/util';\nimport * as report from './report';\nimport * as rollover from './rollover';\nimport { sumAmounts } from './util';\nimport * as budgetActions from '../budget/actions';\n\nfunction mergeUpdates(updates) {\n const merged = {};\n updates.forEach(update => {\n Object.keys(update).forEach(sheet => {\n if (merged[sheet]) {\n merged[sheet] = { ...merged[sheet], ...update[sheet] };\n } else {\n merged[sheet] = update[sheet];\n }\n });\n });\n return merged;\n}\n\nexport function getBudgetType() {\n let meta = sheet.get().meta();\n return meta.budgetType || 'rollover';\n}\n\nexport function getBudgetRange(start, end) {\n start = monthUtils.getMonth(start);\n end = monthUtils.getMonth(end);\n\n // The start date should never be after the end date. If that\n // happened, the month range might be a valid range and weird\n // things happen\n if (start > end) {\n start = end;\n }\n\n // Budgets should exist 3 months before the earliest needed date\n // (either the oldest transaction or the current month if no\n // transactions yet), and a year from the current date. There's no\n // need to ever have budgets outside that range.\n start = monthUtils.subMonths(start, 3);\n end = monthUtils.addMonths(end, 12);\n\n return { start, end, range: monthUtils.rangeInclusive(start, end) };\n}\n\nfunction createCategory(cat, sheetName, prevSheetName, start, end) {\n sheet.get().createDynamic(sheetName, 'sum-amount-' + cat.id, {\n initialValue: 0,\n run: () => {\n // Making this sync is faster!\n let rows = db.runQuery(\n `SELECT SUM(amount) as amount FROM v_transactions_internal_alive t\n LEFT JOIN accounts a ON a.id = t.account\n WHERE t.date >= ${start} AND t.date <= ${end}\n AND category = '${cat.id}' AND a.offbudget = 0`,\n [],\n true\n );\n let row = rows[0];\n let amount = row ? row.amount : 0;\n return amount || 0;\n }\n });\n\n if (getBudgetType() === 'rollover') {\n rollover.createCategory(cat, sheetName, prevSheetName);\n } else {\n report.createCategory(cat, sheetName, prevSheetName);\n }\n}\n\nfunction createCategoryGroup(group, sheetName) {\n sheet.get().createDynamic(sheetName, 'group-sum-amount-' + group.id, {\n initialValue: 0,\n dependencies: group.categories.map(cat => `sum-amount-${cat.id}`),\n run: sumAmounts\n });\n\n if (!group.is_income || getBudgetType() !== 'rollover') {\n sheet.get().createDynamic(sheetName, 'group-budget-' + group.id, {\n initialValue: 0,\n dependencies: group.categories.map(cat => `budget-${cat.id}`),\n run: sumAmounts\n });\n\n sheet.get().createDynamic(sheetName, 'group-leftover-' + group.id, {\n initialValue: 0,\n dependencies: group.categories.map(cat => `leftover-${cat.id}`),\n run: sumAmounts\n });\n }\n}\n\nfunction handleAccountChange(months, oldValue, newValue) {\n if (!oldValue || oldValue.offbudget !== newValue.offbudget) {\n let rows = db.runQuery(\n `\n SELECT DISTINCT(category) as category FROM transactions\n WHERE acct = ?\n `,\n [newValue.id],\n true\n );\n\n months.forEach(month => {\n let sheetName = monthUtils.sheetForMonth(month, getBudgetType());\n\n rows.forEach(row => {\n sheet\n .get()\n .recompute(resolveName(sheetName, 'sum-amount-' + row.category));\n });\n });\n }\n}\n\nfunction handleTransactionChange(transaction, changedFields) {\n if (\n (changedFields.has('date') ||\n changedFields.has('acct') ||\n changedFields.has('amount') ||\n changedFields.has('category') ||\n changedFields.has('tombstone') ||\n changedFields.has('isParent')) &&\n transaction.date &&\n transaction.category\n ) {\n let month = monthUtils.monthFromDate(db.fromDateRepr(transaction.date));\n let sheetName = monthUtils.sheetForMonth(month, getBudgetType());\n\n sheet\n .get()\n .recompute(resolveName(sheetName, 'sum-amount-' + transaction.category));\n }\n}\n\nfunction handleCategoryMappingChange(months, oldValue, newValue) {\n months.forEach(month => {\n let sheetName = monthUtils.sheetForMonth(month, getBudgetType());\n if (oldValue) {\n sheet\n .get()\n .recompute(resolveName(sheetName, 'sum-amount-' + oldValue.transferId));\n }\n sheet\n .get()\n .recompute(resolveName(sheetName, 'sum-amount-' + newValue.transferId));\n });\n}\n\nfunction handleCategoryChange(months, oldValue, newValue) {\n function addDeps(sheetName, groupId, catId) {\n sheet\n .get()\n .addDependencies(sheetName, `group-sum-amount-${groupId}`, [\n `sum-amount-${catId}`\n ]);\n sheet\n .get()\n .addDependencies(sheetName, `group-budget-${groupId}`, [\n `budget-${catId}`\n ]);\n sheet\n .get()\n .addDependencies(sheetName, `group-leftover-${groupId}`, [\n `leftover-${catId}`\n ]);\n }\n\n function removeDeps(sheetName, groupId, catId) {\n sheet\n .get()\n .removeDependencies(sheetName, `group-sum-amount-${groupId}`, [\n `sum-amount-${catId}`\n ]);\n sheet\n .get()\n .removeDependencies(sheetName, `group-budget-${groupId}`, [\n `budget-${catId}`\n ]);\n sheet\n .get()\n .removeDependencies(sheetName, `group-leftover-${groupId}`, [\n `leftover-${catId}`\n ]);\n }\n\n let budgetType = getBudgetType();\n\n if (oldValue && oldValue.tombstone === 0 && newValue.tombstone === 1) {\n let id = newValue.id;\n let groupId = newValue.cat_group;\n\n months.forEach(month => {\n let sheetName = monthUtils.sheetForMonth(month);\n removeDeps(sheetName, groupId, id);\n });\n } else if (\n newValue.tombstone === 0 &&\n (!oldValue || oldValue.tombstone === 1)\n ) {\n if (budgetType === 'rollover') {\n rollover.createBlankCategory(newValue, months);\n }\n\n months.forEach(month => {\n let prevMonth = monthUtils.prevMonth(month);\n let prevSheetName = monthUtils.sheetForMonth(prevMonth, budgetType);\n let sheetName = monthUtils.sheetForMonth(month, budgetType);\n let { start, end } = monthUtils.bounds(month);\n\n createCategory(newValue, sheetName, prevSheetName, start, end);\n\n let id = newValue.id;\n let groupId = newValue.cat_group;\n\n if (getBudgetType() === 'rollover') {\n sheet\n .get()\n .addDependencies(sheetName, 'last-month-overspent', [\n `${prevSheetName}!leftover-${id}`,\n `${prevSheetName}!carryover-${id}`\n ]);\n }\n\n addDeps(sheetName, groupId, id);\n });\n } else if (oldValue && oldValue.cat_group !== newValue.cat_group) {\n // The category moved so we need to update the dependencies\n let id = newValue.id;\n\n months.forEach(month => {\n let sheetName = monthUtils.sheetForMonth(month, budgetType);\n removeDeps(sheetName, oldValue.cat_group, id);\n addDeps(sheetName, newValue.cat_group, id);\n });\n }\n}\n\nfunction handleCategoryGroupChange(months, oldValue, newValue) {\n let budgetType = getBudgetType();\n\n function addDeps(sheetName, groupId) {\n sheet\n .get()\n .addDependencies(sheetName, 'total-budgeted', [\n `group-budget-${groupId}`\n ]);\n sheet\n .get()\n .addDependencies(sheetName, 'total-spent', [\n `group-sum-amount-${groupId}`\n ]);\n sheet\n .get()\n .addDependencies(sheetName, 'total-leftover', [\n `group-leftover-${groupId}`\n ]);\n }\n\n function removeDeps(sheetName, groupId) {\n sheet\n .get()\n .removeDependencies(sheetName, 'total-budgeted', [\n `group-budget-${groupId}`\n ]);\n sheet\n .get()\n .removeDependencies(sheetName, 'total-spent', [\n `group-sum-amount-${groupId}`\n ]);\n sheet\n .get()\n .removeDependencies(sheetName, 'total-leftover', [\n `group-leftover-${groupId}`\n ]);\n }\n\n if (newValue.tombstone === 1 && oldValue && oldValue.tombstone === 0) {\n let id = newValue.id;\n months.forEach(month => {\n let sheetName = monthUtils.sheetForMonth(month, budgetType);\n removeDeps(sheetName, id);\n });\n } else if (\n newValue.tombstone === 0 &&\n (!oldValue || oldValue.tombstone === 1)\n ) {\n let group = newValue;\n\n if (!group.is_income || budgetType !== 'rollover') {\n months.forEach(month => {\n let sheetName = monthUtils.sheetForMonth(month, budgetType);\n\n // Dirty, dirty hack. These functions should not be async, but this is\n // OK because we're leveraging the sync nature of queries. Ideally we\n // wouldn't be querying here. But I think we have to. At least for now\n // we do\n let categories = db.runQuery(\n 'SELECT * FROM categories WHERE tombstone = 0 AND cat_group = ?',\n [group.id],\n true\n );\n createCategoryGroup({ ...group, categories }, sheetName);\n\n addDeps(sheetName, group.id);\n });\n }\n }\n}\n\nfunction handleBudgetMonthChange(budget) {\n let sheetName = monthUtils.sheetForMonth(budget.id);\n sheet.get().set(`${sheetName}!buffered`, budget.buffered);\n}\n\nfunction handleBudgetChange(budget) {\n if (budget.category) {\n let sheetName = monthUtils.sheetForMonth(budget.month.toString());\n sheet\n .get()\n .set(`${sheetName}!budget-${budget.category}`, budget.amount || 0);\n sheet\n .get()\n .set(\n `${sheetName}!carryover-${budget.category}`,\n budget.carryover === 1 ? true : false\n );\n }\n}\n\nexport function triggerBudgetChanges(oldValues, newValues) {\n let { createdMonths = new Set() } = sheet.get().meta();\n sheet.startTransaction();\n\n try {\n newValues.forEach((items, table) => {\n let old = oldValues.get(table);\n\n items.forEach(newValue => {\n let oldValue = old && old.get(newValue.id);\n\n if (table === 'zero_budget_months') {\n handleBudgetMonthChange(newValue);\n } else if (table === 'zero_budgets' || table === 'reflect_budgets') {\n handleBudgetChange(newValue);\n } else if (table === 'transactions') {\n let changed = new Set(\n Object.keys(getChangedValues(oldValue || {}, newValue) || {})\n );\n\n if (oldValue) {\n handleTransactionChange(oldValue, changed);\n }\n handleTransactionChange(newValue, changed);\n } else if (table === 'category_mapping') {\n handleCategoryMappingChange(createdMonths, oldValue, newValue);\n } else if (table === 'categories') {\n handleCategoryChange(createdMonths, oldValue, newValue);\n } else if (table === 'category_groups') {\n handleCategoryGroupChange(createdMonths, oldValue, newValue);\n } else if (table === 'accounts') {\n handleAccountChange(createdMonths, oldValue, newValue);\n }\n });\n });\n } finally {\n sheet.endTransaction();\n }\n}\n\nexport async function doTransfer(categoryIds, transferId) {\n let { createdMonths: months } = sheet.get().meta();\n\n [...months].map(month => {\n let totalValue = categoryIds\n .map(id => {\n return budgetActions.getBudget({ month, category: id });\n })\n .reduce((total, value) => total + value, 0);\n\n let transferValue = budgetActions.getBudget({\n month,\n category: transferId\n });\n\n budgetActions.setBudget({\n month,\n category: transferId,\n amount: totalValue + transferValue\n });\n });\n}\n\nexport async function createBudget(months) {\n const categories = await db.getCategories();\n const groups = await db.getCategoriesGrouped();\n\n sheet.startTransaction();\n let meta = sheet.get().meta();\n meta.createdMonths = meta.createdMonths || new Set();\n\n let budgetType = getBudgetType();\n\n if (budgetType === 'rollover') {\n rollover.createBudget(meta, categories, months);\n }\n\n months.forEach(month => {\n if (!meta.createdMonths.has(month)) {\n let prevMonth = monthUtils.prevMonth(month);\n let { start, end } = monthUtils.bounds(month);\n let sheetName = monthUtils.sheetForMonth(month, budgetType);\n let prevSheetName = monthUtils.sheetForMonth(prevMonth, budgetType);\n\n categories.forEach(cat => {\n createCategory(cat, sheetName, prevSheetName, start, end);\n });\n groups.forEach(group => {\n createCategoryGroup(group, sheetName);\n });\n\n if (budgetType === 'rollover') {\n rollover.createSummary(groups, categories, prevSheetName, sheetName);\n } else {\n report.createSummary(groups, categories, sheetName);\n }\n\n meta.createdMonths.add(month);\n }\n });\n\n sheet.get().setMeta(meta);\n sheet.endTransaction();\n\n // Wait for the spreadsheet to finish computing. Normally this won't\n // do anything (as values are cached) but on first run this need to\n // show the loading screen while it initially sets up.\n await sheet.waitOnSpreadsheet();\n}\n\nexport async function createAllBudgets() {\n let earliestTransaction = await db.first(\n 'SELECT * FROM transactions WHERE isChild=0 AND date IS NOT NULL ORDER BY date ASC LIMIT 1'\n );\n let earliestDate =\n earliestTransaction && db.fromDateRepr(earliestTransaction.date);\n let currentMonth = monthUtils.currentMonth();\n\n // Get the range based off of the earliest transaction and the\n // current month. If no transactions currently exist the current\n // month is also used as the starting month\n let { start, end, range } = getBudgetRange(\n earliestDate || currentMonth,\n currentMonth\n );\n\n let meta = sheet.get().meta();\n let createdMonths = meta.createdMonths || new Set();\n let newMonths = range.filter(m => !createdMonths.has(m));\n\n if (newMonths.length > 0) {\n await createBudget(range);\n }\n\n return { start, end };\n}\n\nexport async function setType(type) {\n let meta = sheet.get().meta();\n if (type === meta.budgetType) {\n return;\n }\n\n meta.budgetType = type;\n meta.createdMonths = new Set();\n\n // Go through and force all the cells to be recomputed\n let nodes = sheet.get().getNodes();\n db.transaction(() => {\n for (let name of nodes.keys()) {\n let [sheetName, cellName] = name.split('!');\n if (sheetName.match(/^budget\\d+/)) {\n sheet.get().deleteCell(sheetName, cellName);\n }\n }\n });\n\n sheet.get().startCacheBarrier();\n sheet.loadUserBudgets(db);\n let bounds = await createAllBudgets();\n sheet.get().endCacheBarrier();\n\n return bounds;\n}\n","import * as sheet from '../sheet';\nimport * as monthUtils from '../../shared/months';\nimport { number, sumAmounts } from './util';\nconst { resolveName } = require('../spreadsheet/util');\n\nexport async function createCategory(cat, sheetName, prevSheetName) {\n sheet.get().createStatic(sheetName, `budget-${cat.id}`, 0);\n\n // This makes the app more robust by \"fixing up\" null budget values.\n // Those should not be allowed, but in case somehow a null value\n // ends up there, we are resilient to it. Preferrably the\n // spreadsheet would have types and be more strict about what is\n // allowed to be set.\n if (sheet.get().getCellValue(sheetName, `budget-${cat.id}`) == null) {\n sheet.get().set(resolveName(sheetName, `budget-${cat.id}`), 0);\n }\n\n sheet.get().createDynamic(sheetName, `leftover-${cat.id}`, {\n initialValue: 0,\n dependencies: [\n `budget-${cat.id}`,\n `sum-amount-${cat.id}`,\n `${prevSheetName}!carryover-${cat.id}`,\n `${prevSheetName}!leftover-${cat.id}`\n ],\n run: (budgeted, sumAmount, prevCarryover, prevLeftover) => {\n if (cat.is_income) {\n return (\n number(budgeted) -\n number(sumAmount) +\n (prevCarryover ? number(prevLeftover) : 0)\n );\n }\n\n return (\n number(budgeted) +\n number(sumAmount) +\n (prevCarryover ? number(prevLeftover) : 0)\n );\n }\n });\n sheet.get().createDynamic(sheetName, `spent-with-carryover-${cat.id}`, {\n initialValue: 0,\n dependencies: [\n `budget-${cat.id}`,\n `sum-amount-${cat.id}`,\n `carryover-${cat.id}`\n ],\n // TODO: Why refresh??\n refresh: true,\n run: (budgeted, sumAmount, carryover) => {\n return carryover\n ? Math.max(0, number(budgeted) + number(sumAmount))\n : sumAmount;\n }\n });\n\n sheet.get().createStatic(sheetName, `carryover-${cat.id}`, false);\n}\n\nexport function createSummary(groups, categories, sheetName) {\n let incomeGroup = groups.filter(group => group.is_income)[0];\n let expenseCategories = categories.filter(cat => !cat.is_income);\n\n sheet.get().createDynamic(sheetName, 'total-budgeted', {\n initialValue: 0,\n dependencies: groups\n .filter(group => !group.is_income)\n .map(group => `group-budget-${group.id}`),\n run: sumAmounts\n });\n\n sheet.get().createDynamic(sheetName, 'total-spent', {\n initialValue: 0,\n refresh: true,\n dependencies: expenseCategories.map(\n cat => `${sheetName}!spent-with-carryover-${cat.id}`\n ),\n run: sumAmounts\n });\n\n sheet.get().createDynamic(sheetName, 'total-income', {\n initialValue: 0,\n dependencies: [`group-sum-amount-${incomeGroup.id}`],\n run: amount => amount\n });\n\n sheet.get().createDynamic(sheetName, 'total-leftover', {\n initialValue: 0,\n dependencies: ['total-budgeted', 'total-spent'],\n run: sumAmounts\n });\n\n sheet.get().createDynamic(sheetName, 'total-budget-income', {\n initialValue: 0,\n dependencies: [`group-budget-${incomeGroup.id}`],\n run: amount => amount\n });\n\n sheet.get().createDynamic(sheetName, 'total-saved', {\n initialValue: 0,\n dependencies: ['total-budget-income', 'total-budgeted'],\n run: (income, budgeted) => {\n return income - budgeted;\n }\n });\n\n sheet.get().createDynamic(sheetName, 'real-saved', {\n initialValue: 0,\n dependencies: ['total-income', 'total-spent'],\n run: (income, spent) => {\n return income - -spent;\n }\n });\n}\n","import * as sheet from '../sheet';\nimport * as monthUtils from '../../shared/months';\nimport { number, sumAmounts, flatten2, unflatten2 } from './util';\nconst { resolveName } = require('../spreadsheet/util');\n\nfunction getBlankSheet(months) {\n let blankMonth = monthUtils.prevMonth(months[0]);\n return monthUtils.sheetForMonth(blankMonth, 'rollover');\n}\n\nexport function createBlankCategory(cat, months) {\n if (months.length > 0) {\n let sheetName = getBlankSheet(months);\n sheet.get().createStatic(sheetName, `carryover-${cat.id}`, false);\n sheet.get().createStatic(sheetName, `leftover-${cat.id}`, 0);\n sheet.get().createStatic(sheetName, `leftover-pos-${cat.id}`, 0);\n }\n}\n\nfunction createBlankMonth(categories, sheetName, months) {\n sheet.get().createStatic(sheetName, 'is-blank', true);\n sheet.get().createStatic(sheetName, 'to-budget', 0);\n sheet.get().createStatic(sheetName, 'buffered', 0);\n\n categories.forEach(cat => createBlankCategory(cat, months));\n}\n\nexport function createCategory(cat, sheetName, prevSheetName) {\n if (!cat.is_income) {\n sheet.get().createStatic(sheetName, `budget-${cat.id}`, 0);\n\n // This makes the app more robust by \"fixing up\" null budget values.\n // Those should not be allowed, but in case somehow a null value\n // ends up there, we are resilient to it. Preferrably the\n // spreadsheet would have types and be more strict about what is\n // allowed to be set.\n if (sheet.get().getCellValue(sheetName, `budget-${cat.id}`) == null) {\n sheet.get().set(resolveName(sheetName, `budget-${cat.id}`), 0);\n }\n\n sheet.get().createStatic(sheetName, `carryover-${cat.id}`, false);\n\n sheet.get().createDynamic(sheetName, `leftover-${cat.id}`, {\n initialValue: 0,\n dependencies: [\n `budget-${cat.id}`,\n `sum-amount-${cat.id}`,\n `${prevSheetName}!carryover-${cat.id}`,\n `${prevSheetName}!leftover-${cat.id}`,\n `${prevSheetName}!leftover-pos-${cat.id}`\n ],\n run: (budgeted, spent, prevCarryover, prevLeftover, prevLeftoverPos) => {\n return (\n number(budgeted) +\n number(spent) +\n (prevCarryover ? number(prevLeftover) : number(prevLeftoverPos))\n );\n }\n });\n\n sheet.get().createDynamic(sheetName, 'leftover-pos-' + cat.id, {\n initialValue: 0,\n dependencies: [`leftover-${cat.id}`],\n run: leftover => {\n return leftover < 0 ? 0 : leftover;\n }\n });\n }\n}\n\nexport function createSummary(groups, categories, prevSheetName, sheetName) {\n let incomeGroup = groups.filter(group => group.is_income)[0];\n let expenseCategories = categories.filter(cat => !cat.is_income);\n\n sheet.get().createStatic(sheetName, 'buffered', 0);\n\n sheet.get().createDynamic(sheetName, 'from-last-month', {\n initialValue: 0,\n dependencies: [`${prevSheetName}!to-budget`, `${prevSheetName}!buffered`],\n run: (toBudget, buffered) => number(toBudget) + number(buffered)\n });\n\n // Alias the group income total to `total-income`\n sheet.get().createDynamic(sheetName, 'total-income', {\n initialValue: 0,\n dependencies: [`group-sum-amount-${incomeGroup.id}`],\n run: amount => amount\n });\n\n sheet.get().createDynamic(sheetName, 'available-funds', {\n initialValue: 0,\n dependencies: ['total-income', 'from-last-month'],\n run: (income, fromLastMonth) => number(income) + number(fromLastMonth)\n });\n\n sheet.get().createDynamic(sheetName, 'last-month-overspent', {\n initialValue: 0,\n dependencies: flatten2(\n expenseCategories.map(cat => [\n `${prevSheetName}!leftover-${cat.id}`,\n `${prevSheetName}!carryover-${cat.id}`\n ])\n ),\n run: (...data) => {\n data = unflatten2(data);\n return data.reduce((total, [leftover, carryover]) => {\n if (carryover) {\n return total;\n }\n return total + Math.min(0, number(leftover));\n }, 0);\n }\n });\n\n sheet.get().createDynamic(sheetName, 'total-budgeted', {\n initialValue: 0,\n dependencies: groups\n .filter(group => !group.is_income)\n .map(group => `group-budget-${group.id}`),\n run: (...amounts) => {\n // Negate budgeted amount\n return -sumAmounts(...amounts);\n }\n });\n\n sheet.get().createDynamic(sheetName, 'buffered', { initialValue: 0 });\n\n sheet.get().createDynamic(sheetName, 'to-budget', {\n initialValue: 0,\n dependencies: [\n 'available-funds',\n 'last-month-overspent',\n 'total-budgeted',\n 'buffered'\n ],\n run: (available, lastOverspent, totalBudgeted, buffered) => {\n return (\n number(available) +\n number(lastOverspent) +\n number(totalBudgeted) -\n number(buffered)\n );\n }\n });\n\n sheet.get().createDynamic(sheetName, 'total-spent', {\n initialValue: 0,\n dependencies: groups\n .filter(group => !group.is_income)\n .map(group => `group-sum-amount-${group.id}`),\n run: sumAmounts\n });\n\n sheet.get().createDynamic(sheetName, 'total-leftover', {\n initialValue: 0,\n dependencies: groups\n .filter(group => !group.is_income)\n .map(group => `group-leftover-${group.id}`),\n run: sumAmounts\n });\n}\n\nexport function createBudget(meta, categories, months) {\n // The spreadsheet is now strict - so we need to fill in some\n // default values for the month before the first month. Only do this\n // if it doesn't already exist\n let blankSheet = getBlankSheet(months);\n if (meta.blankSheet !== blankSheet) {\n sheet.get().clearSheet(meta.blankSheet);\n createBlankMonth(categories, blankSheet, months);\n meta.blankSheet = blankSheet;\n }\n}\n","import { number } from '../spreadsheet/globals';\n\nexport { number } from '../spreadsheet/globals';\n\nexport function sumAmounts(...amounts) {\n return amounts.reduce((total, amount) => {\n return total + number(amount);\n }, 0);\n}\n\nexport function flatten2(arr) {\n return Array.prototype.concat.apply([], arr);\n}\n\nexport function unflatten2(arr) {\n let res = [];\n for (let i = 0; i < arr.length; i += 2) {\n res.push([arr[i], arr[i + 1]]);\n }\n return res;\n}\n\n","import fs from '../platform/server/fs';\nimport asyncStorage from '../platform/server/asyncStorage';\nimport { fetch } from '../platform/server/fetch';\nimport * as monthUtils from '../shared/months';\nimport * as sqlite from '../platform/server/sqlite';\nimport * as prefs from './prefs';\nimport { getServer } from './server-config';\nimport { runMutator } from './mutators';\nimport {\n HTTPError,\n PostError,\n FileDownloadError,\n FileUploadError\n} from './errors';\nimport encryption from './encryption';\nimport { post } from './post';\nlet uuid = require('../platform/uuid');\nlet AdmZip = require('adm-zip');\n\nlet UPLOAD_FREQUENCY_IN_DAYS = 7;\n\nasync function checkHTTPStatus(res) {\n if (res.status !== 200) {\n return res.text().then(str => {\n throw new HTTPError(res.status, str);\n });\n } else {\n return res;\n }\n}\n\nasync function fetchJSON(...args) {\n let res = await fetch(...args);\n res = await checkHTTPStatus(res);\n return res.json();\n}\n\nexport async function checkKey() {\n let userToken = await asyncStorage.getItem('user-token');\n\n let { cloudFileId, encryptKeyId } = prefs.getPrefs();\n\n let res;\n try {\n res = await post(getServer().SYNC_SERVER + '/user-get-key', {\n token: userToken,\n fileId: cloudFileId\n });\n } catch (e) {\n console.log(e);\n return { error: { reason: 'network' } };\n }\n\n // This == comparison is important, they could be null or undefined\n // eslint-disable-next-line\n return {\n valid:\n res.id == encryptKeyId && // eslint-disable-line\n (encryptKeyId == null || encryption.hasKey(encryptKeyId))\n };\n}\n\nexport async function resetSyncState(newKeyState) {\n let userToken = await asyncStorage.getItem('user-token');\n\n let { cloudFileId } = prefs.getPrefs();\n\n if (process.env.IS_BETA) {\n return { error: { reason: 'beta-version' } };\n }\n\n try {\n await post(getServer().SYNC_SERVER + '/reset-user-file', {\n token: userToken,\n fileId: cloudFileId\n });\n } catch (e) {\n if (e instanceof PostError) {\n return {\n error: {\n reason: e.reason === 'unauthorized' ? 'unauthorized' : 'network'\n }\n };\n }\n return { error: { reason: 'internal' } };\n }\n\n if (newKeyState) {\n try {\n await post(getServer().SYNC_SERVER + '/user-create-key', {\n token: userToken,\n fileId: cloudFileId,\n keyId: newKeyState.key.getId(),\n keySalt: newKeyState.salt,\n testContent: newKeyState.testContent\n });\n } catch (e) {\n if (e instanceof PostError) {\n return { error: { reason: 'network' } };\n }\n return { error: { reason: 'internal' } };\n }\n }\n\n return {};\n}\n\nexport async function exportBuffer() {\n let { id, budgetName } = prefs.getPrefs();\n if (!budgetName) {\n return null;\n }\n\n let budgetDir = fs.getBudgetDir(id);\n\n // create zip\n let zipped = new AdmZip();\n\n // We run this in a mutator even though its not mutating anything\n // because we are reading the sqlite file from disk. We want to make\n // sure that we get a valid snapshot of it so we want this to be\n // serialized with all other mutations.\n await runMutator(async () => {\n let rawDbContent = await fs.readFile(\n fs.join(budgetDir, 'db.sqlite'),\n 'binary'\n );\n\n // Do some post-processing of the database. We NEVER upload the cache with\n // the database; this forces new downloads to always recompute everything\n // which is not only safer, but reduces the filesize a lot.\n let memDb = await sqlite.openDatabase(rawDbContent);\n sqlite.execQuery(\n memDb,\n `\n DELETE FROM kvcache;\n DELETE FROM kvcache_key;\n `\n );\n\n let dbContent = sqlite.exportDatabase(memDb);\n sqlite.closeDatabase(memDb);\n\n // mark it as a file that needs a new clock so when a new client\n // downloads it, it'll get set to a unique node\n let meta = JSON.parse(\n await fs.readFile(fs.join(budgetDir, 'metadata.json'))\n );\n\n meta.resetClock = true;\n let metaContent = Buffer.from(JSON.stringify(meta), 'utf8');\n\n zipped.addFile('db.sqlite', dbContent);\n zipped.addFile('metadata.json', metaContent);\n });\n\n return Buffer.from(zipped.toBuffer());\n}\n\nexport async function importBuffer(fileData, buffer) {\n let zipped = new AdmZip(buffer);\n let entries = zipped.getEntries();\n let dbEntry = entries.find(e => e.entryName.includes('db.sqlite'));\n let metaEntry = entries.find(e => e.entryName.includes('metadata.json'));\n\n if (!dbEntry || !metaEntry) {\n throw FileDownloadError('invalid-zip-file');\n }\n\n let dbContent = zipped.readFile(dbEntry);\n let metaContent = zipped.readFile(metaEntry);\n\n let meta;\n try {\n meta = JSON.parse(metaContent.toString('utf8'));\n } catch (err) {\n throw FileDownloadError('invalid-meta-file');\n }\n\n // Update the metadata. The stored file on the server might be\n // out-of-date with a few keys\n meta = {\n ...meta,\n cloudFileId: fileData.fileId,\n groupId: fileData.groupId,\n lastUploaded: monthUtils.currentDay(),\n encryptKeyId: fileData.encryptMeta ? fileData.encryptMeta.keyId : null\n };\n\n let budgetDir = fs.getBudgetDir(meta.id);\n\n if (await fs.exists(budgetDir)) {\n // Don't remove the directory so that backups are retained\n let dbFile = fs.join(budgetDir, 'db.sqlite');\n let metaFile = fs.join(budgetDir, 'metadata.json');\n\n if (await fs.exists(dbFile)) {\n await fs.removeFile(dbFile);\n }\n if (await fs.exists(metaFile)) {\n await fs.removeFile(metaFile);\n }\n } else {\n await fs.mkdir(budgetDir);\n }\n\n await fs.writeFile(fs.join(budgetDir, 'db.sqlite'), dbContent);\n await fs.writeFile(fs.join(budgetDir, 'metadata.json'), JSON.stringify(meta));\n\n return { id: meta.id };\n}\n\nexport async function upload() {\n let userToken = await asyncStorage.getItem('user-token');\n if (!userToken) {\n throw FileUploadError('unauthorized');\n }\n\n // We never change the server from the beta version\n if (process.env.IS_BETA) {\n throw FileUploadError('beta-version');\n }\n\n let zipContent = await exportBuffer();\n if (zipContent == null) {\n return;\n }\n\n let { id, groupId, budgetName, cloudFileId, encryptKeyId } = prefs.getPrefs();\n let uploadContent = zipContent;\n let uploadMeta = null;\n\n // The upload process encrypts with the key tagged in the prefs for\n // the file. It will upload the file and the server is responsible\n // for checking that the key is up-to-date and rejecting it if not\n if (encryptKeyId) {\n let encrypted;\n try {\n encrypted = await encryption.encrypt(zipContent, encryptKeyId);\n } catch (e) {\n throw FileUploadError('encrypt-failure', {\n isMissingKey: e.message === 'missing-key'\n });\n }\n uploadContent = encrypted.value;\n uploadMeta = encrypted.meta;\n }\n\n if (!cloudFileId) {\n cloudFileId = uuid.v4Sync();\n }\n\n let res;\n try {\n res = await fetchJSON(getServer().SYNC_SERVER + '/upload-user-file', {\n method: 'POST',\n headers: {\n 'Content-Length': uploadContent.length,\n 'Content-Type': 'application/encrypted-file',\n 'X-ACTUAL-TOKEN': userToken,\n 'X-ACTUAL-FILE-ID': cloudFileId,\n 'X-ACTUAL-NAME': encodeURIComponent(budgetName),\n 'X-ACTUAL-FORMAT': 2,\n ...(uploadMeta\n ? { 'X-ACTUAL-ENCRYPT-META': JSON.stringify(uploadMeta) }\n : null),\n ...(groupId ? { 'X-ACTUAL-GROUP-ID': groupId } : null)\n },\n body: uploadContent\n });\n } catch (err) {\n console.log('Upload failure', err);\n\n let reason = err instanceof PostError ? err.reason : 'network';\n\n if (err instanceof PostError) {\n throw new FileUploadError(\n err.reason === 'unauthorized' ? 'unauthorized' : err.reason || 'network'\n );\n }\n\n throw FileUploadError('internal');\n }\n\n if (res.status === 'ok') {\n // Only save it if we are still working on the same file\n if (prefs.getPrefs() && prefs.getPrefs().id === id) {\n await prefs.savePrefs({\n lastUploaded: monthUtils.currentDay(),\n cloudFileId,\n groupId: res.groupId\n });\n }\n } else {\n throw FileUploadError('internal');\n }\n}\n\nexport async function possiblyUpload() {\n let { cloudFileId, groupId, lastUploaded, id } = prefs.getPrefs();\n\n let threshold =\n lastUploaded && monthUtils.addDays(lastUploaded, UPLOAD_FREQUENCY_IN_DAYS);\n let currentDay = monthUtils.currentDay();\n\n // We only want to try to upload every UPLOAD_FREQUENCY_IN_DAYS days\n if (lastUploaded && currentDay < threshold) {\n return;\n }\n\n // We only want to upload existing cloud files that are part of a\n // valid group\n if (!cloudFileId || !groupId) {\n return;\n }\n\n // Don't block on uploading\n upload().catch(err => {});\n}\n\nexport async function removeFile(fileId) {\n const [[, userToken]] = await asyncStorage.multiGet(['user-token']);\n\n await post(getServer().SYNC_SERVER + '/delete-user-file', {\n token: userToken,\n fileId\n });\n}\n\nexport async function listRemoteFiles() {\n let userToken = await asyncStorage.getItem('user-token');\n if (!userToken) {\n return null;\n }\n\n let res;\n try {\n res = await fetchJSON(getServer().SYNC_SERVER + '/list-user-files', {\n headers: {\n 'X-ACTUAL-TOKEN': userToken\n }\n });\n } catch (e) {\n console.log('Error', e);\n return null;\n }\n\n if (res.status === 'error') {\n return null;\n }\n\n return res.data.map(file => ({\n ...file,\n hasKey: encryption.hasKey(file.encryptKeyId)\n }));\n}\n\nexport async function download(fileId, replace) {\n let userToken = await asyncStorage.getItem('user-token');\n\n let buffer;\n try {\n buffer = await fetch(getServer().SYNC_SERVER + '/download-user-file', {\n headers: {\n 'X-ACTUAL-TOKEN': userToken,\n 'X-ACTUAL-FILE-ID': fileId\n }\n })\n .then(checkHTTPStatus)\n .then(res => {\n if (res.arrayBuffer) {\n return res.arrayBuffer().then(ab => Buffer.from(ab));\n }\n return res.buffer();\n });\n } catch (err) {\n console.log('Download failure', err);\n throw FileDownloadError('download-failure');\n }\n\n let res;\n try {\n res = await fetchJSON(getServer().SYNC_SERVER + '/get-user-file-info', {\n headers: {\n 'X-ACTUAL-TOKEN': userToken,\n 'X-ACTUAL-FILE-ID': fileId\n }\n });\n } catch (err) {\n throw FileDownloadError('internal', { fileId });\n }\n\n if (res.status !== 'ok') {\n throw FileDownloadError('internal', { fileId });\n }\n let fileData = res.data;\n\n // The download process checks if the server gave us decrypt\n // information. It is assumed that this key has already been loaded\n // in, which is done in a previous step\n if (fileData.encryptMeta) {\n try {\n buffer = await encryption.decrypt(buffer, fileData.encryptMeta);\n } catch (e) {\n throw FileDownloadError('decrypt-failure', {\n isMissingKey: e.message === 'missing-key'\n });\n }\n }\n\n return importBuffer(fileData, buffer, replace);\n}\n","import LRU from 'lru-cache';\nimport * as sqlite from '../../platform/server/sqlite';\nimport fs from '../../platform/server/fs';\nimport { sendMessages, batchMessages } from '../sync';\nimport { schema, schemaConfig } from '../aql/schema';\nimport {\n accountModel,\n categoryModel,\n categoryGroupModel,\n payeeModel,\n payeeRuleModel\n} from '../models';\nimport { groupById } from '../../shared/util';\nimport Timestamp, {\n makeClock,\n setClock,\n serializeClock,\n deserializeClock,\n makeClientId\n} from '../timestamp';\nimport {\n convertForInsert,\n convertForUpdate,\n convertFromSelect\n} from '../aql/schema-helpers';\nimport { shoveSortOrders, SORT_INCREMENT } from './sort';\n\nexport { toDateRepr, fromDateRepr } from '../models';\n\nconst uuid = require('../../platform/uuid');\n\nlet dbPath;\nlet db;\n\n// Util\n\nexport function getDatabasePath() {\n return dbPath;\n}\n\nexport async function openDatabase(id) {\n if (db) {\n await sqlite.closeDatabase(db);\n }\n\n dbPath = fs.join(fs.getBudgetDir(id), 'db.sqlite');\n setDatabase(await sqlite.openDatabase(dbPath));\n\n // await execQuery('PRAGMA journal_mode = WAL');\n}\n\nexport async function reopenDatabase() {\n await sqlite.closeDatabase(db);\n setDatabase(await sqlite.openDatabase(dbPath));\n}\n\nexport async function closeDatabase() {\n if (db) {\n await sqlite.closeDatabase(db);\n setDatabase(null);\n }\n}\n\nexport function setDatabase(db_) {\n db = db_;\n resetQueryCache();\n}\n\nexport function getDatabase() {\n return db;\n}\n\nexport async function loadClock() {\n let row = await first('SELECT * FROM messages_clock');\n if (row) {\n let clock = deserializeClock(row.clock);\n setClock(clock);\n } else {\n // No clock exists yet (first run of the app), so create a default\n // one.\n let timestamp = new Timestamp(0, 0, makeClientId());\n let clock = makeClock(timestamp);\n setClock(clock);\n\n await runQuery('INSERT INTO messages_clock (id, clock) VALUES (?, ?)', [\n 1,\n serializeClock(clock)\n ]);\n }\n}\n\n// Functions\n\nexport function runQuery(sql, params, fetchAll) {\n // const unrecord = perf.record('sqlite');\n const result = sqlite.runQuery(db, sql, params, fetchAll);\n // unrecord();\n return result;\n}\n\nexport function execQuery(sql) {\n sqlite.execQuery(db, sql);\n}\n\n// This manages an LRU cache of prepared query statements. This is\n// only needed in hot spots when you are running lots of queries.\nlet _queryCache = new LRU({ max: 100 });\nexport function cache(sql) {\n let cached = _queryCache.get(sql);\n if (cached) {\n return cached;\n }\n\n let prepared = sqlite.prepare(db, sql);\n _queryCache.set(sql, prepared);\n return prepared;\n}\n\nfunction resetQueryCache() {\n _queryCache = new LRU({ max: 100 });\n}\n\nexport function transaction(fn) {\n return sqlite.transaction(db, fn);\n}\n\nexport function asyncTransaction(fn) {\n return sqlite.asyncTransaction(db, fn);\n}\n\n// This function is marked as async because `runQuery` is no longer\n// async. We return a promise here until we've audited all the code to\n// make sure nothing calls `.then` on this.\nexport async function all(sql, params) {\n return runQuery(sql, params, true);\n}\n\nexport async function first(sql, params) {\n const arr = await runQuery(sql, params, true);\n return arr.length === 0 ? null : arr[0];\n}\n\n// The underlying sql system is now sync, but we can't update `first` yet\n// without auditing all uses of it\nexport function firstSync(sql, params) {\n const arr = runQuery(sql, params, true);\n return arr.length === 0 ? null : arr[0];\n}\n\n// This function is marked as async because `runQuery` is no longer\n// async. We return a promise here until we've audited all the code to\n// make sure nothing calls `.then` on this.\nexport async function run(sql, params) {\n return runQuery(sql, params);\n}\n\nexport async function select(table, id) {\n const rows = await runQuery(\n 'SELECT * FROM ' + table + ' WHERE id = ?',\n [id],\n true\n );\n return rows[0];\n}\n\nexport async function update(table, params) {\n let fields = Object.keys(params).filter(k => k !== 'id');\n\n if (params.id == null) {\n throw new Error('update: id is required');\n }\n\n await sendMessages(\n fields.map(k => {\n return {\n dataset: table,\n row: params.id,\n column: k,\n value: params[k],\n timestamp: Timestamp.send()\n };\n })\n );\n}\n\nexport async function insertWithUUID(table, row) {\n if (!row.id) {\n row = { ...row, id: uuid.v4Sync() };\n }\n\n await insert(table, row);\n\n // We can't rely on the return value of insert because if the\n // primary key is text, sqlite returns the internal row id which we\n // don't care about. We want to return the generated UUID.\n return row.id;\n}\n\nexport async function insert(table, row) {\n let fields = Object.keys(row).filter(k => k !== 'id');\n\n if (row.id == null) {\n throw new Error('insert: id is required');\n }\n\n await sendMessages(\n fields.map(k => {\n return {\n dataset: table,\n row: row.id,\n column: k,\n value: row[k],\n timestamp: Timestamp.send()\n };\n })\n );\n}\n\nexport async function delete_(table, id) {\n await sendMessages([\n {\n dataset: table,\n row: id,\n column: 'tombstone',\n value: 1,\n timestamp: Timestamp.send()\n }\n ]);\n}\n\nexport async function selectWithSchema(table, sql, params) {\n let rows = await runQuery(sql, params, true);\n return rows\n .map(row => convertFromSelect(schema, schemaConfig, table, row))\n .filter(Boolean);\n}\n\nexport async function selectFirstWithSchema(table, sql, params) {\n let rows = await selectWithSchema(table, sql, params);\n return rows.length > 0 ? rows[0] : null;\n}\n\nexport function insertWithSchema(table, row) {\n // Even though `insertWithUUID` does this, we need to do it here so\n // the schema validation passes\n if (!row.id) {\n row = { ...row, id: uuid.v4Sync() };\n }\n\n return insertWithUUID(\n table,\n convertForInsert(schema, schemaConfig, table, row)\n );\n}\n\nexport function updateWithSchema(table, fields) {\n return update(table, convertForUpdate(schema, schemaConfig, table, fields));\n}\n\n// Data-specific functions. Ideally this would be split up into\n// different files\n\nexport async function getCategories() {\n return all(`\n SELECT c.* FROM categories c\n LEFT JOIN category_groups cg ON c.cat_group = cg.id\n WHERE c.tombstone = 0\n ORDER BY cg.sort_order, cg.id, c.sort_order, c.id\n `);\n}\n\nexport async function getCategoriesGrouped() {\n const groups = await all(\n 'SELECT * FROM category_groups WHERE tombstone = 0 ORDER BY is_income, sort_order, id'\n );\n const rows = await all(`\n SELECT * FROM categories WHERE tombstone = 0\n ORDER BY sort_order, id\n `);\n\n return groups.map(group => {\n return {\n ...group,\n categories: rows.filter(row => row.cat_group === group.id)\n };\n });\n}\n\nexport async function insertCategoryGroup(group) {\n const lastGroup = await first(`\n SELECT sort_order FROM category_groups WHERE tombstone = 0 ORDER BY sort_order DESC, id DESC LIMIT 1\n `);\n const sort_order = (lastGroup ? lastGroup.sort_order : 0) + SORT_INCREMENT;\n\n group = {\n ...categoryGroupModel.validate(group),\n sort_order: sort_order\n };\n return insertWithUUID('category_groups', group);\n}\n\nexport function updateCategoryGroup(group) {\n group = categoryGroupModel.validate(group, { update: true });\n return update('category_groups', group);\n}\n\nexport async function moveCategoryGroup(id, targetId) {\n const groups = await all(\n `SELECT id, sort_order FROM category_groups WHERE tombstone = 0 ORDER BY sort_order, id`\n );\n\n const { updates, sort_order } = shoveSortOrders(groups, targetId);\n for (let info of updates) {\n await update('category_groups', info);\n }\n await update('category_groups', { id, sort_order });\n}\n\nexport async function deleteCategoryGroup(group, transferId) {\n const categories = await all('SELECT * FROM categories WHERE cat_group = ?', [\n group.id\n ]);\n\n // Delete all the categories within a group\n await Promise.all(categories.map(cat => deleteCategory(cat, transferId)));\n await delete_('category_groups', group.id);\n}\n\nexport async function insertCategory(category, { atEnd } = {}) {\n let sort_order;\n\n let id_;\n await batchMessages(async () => {\n if (atEnd) {\n const lastCat = await first(`\n SELECT sort_order FROM categories WHERE tombstone = 0 ORDER BY sort_order DESC, id DESC LIMIT 1\n `);\n sort_order = (lastCat ? lastCat.sort_order : 0) + SORT_INCREMENT;\n } else {\n // Unfortunately since we insert at the beginning, we need to shove\n // the sort orders to make sure there's room for it\n const categories = await all(\n `SELECT id, sort_order FROM categories WHERE cat_group = ? AND tombstone = 0 ORDER BY sort_order, id`,\n [category.cat_group]\n );\n\n const { updates, sort_order: order } = shoveSortOrders(\n categories,\n categories.length > 0 ? categories[0].id : null\n );\n for (let info of updates) {\n await update('categories', info);\n }\n sort_order = order;\n }\n\n category = {\n ...categoryModel.validate(category),\n sort_order: sort_order\n };\n\n const id = await insertWithUUID('categories', category);\n // Create an entry in the mapping table that points it to itself\n await insert('category_mapping', { id, transferId: id });\n id_ = id;\n });\n return id_;\n}\n\nexport function updateCategory(category) {\n category = categoryModel.validate(category, { update: true });\n return update('categories', category);\n}\n\nexport async function moveCategory(id, groupId, targetId) {\n if (!groupId) {\n throw new Error('moveCategory: groupId is required');\n }\n\n const categories = await all(\n `SELECT id, sort_order FROM categories WHERE cat_group = ? AND tombstone = 0 ORDER BY sort_order, id`,\n [groupId]\n );\n\n const { updates, sort_order } = shoveSortOrders(categories, targetId);\n for (let info of updates) {\n await update('categories', info);\n }\n await update('categories', { id, sort_order, cat_group: groupId });\n}\n\nexport async function deleteCategory(category, transferId) {\n if (transferId) {\n // We need to update all the deleted categories that currently\n // point to the one we're about to delete so they all are\n // \"forwarded\" to the new transferred category.\n const existingTransfers = await all(\n 'SELECT * FROM category_mapping WHERE transferId = ?',\n [category.id]\n );\n for (let mapping of existingTransfers) {\n await update('category_mapping', { id: mapping.id, transferId });\n }\n\n // Finally, map the category we're about to delete to the new one\n await update('category_mapping', { id: category.id, transferId });\n }\n\n return delete_('categories', category.id);\n}\n\nexport async function getPayee(id) {\n return first(`SELECT * FROM payees WHERE id = ?`, [id]);\n}\n\nexport async function insertPayee(payee) {\n payee = payeeModel.validate(payee);\n let id;\n await batchMessages(async () => {\n id = await insertWithUUID('payees', payee);\n await insert('payee_mapping', { id, targetId: id });\n });\n return id;\n}\n\nexport async function deletePayee(payee) {\n let { transfer_acct } = await first('SELECT * FROM payees WHERE id = ?', [\n payee.id\n ]);\n if (transfer_acct) {\n // You should never be able to delete transfer payees\n return;\n }\n\n // let mappings = await all('SELECT id FROM payee_mapping WHERE targetId = ?', [\n // payee.id\n // ]);\n // await Promise.all(\n // mappings.map(m => update('payee_mapping', { id: m.id, targetId: null }))\n // );\n\n let rules = await all('SELECT * FROM payee_rules WHERE payee_id = ?', [\n payee.id\n ]);\n await Promise.all(rules.map(rule => deletePayeeRule({ id: rule.id })));\n return delete_('payees', payee.id);\n}\n\nexport async function deleteTransferPayee(payee) {\n // This allows deleting transfer payees\n return delete_('payees', payee.id);\n}\n\nexport function updatePayee(payee) {\n payee = payeeModel.validate(payee, { update: true });\n return update('payees', payee);\n}\n\nexport async function mergePayees(target, ids) {\n // Load in payees so we can check some stuff\n let payees = groupById(await all('SELECT * FROM payees'));\n\n // Filter out any transfer payees\n if (payees[target].transfer_acct != null) {\n return;\n }\n ids = ids.filter(id => payees[id].transfer_acct == null);\n\n await batchMessages(async () => {\n await Promise.all(\n ids.map(async id => {\n let mappings = await all(\n 'SELECT id FROM payee_mapping WHERE targetId = ?',\n [id]\n );\n await Promise.all(\n mappings.map(m =>\n update('payee_mapping', { id: m.id, targetId: target })\n )\n );\n })\n );\n\n return Promise.all(\n ids.map(id =>\n Promise.all([\n update('payee_mapping', { id, targetId: target }),\n delete_('payees', id)\n ])\n )\n );\n });\n}\n\nexport function getPayees() {\n return all(`\n SELECT p.*, COALESCE(a.name, p.name) AS name FROM payees p\n LEFT JOIN accounts a ON (p.transfer_acct = a.id AND a.tombstone = 0)\n WHERE p.tombstone = 0 AND (p.transfer_acct IS NULL OR a.id IS NOT NULL)\n ORDER BY p.transfer_acct IS NULL DESC, p.name COLLATE NOCASE\n `);\n}\n\nexport async function getOrphanedPayees() {\n let rows = await all(`\n SELECT p.id FROM payees p\n LEFT JOIN payee_mapping pm ON pm.id = p.id\n LEFT JOIN v_transactions_internal_alive t ON t.payee = pm.targetId\n WHERE p.tombstone = 0 AND p.transfer_acct IS NULL AND t.id IS NULL\n `);\n return rows.map(row => row.id);\n}\n\nexport async function getPayeeByName(name) {\n return first(`SELECT * FROM payees WHERE LOWER(name) = ? AND tombstone = 0`, [\n name.toLowerCase()\n ]);\n}\n\nexport function insertPayeeRule(rule) {\n rule = payeeRuleModel.validate(rule);\n return insertWithUUID('payee_rules', rule);\n}\n\nexport function deletePayeeRule(rule) {\n return delete_('payee_rules', rule.id);\n}\n\nexport function updatePayeeRule(rule) {\n rule = payeeModel.validate(rule, { update: true });\n return update('payee_rules', rule);\n}\n\nexport function getPayeeRules(id) {\n return all(\n `SELECT pr.* FROM payee_rules pr\n LEFT JOIN payee_mapping pm ON pm.id = pr.payee_id\n WHERE pm.targetId = ? AND pr.tombstone = 0`,\n [id]\n );\n}\n\nexport function getAccounts() {\n return all(\n `SELECT a.*, b.name as bankName, b.id as bankId FROM accounts a\n LEFT JOIN banks b ON a.bank = b.id\n WHERE a.tombstone = 0\n ORDER BY sort_order, name`\n );\n}\n\nexport async function insertAccount(account) {\n // Default to checking. Makes it a lot easier for tests and is\n // generally harmless.\n if (account.type === undefined) {\n account = { ...account, type: 'checking' };\n }\n\n const accounts = await all(\n 'SELECT * FROM accounts WHERE offbudget = ? ORDER BY sort_order, name',\n [account.offbudget != null ? account.offbudget : 0]\n );\n\n // Don't pass a target in, it will default to appending at the end\n let { sort_order } = shoveSortOrders(accounts);\n\n account = accountModel.validate({ ...account, sort_order });\n return insertWithUUID('accounts', account);\n}\n\nexport function updateAccount(account) {\n account = accountModel.validate(account, { update: true });\n return update('accounts', account);\n}\n\nexport function deleteAccount(account) {\n return delete_('accounts', account.id);\n}\n\nexport async function moveAccount(id, targetId) {\n let account = await first('SELECT * FROM accounts WHERE id = ?', [id]);\n let accounts;\n if (account.closed) {\n accounts = await all(\n `SELECT id, sort_order FROM accounts WHERE closed = 1 ORDER BY sort_order, name`\n );\n } else {\n accounts = await all(\n `SELECT id, sort_order FROM accounts WHERE tombstone = 0 AND offbudget = ? ORDER BY sort_order, name`,\n [account.offbudget]\n );\n }\n\n const { updates, sort_order } = shoveSortOrders(accounts, targetId);\n await batchMessages(() => {\n for (let info of updates) {\n update('accounts', info);\n }\n update('accounts', { id, sort_order });\n });\n}\n\nexport async function getTransaction(id) {\n let rows = await selectWithSchema(\n 'transactions',\n 'SELECT * FROM v_transactions WHERE id = ?',\n [id]\n );\n return rows[0];\n}\n\nfunction _addFragmentForAccount(accountId, addWhere, options = {}) {\n let { showClosed = false, showOffbudget = true } = options;\n\n let fragment = addWhere ? ' WHERE (' : ' AND ';\n let params = [];\n\n if (accountId) {\n if (accountId === 'offbudget') {\n fragment += 'a.closed = 0 AND a.offbudget = 1 ';\n } else if (accountId === 'budgeted') {\n fragment += 'a.closed = 0 AND a.offbudget = 0 ';\n } else if (accountId === 'uncategorized') {\n fragment += `\n t.category IS NULL AND a.offbudget = 0 AND isParent = 0 AND (\n ta.offbudget IS NULL OR ta.offbudget = 1\n )\n `;\n } else {\n fragment += 'a.id = ? ';\n params.push(accountId);\n }\n } else {\n fragment += showClosed ? '1' : 'a.closed = 0';\n\n if (!showOffbudget) {\n fragment += ' AND a.offbudget = 0';\n }\n }\n\n return { fragment, params };\n}\n\nexport async function getTransactionsByDate(\n accountId,\n startDate,\n endDate,\n options = {}\n) {\n throw new Error('`getTransactionsByDate` is deprecated');\n}\n\nexport async function getTransactions(accountId, arg2) {\n if (arg2 !== undefined) {\n throw new Error(\n '`getTransactions` was given a second argument, it now only takes a single argument `accountId`'\n );\n }\n\n return selectWithSchema(\n 'transactions',\n 'SELECT * FROM v_transactions WHERE account = ?',\n [accountId]\n );\n}\n\nexport function insertTransaction(transaction) {\n return insertWithSchema('transactions', transaction);\n}\n\nexport function updateTransaction(transaction) {\n return updateWithSchema('transactions', transaction);\n}\n\nexport async function deleteTransaction(transaction) {\n return delete_('transactions', transaction.id);\n}\n","import * as db from './index';\nimport { addSyncListener } from '../sync/index';\n\n// This file keeps all the mappings in memory so we can access it\n// synchronously. This is primarily used in the rules system, but\n// there may be other uses in the future. You don't need to worry\n// about this generally; if you are querying transactions, ids are\n// transparently mapped for you. But if you are building something\n// that stores ids and later uses them, you need to remember to map\n// the ids.\n//\n// IMPORTANT: `loadMappings` must be called first before other modules\n// that listen for sync changes. This must be the first sync listener\n// to run in case other listeners use this mapping table; otherwise\n// they might see stale mappings.\n\nlet allMappings;\nlet unlistenSync;\n\nexport async function loadMappings() {\n // The mappings are separated into tables specific to the type of\n // data. But you know, we really could keep a global mapping table.\n let categories = (await db.all('SELECT * FROM category_mapping')).map(r => [\n r.id,\n r.transferId\n ]);\n let payees = (await db.all('SELECT * FROM payee_mapping')).map(r => [\n r.id,\n r.targetId\n ]);\n\n // All ids are unique, so we can just keep a global table of mappings\n allMappings = new Map(categories.concat(payees));\n\n if (unlistenSync) {\n unlistenSync();\n }\n unlistenSync = addSyncListener(onApplySync);\n}\n\nfunction onApplySync(oldValues, newValues) {\n newValues.forEach((items, table) => {\n if (table.indexOf('mapping') !== -1) {\n let field = table === 'category_mapping' ? 'transferId' : 'targetId';\n\n items.forEach(newValue => {\n allMappings.set(newValue.id, newValue[field]);\n });\n }\n });\n}\n\nexport function getMappings() {\n return allMappings;\n}\n\nexport function getMapping(id) {\n return allMappings.get(id) || null;\n}\n","export const SORT_INCREMENT = 16384;\n\nfunction midpoint(items, to) {\n const below = items[to - 1];\n const above = items[to];\n\n if (!below) {\n return above.sort_order / 2;\n } else if (!above) {\n return below.sort_order + SORT_INCREMENT;\n } else {\n return (below.sort_order + above.sort_order) / 2;\n }\n}\n\nexport function shoveSortOrders(items, targetId) {\n const to = items.findIndex(item => item.id === targetId);\n const target = items[to];\n const before = items[to - 1];\n let updates = [];\n\n // If no target is specified, append at the end\n if (!targetId || to === -1) {\n let order;\n if (items.length > 0) {\n // Add a new increment to whatever is the latest sort order\n order = items[items.length - 1].sort_order + SORT_INCREMENT;\n } else {\n // If no items exist, the default is to use the first increment\n order = SORT_INCREMENT;\n }\n\n return { updates, sort_order: order };\n } else {\n if (target.sort_order - (before ? before.sort_order : 0) <= 2) {\n let next = to;\n let order = (items[next].sort_order | 0) + SORT_INCREMENT;\n while (next < items.length) {\n // No need to update it if it's already greater than the current\n // order. This can happen because there may already be large\n // gaps\n if (order <= items[next].sort_order) {\n break;\n }\n\n updates.push({ id: items[next].id, sort_order: order });\n\n next++;\n order += SORT_INCREMENT;\n }\n }\n\n return { updates, sort_order: midpoint(items, to) };\n }\n}\n","export async function incrFetch(\n runQuery,\n terms,\n compare,\n makeQuery,\n params = []\n) {\n let pageCount = 500;\n let results = [];\n\n let fetchedIds = new Set();\n\n for (let i = 0; i < terms.length; i += pageCount) {\n let slice = terms.slice(i, i + pageCount).filter(id => !fetchedIds.has(id));\n if (slice.length > 0) {\n let filter = slice.map(id => compare(id)).join(' OR ');\n let query = makeQuery('(' + filter + ')');\n\n let rows = await runQuery(query, params, true);\n fetchedIds = new Set([...fetchedIds, ...slice]);\n results = results.concat(rows);\n }\n }\n\n return results;\n}\n\nexport function whereIn(ids, field) {\n let ids2 = [...new Set(ids)];\n let filter = `${field} IN (` + ids2.map(id => `'${id}'`).join(',') + ')';\n return filter;\n}\n","let crypto = require('crypto');\n\nlet ENCRYPTION_ALGORITHM = 'aes-256-gcm';\n\nexport async function sha256String(str) {\n return crypto\n .createHash('sha256')\n .update(str)\n .digest('base64');\n}\n\nexport function randomBytes(n) {\n return crypto.randomBytes(n);\n}\n\nexport function encrypt(masterKey, value) {\n let masterKeyBuffer = masterKey.getValue().raw;\n // let iv = createKeyBuffer({ numBytes: 12, secret: masterKeyBuffer });\n let iv = crypto.randomBytes(12);\n let cipher = crypto.createCipheriv(ENCRYPTION_ALGORITHM, masterKeyBuffer, iv);\n let encrypted = cipher.update(value);\n encrypted = Buffer.concat([encrypted, cipher.final()]);\n\n let authTag = cipher.getAuthTag();\n\n return {\n value: encrypted,\n meta: {\n keyId: masterKey.getId(),\n algorithm: ENCRYPTION_ALGORITHM,\n iv: iv.toString('base64'),\n authTag: authTag.toString('base64')\n }\n };\n}\n\nexport function decrypt(masterKey, encrypted, meta) {\n let masterKeyBuffer = masterKey.getValue().raw;\n let { algorithm, iv, authTag } = meta;\n iv = Buffer.from(iv, 'base64');\n\n authTag = Buffer.from(authTag, 'base64');\n\n let decipher = crypto.createDecipheriv(algorithm, masterKeyBuffer, iv);\n decipher.setAuthTag(authTag);\n\n let decrypted = decipher.update(encrypted);\n decrypted = Buffer.concat([decrypted, decipher.final()]);\n return decrypted;\n}\n\nexport function createKey({ secret, salt }) {\n let buffer = createKeyBuffer({ secret, salt });\n return {\n raw: buffer,\n base64: buffer.toString('base64')\n };\n}\n\nexport function importKey(str) {\n return {\n raw: Buffer.from(str, 'base64'),\n base64: str\n };\n}\n\n/**\n * Generates a Buffer of a desired byte length to be used as either an encryption key or an initialization vector.\n *\n * @private\n * @param {Integer} [numBytes = 32] - Optional, number of bytes to fill the Buffer with.\n * @param {String} [secret = <random bytes>] - Optional, a secret to use as a basis for the key generation algorithm.\n * @returns {Buffer}\n */\nfunction createKeyBuffer({ numBytes, secret, salt }) {\n return crypto.pbkdf2Sync(\n secret || crypto.randomBytes(128).toString('base64'),\n salt || crypto.randomBytes(32).toString('base64'),\n 10000,\n numBytes || 32,\n 'sha512'\n );\n}\n","import * as internals from './encryption-internals';\nlet uuid = require('../platform/uuid/index.electron.js');\n\n// A map of all possible master encryption keys to use, keyed by\n// unique id\nlet keys = {};\n\nclass Key {\n constructor({ id, value }) {\n this.id = id || uuid.v4Sync();\n }\n\n async createFromPassword({ password, salt }) {\n this.value = await internals.createKey({ secret: password, salt });\n }\n\n async createFromBase64(str) {\n this.value = await internals.importKey(str);\n }\n\n getId() {\n return this.id;\n }\n\n getValue() {\n return this.value;\n }\n\n serialize() {\n return {\n id: this.id,\n base64: this.value.base64\n };\n }\n}\n\nfunction getKey(keyId) {\n if (keyId == null || keys[keyId] == null) {\n throw new Error('missing-key');\n }\n return keys[keyId];\n}\n\nfunction hasKey(keyId) {\n return keyId in keys;\n}\n\nfunction encrypt(value, keyId) {\n return internals.encrypt(getKey(keyId), value);\n}\n\nfunction decrypt(encrypted, meta) {\n return internals.decrypt(getKey(meta.keyId), encrypted, meta);\n}\n\nfunction randomBytes(n) {\n return internals.randomBytes(n);\n}\n\nasync function loadKey(key) {\n let keyInstance;\n if (!(key instanceof Key)) {\n keyInstance = new Key({ id: key.id });\n await keyInstance.createFromBase64(key.base64);\n } else {\n keyInstance = key;\n }\n\n keys[keyInstance.getId()] = keyInstance;\n}\n\nfunction unloadKey(key) {\n delete keys[key.getId()];\n}\n\nfunction unloadAllKeys() {\n keys = {};\n}\n\nasync function createKey({ id, password, salt }) {\n let key = new Key({ id });\n await key.createFromPassword({ password, salt });\n return key;\n}\n\nexport default {\n decrypt,\n encrypt,\n randomBytes,\n createKey,\n loadKey,\n getKey,\n hasKey,\n unloadKey,\n unloadAllKeys\n};\n","// TODO: normalize error types\nexport class PostError extends Error {\n constructor(reason, meta) {\n super('PostError: ' + reason);\n this.type = 'PostError';\n this.reason = reason;\n this.meta = meta;\n }\n}\n\nexport class HTTPError extends Error {\n constructor(code, body) {\n super(`HTTPError: unsuccessful status code (${code}): ${body}`);\n this.statusCode = code;\n this.responseBody = body;\n }\n}\n\nexport class SyncError extends Error {\n constructor(reason, meta) {\n super('SyncError: ' + reason);\n this.reason = reason;\n this.meta = meta;\n }\n}\n\nexport class TransactionError extends Error {\n // eslint-disable-next-line\n constructor(message) {\n super(message);\n }\n}\n\nexport class RuleError extends Error {\n constructor(type, message) {\n super('RuleError: ' + message);\n this.type = type;\n }\n}\n\nexport function APIError(msg, meta) {\n return { type: 'APIError', message: msg, meta };\n}\n\nexport function FileDownloadError(reason, meta) {\n return { type: 'FileDownloadError', reason, meta };\n}\n\nexport function FileUploadError(reason, meta) {\n return { type: 'FileUploadError', reason, meta };\n}\n\nexport function isCodeError(err) {\n return err instanceof ReferenceError || err instanceof SyntaxError;\n}\n","import { createApp } from './app';\nconst connection = require('../platform/server/connection');\n\n// Main app\nconst app = createApp();\n\napp.events.on('sync', info => {\n connection.send('sync-event', info);\n});\n\nexport default app;\n","import './polyfills';\nimport { differenceInDays } from 'date-fns';\nimport asyncStorage from '../platform/server/asyncStorage';\nimport { captureException, captureBreadcrumb } from '../platform/exceptions';\nimport * as prefs from './prefs';\nimport fs from '../platform/server/fs';\nimport * as sqlite from '../platform/server/sqlite';\nimport logger from '../platform/server/log';\nimport Platform from './platform';\nimport * as db from './db';\nimport * as sheet from './sheet';\nimport { withUndo, clearUndo, undo, redo } from './undo';\nimport { updateVersion } from './update';\nimport { Condition, Action, rankRules } from './accounts/rules';\nimport * as rules from './accounts/transaction-rules';\nimport * as mappings from './db/mappings';\nimport { batchUpdateTransactions } from './accounts/transactions';\nimport { FIELD_TYPES as ruleFieldTypes } from '../shared/rules';\nimport {\n getAvailableBackups,\n loadBackup,\n makeBackup,\n startBackupService,\n stopBackupService\n} from './backups';\nimport { amountToInteger, stringToInteger } from '../shared/util';\nimport * as monthUtils from '../shared/months';\nimport { fromPlaidAccountType } from '../shared/accounts';\nimport * as budget from './budget/base';\nimport * as bankSync from './accounts/sync';\nimport * as link from './accounts/link';\nimport { uniqueFileName, idFromFileName } from './util/budget-name';\nimport { mutator, runHandler } from './mutators';\nimport * as timestamp from './timestamp';\nimport * as merkle from './merkle';\nimport {\n initialFullSync,\n fullSync,\n batchMessages,\n setSyncingMode,\n makeTestMessage,\n clearFullSyncTimeout,\n syncAndReceiveMessages,\n resetSync,\n repairSync\n} from './sync';\nimport * as syncMigrations from './sync/migrate';\nimport { getStartingBalancePayee } from './accounts/payees';\nimport { parseFile } from './accounts/parse-file';\nimport { exportToCSV, exportQueryToCSV } from './accounts/export-to-csv';\nimport { getServer, setServer } from './server-config';\nimport installAPI from './api';\nimport injectAPI from '@actual-app/api/injected';\nimport * as cloudStorage from './cloud-storage';\nimport encryption from './encryption';\nimport * as tracking from './tracking/events';\nimport { get, post } from './post';\nimport { APIError, TransactionError, PostError, RuleError } from './errors';\nimport { createTestBudget } from '../mocks/budget';\nimport { runQuery as aqlQuery } from './aql/schema/run-query';\nimport { Query } from '../shared/query';\nimport q from '../shared/query';\nimport app from './main-app';\n\n// Apps\nimport schedulesApp from './schedules/app';\nimport budgetApp from './budget/app';\nimport notesApp from './notes/app';\nimport toolsApp from './tools/app';\n\nconst YNAB4 = require('@actual-app/import-ynab4/importer');\nconst YNAB5 = require('@actual-app/import-ynab5/importer');\nconst uuid = require('../platform/uuid');\nconst connection = require('../platform/server/connection');\nconst { resolveName, unresolveName } = require('./spreadsheet/util');\nconst SyncPb = require('./sync/proto/sync_pb');\n\n// let indexeddb = require('../platform/server/indexeddb');\n\nlet VERSION;\nlet DEMO_BUDGET_ID = '_demo-budget';\nlet TEST_BUDGET_ID = '_test-budget';\nlet UNCONFIGURED_SERVER = 'https://not-configured/';\n\n// util\n\nfunction onSheetChange({ names }) {\n const nodes = names.map(name => {\n let node = sheet.get()._getNode(name);\n return { name: node.name, value: node.value };\n });\n connection.send('cells-changed', nodes);\n}\n\n// handlers\n\nexport let handlers = {};\n\nhandlers['undo'] = mutator(async function() {\n return undo();\n});\n\nhandlers['redo'] = mutator(function() {\n return redo();\n});\n\nhandlers['transactions-batch-update'] = mutator(async function({\n added,\n deleted,\n updated,\n learnCategories\n}) {\n return withUndo(async () => {\n let result = await batchUpdateTransactions({\n added,\n updated,\n deleted,\n learnCategories\n });\n\n // Return all data updates to the frontend\n return result.updated;\n });\n});\n\nhandlers['transaction-add'] = mutator(async function(transaction) {\n await handlers['transactions-batch-update']({ added: [transaction] });\n return {};\n});\n\nhandlers['transaction-update'] = mutator(async function(transaction) {\n await handlers['transactions-batch-update']({ updated: [transaction] });\n return {};\n});\n\nhandlers['transaction-delete'] = mutator(async function(transaction) {\n await handlers['transactions-batch-update']({ deleted: [transaction] });\n return {};\n});\n\nhandlers['transactions-filter'] = async function({\n term,\n accountId,\n latestDate,\n count,\n notPaged,\n options = {}\n}) {\n return db.getTransactions(\n term,\n accountId,\n latestDate,\n notPaged ? null : count == null ? undefined : count,\n options\n );\n};\n\nhandlers['transactions-parse-file'] = async function({ filepath, options }) {\n return parseFile(filepath, options);\n};\n\nhandlers['transactions-export'] = async function({\n transactions,\n accounts,\n categoryGroups,\n payees\n}) {\n return exportToCSV(transactions, accounts, categoryGroups, payees);\n};\n\nhandlers['transactions-export-query'] = async function({ query: queryState }) {\n return exportQueryToCSV(new Query(queryState));\n};\n\nhandlers['get-categories'] = async function() {\n return {\n grouped: await db.getCategoriesGrouped(),\n list: await db.getCategories()\n };\n};\n\nhandlers['get-earliest-transaction'] = async function() {\n let { data } = await aqlQuery(\n q('transactions')\n .options({ splits: 'none' })\n .orderBy({ date: 'asc' })\n .select('*')\n .limit(1)\n );\n return data[0] || null;\n};\n\nhandlers['get-budget-bounds'] = async function() {\n return budget.createAllBudgets();\n};\n\nhandlers['rollover-budget-month'] = async function({ month }) {\n let groups = await db.getCategoriesGrouped();\n let sheetName = monthUtils.sheetForMonth(month);\n\n function value(name) {\n let v = sheet.getCellValue(sheetName, name);\n return { value: v === '' ? 0 : v, name: resolveName(sheetName, name) };\n }\n\n let values = [\n value('available-funds'),\n value('last-month-overspent'),\n value('buffered'),\n value('total-budgeted'),\n value('to-budget'),\n\n value('from-last-month'),\n value('total-income'),\n value('total-spent'),\n value('total-leftover')\n ];\n\n for (let group of groups) {\n if (group.is_income) {\n values.push(value('total-income'));\n\n for (let cat of group.categories) {\n values.push(value(`sum-amount-${cat.id}`));\n }\n } else {\n values = values.concat([\n value(`group-budget-${group.id}`),\n value(`group-sum-amount-${group.id}`),\n value(`group-leftover-${group.id}`)\n ]);\n\n for (let cat of group.categories) {\n values = values.concat([\n value(`budget-${cat.id}`),\n value(`sum-amount-${cat.id}`),\n value(`leftover-${cat.id}`),\n value(`carryover-${cat.id}`)\n ]);\n }\n }\n }\n\n return values;\n};\n\nhandlers['report-budget-month'] = async function({ month }) {\n let groups = await db.getCategoriesGrouped();\n let sheetName = monthUtils.sheetForMonth(month);\n\n function value(name) {\n let v = sheet.getCellValue(sheetName, name);\n return { value: v === '' ? 0 : v, name: resolveName(sheetName, name) };\n }\n\n let values = [\n value('total-budgeted'),\n value('total-budget-income'),\n value('total-saved'),\n value('total-income'),\n value('total-spent'),\n value('real-saved'),\n value('total-leftover')\n ];\n\n for (let group of groups) {\n values = values.concat([\n value(`group-budget-${group.id}`),\n value(`group-sum-amount-${group.id}`),\n value(`group-leftover-${group.id}`)\n ]);\n\n for (let cat of group.categories) {\n values = values.concat([\n value(`budget-${cat.id}`),\n value(`sum-amount-${cat.id}`),\n value(`leftover-${cat.id}`)\n ]);\n\n if (!group.is_income) {\n values.push(value(`carryover-${cat.id}`));\n }\n }\n }\n\n return values;\n};\n\nhandlers['budget-set-type'] = async function({ type }) {\n if (type !== 'rollover' && type !== 'report') {\n throw new Error('Invalid budget type: ' + type);\n }\n\n // It's already the same; don't do anything\n if (type === prefs.getPrefs().budgetType) {\n return;\n }\n\n // Save prefs\n return prefs.savePrefs({ budgetType: type });\n};\n\nhandlers['category-create'] = mutator(async function({\n name,\n groupId,\n isIncome\n}) {\n return withUndo(async () => {\n if (!groupId) {\n throw APIError('Creating a category: groupId is required');\n }\n\n return db.insertCategory({\n name,\n cat_group: groupId,\n is_income: isIncome ? 1 : 0\n });\n });\n});\n\nhandlers['category-update'] = mutator(async function(category) {\n return withUndo(async () => {\n try {\n await db.updateCategory(category);\n } catch (e) {\n if (e.message.toLowerCase().includes('unique constraint')) {\n return { error: { type: 'category-exists' } };\n }\n throw e;\n }\n return {};\n });\n});\n\nhandlers['category-move'] = mutator(async function({ id, groupId, targetId }) {\n return withUndo(async () => {\n await batchMessages(async () => {\n await db.moveCategory(id, groupId, targetId);\n });\n return 'ok';\n });\n});\n\nhandlers['category-delete'] = mutator(async function({ id, transferId }) {\n return withUndo(async () => {\n let result = {};\n await batchMessages(async () => {\n let row = await db.first(\n 'SELECT is_income FROM categories WHERE id = ?',\n [id]\n );\n if (!row) {\n result = { error: 'no-categories' };\n return;\n }\n\n let transfer =\n transferId &&\n (await db.first('SELECT is_income FROM categories WHERE id = ?', [\n transferId\n ]));\n\n if (!row || (transferId && !transfer)) {\n result = { error: 'no-categories' };\n return;\n } else if (transferId && row.is_income !== transfer.is_income) {\n result = { error: 'category-type' };\n return;\n }\n\n // Update spreadsheet values if it's an expense category\n // TODO: We should do this for income too if it's a reflect budget\n if (row.is_income === 0) {\n if (transferId) {\n await budget.doTransfer([id], transferId);\n }\n }\n\n await db.deleteCategory({ id }, transferId);\n });\n\n return result;\n });\n});\n\nhandlers['category-group-create'] = mutator(async function({ name, isIncome }) {\n return withUndo(async () => {\n return db.insertCategoryGroup({\n name,\n is_income: isIncome ? 1 : 0\n });\n });\n});\n\nhandlers['category-group-update'] = mutator(async function(group) {\n return withUndo(async () => {\n return db.updateCategoryGroup(group);\n });\n});\n\nhandlers['category-group-move'] = mutator(async function({ id, targetId }) {\n return withUndo(async () => {\n await batchMessages(async () => {\n await db.moveCategoryGroup(id, targetId);\n });\n return 'ok';\n });\n});\n\nhandlers['category-group-delete'] = mutator(async function({ id, transferId }) {\n return withUndo(async () => {\n const groupCategories = await db.all(\n 'SELECT id FROM categories WHERE cat_group = ? AND tombstone = 0',\n [id]\n );\n\n return batchMessages(async () => {\n if (transferId) {\n await budget.doTransfer(groupCategories.map(c => c.id), transferId);\n }\n await db.deleteCategoryGroup({ id }, transferId);\n });\n });\n});\n\nhandlers['must-category-transfer'] = async function({ id }) {\n const res = await db.runQuery(\n `SELECT count(t.id) as count FROM transactions t\n LEFT JOIN category_mapping cm ON cm.id = t.category\n WHERE cm.transferId = ? AND t.tombstone = 0`,\n [id],\n true\n );\n\n // If there are transactions with this category, return early since\n // we already know it needs to be tranferred\n if (res[0].count !== 0) {\n return true;\n }\n\n // If there are any non-zero budget values, also force the user to\n // transfer the category.\n return [...sheet.get().meta().createdMonths].some(month => {\n const sheetName = monthUtils.sheetForMonth(month);\n const value = sheet.get().getCellValue(sheetName, 'budget-' + id);\n\n return value !== 0;\n });\n};\n\nhandlers['payee-create'] = mutator(async function({ name }) {\n return withUndo(async () => {\n return db.insertPayee({ name });\n });\n});\n\nhandlers['payees-get'] = async function() {\n return db.getPayees();\n};\n\nhandlers['payees-get-rule-counts'] = async function() {\n let payeeCounts = {};\n let allRules = rules.getRules();\n\n rules.iterateIds(rules.getRules(), 'payee', (rule, id) => {\n if (payeeCounts[id] == null) {\n payeeCounts[id] = 0;\n }\n payeeCounts[id]++;\n });\n\n return payeeCounts;\n};\n\nhandlers['payees-merge'] = mutator(async function({ targetId, mergeIds }) {\n return withUndo(\n async () => {\n return db.mergePayees(targetId, mergeIds);\n },\n { targetId, mergeIds }\n );\n});\n\nhandlers['payees-batch-change'] = mutator(async function({\n added,\n deleted,\n updated\n}) {\n return withUndo(async () => {\n return batchMessages(async () => {\n if (deleted) {\n await Promise.all(deleted.map(p => db.deletePayee(p)));\n }\n\n if (added) {\n await Promise.all(added.map(p => db.insertPayee(p)));\n }\n\n if (updated) {\n await Promise.all(updated.map(p => db.updatePayee(p)));\n }\n });\n });\n});\n\nhandlers['payees-check-orphaned'] = async function({ ids }) {\n let orphaned = new Set(await db.getOrphanedPayees());\n return ids.filter(id => orphaned.has(id));\n};\n\nhandlers['payees-get-rules'] = async function({ id }) {\n return rules.getRulesForPayee(id).map(rule => rule.serialize());\n};\n\nhandlers['payees-delete-rule'] = mutator(async function({ id, payee_id }) {\n return withUndo(\n async () => {\n return await db.deletePayeeRule({ id });\n },\n { payeeId: payee_id }\n );\n});\n\nhandlers['payees-update-rule'] = mutator(async function(rule) {\n return withUndo(\n async () => {\n return await db.updatePayeeRule(rule);\n },\n { payeeId: rule.payee_id }\n );\n});\n\nhandlers['payees-add-rule'] = mutator(async function(rule) {\n return withUndo(\n async () => {\n let id = await db.insertPayeeRule(rule);\n return { ...rule, id };\n },\n { payeeId: rule.payee_id }\n );\n});\n\nfunction validateRule(rule) {\n // Returns an array of errors, the array is the same link as the\n // passed-in `array`, or null if there are no errors\n function runValidation(array, validate) {\n let result = array.map(item => {\n try {\n validate(item);\n } catch (e) {\n if (e instanceof RuleError) {\n console.warn('Invalid rule', e);\n return e.type;\n }\n throw e;\n }\n return null;\n });\n\n return result.some(Boolean) ? result : null;\n }\n\n let conditionErrors = runValidation(\n rule.conditions,\n cond =>\n new Condition(\n cond.op,\n cond.field,\n cond.value,\n cond.options,\n ruleFieldTypes\n )\n );\n\n let actionErrors = runValidation(\n rule.actions,\n action =>\n new Action(\n action.op,\n action.field,\n action.value,\n action.options,\n ruleFieldTypes\n )\n );\n\n if (conditionErrors || actionErrors) {\n return {\n conditionErrors,\n actionErrors\n };\n }\n\n return null;\n}\n\nhandlers['rule-validate'] = async function(rule) {\n let error = validateRule(rule);\n return { error };\n};\n\nhandlers['rule-add'] = mutator(async function(rule) {\n let error = validateRule(rule);\n if (error) {\n return { error };\n }\n\n let id = await rules.insertRule(rule);\n return { id };\n});\n\nhandlers['rule-update'] = mutator(async function(rule) {\n let error = validateRule(rule);\n if (error) {\n return { error };\n }\n\n await rules.updateRule(rule);\n return {};\n});\n\nhandlers['rule-delete'] = mutator(async function(rule) {\n return rules.deleteRule(rule);\n});\n\nhandlers['rule-delete-all'] = mutator(async function(ids) {\n let someDeletionsFailed = false;\n\n await batchMessages(async () => {\n for (let id of ids) {\n let res = await rules.deleteRule({ id });\n if (res === false) {\n someDeletionsFailed = true;\n }\n }\n });\n\n return { someDeletionsFailed };\n});\n\nhandlers['rule-apply-actions'] = mutator(async function({\n transactionIds,\n actions\n}) {\n return rules.applyActions(transactionIds, actions, handlers);\n});\n\nhandlers['rule-add-payee-rename'] = mutator(async function({ fromNames, to }) {\n return rules.updatePayeeRenameRule(fromNames, to);\n});\n\nhandlers['rules-get'] = async function() {\n return rankRules(rules.getRules()).map(rule => rule.serialize());\n};\n\nhandlers['rule-get'] = async function({ id }) {\n let rule = rules.getRules().find(rule => rule.id === id);\n return rule ? rule.serialize() : null;\n};\n\nhandlers['rules-run'] = async function({ transaction }) {\n return rules.runRules(transaction);\n};\n\nhandlers['rules-migrate'] = async function() {\n await rules.migrateOldRules();\n};\n\nhandlers['make-filters-from-conditions'] = async function({ conditions }) {\n return rules.conditionsToAQL(conditions);\n};\n\nhandlers['getCell'] = async function({ sheetName, name }) {\n // Fields is no longer used - hardcode\n let fields = ['name', 'value'];\n let node = sheet.get()._getNode(resolveName(sheetName, name));\n if (fields) {\n let res = {};\n fields.forEach(field => {\n if (field === 'run') {\n res[field] = node._run ? node._run.toString() : null;\n } else {\n res[field] = node[field];\n }\n });\n return res;\n } else {\n return node;\n }\n};\n\nhandlers['getCells'] = async function({ names }) {\n return names.map(name => ({ value: sheet.get()._getNode(name).value }));\n};\n\nhandlers['getCellNamesInSheet'] = async function({ sheetName }) {\n let names = [];\n for (let name of sheet\n .get()\n .getNodes()\n .keys()) {\n let { sheet: nodeSheet, name: nodeName } = unresolveName(name);\n if (nodeSheet === sheetName) {\n names.push(nodeName);\n }\n }\n return names;\n};\n\nhandlers['debugCell'] = async function({ sheetName, name }) {\n let node = sheet.get().getNode(resolveName(sheetName, name));\n return {\n ...node,\n _run: node._run && node._run.toString()\n };\n};\n\nhandlers['create-query'] = async function({ sheetName, name, query }) {\n // Always run it regardless of cache. We don't know anything has changed\n // between the cache value being saved and now\n sheet.get().createQuery(sheetName, name, query);\n return 'ok';\n};\n\nhandlers['query'] = async function(query) {\n if (query.table == null) {\n throw new Error('query has no table, did you forgot to call `.serialize`?');\n }\n\n return aqlQuery(query);\n};\n\nhandlers['bank-delete'] = async function({ id }) {\n const accts = await db.runQuery(\n 'SELECT * FROM accounts WHERE bank = ?',\n [id],\n true\n );\n\n await db.delete_('banks', id);\n await Promise.all(\n accts.map(async acct => {\n // TODO: This will not sync across devices because we are bypassing\n // the \"recorded\" functions\n await db.runQuery('DELETE FROM transactions WHERE acct = ?', [acct.id]);\n await db.delete_('accounts', acct.id);\n })\n );\n return 'ok';\n};\n\nhandlers['account-update'] = mutator(async function({ id, name }) {\n return withUndo(async () => {\n await db.update('accounts', { id, name });\n return {};\n });\n});\n\nhandlers['accounts-get'] = async function() {\n return db.getAccounts();\n};\n\nhandlers['account-properties'] = async function({ id }) {\n const { balance } = await db.first(\n 'SELECT sum(amount) as balance FROM transactions WHERE acct = ? AND isParent = 0 AND tombstone = 0',\n [id]\n );\n const { count } = await db.first(\n 'SELECT count(id) as count FROM transactions WHERE acct = ? AND tombstone = 0',\n [id]\n );\n\n return { balance: balance || 0, numTransactions: count };\n};\n\nhandlers['accounts-link'] = async function({\n institution,\n publicToken,\n accountId,\n upgradingId\n}) {\n let bankId = await link.handoffPublicToken(institution, publicToken);\n\n let [[, userId], [, userKey]] = await asyncStorage.multiGet([\n 'user-id',\n 'user-key'\n ]);\n\n // Get all the available accounts and find the selected one\n let accounts = await bankSync.getAccounts(userId, userKey, bankId);\n let account = accounts.find(acct => acct.account_id === accountId);\n\n await db.update('accounts', {\n id: upgradingId,\n account_id: account.account_id,\n official_name: account.official_name,\n type: fromPlaidAccountType(account.type),\n balance_current: amountToInteger(account.balances.current),\n balance_available: amountToInteger(account.balances.available),\n balance_limit: amountToInteger(account.balances.limit),\n mask: account.mask,\n bank: bankId\n });\n\n await bankSync.syncAccount(\n userId,\n userKey,\n upgradingId,\n account.account_id,\n bankId\n );\n\n connection.send('sync-event', {\n type: 'success',\n tables: ['transactions']\n });\n\n return 'ok';\n};\n\nhandlers['accounts-connect'] = async function({\n institution,\n publicToken,\n accountIds,\n offbudgetIds\n}) {\n let bankId = await link.handoffPublicToken(institution, publicToken);\n let ids = await link.addAccounts(bankId, accountIds, offbudgetIds);\n return ids;\n};\n\nhandlers['account-create'] = mutator(async function({\n name,\n type,\n balance,\n offBudget,\n closed\n}) {\n return withUndo(async () => {\n const id = await db.insertAccount({\n name,\n type,\n offbudget: offBudget ? 1 : 0,\n closed: closed ? 1 : 0\n });\n\n await db.insertPayee({\n name: '',\n transfer_acct: id\n });\n\n if (balance != null) {\n let payee = await getStartingBalancePayee();\n\n await db.insertTransaction({\n account: id,\n amount: amountToInteger(balance),\n category: offBudget ? null : payee.category,\n payee: payee.id,\n date: monthUtils.currentDay(),\n cleared: true,\n starting_balance_flag: true\n });\n }\n\n return id;\n });\n});\n\nhandlers['account-close'] = mutator(async function({\n id,\n transferAccountId,\n categoryId,\n forced\n}) {\n // Unlink the account if it's linked. This makes sure to remove it\n // from Plaid. (This should not be undo-able, as it mutates the\n // remote server and the user will have to link the account again)\n await handlers['account-unlink']({ id });\n\n return withUndo(async () => {\n let account = await db.first(\n 'SELECT * FROM accounts WHERE id = ? AND tombstone = 0',\n [id]\n );\n\n // Do nothing if the account doesn't exist or it's already been\n // closed\n if (!account || account.closed === 1) {\n return;\n }\n\n const { balance, numTransactions } = await handlers['account-properties']({\n id\n });\n\n // If there are no transactions, we can simply delete the account\n if (numTransactions === 0) {\n await db.deleteAccount({ id });\n } else if (forced) {\n let rows = await db.runQuery(\n 'SELECT id, transfer_id FROM v_transactions WHERE account = ?',\n [id],\n true\n );\n\n let { id: payeeId } = await db.first(\n 'SELECT id FROM payees WHERE transfer_acct = ?',\n [id]\n );\n\n await batchMessages(() => {\n // TODO: what this should really do is send a special message that\n // automatically marks the tombstone value for all transactions\n // within an account... or something? This is problematic\n // because another client could easily add new data that\n // should be marked as deleted.\n\n rows.forEach(row => {\n if (row.transfer_id) {\n db.updateTransaction({\n id: row.transfer_id,\n payee: null,\n transfer_id: null\n });\n }\n\n db.deleteTransaction({ id: row.id });\n });\n\n db.deleteAccount({ id });\n db.deleteTransferPayee({ id: payeeId });\n });\n } else {\n if (balance !== 0 && transferAccountId == null) {\n throw APIError('balance is non-zero: transferAccountId is required');\n }\n\n await db.update('accounts', { id, closed: 1 });\n\n // If there is a balance we need to transfer it to the specified\n // account (and possibly categorize it)\n if (balance !== 0) {\n let { id: payeeId } = await db.first(\n 'SELECT id FROM payees WHERE transfer_acct = ?',\n [transferAccountId]\n );\n\n await handlers['transaction-add']({\n id: uuid.v4Sync(),\n payee: payeeId,\n amount: -balance,\n account: id,\n date: monthUtils.currentDay(),\n notes: 'Closing account',\n category: categoryId || null\n });\n }\n }\n });\n});\n\nhandlers['account-reopen'] = mutator(async function({ id }) {\n return withUndo(async () => {\n await db.update('accounts', { id, closed: 0 });\n });\n});\n\nhandlers['account-move'] = mutator(async function({ id, targetId }) {\n return withUndo(async () => {\n await db.moveAccount(id, targetId);\n });\n});\n\nlet stopPolling = false;\n\nhandlers['poll-web-token'] = async function({ token }) {\n let [[, userId], [, key]] = await asyncStorage.multiGet([\n 'user-id',\n 'user-key'\n ]);\n\n let startTime = Date.now();\n stopPolling = false;\n\n async function getData(cb) {\n if (stopPolling) {\n return;\n }\n\n if (Date.now() - startTime >= 1000 * 60 * 10) {\n cb('timeout');\n return;\n }\n\n let data = await post(\n getServer().PLAID_SERVER + '/get-web-token-contents',\n {\n userId,\n key,\n token\n }\n );\n\n if (data) {\n if (data.error) {\n cb('unknown');\n } else {\n cb(null, data);\n }\n } else {\n setTimeout(() => getData(cb), 3000);\n }\n }\n\n return new Promise(resolve => {\n getData((error, data) => {\n if (error) {\n resolve({ error });\n } else {\n resolve({ data });\n }\n });\n });\n};\n\nhandlers['poll-web-token-stop'] = async function() {\n stopPolling = true;\n return 'ok';\n};\n\nhandlers['accounts-sync'] = async function({ id }) {\n let [[, userId], [, userKey]] = await asyncStorage.multiGet([\n 'user-id',\n 'user-key'\n ]);\n let accounts = await db.runQuery(\n `SELECT a.*, b.id as bankId FROM accounts a\n LEFT JOIN banks b ON a.bank = b.id\n WHERE a.tombstone = 0 AND a.closed = 0`,\n [],\n true\n );\n\n if (id) {\n accounts = accounts.filter(acct => acct.id === id);\n }\n\n let errors = [];\n let newTransactions = [];\n let matchedTransactions = [];\n let updatedAccounts = [];\n\n let { groupId } = prefs.getPrefs();\n\n for (var i = 0; i < accounts.length; i++) {\n const acct = accounts[i];\n if (acct.bankId) {\n try {\n const res = await bankSync.syncAccount(\n userId,\n userKey,\n acct.id,\n acct.account_id,\n acct.bankId\n );\n let { added, updated } = res;\n\n newTransactions = newTransactions.concat(added);\n matchedTransactions = matchedTransactions.concat(updated);\n\n if (added.length > 0 || updated.length > 0) {\n updatedAccounts = updatedAccounts.concat(acct.id);\n }\n } catch (err) {\n if (err.type === 'BankSyncError') {\n errors.push({\n type: 'SyncError',\n accountId: acct.id,\n message: 'Failed syncing account \"' + acct.name + '\".',\n category: err.category,\n code: err.code\n });\n } else if (err instanceof PostError && err.reason !== 'internal') {\n errors.push({\n accountId: acct.id,\n message: `Account \"${\n acct.name\n }\" is not linked properly. Please link it again`\n });\n } else {\n errors.push({\n accountId: acct.id,\n message:\n 'There was an internal error. Please email help@actualbudget.com for support.',\n internal: err.stack\n });\n\n err.message = 'Failed syncing account: ' + err.message;\n\n captureException(err);\n }\n }\n }\n }\n\n if (updatedAccounts.length > 0) {\n connection.send('sync-event', {\n type: 'success',\n tables: ['transactions']\n });\n }\n\n return { errors, newTransactions, matchedTransactions, updatedAccounts };\n};\n\nhandlers['transactions-import'] = mutator(function({\n accountId,\n transactions\n}) {\n return withUndo(async () => {\n if (typeof accountId !== 'string') {\n throw APIError('transactions-import: accountId must be an id');\n }\n\n try {\n return await bankSync.reconcileTransactions(accountId, transactions);\n } catch (err) {\n if (err instanceof TransactionError) {\n return { errors: [{ message: err.message }], added: [], updated: [] };\n }\n\n throw err;\n }\n });\n});\n\nhandlers['account-unlink'] = mutator(async function({ id }) {\n let { bank: bankId } = await db.first(\n 'SELECT bank FROM accounts WHERE id = ?',\n [id]\n );\n\n if (!bankId) {\n return 'ok';\n }\n\n await db.updateAccount({\n id,\n account_id: null,\n bank: null,\n balance_current: null,\n balance_available: null,\n balance_limit: null\n });\n\n let { count } = await db.first(\n 'SELECT COUNT(*) as count FROM accounts WHERE bank = ?',\n [bankId]\n );\n\n if (count === 0) {\n // No more accounts are associated with this bank. We can remove\n // it from Plaid.\n\n let [[, userId], [, key]] = await asyncStorage.multiGet([\n 'user-id',\n 'user-key'\n ]);\n\n await post(getServer().PLAID_SERVER + '/remove-access-token', {\n userId,\n key,\n item_id: bankId\n });\n }\n\n return 'ok';\n});\n\nhandlers['make-plaid-public-token'] = async function({ bankId }) {\n let [[, userId], [, userKey]] = await asyncStorage.multiGet([\n 'user-id',\n 'user-key'\n ]);\n\n let data = await post(getServer().PLAID_SERVER + '/make-public-token', {\n userId: userId,\n key: userKey,\n item_id: '' + bankId\n });\n\n if (data.error_code) {\n return { error: '', code: data.error_code, type: data.error_type };\n }\n\n return { linkToken: data.link_token };\n};\n\nhandlers['save-global-prefs'] = async function(prefs) {\n if ('maxMonths' in prefs) {\n await asyncStorage.setItem('max-months', '' + prefs.maxMonths);\n }\n if ('trackUsage' in prefs) {\n tracking.toggle(prefs.trackUsage);\n await asyncStorage.setItem('track-usage', '' + prefs.trackUsage);\n }\n if ('autoUpdate' in prefs) {\n await asyncStorage.setItem('auto-update', '' + prefs.autoUpdate);\n process.send({ type: 'shouldAutoUpdate', flag: prefs.autoUpdate });\n }\n if ('documentDir' in prefs) {\n if (await fs.exists(prefs.documentDir)) {\n await asyncStorage.setItem('document-dir', prefs.documentDir);\n }\n }\n if ('floatingSidebar' in prefs) {\n await asyncStorage.setItem('floating-sidebar', '' + prefs.floatingSidebar);\n }\n return 'ok';\n};\n\nhandlers['load-global-prefs'] = async function() {\n let [\n [, floatingSidebar],\n [, seenTutorial],\n [, maxMonths],\n [, trackUsage],\n [, autoUpdate],\n [, documentDir],\n [, encryptKey]\n ] = await asyncStorage.multiGet([\n 'floating-sidebar',\n 'seen-tutorial',\n 'max-months',\n 'track-usage',\n 'auto-update',\n 'document-dir',\n 'encrypt-key'\n ]);\n return {\n floatingSidebar: floatingSidebar === 'true' ? true : false,\n seenTutorial: seenTutorial === 'true' ? true : false,\n maxMonths: stringToInteger(maxMonths || ''),\n // Default to true\n trackUsage: trackUsage == null || trackUsage === 'true' ? true : false,\n autoUpdate: autoUpdate == null || autoUpdate === 'true' ? true : false,\n documentDir: documentDir || getDefaultDocumentDir(),\n keyId: encryptKey && JSON.parse(encryptKey).id\n };\n};\n\nhandlers['save-prefs'] = async function(prefsToSet) {\n let { cloudFileId } = prefs.getPrefs();\n\n // Need to sync the budget name on the server as well\n if (prefsToSet.budgetName && cloudFileId) {\n let userToken = await asyncStorage.getItem('user-token');\n\n await post(getServer().SYNC_SERVER + '/update-user-filename', {\n token: userToken,\n fileId: cloudFileId,\n name: prefsToSet.budgetName\n });\n }\n\n await prefs.savePrefs(prefsToSet);\n return 'ok';\n};\n\nhandlers['load-prefs'] = async function() {\n return prefs.getPrefs();\n};\n\nhandlers['sync-reset'] = async function() {\n return await resetSync();\n};\n\nhandlers['sync-repair'] = async function() {\n await repairSync();\n};\n\n// A user can only enable/change their key with the file loaded. This\n// will change in the future: during onboarding the user should be\n// able to enable encryption. (Imagine if they are importing data from\n// another source, they should be able to encrypt first)\nhandlers['key-make'] = async function({ password }) {\n if (!prefs.getPrefs()) {\n throw new Error('user-set-key must be called with file loaded');\n }\n\n let cloudFileId = prefs.getPrefs().cloudFileId;\n\n let salt = encryption.randomBytes(32).toString('base64');\n let id = uuid.v4Sync();\n let key = await encryption.createKey({ id, password, salt });\n\n // Load the key\n await encryption.loadKey(key);\n\n // Make some test data to use if the key is valid or not\n let testContent = await makeTestMessage(key.getId());\n\n // Changing your key necessitates a sync reset as well. This will\n // clear all existing encrypted data from the server so you won't\n // have a mix of data encrypted with different keys.\n return await resetSync({\n key,\n salt,\n testContent: JSON.stringify({\n ...testContent,\n value: testContent.value.toString('base64')\n })\n });\n};\n\n// This can be called both while a file is already loaded or not. This\n// will see if a key is valid and if so save it off.\nhandlers['key-test'] = async function({ fileId, password }) {\n let userToken = await asyncStorage.getItem('user-token');\n\n if (fileId == null) {\n fileId = prefs.getPrefs().cloudFileId;\n }\n\n let res;\n try {\n res = await post(getServer().SYNC_SERVER + '/user-get-key', {\n token: userToken,\n fileId\n });\n } catch (e) {\n console.log(e);\n return { error: { reason: 'network' } };\n }\n\n let { id, salt, test } = res;\n\n if (test == null) {\n return { error: { reason: 'old-key-style' } };\n }\n\n test = JSON.parse(test);\n\n let key = await encryption.createKey({ id, password, salt });\n encryption.loadKey(key);\n\n try {\n await encryption.decrypt(Buffer.from(test.value, 'base64'), test.meta);\n } catch (e) {\n console.log(e);\n\n // Unload the key, it's invalid\n encryption.unloadKey(key);\n return { error: { reason: 'decrypt-failure' } };\n }\n\n // Persist key in async storage\n let keys = JSON.parse((await asyncStorage.getItem(`encrypt-keys`)) || '{}');\n keys[fileId] = key.serialize();\n await asyncStorage.setItem('encrypt-keys', JSON.stringify(keys));\n\n // Save the key id in prefs if the are loaded. If they aren't, we\n // are testing a key to download a file and when the file is\n // actually downloaded it will update the prefs with the latest key id\n if (prefs.getPrefs()) {\n await prefs.savePrefs({ encryptKeyId: key.getId() });\n }\n\n return {};\n};\n\nhandlers['should-pitch-subscribe'] = async function() {\n let seenSubscribe = await asyncStorage.getItem('seenSubscribe');\n return seenSubscribe !== 'true';\n};\n\nhandlers['has-pitched-subscribe'] = async function() {\n await asyncStorage.setItem('seenSubscribe', 'true');\n return 'ok';\n};\n\nhandlers['subscribe-needs-bootstrap'] = async function({ url } = {}) {\n if (getServer(url).BASE_SERVER === UNCONFIGURED_SERVER) {\n return { bootstrapped: true };\n }\n\n let res;\n try {\n res = await get(getServer(url).SIGNUP_SERVER + '/needs-bootstrap');\n } catch (err) {\n return { error: 'network-failure' };\n }\n\n try {\n res = JSON.parse(res);\n } catch (err) {\n return { error: 'parse-failure' };\n }\n\n if (res.status === 'error') {\n return { error: res.reason };\n }\n\n return { bootstrapped: res.data.bootstrapped };\n};\n\nhandlers['subscribe-bootstrap'] = async function({ password }) {\n let res;\n try {\n res = await post(getServer().SIGNUP_SERVER + '/bootstrap', { password });\n } catch (err) {\n return { error: err.reason || 'network-failure' };\n }\n\n if (res.token) {\n await asyncStorage.setItem('user-token', res.token);\n return {};\n }\n return { error: 'internal' };\n};\n\nhandlers['subscribe-set-user'] = async function({ token }) {\n await asyncStorage.setItem('user-token', token);\n};\n\nhandlers['subscribe-get-user'] = async function() {\n if (getServer() && getServer().BASE_SERVER === UNCONFIGURED_SERVER) {\n return { offline: false };\n }\n\n let userToken = await asyncStorage.getItem('user-token');\n\n if (userToken) {\n try {\n let res = await get(getServer().SIGNUP_SERVER + '/validate', {\n headers: {\n 'X-ACTUAL-TOKEN': userToken\n }\n });\n res = JSON.parse(res);\n\n if (res.status === 'error') {\n if (res.reason === 'unauthorized') {\n return null;\n }\n return { offline: true };\n }\n\n return { offline: false };\n } catch (e) {\n console.log(e);\n return { offline: true };\n }\n }\n\n return null;\n};\n\nhandlers['subscribe-change-password'] = async function({ password }) {\n let userToken = await asyncStorage.getItem('user-token');\n let res;\n try {\n res = await post(getServer().SIGNUP_SERVER + '/change-password', {\n token: userToken,\n password\n });\n } catch (err) {\n return { error: err.reason || 'network-failure' };\n }\n\n return {};\n};\n\nhandlers['subscribe-sign-in'] = async function({ password }) {\n let res = await post(getServer().SIGNUP_SERVER + '/login', {\n password\n });\n\n if (res.token) {\n await asyncStorage.setItem('user-token', res.token);\n return {};\n }\n\n return { error: 'invalid-password' };\n};\n\nhandlers['subscribe-sign-out'] = async function() {\n encryption.unloadAllKeys();\n await asyncStorage.multiRemove([\n 'user-token',\n 'encrypt-keys',\n 'lastBudget',\n 'readOnly'\n ]);\n return 'ok';\n};\n\nhandlers['get-server-url'] = async function() {\n return getServer() && getServer().BASE_SERVER;\n};\n\nhandlers['set-server-url'] = async function({ url }) {\n if (url != null) {\n // Validate the server is running\n let { error } = await runHandler(handlers['subscribe-needs-bootstrap'], {\n url\n });\n if (error) {\n return { error };\n }\n } else {\n // When the server isn't configured, we just use a placeholder\n url = UNCONFIGURED_SERVER;\n }\n\n asyncStorage.setItem('server-url', url);\n setServer(url);\n return {};\n};\n\nhandlers['sync'] = async function() {\n return fullSync();\n};\n\nhandlers['get-version'] = async function() {\n return { version: VERSION };\n};\n\nhandlers['get-budgets'] = async function() {\n const paths = await fs.listDir(fs.getDocumentDir());\n const budgets = (await Promise.all(\n paths.map(async name => {\n const prefsPath = fs.join(fs.getDocumentDir(), name, 'metadata.json');\n if (await fs.exists(prefsPath)) {\n let prefs;\n try {\n prefs = JSON.parse(await fs.readFile(prefsPath));\n } catch (e) {\n console.log('Error parsing metadata:', e.stack);\n return;\n }\n\n // We treat the directory name as the canonical id so that if\n // the user moves it around/renames/etc, nothing breaks. The\n // id is stored in prefs just for convenience (and the prefs\n // will always update to the latest given id)\n if (name !== DEMO_BUDGET_ID) {\n return {\n id: name,\n cloudFileId: prefs.cloudFileId,\n groupId: prefs.groupId,\n name: prefs.budgetName || '(no name)'\n };\n }\n }\n\n return null;\n })\n )).filter(x => x);\n\n return budgets;\n};\n\nhandlers['get-ynab4-files'] = async function() {\n return YNAB4.findBudgets();\n};\n\nhandlers['get-remote-files'] = async function() {\n return cloudStorage.listRemoteFiles();\n};\n\nhandlers['reset-budget-cache'] = mutator(async function() {\n // Recomputing everything will update the cache\n await sheet.loadUserBudgets(db);\n sheet.get().recomputeAll();\n await sheet.waitOnSpreadsheet();\n});\n\nhandlers['upload-budget'] = async function({ id } = {}) {\n if (id) {\n if (prefs.getPrefs()) {\n throw new Error('upload-budget: id given but prefs already loaded');\n }\n\n await prefs.loadPrefs(id);\n }\n\n try {\n await cloudStorage.upload();\n } catch (e) {\n console.log(e);\n if (e.type === 'FileUploadError') {\n return { error: e };\n }\n captureException(e);\n return { error: { reason: 'internal' } };\n } finally {\n if (id) {\n prefs.unloadPrefs();\n }\n }\n\n return {};\n};\n\nhandlers['download-budget'] = async function({ fileId, replace }) {\n let result;\n try {\n result = await cloudStorage.download(fileId, replace);\n } catch (e) {\n if (e.type === 'FileDownloadError') {\n if (e.reason === 'file-exists' && e.meta.id) {\n await prefs.loadPrefs(e.meta.id);\n let name = prefs.getPrefs().budgetName;\n prefs.unloadPrefs();\n\n e.meta = { ...e.meta, name };\n }\n\n return { error: e };\n } else {\n captureException(e);\n return { error: { reason: 'internal' } };\n }\n }\n\n let id = result.id;\n\n // Load the budget and do a full sync\n result = await loadBudget(result.id, VERSION, { showUpdate: true });\n if (result.error) {\n return { error: { reason: result.error } };\n }\n\n setSyncingMode('enabled');\n await initialFullSync();\n\n await handlers['close-budget']();\n\n return { id };\n};\n\nhandlers['load-budget'] = async function({ id }) {\n let currentPrefs = prefs.getPrefs();\n\n if (currentPrefs) {\n if (currentPrefs.id === id) {\n // If it's already loaded, do nothing\n return {};\n } else {\n // Otherwise, close the currently loaded budget\n await handlers['close-budget']();\n }\n }\n\n let res = await loadBudget(id, VERSION, { showUpdate: true });\n\n async function trackSizes() {\n let getFileSize = async name => {\n let dbFile = fs.join(fs.getBudgetDir(id), name);\n try {\n return await fs.size(dbFile);\n } catch (err) {\n return null;\n }\n };\n\n try {\n let dbSize = await getFileSize('db.sqlite');\n let cacheSize = await getFileSize('cache.sqlite');\n tracking.track('app:load-budget', { size: dbSize, cacheSize });\n } catch (err) {\n console.warn(err);\n }\n }\n trackSizes();\n\n return res;\n};\n\nhandlers['create-demo-budget'] = async function() {\n // Make sure the read only flag isn't leftover (normally it's\n // reset when signing in, but you don't have to sign in for the\n // demo budget)\n await asyncStorage.setItem('readOnly', '');\n\n return handlers['create-budget']({\n budgetName: 'Demo Budget',\n testMode: true,\n testBudgetId: DEMO_BUDGET_ID\n });\n};\n\nhandlers['close-budget'] = async function() {\n captureBreadcrumb({ message: 'Closing budget' });\n\n // The spreadsheet may be running, wait for it to complete\n await sheet.waitOnSpreadsheet();\n sheet.unloadSpreadsheet();\n\n clearFullSyncTimeout();\n await app.stopServices();\n\n await db.closeDatabase();\n\n try {\n await asyncStorage.setItem('lastBudget', '');\n } catch (e) {\n // This might fail if we are shutting down after failing to load a\n // budget. We want to unload whatever has already been loaded but\n // be resilient to anything failing\n }\n\n prefs.unloadPrefs();\n stopBackupService();\n return 'ok';\n};\n\nhandlers['delete-budget'] = async function({ id, cloudFileId }) {\n // If it's a cloud file, you can delete it from the server by\n // passing its cloud id\n if (cloudFileId && !process.env.IS_BETA) {\n await cloudStorage.removeFile(cloudFileId).catch(err => {});\n }\n\n // If a local file exists, you can delete it by passing its local id\n if (id) {\n let budgetDir = fs.getBudgetDir(id);\n await fs.removeDirRecursively(budgetDir);\n }\n\n return 'ok';\n};\n\nhandlers['create-budget'] = async function({\n budgetName,\n avoidUpload,\n testMode,\n testBudgetId\n} = {}) {\n let id;\n if (testMode) {\n budgetName = budgetName || 'Test Budget';\n id = testBudgetId || TEST_BUDGET_ID;\n\n if (await fs.exists(fs.getBudgetDir(id))) {\n await fs.removeDirRecursively(fs.getBudgetDir(id));\n }\n } else {\n // Generate budget name if not given\n if (!budgetName) {\n // Unfortunately we need to load all of the existing files first\n // so we can detect conflicting names.\n let files = await handlers['get-budgets']();\n budgetName = await uniqueFileName(files);\n }\n\n id = await idFromFileName(budgetName);\n }\n\n let budgetDir = fs.getBudgetDir(id);\n await fs.mkdir(budgetDir);\n\n // Create the initial database\n await fs.copyFile(fs.bundledDatabasePath, fs.join(budgetDir, 'db.sqlite'));\n\n // Create the initial prefs file\n await fs.writeFile(\n fs.join(budgetDir, 'metadata.json'),\n JSON.stringify(prefs.getDefaultPrefs(id, budgetName))\n );\n\n // Load it in\n let { error } = await loadBudget(id, VERSION);\n if (error) {\n console.log('Error creating budget: ' + error);\n return { error };\n }\n\n if (!avoidUpload && !testMode) {\n try {\n await cloudStorage.upload();\n } catch (e) {\n // Ignore any errors uploading. If they are offline they should\n // still be able to create files.\n }\n }\n\n if (testMode) {\n await createTestBudget(handlers);\n }\n\n return {};\n};\n\nhandlers['set-tutorial-seen'] = async function() {\n await asyncStorage.setItem('seen-tutorial', 'true');\n return 'ok';\n};\n\nhandlers['import-budget'] = async function({ filepath, type }) {\n try {\n if (!(await fs.exists(filepath))) {\n throw new Error(`File not found at the provided path: ${filepath}`);\n }\n\n let buffer = Buffer.from(await fs.readFile(filepath, 'binary'));\n\n switch (type) {\n case 'ynab4':\n try {\n await YNAB4.importBuffer(filepath, buffer);\n } catch (e) {\n let msg = e.message.toLowerCase();\n if (\n msg.includes('not a ynab4') ||\n msg.includes('could not find file')\n ) {\n return { error: 'not-ynab4' };\n }\n }\n break;\n case 'ynab5':\n let data;\n try {\n data = JSON.parse(buffer.toString());\n } catch (e) {\n return { error: 'parse-error' };\n }\n\n try {\n await YNAB5.importYNAB5(data);\n } catch (e) {\n return { error: 'not-ynab5' };\n }\n break;\n case 'actual':\n // We should pull out import/export into its own app so this\n // can be abstracted out better. Importing Actual files is a\n // special case because we can directly write down the files,\n // but because it doesn't go through the API layer we need to\n // duplicate some of the workflow\n await handlers['close-budget']();\n\n let { id } = await cloudStorage.importBuffer(\n { cloudFileId: null, groupId: null },\n buffer\n );\n\n // We never want to load cached data from imported files, so\n // delete the cache\n let sqliteDb = await sqlite.openDatabase(\n fs.join(fs.getBudgetDir(id), 'db.sqlite')\n );\n sqlite.execQuery(\n sqliteDb,\n `\n DELETE FROM kvcache;\n DELETE FROM kvcache_key;\n `\n );\n sqlite.closeDatabase(sqliteDb);\n\n // Load the budget, force everything to be computed, and try\n // to upload it as a cloud file\n await handlers['load-budget']({ id });\n await handlers['get-budget-bounds']();\n await sheet.waitOnSpreadsheet();\n await cloudStorage.upload().catch(err => {});\n\n break;\n default:\n }\n } catch (err) {\n err.message = 'Error importing budget: ' + err.message;\n captureException(err);\n return { error: 'internal-error' };\n }\n\n return {};\n};\n\nhandlers['export-budget'] = async function() {\n return await cloudStorage.exportBuffer();\n};\n\nasync function loadBudget(id, appVersion, { showUpdate } = {}) {\n let dir;\n try {\n dir = fs.getBudgetDir(id);\n } catch (e) {\n captureException(\n new Error('`getBudgetDir` failed in `loadBudget`: ' + e.message)\n );\n return { error: 'budget-not-found' };\n }\n\n captureBreadcrumb({ message: 'Loading budget ' + dir });\n\n if (!(await fs.exists(dir))) {\n captureException(new Error('budget directory does not exist'));\n return { error: 'budget-not-found' };\n }\n\n try {\n await prefs.loadPrefs(id);\n await db.openDatabase(id);\n } catch (e) {\n captureBreadcrumb({ message: 'Error loading budget ' + id });\n captureException(e);\n await handlers['close-budget']();\n return { error: 'opening-budget' };\n }\n\n // Older versions didn't tag the file with the current user, so do\n // so now\n if (!prefs.getPrefs().userId) {\n let [[, userId]] = await asyncStorage.multiGet(['user-token']);\n prefs.savePrefs({ userId });\n }\n\n let { budgetVersion, budgetId } = prefs.getPrefs();\n\n try {\n await updateVersion(budgetVersion, showUpdate);\n } catch (e) {\n console.warn('Error updating', e);\n let result;\n if (e.message.includes('out-of-sync-migrations')) {\n result = { error: 'out-of-sync-migrations' };\n } else if (e.message.includes('out-of-sync-data')) {\n result = { error: 'out-of-sync-data' };\n } else {\n captureException(e);\n logger.info('Error updating budget ' + id, e);\n console.log('Error updating budget', e);\n result = { error: 'loading-budget' };\n }\n\n await handlers['close-budget']();\n return result;\n }\n\n await db.loadClock();\n\n if (prefs.getPrefs().resetClock) {\n // If we need to generate a fresh clock, we need to generate a new\n // client id. This happens when the database is transferred to a\n // new device.\n //\n // TODO: The client id should be stored elsewhere. It shouldn't\n // work this way, but it's fine for now.\n timestamp.getClock().timestamp.setNode(timestamp.makeClientId());\n await db.runQuery(\n 'INSERT OR REPLACE INTO messages_clock (id, clock) VALUES (1, ?)',\n [timestamp.serializeClock(timestamp.getClock())]\n );\n\n await prefs.savePrefs({ resetClock: false });\n }\n\n if (!Platform.isWeb && !Platform.isMobile && !global.__TESTING__) {\n startBackupService(id);\n }\n\n try {\n await sheet.loadSpreadsheet(db, onSheetChange);\n } catch (e) {\n captureException(e);\n await handlers['close-budget']();\n return { error: 'opening-budget' };\n }\n\n // This is a bit leaky, but we need to set the initial budget type\n sheet.get().meta().budgetType = prefs.getPrefs().budgetType;\n await budget.createAllBudgets();\n\n // Load all the in-memory state\n await mappings.loadMappings();\n await rules.loadRules();\n await syncMigrations.listen();\n await app.startServices();\n\n clearUndo();\n\n // Ensure that syncing is enabled\n if (!global.__TESTING__) {\n if (process.env.IS_BETA || id === DEMO_BUDGET_ID) {\n setSyncingMode('disabled');\n } else if (id === TEST_BUDGET_ID) {\n await asyncStorage.setItem('lastBudget', id);\n } else {\n setSyncingMode('enabled');\n\n await asyncStorage.setItem('lastBudget', id);\n\n // Only upload periodically on desktop\n if (!Platform.isMobile) {\n await cloudStorage.possiblyUpload();\n }\n }\n }\n\n app.events.emit('load-budget', { id });\n\n return {};\n}\n\nhandlers['get-upgrade-notifications'] = async function() {\n let { id } = prefs.getPrefs();\n if (id === TEST_BUDGET_ID || id === DEMO_BUDGET_ID) {\n return [];\n }\n\n let types = ['schedules', 'repair-splits'];\n let unseen = [];\n\n for (let type of types) {\n let key = `notifications.${type}`;\n if (prefs.getPrefs()[key] == null) {\n unseen.push(type);\n }\n }\n\n return unseen;\n};\n\nhandlers['seen-upgrade-notification'] = async function({ type }) {\n let key = `notifications.${type}`;\n prefs.savePrefs({ [key]: true });\n};\n\nhandlers['upload-file-web'] = async function({ filename, contents }) {\n if (!Platform.isWeb) {\n return null;\n }\n\n await fs.writeFile('/uploads/' + filename, contents);\n return 'ok';\n};\n\nhandlers['backups-get'] = async function({ id }) {\n return getAvailableBackups(id);\n};\n\nhandlers['backup-load'] = async function({ id, backupId }) {\n await loadBackup(id, backupId);\n};\n\nhandlers['backup-make'] = async function({ id }) {\n await makeBackup(id);\n};\n\nhandlers['get-last-opened-backup'] = async function() {\n const id = await asyncStorage.getItem('lastBudget');\n if (id && id !== '') {\n const budgetDir = fs.getBudgetDir(id);\n\n // We never want to give back a budget that does not exist on the\n // filesystem anymore, so first check that it exists\n if (await fs.exists(budgetDir)) {\n return id;\n }\n }\n return null;\n};\n\nhandlers['app-focused'] = async function() {\n if (prefs.getPrefs() && prefs.getPrefs().id) {\n // First we sync\n fullSync();\n }\n};\n\nhandlers['track'] = async function({ name, props }) {\n tracking.track(name, props);\n};\n\nhandlers = installAPI(handlers);\n\ninjectAPI.send = (name, args) => runHandler(app.handlers[name], args);\n\n// A hack for now until we clean up everything\napp.handlers = handlers;\napp.combine(schedulesApp, budgetApp, notesApp, toolsApp);\n\nfunction getDefaultDocumentDir() {\n if (Platform.isMobile) {\n // On mobile, unfortunately we need to be backwards compatible\n // with the old folder structure which does not store files inside\n // of an `Actual` directory. In the future, if we really care, we\n // can migrate them, but for now just return the documents dir\n return process.env.ACTUAL_DOCUMENT_DIR;\n }\n return fs.join(process.env.ACTUAL_DOCUMENT_DIR, 'Actual');\n}\n\nasync function setupDocumentsDir() {\n async function ensureExists(dir) {\n // Make sure the document folder exists\n if (!(await fs.exists(dir))) {\n await fs.mkdir(dir);\n }\n }\n\n let documentDir = await asyncStorage.getItem('document-dir');\n\n // Test the existing documents directory to make sure it's a valid\n // path that exists, and if it errors fallback to the default one\n if (documentDir) {\n try {\n await ensureExists(documentDir);\n } catch (e) {\n documentDir = null;\n }\n }\n\n if (!documentDir) {\n documentDir = getDefaultDocumentDir();\n }\n\n await ensureExists(documentDir);\n fs._setDocumentDir(documentDir);\n}\n\nexport async function initApp(version, isDev, socketName) {\n VERSION = version;\n\n await sqlite.init();\n await Promise.all([asyncStorage.init(), fs.init()]);\n await tracking.init();\n await setupDocumentsDir();\n\n let keysStr = await asyncStorage.getItem('encrypt-keys');\n if (keysStr) {\n try {\n let keys = JSON.parse(keysStr);\n\n // Load all the keys\n await Promise.all(\n Object.keys(keys).map(fileId => {\n return encryption.loadKey(keys[fileId]);\n })\n );\n } catch (e) {\n console.log('Error loading key', e);\n throw new Error('load-key-error');\n }\n }\n\n if (isDev) {\n const lastBudget = await asyncStorage.getItem('lastBudget');\n // if (lastBudget) {\n // loadBudget(lastBudget, VERSION);\n // }\n }\n\n const url = await asyncStorage.getItem('server-url');\n if (url) {\n setServer(url);\n }\n\n connection.init(socketName, app.handlers);\n\n tracking.track('app:init', {\n platform: Platform.isMobile ? 'mobile' : Platform.isWeb ? 'web' : 'desktop'\n });\n\n if (!isDev && !Platform.isMobile && !Platform.isWeb) {\n let autoUpdate = await asyncStorage.getItem('auto-update');\n process.send({\n type: 'shouldAutoUpdate',\n flag: autoUpdate == null || autoUpdate === 'true'\n });\n }\n\n if (isDev || process.env.IS_BETA) {\n global.$send = (name, args) => runHandler(app.handlers[name], args);\n global.$query = aqlQuery;\n global.$q = q;\n global.$db = db;\n global.$setSyncingMode = setSyncingMode;\n }\n}\n\nexport async function init({ budgetId, config }) {\n // Get from build\n // eslint-disable-next-line\n VERSION = ACTUAL_APP_VERSION;\n\n let dataDir, serverURL;\n if (config) {\n dataDir = config.dataDir;\n serverURL = config.serverURL;\n } else {\n dataDir = process.env.ACTUAL_DATA_DIR;\n serverURL = process.env.ACTUAL_SERVER_URL;\n }\n\n await sqlite.init();\n await Promise.all([asyncStorage.init({ persist: false }), fs.init()]);\n fs._setDocumentDir(dataDir || process.cwd());\n\n if (serverURL) {\n setServer(serverURL);\n } else {\n // This turns off all server URLs. In this mode we don't want any\n // access to the server, we are doing things locally\n setServer(null);\n\n app.events.on('load-budget', () => {\n setSyncingMode('offline');\n });\n }\n\n if (budgetId) {\n await runHandler(handlers['load-budget'], { id: budgetId });\n }\n\n return lib;\n}\n\n// Export a few things required for the platform\nexport const lib = {\n getDataDir: fs.getDataDir,\n sendMessage: (msg, args) => connection.send(msg, args),\n send: async (name, args) => {\n let res = await runHandler(app.handlers[name], args);\n return res;\n },\n on: (name, func) => app.events.on(name, func),\n syncAndReceiveMessages,\n q,\n db,\n\n // Expose CRDT mechanisms so server can use them\n merkle,\n timestamp,\n SyncProtoBuf: SyncPb\n};\n\nif (process.env.NODE_ENV === 'development' && Platform.isWeb) {\n // Support reloading the backend\n self.addEventListener('message', async e => {\n if (e.data.type === '__actual:shutdown') {\n await sheet.waitOnSpreadsheet();\n await app.stopServices();\n await db.closeDatabase();\n asyncStorage.shutdown();\n fs.shutdown();\n\n setTimeout(() => {\n // Give everything else some time to process shutdown events\n self.close();\n }, 100);\n }\n });\n}\n","// TODO: Ok, several problems:\n//\n// * If nothing matches between two merkle trees, we should fallback\n// * to the last window instead the front one (use 0 instead of the\n// * key)\n//\n// * Need to check to make sure if account exists when handling\n// * transaction changes in syncing\n\nexport function getKeys(trie) {\n return Object.keys(trie).filter(x => x !== 'hash');\n}\n\nexport function keyToTimestamp(key) {\n // 16 is the length of the base 3 value of the current time in\n // minutes. Ensure it's padded to create the full value\n let fullkey = key + '0'.repeat(16 - key.length);\n\n // Parse the base 3 representation\n return parseInt(fullkey, 3) * 1000 * 60;\n}\n\nexport function insert(trie, timestamp) {\n let hash = timestamp.hash();\n let key = Number((timestamp.millis() / 1000 / 60) | 0).toString(3);\n\n trie = Object.assign({}, trie, { hash: trie.hash ^ hash });\n return insertKey(trie, key, hash);\n}\n\nfunction insertKey(trie, key, hash) {\n if (key.length === 0) {\n return trie;\n }\n const c = key[0];\n const n = trie[c] || {};\n return Object.assign({}, trie, {\n [c]: Object.assign({}, n, insertKey(n, key.slice(1), hash), {\n hash: n.hash ^ hash\n })\n });\n}\n\nexport function build(timestamps) {\n let trie = {};\n for (let timestamp of timestamps) {\n insert(trie, timestamp);\n }\n return trie;\n}\n\nexport function diff(trie1, trie2) {\n if (trie1.hash === trie2.hash) {\n return null;\n }\n\n let node1 = trie1;\n let node2 = trie2;\n let k = '';\n\n // This loop will eventually stop when it traverses down to find\n // where the hashes differ, or otherwise when there are no leaves\n // left (this shouldn't happen, if that's the case the hash check at\n // the top of this function should pass)\n while (1) {\n let keyset = new Set([...getKeys(node1), ...getKeys(node2)]);\n let keys = [...keyset.values()];\n keys.sort();\n\n let diffkey = null;\n\n // Traverse down the trie through keys that aren't the same. We\n // traverse down the keys in order. Stop in two cases: either one\n // of the nodes doesn't have the key, or a different key isn't\n // found. For the former case, we have to that because pruning is\n // lossy. We don't know if we've pruned off a changed key so we\n // can't traverse down anymore. For the latter case, it means two\n // things: either we've hit the bottom of the tree, or the changed\n // key has been pruned off. In the latter case we have a \"partial\"\n // key and will fill the rest with 0s. Note that if multiple older\n // messages were added into one trie, it's possible we will\n // generate a time that only encompasses *some* of the those\n // messages. Pruning is lossy, and we traverse down the left-most\n // changed time that we know of, because of pruning it might take\n // multiple passes to sync up a trie.\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n\n if (!node1[key] || !node2[key]) {\n break;\n }\n\n let next1 = node1[key];\n let next2 = node2[key];\n if (next1.hash !== next2.hash) {\n diffkey = key;\n break;\n }\n }\n\n if (!diffkey) {\n return keyToTimestamp(k);\n }\n\n k += diffkey;\n node1 = node1[diffkey] || {};\n node2 = node2[diffkey] || {};\n }\n}\n\nexport function prune(trie, n = 2) {\n // Do nothing if empty\n if (!trie.hash) {\n return trie;\n }\n\n let keys = getKeys(trie);\n keys.sort();\n\n let next = { hash: trie.hash };\n keys = keys.slice(-n).map(k => (next[k] = prune(trie[k], n)));\n\n return next;\n}\n\nexport function debug(trie, k = '', indent = 0) {\n const str =\n ' '.repeat(indent) +\n (k !== '' ? `k: ${k} ` : '') +\n `hash: ${trie.hash || '(empty)'}\\n`;\n return (\n str +\n getKeys(trie)\n .map(key => {\n return debug(trie[key], key, indent + 2);\n })\n .join('')\n );\n}\n","import fs from '../../platform/server/fs';\nimport * as sqlite from '../../platform/server/sqlite';\n\n// We have to bundle in JS migrations manually to avoid having to `eval`\n// them which doesn't play well with CSP. There isn't great, and eventually\n// we can remove this migration.\nimport m1632571489012 from '../../../migrations/1632571489012_remove_cache.js';\n\nconst uuid = require('../../platform/uuid');\n\nlet MIGRATIONS_DIR = fs.migrationsPath;\n\nlet javascriptMigrations = {\n 1632571489012: m1632571489012\n};\n\nexport async function withMigrationsDir(dir, func) {\n let oldDir = MIGRATIONS_DIR;\n MIGRATIONS_DIR = dir;\n await func();\n MIGRATIONS_DIR = oldDir;\n}\n\nexport function getMigrationsDir() {\n return MIGRATIONS_DIR;\n}\n\nfunction getMigrationId(name) {\n return parseInt(name.match(/^(\\d)+/)[0]);\n}\n\nexport function getUpMigration(id, names) {\n for (let m of names) {\n if (getMigrationId(m) === id) {\n return m;\n }\n }\n}\n\nexport async function getAppliedMigrations(db) {\n const rows = await sqlite.runQuery(\n db,\n 'SELECT * FROM __migrations__ ORDER BY id ASC',\n [],\n true\n );\n return rows.map(row => row.id);\n}\n\nexport async function getMigrationList(migrationsDir) {\n const files = await fs.listDir(migrationsDir);\n return files\n .filter(name => name.match(/(\\.sql|\\.js)$/))\n .sort((m1, m2) => {\n const id1 = getMigrationId(m1);\n const id2 = getMigrationId(m2);\n if (id1 < id2) {\n return -1;\n } else if (id1 > id2) {\n return 1;\n }\n return 0;\n });\n}\n\nexport function getPending(appliedIds, all) {\n return all.filter(name => {\n const id = getMigrationId(name);\n return appliedIds.indexOf(id) === -1;\n });\n}\n\nasync function applyJavaScript(db, id) {\n const dbInterface = {\n runQuery: (query, params, fetchAll) =>\n sqlite.runQuery(db, query, params, fetchAll),\n execQuery: query => sqlite.execQuery(db, query),\n transaction: func => sqlite.transaction(db, func)\n };\n\n if (javascriptMigrations[id] == null) {\n throw new Error('Could not find JS migration code to run for ' + id);\n }\n\n let run = javascriptMigrations[id];\n return run(dbInterface, () => uuid.v4Sync());\n}\n\nasync function applySql(db, sql) {\n try {\n await sqlite.execQuery(db, sql);\n } catch (e) {\n console.log('Error applying sql:', sql);\n throw e;\n }\n}\n\nexport async function applyMigration(db, name, migrationsDir) {\n const code = await fs.readFile(fs.join(migrationsDir, name));\n if (name.match(/\\.js$/)) {\n await applyJavaScript(db, getMigrationId(name));\n } else {\n await applySql(db, code);\n }\n await sqlite.runQuery(db, 'INSERT INTO __migrations__ (id) VALUES (?)', [\n getMigrationId(name)\n ]);\n}\n\nfunction checkDatabaseValidity(appliedIds, available) {\n for (let i = 0; i < appliedIds.length; i++) {\n if (\n i >= available.length ||\n appliedIds[i] !== getMigrationId(available[i])\n ) {\n throw new Error('out-of-sync-migrations');\n }\n }\n}\n\nexport async function migrate(db) {\n let appliedIds = await getAppliedMigrations(db);\n let available = await getMigrationList(MIGRATIONS_DIR);\n\n checkDatabaseValidity(appliedIds, available);\n\n const pending = getPending(appliedIds, available);\n\n for (let migration of pending) {\n await applyMigration(db, migration, MIGRATIONS_DIR);\n }\n\n return pending;\n}\n","export function requiredFields(name, row, fields, update) {\n fields.forEach(field => {\n if (update) {\n if (row.hasOwnProperty(field) && row[field] == null) {\n throw new Error(`${name} is missing field ${field}`);\n }\n } else {\n if (!row.hasOwnProperty(field) || row[field] == null) {\n throw new Error(`${name} is missing field ${field}`);\n }\n }\n });\n}\n\nexport function toDateRepr(str) {\n if (typeof str !== 'string') {\n throw new Error('toDateRepr not passed a string: ' + str);\n }\n\n return parseInt(str.replace(/-/g, ''));\n}\n\nexport function fromDateRepr(number) {\n if (typeof number !== 'number') {\n throw new Error('fromDateRepr not passed a number: ' + number);\n }\n\n const dateString = number.toString();\n return (\n dateString.slice(0, 4) +\n '-' +\n dateString.slice(4, 6) +\n '-' +\n dateString.slice(6)\n );\n}\n\nexport const accountModel = {\n validateAccountType(account) {\n const { type } = account;\n if (\n type !== 'checking' &&\n type !== 'savings' &&\n type !== 'investment' &&\n type !== 'credit' &&\n type !== 'mortgage' &&\n type !== 'debt' &&\n type !== 'other'\n ) {\n throw new Error('Invalid account type: ' + type);\n }\n },\n\n validate(account, { update } = {}) {\n if (!update || account.type != null) {\n accountModel.validateAccountType(account);\n }\n\n requiredFields(\n 'account',\n account,\n update ? ['name', 'type', 'offbudget', 'closed'] : ['name', 'type'],\n update\n );\n\n return account;\n }\n};\n\nexport const categoryModel = {\n validate(category, { update } = {}) {\n requiredFields(\n 'category',\n category,\n update ? ['name', 'is_income', 'cat_group'] : ['name', 'cat_group'],\n update\n );\n\n let { sort_order, ...rest } = category;\n return rest;\n }\n};\n\nexport const categoryGroupModel = {\n validate(categoryGroup, { update } = {}) {\n requiredFields(\n 'categoryGroup',\n categoryGroup,\n update ? ['name', 'is_income'] : ['name'],\n update\n );\n\n let { sort_order, ...rest } = categoryGroup;\n return rest;\n }\n};\n\nexport const payeeModel = {\n validate(payee, { update } = {}) {\n requiredFields('payee', payee, ['name'], update);\n return payee;\n }\n};\n\nexport const payeeRuleModel = {\n validateType(rule) {\n const { type } = rule;\n if (type !== 'equals' && type !== 'contains') {\n throw new Error('Invalid rule type: ' + type);\n }\n },\n\n validate(rule, { update } = {}) {\n if (!update || 'type' in rule) {\n payeeRuleModel.validateType(rule);\n }\n\n requiredFields('payee_rules', rule, ['payee_id', 'type'], update);\n return rule;\n }\n};\n\nexport const transactionModel = {\n validate(trans, { update } = {}) {\n requiredFields('transaction', trans, ['date', 'acct'], update);\n\n if ('date' in trans) {\n // Make sure it's the right format, and also do a sanity check.\n // Really old dates can mess up the system and can happen by\n // accident\n if (\n trans.date.match(/^\\d{4}-\\d{2}-\\d{2}$/) == null ||\n trans.date < '2000-01-01'\n ) {\n throw new Error('Invalid transaction date: ' + trans.date);\n }\n }\n\n return trans;\n },\n\n toJS(row) {\n // Check a non-important field that typically wouldn't be passed in\n // manually, and use it as a smoke test to see if this is a\n // fully-formed transaction or not.\n if (!('location' in row)) {\n throw new Error(\n 'A full transaction is required to be passed to `toJS`. Instead got: ' +\n JSON.stringify(row)\n );\n }\n\n let trans = { ...row };\n trans.error = row.error ? JSON.parse(row.error) : null;\n trans.isParent = row.isParent === 1 ? true : false;\n trans.isChild = row.isChild === 1 ? true : false;\n trans.starting_balance_flag =\n row.starting_balance_flag === 1 ? true : false;\n trans.cleared = row.cleared === 1 ? true : false;\n trans.pending = row.pending === 1 ? true : false;\n trans.date = trans.date && fromDateRepr(trans.date);\n return trans;\n },\n\n fromJS(trans) {\n let row = { ...trans };\n if ('error' in row) {\n row.error = trans.error ? JSON.stringify(trans.error) : null;\n }\n if ('isParent' in row) {\n row.isParent = trans.isParent ? 1 : 0;\n }\n if ('isChild' in row) {\n row.isChild = trans.isChild ? 1 : 0;\n }\n if ('cleared' in row) {\n row.cleared = trans.cleared ? 1 : 0;\n }\n if ('pending' in row) {\n row.pending = trans.pending ? 1 : 0;\n }\n if ('starting_balance_flag' in row) {\n row.starting_balance_flag = trans.starting_balance_flag ? 1 : 0;\n }\n if ('date' in row) {\n row.date = toDateRepr(trans.date);\n }\n\n return row;\n }\n};\n","import { sequential } from '../shared/async';\nimport { captureException, captureBreadcrumb } from '../platform/exceptions';\n\nlet runningMethods = new Set();\n\nlet currentContext = null;\nlet mutatingMethods = new WeakMap();\nlet globalMutationsEnabled = false;\n\nlet _latestHandlerNames = [];\n\nexport function mutator(handler) {\n mutatingMethods.set(handler, true);\n return handler;\n}\n\nexport function isMutating(handler) {\n return mutatingMethods.has(handler);\n}\n\nasync function flushRunningMethods() {\n // Give the client some time to invoke new requests\n await wait(200);\n\n while (runningMethods.size > 0) {\n // Wait for all of them\n await Promise.all([...runningMethods.values()]);\n\n // We give clients more time to make other requests. This lets them continue\n // to do an async workflow\n await wait(100);\n }\n}\n\nfunction wait(time) {\n return new Promise(resolve => setTimeout(resolve, time));\n}\n\nexport async function runHandler(handler, args, { undoTag, name } = {}) {\n // For debug reasons, track the latest handlers that have been\n // called\n _latestHandlerNames.push(name);\n if (_latestHandlerNames.length > 5) {\n _latestHandlerNames = _latestHandlerNames.slice(-5);\n }\n\n if (mutatingMethods.has(handler)) {\n return runMutator(() => handler(args), { undoTag });\n }\n\n // When closing a file, it clears out all global state for the file. That\n // means any async workflows currently executed would be cut off. We handle\n // this by letting all async workflows finish executing before closing the\n // file\n if (name === 'close-budget') {\n await flushRunningMethods();\n }\n\n let promise = handler(args);\n runningMethods.add(promise);\n promise.then(() => {\n runningMethods.delete(promise);\n });\n return promise;\n}\n\n// These are useful for tests. Only use them in tests.\nexport function enableGlobalMutations() {\n if (global.__TESTING__) {\n globalMutationsEnabled = true;\n }\n}\n\nexport function disableGlobalMutations() {\n if (global.__TESTING__) {\n globalMutationsEnabled = false;\n }\n}\n\nexport const runMutator = sequential(async (func, initialContext = {}) => {\n currentContext = initialContext;\n return func().finally(() => {\n currentContext = null;\n });\n});\n\nexport function withMutatorContext(context, func) {\n if (currentContext == null && !globalMutationsEnabled) {\n captureBreadcrumb('Recent methods: ' + _latestHandlerNames.join(', '));\n captureException(new Error('withMutatorContext: mutator not running'));\n\n // See comment below. This is not an error right now, but it will\n // be in the future.\n return func();\n }\n\n let prevContext = currentContext;\n currentContext = { ...currentContext, ...context };\n return func().finally(() => {\n currentContext = prevContext;\n });\n}\n\nexport function getMutatorContext() {\n if (currentContext == null) {\n captureBreadcrumb({\n category: 'server',\n message: 'Recent methods: ' + _latestHandlerNames.join(', ')\n });\n // captureException(new Error('getMutatorContext: mutator not running'));\n\n // For now, this is a non-fatal error. It will be in the future,\n // but this is relatively non-critical (undo just won't work) so\n // return an empty context. When we have more confidence that\n // everything is running inside a mutator, throw an error.\n return {};\n }\n\n if (currentContext == null && globalMutationsEnabled) {\n return {};\n }\n return currentContext;\n}\n","import { createApp } from '../app';\nimport * as db from '../db';\n\nlet app = createApp();\n\napp.method('notes-save', async ({ id, note }) => {\n await db.update('notes', { id, note });\n});\n\nexport default app;\n","let enabled = false;\nlet entries = {};\nlet counters = {};\n\nexport function reset() {\n entries = {};\n counters = {};\n}\n\nexport function record(name) {\n const start = Date.now();\n return () => unrecord(name, start);\n}\n\nfunction unrecord(name, start) {\n const end = Date.now();\n\n if (enabled) {\n if (entries[name] == null) {\n entries[name] = [];\n }\n entries[name].push(end - start);\n }\n}\n\nexport function increment(name) {\n if (enabled) {\n if (counters[name] == null) {\n counters[name] = 0;\n }\n counters[name]++;\n }\n}\n\nexport function start() {\n enabled = true;\n}\n\nexport function stop() {\n enabled = false;\n\n console.log('~~ PERFORMANCE REPORT ~~');\n for (let name in entries) {\n const records = entries[name];\n const total = records.reduce((total, n) => total + n / 1000, 0);\n const avg = total / records.length;\n\n console.log(\n `[${name}] count: ${records.length} total: ${total}s avg: ${avg}`\n );\n }\n\n for (let name in counters) {\n console.log(`[${name}] ${counters[name]}`);\n }\n console.log('~~ END REPORT ~~');\n\n reset();\n}\n","export default {\n isMobile: false,\n isWeb: false,\n isDesktop: true\n};\n","// By default, no polyfills are installed\n","import Platform from './platform';\nconst { PostError, HTTPError } = require('./errors');\nconst { fetch } = require('../platform/server/fetch');\n\nfunction throwIfNot200(res, text) {\n if (res.status !== 200) {\n if (res.status === 500) {\n throw new PostError(res.status === 500 ? 'internal' : text);\n }\n\n let contentType = res.headers.get('Content-Type');\n if (contentType.toLowerCase().indexOf('application/json') !== -1) {\n let json = JSON.parse(text);\n throw new PostError(json.reason);\n }\n throw new PostError(text);\n }\n}\n\nexport async function post(url, data) {\n let text;\n let res;\n\n let s = new Error().stack;\n\n try {\n res = await fetch(url, {\n method: 'POST',\n body: JSON.stringify(data),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n text = await res.text();\n } catch (err) {\n throw new PostError('network-failure');\n }\n\n throwIfNot200(res, text);\n\n try {\n res = JSON.parse(text);\n } catch (err) {\n // Something seriously went wrong. TODO handle errors\n throw new PostError('parse-json', { meta: text });\n }\n\n if (res.status !== 'ok') {\n console.log(\n 'API call failed: ' +\n url +\n '\\nData: ' +\n JSON.stringify(data, null, 2) +\n '\\nResponse: ' +\n JSON.stringify(res, null, 2)\n );\n\n throw new PostError(res.description || res.reason || 'unknown');\n }\n\n return res.data;\n}\n\nexport async function postBinary(url, data, headers) {\n let res;\n try {\n res = await fetch(url, {\n method: 'POST',\n body: Platform.isWeb ? data : Buffer.from(data),\n headers: {\n 'Content-Length': data.length,\n 'Content-Type': 'application/actual-sync',\n ...headers\n }\n });\n } catch (err) {\n throw new PostError('network-failure');\n }\n\n let buffer;\n if (res.arrayBuffer) {\n buffer = Buffer.from(await res.arrayBuffer());\n } else {\n buffer = await res.buffer();\n }\n\n throwIfNot200(res, buffer.toString());\n\n return buffer;\n}\n\nexport function get(url, opts) {\n return fetch(url, opts).then(res => res.text());\n}\n","import { sendMessages } from './sync';\nimport Timestamp from './timestamp';\nconst fs = require('../platform/server/fs');\n\nlet prefs = null;\n\nexport async function loadPrefs(id) {\n if (global.__TESTING__ && !id) {\n prefs = { dummyTestPrefs: true };\n return prefs;\n }\n\n const fullpath = fs.join(fs.getBudgetDir(id), 'metadata.json');\n\n try {\n prefs = JSON.parse(await fs.readFile(fullpath));\n } catch (e) {\n // If the user messed something up, be flexible and allow them to\n // still load the budget database. Default the budget name to the\n // id.\n prefs = { id, budgetName: id };\n }\n\n // No matter what is in `id` field, force it to be the current id.\n // This makes it resilient to users moving around folders, etc\n prefs.id = id;\n return prefs;\n}\n\nexport async function savePrefs(prefsToSet, { avoidSync = false } = {}) {\n Object.assign(prefs, prefsToSet);\n\n if (!avoidSync) {\n // Sync whitelisted prefs\n let messages = Object.keys(prefsToSet)\n .map(key => {\n if (key === 'budgetType' || key === 'budgetName') {\n return {\n dataset: 'prefs',\n row: key,\n column: 'value',\n value: prefsToSet[key],\n timestamp: Timestamp.send()\n };\n }\n return null;\n })\n .filter(x => x);\n\n if (messages.length > 0) {\n await sendMessages(messages);\n }\n }\n\n if (!prefs.dummyTestPrefs) {\n let prefsPath = fs.join(fs.getBudgetDir(prefs.id), 'metadata.json');\n await fs.writeFile(prefsPath, JSON.stringify(prefs));\n }\n}\n\nexport function unloadPrefs() {\n prefs = null;\n}\n\nexport function getPrefs() {\n return prefs;\n}\n\nexport function getDefaultPrefs(id, budgetName) {\n // Add any notifications in here that new users shouldn't see.\n // Without them, a popup will show to explain a new feature.\n return {\n id,\n budgetName,\n 'notifications.schedules': true,\n 'notifications.repair-splits': true\n };\n}\n\nexport async function readPrefs(id) {\n const fullpath = fs.join(fs.getBudgetDir(id), 'metadata.json');\n\n try {\n return JSON.parse(await fs.readFile(fullpath));\n } catch (e) {\n return null;\n }\n}\n","import deepEqual from 'deep-equal';\nimport * as d from 'date-fns';\nimport { createApp } from '../app';\nimport * as db from '../db';\nimport * as prefs from '../prefs';\nimport { toDateRepr } from '../models';\nimport { runQuery as aqlQuery } from '../aql/schema/run-query';\nimport { compileQuery } from '../aql/compiler';\nimport { schema, schemaConfig } from '../aql/schema';\nimport { dayFromDate, currentDay, parseDate } from '../../shared/months';\nimport q from '../../shared/query';\nimport {\n insertRule,\n updateRule,\n getRules,\n ruleModel\n} from '../accounts/transaction-rules';\nimport { Rule, Condition } from '../accounts/rules';\nimport {\n extractScheduleConds,\n recurConfigToRSchedule,\n getHasTransactionsQuery,\n getStatus,\n getScheduledAmount\n} from '../../shared/schedules';\nimport { mutator, runMutator } from '../mutators';\nimport { undoable } from '../undo';\nimport { Schedule as RSchedule } from '../util/rschedule';\nimport { addSyncListener, batchMessages } from '../sync';\nimport { captureBreadcrumb } from '../../platform/exceptions';\nimport { addTransactions } from '../accounts/sync';\nimport { findSchedules } from './find-schedules';\n\nconst connection = require('../../platform/server/connection');\nconst uuid = require('../../platform/uuid');\n\n// Utilities\n\nfunction zip(arr1, arr2) {\n let result = [];\n for (let i = 0; i < arr1.length; i++) {\n result.push([arr1[i], arr2[i]]);\n }\n return result;\n}\n\nexport function updateConditions(conditions, newConditions) {\n let scheduleConds = extractScheduleConds(conditions);\n let newScheduleConds = extractScheduleConds(newConditions);\n\n let replacements = zip(\n Object.values(scheduleConds),\n Object.values(newScheduleConds)\n );\n\n let updated = conditions.map(cond => {\n let r = replacements.find(r => cond === r[0]);\n return r && r[1] ? r[1] : cond;\n });\n\n let added = replacements\n .filter(x => x[0] == null && x[1] != null)\n .map(x => x[1]);\n\n return updated.concat(added);\n}\n\nexport function getNextDate(dateCond, start = new Date()) {\n start = d.startOfDay(start);\n\n let cond = new Condition(\n dateCond.op,\n 'date',\n dateCond.value,\n null,\n new Map(Object.entries({ date: 'date' }))\n );\n let value = cond.getValue();\n\n if (value.type === 'date') {\n return value.date;\n } else if (value.type === 'recur') {\n let dates = value.schedule.occurrences({ start, take: 1 }).toArray();\n\n if (dates.length > 0) {\n let date = dates[0].date;\n return dayFromDate(date);\n }\n }\n return null;\n}\n\nexport async function getRuleForSchedule(id) {\n if (id == null) {\n throw new Error('Schedule not attached to a rule');\n }\n\n let { data: ruleId } = await aqlQuery(\n q('schedules')\n .filter({ id })\n .calculate('rule')\n );\n return getRules().find(rule => rule.id === ruleId);\n}\n\nexport async function fixRuleForSchedule(id) {\n let { data: ruleId } = await aqlQuery(\n q('schedules')\n .filter({ id })\n .calculate('rule')\n );\n\n if (ruleId) {\n // Take the bad rule out of the system so it never causes problems\n // in the future\n await db.delete_('rules', ruleId);\n }\n\n let newId = await insertRule({\n stage: null,\n conditions: [\n { op: 'isapprox', field: 'date', value: currentDay() },\n { op: 'isapprox', field: 'amount', value: 0 }\n ],\n actions: [{ op: 'link-schedule', value: id }]\n });\n\n await db.updateWithSchema('schedules', { id, rule: newId });\n\n return getRules().find(rule => rule.id === newId);\n}\n\nexport async function setNextDate({ id, start, conditions, reset }) {\n if (conditions == null) {\n let rule = await getRuleForSchedule(id);\n if (rule == null) {\n throw new Error('No rule found for schedule');\n }\n conditions = rule.serialize().conditions;\n }\n\n let { date: dateCond } = extractScheduleConds(conditions);\n\n let { data: nextDate } = await aqlQuery(\n q('schedules')\n .filter({ id })\n .calculate('next_date')\n );\n\n // Only do this if a date condition exists\n if (dateCond) {\n let newNextDate = getNextDate(\n dateCond,\n start ? start(nextDate) : new Date()\n );\n\n if (newNextDate !== nextDate) {\n // Our `update` functon requires the id of the item and we don't\n // have it, so we need to query it\n let nd = await db.first(\n 'SELECT id, base_next_date_ts FROM schedules_next_date WHERE schedule_id = ?',\n [id]\n );\n\n await db.update(\n 'schedules_next_date',\n reset\n ? {\n id: nd.id,\n base_next_date: toDateRepr(newNextDate),\n base_next_date_ts: Date.now()\n }\n : {\n id: nd.id,\n local_next_date: toDateRepr(newNextDate),\n local_next_date_ts: nd.base_next_date_ts\n }\n );\n }\n }\n}\n\n// Methods\n\nexport async function createSchedule({ schedule, conditions = [] } = {}) {\n let scheduleId = (schedule && schedule.id) || uuid.v4Sync();\n\n let { date: dateCond } = extractScheduleConds(conditions);\n if (dateCond == null) {\n throw new Error('A date condition is required to create a schedule');\n }\n if (dateCond.value == null) {\n throw new Error('Date is required');\n }\n\n let nextDate = getNextDate(dateCond);\n let nextDateRepr = nextDate ? toDateRepr(nextDate) : null;\n\n // Create the rule here based on the info\n let ruleId;\n ruleId = await insertRule({\n stage: null,\n conditions,\n actions: [{ op: 'link-schedule', value: scheduleId }]\n });\n\n let now = Date.now();\n let nextDateId = await db.insertWithUUID('schedules_next_date', {\n schedule_id: scheduleId,\n local_next_date: nextDateRepr,\n local_next_date_ts: now,\n base_next_date: nextDateRepr,\n base_next_date_ts: now\n });\n\n let id = await db.insertWithSchema('schedules', {\n ...schedule,\n id: scheduleId,\n rule: ruleId\n });\n\n return scheduleId;\n}\n\n// TODO: don't allow deleting rules that link schedules\n\nexport async function updateSchedule({ schedule, conditions, resetNextDate }) {\n if (schedule.rule) {\n throw new Error('You cannot change the rule of a schedule');\n }\n\n // We need the rule if there are conditions\n let rule;\n\n // This must be outside the `batchMessages` call because we change\n // and then read data\n if (conditions) {\n let { date: dateCond } = extractScheduleConds(conditions);\n if (dateCond && dateCond.value == null) {\n throw new Error('Date is required');\n }\n\n // We need to get the full rule to merge in the updated\n // conditions\n rule = await getRuleForSchedule(schedule.id);\n\n if (rule == null) {\n // In the edge case that a rule gets corrupted (either by a bug in\n // the system or user messing with their data), don't crash. We\n // generate a new rule because schedules have to have a rule\n // attached to them.\n rule = await fixRuleForSchedule(schedule.id);\n }\n }\n\n await batchMessages(async () => {\n if (conditions) {\n let oldConditions = rule.serialize().conditions;\n let newConditions = updateConditions(oldConditions, conditions);\n\n await updateRule({ id: rule.id, conditions: newConditions });\n\n // Annoyingly, sometimes it has `type` and sometimes it doesn't\n let stripType = ({ type, ...fields }) => fields;\n\n // Update `next_date` if the user forced it, or if the account\n // or date changed. We check account because we don't update\n // schedules automatically for closed account, and the user\n // might switch accounts from a closed one\n if (\n resetNextDate ||\n !deepEqual(\n oldConditions.find(c => c.field === 'account'),\n oldConditions.find(c => c.field === 'account')\n ) ||\n !deepEqual(\n stripType(oldConditions.find(c => c.field === 'date')),\n stripType(newConditions.find(c => c.field === 'date'))\n )\n ) {\n await setNextDate({\n id: schedule.id,\n conditions: newConditions,\n reset: true\n });\n }\n } else if (resetNextDate) {\n await setNextDate({ id: schedule.id, reset: true });\n }\n\n await db.updateWithSchema('schedules', schedule);\n });\n}\n\nexport async function deleteSchedule({ id }) {\n let { data: ruleId } = await aqlQuery(\n q('schedules')\n .filter({ id })\n .calculate('rule')\n );\n\n await batchMessages(async () => {\n await db.delete_('rules', ruleId);\n await db.delete_('schedules', id);\n });\n}\n\nexport async function skipNextDate({ id }) {\n return setNextDate({\n id,\n start: nextDate => {\n return d.addDays(parseDate(nextDate), 1);\n }\n });\n}\n\n// `schedule` here might not be a saved schedule, so it might not have\n// an id\nexport function getPossibleTransactions({ schedule }) {}\n\nexport function discoverSchedules() {\n return findSchedules();\n}\n\nexport async function getUpcomingDates({ config, count }) {\n let rules = recurConfigToRSchedule(config);\n\n try {\n let schedule = new RSchedule({ rrules: rules });\n\n return schedule\n .occurrences({ start: d.startOfDay(new Date()), take: count })\n .toArray()\n .map(date => dayFromDate(date.date));\n } catch (err) {\n captureBreadcrumb(config);\n throw err;\n }\n}\n\n// Services\n\nfunction onRuleUpdate(rule) {\n let { actions, conditions } =\n rule instanceof Rule ? rule.serialize() : ruleModel.toJS(rule);\n\n if (actions && actions.find(a => a.op === 'link-schedule')) {\n let scheduleId = actions.find(a => a.op === 'link-schedule').value;\n\n if (scheduleId) {\n let conds = extractScheduleConds(conditions);\n\n let payeeIdx = conditions.findIndex(c => c === conds.payee);\n let accountIdx = conditions.findIndex(c => c === conds.account);\n let amountIdx = conditions.findIndex(c => c === conds.amount);\n let dateIdx = conditions.findIndex(c => c === conds.date);\n\n db.runQuery(\n 'INSERT OR REPLACE INTO schedules_json_paths (schedule_id, payee, account, amount, date) VALUES (?, ?, ?, ?, ?)',\n [\n scheduleId,\n payeeIdx === -1 ? null : `$[${payeeIdx}]`,\n accountIdx === -1 ? null : `$[${accountIdx}]`,\n amountIdx === -1 ? null : `$[${amountIdx}]`,\n dateIdx === -1 ? null : `$[${dateIdx}]`\n ]\n );\n }\n }\n}\n\nfunction trackJSONPaths() {\n // Populate the table\n db.transaction(() => {\n getRules().forEach(rule => {\n onRuleUpdate(rule);\n });\n });\n\n return addSyncListener(onApplySync);\n}\n\nfunction onApplySync(oldValues, newValues) {\n let found = false;\n newValues.forEach((items, table) => {\n if (table === 'rules') {\n found = true;\n items.forEach(newValue => {\n onRuleUpdate(newValue);\n });\n }\n });\n}\n\n// This is the service that move schedules forward automatically and\n// posts transactions\n\nasync function postTransactionForSchedule({ id }) {\n let { data } = await aqlQuery(\n q('schedules')\n .filter({ id })\n .select('*')\n );\n let schedule = data[0];\n if (schedule == null || schedule._account == null) {\n return;\n }\n\n let transaction = {\n payee: schedule._payee,\n account: schedule._account,\n amount: getScheduledAmount(schedule._amount),\n date: schedule.next_date,\n schedule: schedule.id,\n cleared: false\n };\n\n if (transaction.account) {\n await addTransactions(transaction.account, [transaction]);\n }\n}\n\n// TODO: make this sequential\n\nexport async function advanceSchedulesService(syncSuccess) {\n // Move all paid schedules\n let { data: schedules } = await aqlQuery(\n q('schedules')\n .filter({ completed: false, '_account.closed': false })\n .select('*')\n );\n let { data: hasTransData } = await aqlQuery(\n getHasTransactionsQuery(schedules)\n );\n let hasTrans = new Set(hasTransData.filter(Boolean).map(row => row.schedule));\n\n let failedToPost = [];\n let didPost = false;\n\n for (let schedule of schedules) {\n let status = getStatus(\n schedule.next_date,\n schedule.completed,\n hasTrans.has(schedule.id)\n );\n\n if (status === 'paid') {\n if (schedule._date) {\n // Move forward recurring schedules\n if (schedule._date.frequency) {\n try {\n await setNextDate({ id: schedule.id });\n } catch (err) {\n // This might error if the rule is corrupted and it can't\n // find the rule\n }\n } else {\n if (schedule._date < currentDay()) {\n // Complete any single schedules\n await updateSchedule({\n schedule: { id: schedule.id, completed: true }\n });\n }\n }\n }\n } else if (\n (status === 'due' || status === 'missed') &&\n schedule.posts_transaction &&\n schedule._account\n ) {\n // Automatically create a transaction for due schedules\n if (syncSuccess) {\n await postTransactionForSchedule({ id: schedule.id });\n\n didPost = true;\n } else {\n failedToPost.push(schedule._payee);\n }\n }\n }\n\n if (failedToPost.length > 0) {\n connection.send('schedules-offline', { payees: failedToPost });\n } else if (didPost) {\n // This forces a full refresh of transactions because it\n // simulates them coming in from a full sync. This not a\n // great API right now, but I think generally the approach\n // is sane to treat them as external sync events.\n connection.send('sync-event', {\n type: 'success',\n tables: ['transactions'],\n syncDisabled: 'false'\n });\n }\n}\n\n// Expose functions to the client\nlet app = createApp();\n\napp.method('schedule/create', mutator(undoable(createSchedule)));\napp.method('schedule/update', mutator(undoable(updateSchedule)));\napp.method('schedule/delete', mutator(undoable(deleteSchedule)));\napp.method('schedule/skip-next-date', mutator(undoable(skipNextDate)));\napp.method(\n 'schedule/post-transaction',\n mutator(undoable(postTransactionForSchedule))\n);\napp.method(\n 'schedule/force-run-service',\n mutator(() => advanceSchedulesService(true))\n);\napp.method('schedule/get-possible-transactions', getPossibleTransactions);\napp.method('schedule/discover', discoverSchedules);\napp.method('schedule/get-upcoming-dates', getUpcomingDates);\n\napp.service(trackJSONPaths);\n\napp.events.on('sync', ({ type, subtype }) => {\n let completeEvent =\n type === 'success' || type === 'error' || type === 'unauthorized';\n\n if (completeEvent && prefs.getPrefs()) {\n let { lastScheduleRun } = prefs.getPrefs();\n\n if (lastScheduleRun !== currentDay()) {\n runMutator(() => advanceSchedulesService(type === 'success'));\n\n prefs.savePrefs({ lastScheduleRun: currentDay() });\n }\n }\n});\n\nexport default app;\n","import * as d from 'date-fns';\nimport * as db from '../db';\nimport { Schedule as RSchedule } from '../util/rschedule';\nimport { groupBy } from '../../shared/util';\nimport { fromDateRepr } from '../models';\nimport { runQuery as aqlQuery } from '../aql/schema/run-query';\nimport q from '../../shared/query';\nimport { getApproxNumberThreshold } from '../../shared/rules';\nimport { recurConfigToRSchedule } from '../../shared/schedules';\nimport { dayFromDate, parseDate, subDays } from '../../shared/months';\nimport { conditionsToAQL } from '../accounts/transaction-rules';\nconst uuid = require('../../platform/uuid');\n\nfunction takeDates(config) {\n let schedule = new RSchedule({ rrules: recurConfigToRSchedule(config) });\n return schedule\n .occurrences({ take: 3 })\n .toArray()\n .map(d => d.date);\n}\n\nasync function getTransactions(date, account) {\n let { data } = await aqlQuery(\n q('transactions')\n .filter({\n account,\n schedule: null,\n // Don't match transfers\n 'payee.transfer_acct': null,\n $and: [\n { date: { $gte: d.subDays(date, 2) } },\n { date: { $lte: d.addDays(date, 2) } }\n ]\n })\n .select('*')\n .options({ splits: 'none' })\n );\n return data;\n}\n\nfunction getRank(day1, day2) {\n let dayDiff = Math.abs(d.differenceInDays(parseDate(day1), parseDate(day2)));\n\n // The amount of days off determines the rank: exact same day\n // is highest rank 1, 1 day off is .5, etc. This will find the\n // best start date that matches all the dates the closest\n return 1 / (dayDiff + 1);\n}\n\nexport function matchSchedules(allOccurs, config, partialMatchRank = 0.5) {\n allOccurs = [...allOccurs].reverse();\n let baseOccur = allOccurs[0];\n let occurs = allOccurs.slice(1);\n let schedules = [];\n\n for (let trans of baseOccur.transactions) {\n let threshold = getApproxNumberThreshold(trans.amount);\n let payee = trans.payee;\n let account = trans.account;\n\n let found = occurs.map(occur => {\n let matched = occur.transactions.find(\n t =>\n t.amount >= trans.amount - threshold &&\n t.amount <= trans.amount + threshold\n );\n matched = matched && matched.payee === payee ? matched : null;\n\n if (matched) {\n return { trans: matched, rank: getRank(occur.date, matched.date) };\n }\n return null;\n });\n\n if (found.indexOf(null) !== -1) {\n continue;\n }\n\n let rank = found.reduce(\n (total, match) => total + match.rank,\n getRank(baseOccur.date, trans.date)\n );\n\n let exactAmount = found.reduce(\n (exact, match) => exact && match.trans.amount === trans.amount,\n true\n );\n\n schedules.push({\n rank,\n amount: trans.amount,\n account: trans.account,\n payee: trans.payee,\n date: config,\n // Exact dates rank as 1, so all of them matches exactly it\n // would equal the number of `allOccurs`\n exactDate: rank === allOccurs.length,\n exactAmount\n });\n }\n\n return schedules;\n}\n\nasync function schedulesForPattern(\n baseStart,\n numDays,\n baseConfig,\n accountId,\n partialMatchRank\n) {\n let schedules = [];\n\n let i = 0;\n for (let i = 0; i < numDays; i++) {\n let start = d.addDays(baseStart, i);\n let config;\n if (typeof baseConfig === 'function') {\n config = baseConfig(start);\n\n if (config === false) {\n // Skip this one\n continue;\n }\n } else {\n config = { ...baseConfig, start };\n }\n\n // Our recur config expects a day string, not a native date format\n config.start = dayFromDate(config.start);\n\n let data = [];\n let dates = takeDates(config);\n for (let date of dates) {\n data.push({\n date: dayFromDate(date),\n transactions: await getTransactions(date, accountId)\n });\n }\n\n schedules = schedules.concat(\n matchSchedules(data, config, partialMatchRank)\n );\n }\n return schedules;\n}\n\nasync function weekly(startDate, accountId) {\n return schedulesForPattern(\n d.subWeeks(parseDate(startDate), 4),\n 7 * 2,\n { frequency: 'weekly' },\n accountId\n );\n}\n\nasync function every2weeks(startDate, accountId) {\n return schedulesForPattern(\n // 6 weeks would cover 3 instances, but we also scan an addition\n // week back\n d.subWeeks(parseDate(startDate), 7),\n 7 * 2,\n { frequency: 'weekly', interval: 2 },\n accountId\n );\n}\n\nasync function monthly(startDate, accountId) {\n return schedulesForPattern(\n d.subMonths(parseDate(startDate), 4),\n 31 * 2,\n start => {\n // 28 is the max number of days that all months are guaranteed\n // to have. We don't want to go any higher than that because\n // we'll end up skipping months that don't have that day.\n // The use cases of end of month days will be covered with the\n // `monthlyLastDay` pattern;\n if (d.getDate(start) > 28) {\n return false;\n }\n return { start, frequency: 'monthly' };\n },\n accountId\n );\n}\n\nasync function monthlyLastDay(startDate, accountId) {\n // We do two separate calls because this pattern doesn't fit into\n // how `schedulesForPattern` works\n let s1 = await schedulesForPattern(\n d.subMonths(parseDate(startDate), 3),\n 1,\n { frequency: 'monthly', patterns: [{ type: 'day', value: -1 }] },\n accountId,\n // Last day patterns should win over day-specific ones that just\n // happen to match\n 0.75\n );\n\n let s2 = await schedulesForPattern(\n d.subMonths(parseDate(startDate), 4),\n 1,\n { frequency: 'monthly', patterns: [{ type: 'day', value: -1 }] },\n accountId,\n 0.75\n );\n\n return s1.concat(s2);\n}\n\nasync function monthly1stor3rd(startDate, accountId) {\n return schedulesForPattern(\n d.subWeeks(parseDate(startDate), 8),\n 14,\n start => {\n let day = d.format(new Date(), 'iiii');\n let dayValue = day.slice(0, 2).toUpperCase();\n\n return {\n start,\n frequency: 'monthly',\n patterns: [{ type: dayValue, value: 1 }, { type: dayValue, value: 3 }]\n };\n },\n accountId\n );\n}\n\nasync function monthly2ndor4th(startDate, accountId) {\n return schedulesForPattern(\n d.subMonths(parseDate(startDate), 8),\n 14,\n start => {\n let day = d.format(new Date(), 'iiii');\n let dayValue = day.slice(0, 2).toUpperCase();\n\n return {\n start,\n frequency: 'monthly',\n patterns: [{ type: dayValue, value: 2 }, { type: dayValue, value: 4 }]\n };\n },\n accountId\n );\n}\n\nasync function findStartDate(schedule) {\n let conditions = schedule._conditions;\n let dateCond = conditions.find(c => c.field === 'date');\n let currentConfig = dateCond.value;\n\n while (1) {\n let prevConfig = currentConfig;\n currentConfig = { ...prevConfig };\n\n switch (currentConfig.frequency) {\n case 'weekly':\n currentConfig.start = dayFromDate(\n d.subWeeks(\n parseDate(currentConfig.start),\n currentConfig.interval || 1\n )\n );\n\n break;\n case 'monthly':\n currentConfig.start = dayFromDate(\n d.subMonths(\n parseDate(currentConfig.start),\n currentConfig.interval || 1\n )\n );\n break;\n case 'yearly':\n currentConfig.start = dayFromDate(\n d.subYears(\n parseDate(currentConfig.start),\n currentConfig.interval || 1\n )\n );\n break;\n default:\n throw new Error('findStartDate: invalid frequency');\n }\n\n let newConditions = conditions.map(c =>\n c.field === 'date' ? { ...c, value: currentConfig } : c\n );\n\n let { filters, errors } = conditionsToAQL(newConditions, {\n recurDateBounds: 1\n });\n if (errors.length > 0) {\n // Somehow we generated an invalid config. Abort the whole\n // process and don't change the date at all\n currentConfig = null;\n break;\n }\n\n let { data } = await aqlQuery(\n q('transactions')\n .filter({ $and: filters })\n .select('*')\n );\n\n if (data.length === 0) {\n // No data, revert back to the last valid value and stop\n currentConfig = prevConfig;\n break;\n }\n }\n\n if (currentConfig) {\n return {\n ...schedule,\n date: currentConfig,\n _conditions: conditions.map(c =>\n c.field === 'date' ? { ...c, value: currentConfig } : c\n )\n };\n }\n return schedule;\n}\n\nexport async function findSchedules() {\n // Patterns to look for:\n // * Weekly\n // * Every two weeks\n // * Monthly on day X\n // * Monthly on every 1st or 3rd day\n // * Monthly on every 2nd or 4th day\n //\n // Search for them approx (+- 2 days) but track which transactions\n // and find the best one...\n\n let { data: accounts } = await aqlQuery(\n q('accounts')\n .filter({ closed: false })\n .select('*')\n );\n\n let allSchedules = [];\n\n for (let account of accounts) {\n // Find latest transaction-ish to start with\n let latestTrans = await db.first(\n 'SELECT * FROM v_transactions WHERE account = ? AND parent_id IS NULL ORDER BY date DESC LIMIT 1',\n [account.id]\n );\n\n if (latestTrans) {\n let latestDate = fromDateRepr(latestTrans.date);\n allSchedules = allSchedules.concat(\n await weekly(latestDate, account.id),\n await every2weeks(latestDate, account.id),\n await monthly(latestDate, account.id),\n await monthlyLastDay(latestDate, account.id),\n await monthly1stor3rd(latestDate, account.id),\n await monthly2ndor4th(latestDate, account.id)\n );\n }\n }\n\n let schedules = [...groupBy(allSchedules, 'payee').entries()].map(\n ([payeeId, schedules]) => {\n schedules.sort((s1, s2) => s2.rank - s1.rank);\n let winner = schedules[0];\n\n // Convert to schedule and return it\n return {\n id: uuid.v4Sync(),\n account: winner.account,\n payee: winner.payee,\n date: winner.date,\n amount: winner.amount,\n _conditions: [\n { op: 'is', field: 'account', value: winner.account },\n { op: 'is', field: 'payee', value: winner.payee },\n {\n op: winner.exactDate ? 'is' : 'isapprox',\n field: 'date',\n value: winner.date\n },\n {\n op: winner.exactAmount ? 'is' : 'isapprox',\n field: 'amount',\n value: winner.amount\n }\n ]\n };\n }\n );\n\n let finalized = [];\n for (let schedule of schedules) {\n finalized.push(await findStartDate(schedule));\n }\n return finalized;\n}\n","import fs from '../platform/server/fs';\n\nlet config = null;\n\nfunction joinURL(base, ...paths) {\n let url = new URL(base);\n url.pathname = fs.join(...paths);\n return url.toString();\n}\n\nexport function setServer(url) {\n if (url == null) {\n config = null;\n } else {\n config = getServer(url);\n }\n}\n\n// `url` is optional; if not given it will provide the global config\nexport function getServer(url) {\n if (url) {\n return {\n BASE_SERVER: url,\n SYNC_SERVER: joinURL(url, '/sync'),\n SIGNUP_SERVER: joinURL(url, '/account'),\n PLAID_SERVER: joinURL(url, '/plaid')\n };\n }\n return config;\n}\n","import Spreadsheet from './spreadsheet/spreadsheet';\nimport * as prefs from './prefs';\nimport { captureBreadcrumb } from '../platform/exceptions';\nimport * as sqlite from '../platform/server/sqlite';\nimport { sheetForMonth } from '../shared/months';\nimport Platform from './platform';\nconst { resolveName } = require('./spreadsheet/util');\n\nlet globalSheet, globalOnChange;\nlet globalCacheDb;\n\nexport function get() {\n return globalSheet;\n}\n\nasync function updateSpreadsheetCache(rawDb, names) {\n await sqlite.transaction(rawDb, () => {\n names.forEach(name => {\n const node = globalSheet._getNode(name);\n\n // Don't cache query nodes yet\n if (node.sql == null) {\n sqlite.runQuery(\n rawDb,\n 'INSERT OR REPLACE INTO kvcache (key, value) VALUES (?, ?)',\n [name, JSON.stringify(node.value)]\n );\n }\n });\n });\n}\n\nfunction setCacheStatus(mainDb, cacheDb, { clean }) {\n if (clean) {\n // Generate random number and stick in both places\n let num = Math.random() * 10000000;\n sqlite.runQuery(\n cacheDb,\n 'INSERT OR REPLACE INTO kvcache_key (id, key) VALUES (1, ?)',\n [num]\n );\n\n if (mainDb) {\n sqlite.runQuery(\n mainDb,\n 'INSERT OR REPLACE INTO kvcache_key (id, key) VALUES (1, ?)',\n [num]\n );\n }\n } else {\n sqlite.runQuery(cacheDb, 'DELETE FROM kvcache_key');\n }\n}\n\nfunction isCacheDirty(mainDb, cacheDb) {\n let rows = sqlite.runQuery(\n cacheDb,\n 'SELECT key FROM kvcache_key WHERE id = 1',\n [],\n true\n );\n let num = rows.length === 0 ? null : rows[0].key;\n\n if (num == null) {\n return true;\n }\n\n if (mainDb) {\n let rows = sqlite.runQuery(\n mainDb,\n 'SELECT key FROM kvcache_key WHERE id = 1',\n [],\n true\n );\n if (rows.length === 0 || rows[0].key !== num) {\n return true;\n }\n }\n\n // Always also check if there is anything in `kvcache`. We ask for one item;\n // if we didn't get back anything it's empty so there is no cache\n rows = sqlite.runQuery(cacheDb, 'SELECT * FROM kvcache LIMIT 1', [], true);\n return rows.length === 0;\n}\n\nexport async function loadSpreadsheet(db, onSheetChange) {\n let cacheEnabled = !global.__TESTING__;\n let mainDb = db.getDatabase();\n let cacheDb;\n\n if (Platform.isDesktop && cacheEnabled) {\n // Desktop apps use a separate database for the cache. This is because it is\n // much more likely to directly work with files on desktop, and this makes\n // it a lot clearer what the true filesize of the main db is (and avoid\n // copying the cache data around).\n let cachePath = db.getDatabasePath().replace(/db\\.sqlite$/, 'cache.sqlite');\n globalCacheDb = cacheDb = sqlite.openDatabase(cachePath);\n\n sqlite.execQuery(\n cacheDb,\n `\n CREATE TABLE IF NOT EXISTS kvcache (key TEXT PRIMARY KEY, value TEXT);\n CREATE TABLE IF NOT EXISTS kvcache_key (id INTEGER PRIMARY KEY, key REAL)\n `\n );\n } else {\n // All other platforms use the same database for cache\n cacheDb = mainDb;\n }\n\n let sheet;\n if (cacheEnabled) {\n sheet = new Spreadsheet(\n updateSpreadsheetCache.bind(null, cacheDb),\n setCacheStatus.bind(null, mainDb, cacheDb)\n );\n } else {\n sheet = new Spreadsheet();\n }\n\n captureBreadcrumb({\n message: 'loading spreaadsheet',\n category: 'server'\n });\n\n globalSheet = sheet;\n globalOnChange = onSheetChange;\n\n if (onSheetChange) {\n sheet.addEventListener('change', onSheetChange);\n }\n\n if (cacheEnabled && !isCacheDirty(mainDb, cacheDb)) {\n let cachedRows = await sqlite.runQuery(\n cacheDb,\n 'SELECT * FROM kvcache',\n [],\n true\n );\n console.log(`Loaded spreadsheet from cache (${cachedRows.length} items)`);\n\n for (let row of cachedRows) {\n let parsed = JSON.parse(row.value);\n sheet.load(row.key, parsed);\n }\n } else {\n console.log('Loading fresh spreadsheet');\n await loadUserBudgets(db);\n }\n\n captureBreadcrumb({\n message: 'loaded spreaadsheet',\n category: 'server'\n });\n\n return sheet;\n}\n\nexport function unloadSpreadsheet() {\n if (globalSheet) {\n // TODO: Should wait for the sheet to finish\n globalSheet.unload();\n globalSheet = null;\n }\n\n if (globalCacheDb) {\n sqlite.closeDatabase(globalCacheDb);\n globalCacheDb = null;\n }\n}\n\nexport async function reloadSpreadsheet(db) {\n if (globalSheet) {\n unloadSpreadsheet();\n return loadSpreadsheet(db, globalOnChange);\n }\n}\n\nexport async function loadUserBudgets(db) {\n let sheet = globalSheet;\n\n // TODO: Clear out the cache here so make sure future loads of the app\n // don't load any extra values that aren't set here\n\n let { budgetType } = prefs.getPrefs() || {};\n\n let table = budgetType === 'report' ? 'reflect_budgets' : 'zero_budgets';\n let budgets = await db.all(`\n SELECT * FROM ${table} b\n LEFT JOIN categories c ON c.id = b.category\n WHERE c.tombstone = 0\n `);\n\n sheet.startTransaction();\n\n // Load all the budget amounts and carryover values\n for (let budget of budgets) {\n if (budget.month && budget.category) {\n let sheetName = `budget${budget.month}`;\n sheet.set(`${sheetName}!budget-${budget.category}`, budget.amount);\n sheet.set(\n `${sheetName}!carryover-${budget.category}`,\n budget.carryover === 1 ? true : false\n );\n }\n }\n\n // For zero-based budgets, load the buffered amounts\n if (budgetType !== 'report') {\n let budgetMonths = await db.all('SELECT * FROM zero_budget_months');\n for (let budgetMonth of budgetMonths) {\n let sheetName = sheetForMonth(budgetMonth.id);\n sheet.set(`${sheetName}!buffered`, budgetMonth.buffered);\n }\n }\n\n sheet.endTransaction();\n}\n\nexport function getCell(sheet, name) {\n return globalSheet._getNode(resolveName(sheet, name));\n}\n\nexport function getCellValue(sheet, name) {\n return globalSheet.getValue(resolveName(sheet, name));\n}\n\nexport function startTransaction() {\n if (globalSheet) {\n globalSheet.startTransaction();\n }\n}\n\nexport function endTransaction() {\n if (globalSheet) {\n globalSheet.endTransaction();\n }\n}\n\nexport function waitOnSpreadsheet() {\n return new Promise(resolve => {\n if (globalSheet) {\n globalSheet.onFinish(resolve);\n } else {\n resolve();\n }\n });\n}\n","function first(arr) {\n return arr[0];\n}\n\nfunction firstValue(arr) {\n const keys = Object.keys(arr[0]);\n return arr[0][keys[0]];\n}\n\nfunction number(v) {\n if (typeof v === 'number') {\n return v;\n } else if (typeof v === 'string') {\n const parsed = parseFloat(v);\n if (isNaN(parsed)) {\n return 0;\n }\n return parsed;\n }\n\n return 0;\n}\n\nfunction min(x, y) {\n return Math.min(x, y);\n}\n\nfunction max(x, y) {\n return Math.max(x, y);\n}\n\nmodule.exports = {\n first,\n firstValue,\n number,\n min,\n max\n};\n","function Graph(serialized) {\n var graph = {\n addNode,\n removeNode,\n adjacent,\n adjacentIncoming,\n addEdge,\n removeEdge,\n removeIncomingEdges,\n topologicalSort,\n generateDOT,\n getEdges\n };\n\n var edges = new Map();\n var incomingEdges = new Map();\n\n function getEdges() {\n return { edges, incomingEdges };\n }\n\n function addNode(node) {\n edges.set(node, adjacent(node));\n incomingEdges.set(node, adjacentIncoming(node));\n return graph;\n }\n\n function removeIncomingEdges(node) {\n const incoming = adjacentIncoming(node);\n incomingEdges.set(node, new Set());\n\n let iter = incoming.values();\n let cur = iter.next();\n while (!cur.done) {\n removeEdge(cur.value, node);\n cur = iter.next();\n }\n }\n\n function removeNode(node) {\n removeIncomingEdges(node);\n edges.delete(node);\n incomingEdges.delete(node);\n }\n\n function adjacent(node) {\n return edges.get(node) || new Set();\n }\n\n function adjacentIncoming(node) {\n return incomingEdges.get(node) || new Set();\n }\n\n // Adds an edge from node u to node v.\n // Implicitly adds the nodes if they were not already added.\n function addEdge(node1, node2) {\n addNode(node1);\n addNode(node2);\n adjacent(node1).add(node2);\n adjacentIncoming(node2).add(node1);\n return graph;\n }\n\n // Removes the edge from node u to node v.\n // Does not remove the nodes.\n // Does nothing if the edge does not exist.\n function removeEdge(node1, node2) {\n if (edges.has(node1)) {\n adjacent(node1).delete(node2);\n }\n if (incomingEdges.has(node2)) {\n adjacentIncoming(node2).delete(node1);\n }\n return graph;\n }\n\n function topologicalSortUntil(name, visited, sorted) {\n visited.add(name);\n\n let iter = adjacent(name).values();\n let cur = iter.next();\n while (!cur.done) {\n if (!visited.has(cur.value)) {\n topologicalSortUntil(cur.value, visited, sorted);\n }\n cur = iter.next();\n }\n\n sorted.unshift(name);\n }\n\n function topologicalSort(sourceNodes) {\n const visited = new Set();\n const sorted = [];\n\n sourceNodes.forEach(name => {\n if (!visited.has(name)) {\n topologicalSortUntil(name, visited, sorted);\n }\n });\n\n return sorted;\n }\n\n function generateDOT() {\n let edgeStrings = [];\n edges.forEach(function(adj, edge) {\n if (adj.length !== 0) {\n edgeStrings.push(`${edge} -> {${adj.join(',')}}`);\n }\n });\n\n return `\n digraph G {\n ${edgeStrings.join('\\n').replace(/!/g, '_')}\n }\n `;\n }\n\n return graph;\n}\n\nmodule.exports = Graph;\n","import mitt from 'mitt';\nimport { schema, schemaConfig } from '../aql/schema';\nimport { compileQuery } from '../aql/compiler';\nimport { runCompiledQuery } from '../aql/schema/run-query';\n\nconst Graph = require('./graph-data-structure');\nconst { unresolveName, resolveName } = require('./util');\n\nexport default class Spreadsheet {\n constructor(saveCache, setCacheStatus) {\n this.graph = new Graph();\n this.nodes = new Map();\n this.transactionDepth = 0;\n this.saveCache = saveCache;\n this.setCacheStatus = setCacheStatus;\n this.dirtyCells = [];\n this.computeQueue = [];\n this.events = mitt();\n this._meta = {\n createdMonths: new Set()\n };\n }\n\n meta() {\n return this._meta;\n }\n\n setMeta(meta) {\n this._meta = meta;\n }\n\n // Spreadsheet interface\n\n _getNode(name) {\n const { sheet } = unresolveName(name);\n\n if (!this.nodes.has(name)) {\n this.nodes.set(name, {\n name,\n expr: null,\n value: null,\n sheet: sheet\n });\n }\n return this.nodes.get(name);\n }\n\n getNode(name) {\n return this._getNode(name);\n }\n\n hasCell(name) {\n return this.nodes.has(name);\n }\n\n add(name, expr, value) {\n this.set(name, expr);\n }\n\n getNodes() {\n return this.nodes;\n }\n\n serialize() {\n return {\n graph: this.graph.getEdges(),\n nodes: [...this.nodes.entries()]\n };\n }\n\n transaction(func) {\n this.startTransaction();\n try {\n func();\n } catch (e) {\n console.log(e);\n }\n return this.endTransaction();\n }\n\n startTransaction() {\n this.transactionDepth++;\n }\n\n endTransaction() {\n this.transactionDepth--;\n\n if (this.transactionDepth === 0) {\n const cells = this.dirtyCells;\n this.dirtyCells = [];\n\n this.queueComputation(this.graph.topologicalSort(cells));\n }\n\n return [];\n }\n\n queueComputation(cellNames) {\n // TODO: Formally write out the different cases when the existing\n // queue is not empty. There should be cases where we can easily\n // optimize this by skipping computations if we know they are\n // going to be computed again. The hard thing is to ensure that\n // the order of computations stays correct\n\n this.computeQueue = this.computeQueue.concat(cellNames);\n\n // Begin running on the next tick so we guarantee that it doesn't finish\n // within the same tick. Since some computations are async, this makes it\n // consistent (otherwise it would only sometimes finish sync)\n Promise.resolve().then(() => {\n if (!this.running) {\n this.runComputations();\n }\n });\n }\n\n runComputations(idx = 0) {\n this.running = true;\n\n while (idx < this.computeQueue.length) {\n let name = this.computeQueue[idx];\n let node;\n let result;\n\n try {\n node = this.getNode(name);\n\n if (node._run) {\n let args = node._dependencies.map(dep => {\n return this.getNode(dep).value;\n });\n\n result = node._run(...args);\n\n if (result instanceof Promise) {\n console.warn(\n 'dynamic cell returned a promise! this is discouraged because errors are not handled properly'\n );\n }\n } else if (node.sql) {\n result = runCompiledQuery(\n node.query,\n node.sql.sqlPieces,\n node.sql.state\n );\n } else {\n idx++;\n continue;\n }\n } catch (e) {\n console.log('Error while evaluating ' + name + ':', e);\n // If an error happens, bail on the rest of the computations\n this.running = false;\n this.computeQueue = [];\n return;\n }\n\n if (result instanceof Promise) {\n // When the cell is finished computing, finish computing the\n // rest\n result.then(\n value => {\n node.value = value;\n this.runComputations(idx + 1);\n },\n err => {\n // TODO: use captureException here\n console.warn(`Failed running ${node.name}!`, err);\n this.runComputations(idx + 1);\n }\n );\n\n return;\n } else {\n node.value = result;\n }\n\n idx++;\n }\n\n // If everything computed in one loop (no async operations) notify\n // the user and empty the queue\n if (idx === this.computeQueue.length) {\n this.events.emit('change', { names: this.computeQueue });\n\n // Cache the updated cells\n if (this.saveCache) {\n this.saveCache(this.computeQueue);\n }\n this.markCacheSafe();\n\n this.running = false;\n this.computeQueue = [];\n }\n }\n\n markCacheSafe() {\n if (!this.cacheBarrier) {\n if (this.setCacheStatus) {\n this.setCacheStatus({ clean: true });\n }\n }\n }\n\n markCacheDirty() {\n if (this.setCacheStatus) {\n this.setCacheStatus({ clean: false });\n }\n }\n\n startCacheBarrier() {\n this.cacheBarrier = true;\n this.markCacheDirty();\n }\n\n endCacheBarrier() {\n this.cacheBarrier = false;\n\n let pendingChange = this.running || this.computeQueue.length > 0;\n if (!pendingChange) {\n this.markCacheSafe();\n }\n }\n\n addEventListener(name, func) {\n this.events.on(name, func);\n return () => this.events.off(name, func);\n }\n\n onFinish(func) {\n if (this.transactionDepth !== 0) {\n throw new Error(\n 'onFinish called while inside a spreadsheet transaction. This is not allowed as it will lead to race conditions'\n );\n }\n\n if (!this.running && this.computeQueue.length === 0) {\n func([]);\n // The remove function does nothing\n return () => {};\n }\n\n let remove = this.addEventListener('change', (...args) => {\n remove();\n return func(...args);\n });\n return remove;\n }\n\n unload() {\n this.events.all.clear();\n }\n\n getValue(name) {\n return this.getNode(name).value;\n }\n\n getExpr(name) {\n return this.getNode(name).expr;\n }\n\n getCellValue(sheet, name) {\n return this.getNode(resolveName(sheet, name)).value;\n }\n\n getCellExpr(sheet, name) {\n return this.getNode(resolveName(sheet, name)).expr;\n }\n\n getCellValueLoose(sheetName, cellName) {\n let name = resolveName(sheetName, cellName);\n if (this.nodes.has(name)) {\n return this.getNode(name).value;\n }\n return null;\n }\n\n bootup(onReady) {\n this.onFinish(() => {\n onReady();\n });\n }\n\n load(name, value) {\n const node = this._getNode(name);\n node.expr = value;\n node.value = value;\n }\n\n create(name, value) {\n return this.transaction(() => {\n const node = this._getNode(name);\n node.expr = value;\n node.value = value;\n this._markDirty(name);\n });\n }\n\n set(name, value) {\n this.create(name, value);\n }\n\n recompute(name) {\n this.transaction(() => {\n this.dirtyCells.push(name);\n });\n }\n\n recomputeAll() {\n // Recompute everything!\n this.transaction(() => {\n this.dirtyCells = [...this.nodes.keys()];\n });\n }\n\n createQuery(sheetName, cellName, query) {\n let name = resolveName(sheetName, cellName);\n let node = this._getNode(name);\n\n if (node.query !== query) {\n node.query = query;\n let { sqlPieces, state } = compileQuery(node.query, schema, schemaConfig);\n node.sql = { sqlPieces, state };\n\n this.transaction(() => {\n this._markDirty(name);\n });\n }\n }\n\n createStatic(sheetName, cellName, initialValue) {\n let name = resolveName(sheetName, cellName);\n let exists = this.nodes.has(name);\n if (!exists) {\n this.create(name, initialValue);\n }\n }\n\n createDynamic(\n sheetName,\n cellName,\n { dependencies = [], run, initialValue, refresh }\n ) {\n let name = resolveName(sheetName, cellName);\n let node = this._getNode(name);\n\n if (node.dynamic) {\n // If it already exists, do nothing\n return;\n }\n\n node.dynamic = true;\n node._run = run;\n\n dependencies = dependencies.map(dep => {\n let resolved;\n if (!unresolveName(dep).sheet) {\n resolved = resolveName(sheetName, dep);\n } else {\n resolved = dep;\n }\n\n return resolved;\n });\n\n node._dependencies = dependencies;\n\n // TODO: diff these\n this.graph.removeIncomingEdges(name);\n dependencies.forEach(dep => {\n this.graph.addEdge(dep, name);\n });\n\n if (node.value == null || refresh) {\n this.transaction(() => {\n node.value = initialValue;\n this._markDirty(name);\n });\n }\n }\n\n clearSheet(sheetName) {\n for (let [name, node] of this.nodes.entries()) {\n if (node.sheet === sheetName) {\n this.nodes.delete(name);\n }\n }\n }\n\n voidCell(sheetName, name, voidValue = null) {\n let node = this.getNode(resolveName(sheetName, name));\n node._run = null;\n node.dynamic = false;\n node.value = voidValue;\n }\n\n deleteCell(sheetName, name) {\n this.voidCell(sheetName, name);\n this.nodes.delete(resolveName(sheetName, name));\n }\n\n addDependencies(sheetName, cellName, deps) {\n let name = resolveName(sheetName, cellName);\n\n deps = deps.map(dep => {\n if (!unresolveName(dep).sheet) {\n return resolveName(sheetName, dep);\n }\n return dep;\n });\n\n let node = this.getNode(name);\n let newDeps = deps.filter(\n dep => (node._dependencies || []).indexOf(dep) === -1\n );\n\n if (newDeps.length > 0) {\n node._dependencies = (node._dependencies || []).concat(newDeps);\n newDeps.forEach(dep => {\n this.graph.addEdge(dep, name);\n });\n this.recompute(name);\n }\n }\n\n removeDependencies(sheetName, cellName, deps) {\n let name = resolveName(sheetName, cellName);\n\n deps = deps.map(dep => {\n if (!unresolveName(dep).sheet) {\n return resolveName(sheetName, dep);\n }\n return dep;\n });\n\n let node = this.getNode(name);\n\n node._dependencies = (node._dependencies || []).filter(\n dep => deps.indexOf(dep) === -1\n );\n\n deps.forEach(dep => {\n this.graph.removeEdge(dep, name);\n });\n this.recompute(name);\n }\n\n _markDirty(name) {\n this.dirtyCells.push(name);\n }\n\n triggerDatabaseChanges(oldValues, newValues) {\n let tables = new Set([...oldValues.keys(), ...newValues.keys()]);\n\n this.startTransaction();\n // TODO: Create an index of deps so we don't have to iterate\n // across all nodes\n this.nodes.forEach(node => {\n if (\n node.sql &&\n node.sql.state.dependencies.some(dep => tables.has(dep))\n ) {\n this._markDirty(node.name);\n }\n });\n this.endTransaction();\n }\n}\n","function unresolveName(name) {\n let idx = name.indexOf('!');\n if (idx !== -1) {\n return {\n sheet: name.slice(0, idx),\n name: name.slice(idx + 1)\n };\n }\n return { sheet: null, name };\n}\n\nfunction resolveName(sheet, name) {\n return sheet + '!' + name;\n}\n\nfunction resolveNamesAsObjects(sheets) {\n const cells = {};\n Object.keys(sheets).forEach(sheetName => {\n const sheet = sheets[sheetName];\n\n Object.keys(sheet).forEach(name => {\n const expr = sheet[name];\n cells[resolveName(sheetName, name)] = expr;\n });\n });\n return cells;\n}\n\nfunction resolveNamesAsArrays(sheets) {\n const cells = [];\n Object.keys(sheets).forEach(sheetName => {\n const sheet = sheets[sheetName];\n\n sheet.forEach(name => {\n const expr = sheet[name];\n cells.push(resolveName(sheetName, name));\n });\n });\n return cells;\n}\n\nmodule.exports = {\n unresolveName,\n resolveName,\n resolveNamesAsObjects,\n resolveNamesAsArrays\n};\n","import encryption from '../encryption';\nimport * as prefs from '../prefs';\nlet { SyncError } = require('../errors');\nlet SyncPb = require('./proto/sync_pb');\n\nfunction coerceBuffer(value) {\n // The web encryption APIs give us back raw Uint8Array... but our\n // encryption code assumes we can work with it as a buffer. This is\n // a leaky abstraction and ideally the our abstraction over the web\n // encryption APIs should do this.\n if (!Buffer.isBuffer(value)) {\n return Buffer.from(value);\n }\n return value;\n}\n\nexport async function encode(groupId, fileId, since, messages) {\n let { encryptKeyId } = prefs.getPrefs();\n let requestPb = new SyncPb.SyncRequest();\n\n for (let i = 0; i < messages.length; i++) {\n let msg = messages[i];\n let envelopePb = new SyncPb.MessageEnvelope();\n envelopePb.setTimestamp(msg.timestamp);\n\n let messagePb = new SyncPb.Message();\n messagePb.setDataset(msg.dataset);\n messagePb.setRow(msg.row);\n messagePb.setColumn(msg.column);\n messagePb.setValue(msg.value);\n let binaryMsg = messagePb.serializeBinary();\n\n if (encryptKeyId) {\n let encrypted = new SyncPb.EncryptedData();\n\n let result;\n try {\n result = await encryption.encrypt(binaryMsg, encryptKeyId);\n } catch (e) {\n throw new SyncError('encrypt-failure', {\n isMissingKey: e.message === 'missing-key'\n });\n }\n\n encrypted.setData(result.value);\n encrypted.setIv(Buffer.from(result.meta.iv, 'base64'));\n encrypted.setAuthtag(Buffer.from(result.meta.authTag, 'base64'));\n\n envelopePb.setContent(encrypted.serializeBinary());\n envelopePb.setIsencrypted(true);\n } else {\n envelopePb.setContent(binaryMsg);\n }\n\n requestPb.addMessages(envelopePb);\n }\n\n requestPb.setGroupid(groupId);\n requestPb.setFileid(fileId);\n requestPb.setKeyid(encryptKeyId);\n requestPb.setSince(since);\n\n return requestPb.serializeBinary();\n}\n\nexport async function decode(data) {\n let { encryptKeyId } = prefs.getPrefs();\n\n let responsePb = SyncPb.SyncResponse.deserializeBinary(data);\n let merkle = JSON.parse(responsePb.getMerkle());\n let list = responsePb.getMessagesList();\n let messages = [];\n\n for (let i = 0; i < list.length; i++) {\n let envelopePb = list[i];\n let timestamp = envelopePb.getTimestamp();\n let encrypted = envelopePb.getIsencrypted();\n let msg;\n\n if (encrypted) {\n let binary = SyncPb.EncryptedData.deserializeBinary(\n envelopePb.getContent()\n );\n\n let decrypted;\n try {\n decrypted = await encryption.decrypt(coerceBuffer(binary.getData()), {\n keyId: encryptKeyId,\n algorithm: 'aes-256-gcm',\n iv: coerceBuffer(binary.getIv()),\n authTag: coerceBuffer(binary.getAuthtag())\n });\n } catch (e) {\n console.log(e);\n throw new SyncError('decrypt-failure', {\n isMissingKey: e.message === 'missing-key'\n });\n }\n\n msg = SyncPb.Message.deserializeBinary(decrypted);\n } else {\n msg = SyncPb.Message.deserializeBinary(envelopePb.getContent());\n }\n\n messages.push({\n timestamp: timestamp,\n dataset: msg.getDataset(),\n row: msg.getRow(),\n column: msg.getColumn(),\n value: msg.getValue()\n });\n }\n\n return { messages, merkle };\n}\n","import { sequential, once } from '../../shared/async';\nimport * as perf from '../perf';\nimport * as prefs from '../prefs';\nimport app from '../main-app';\nimport asyncStorage from '../../platform/server/asyncStorage';\nimport { captureException } from '../../platform/exceptions';\nimport logger from '../../platform/server/log';\nimport { postBinary } from '../post';\nimport * as db from '../db';\nimport * as sheet from '../sheet';\nimport { triggerBudgetChanges, setType as setBudgetType } from '../budget/base';\nimport * as undo from '../undo';\nimport { runMutator } from '../mutators';\nimport { setIn, getIn } from '../../shared/util';\nimport Timestamp, {\n serializeClock,\n deserializeClock,\n getClock\n} from '../timestamp';\nimport * as merkle from '../merkle';\nimport * as encoder from './encoder';\nimport { getServer } from '../server-config';\nimport { rebuildMerkleHash } from './repair';\n\nconst { PostError, SyncError } = require('../errors');\nconst connection = require('../../platform/server/connection');\n\nlet FULL_SYNC_DELAY = 1000;\nlet SYNCING_MODE = 'enabled';\n\nexport function setSyncingMode(mode) {\n let prevMode = SYNCING_MODE;\n switch (mode) {\n case 'enabled':\n SYNCING_MODE = 'enabled';\n break;\n case 'offline':\n SYNCING_MODE = 'offline';\n break;\n case 'disabled':\n SYNCING_MODE = 'disabled';\n break;\n case 'import':\n SYNCING_MODE = 'import';\n break;\n default:\n throw new Error('setSyncingMode: invalid mode: ' + mode);\n }\n return prevMode;\n}\n\nexport function checkSyncingMode(mode) {\n switch (mode) {\n case 'enabled':\n return SYNCING_MODE === 'enabled' || SYNCING_MODE === 'offline';\n case 'disabled':\n return SYNCING_MODE === 'disabled' || SYNCING_MODE === 'import';\n case 'offline':\n return SYNCING_MODE === 'offline';\n case 'import':\n return SYNCING_MODE === 'import';\n default:\n throw new Error('checkSyncingMode: invalid mode: ' + mode);\n }\n}\n\nexport makeTestMessage from './make-test-message';\nexport resetSync from './reset';\nexport repairSync from './repair';\n\nfunction apply(msg, prev) {\n let { dataset, row, column, value } = msg;\n\n if (dataset === 'prefs') {\n // Do nothing, it doesn't exist in the db\n } else {\n try {\n let query;\n if (prev) {\n query = {\n sql: db.cache(`UPDATE ${dataset} SET ${column} = ? WHERE id = ?`),\n params: [value, row]\n };\n } else {\n query = {\n sql: db.cache(`INSERT INTO ${dataset} (id, ${column}) VALUES (?, ?)`),\n params: [row, value]\n };\n }\n\n db.runQuery(query.sql, query.params);\n } catch (e) {\n //console.log(e);\n throw new SyncError('invalid-schema');\n }\n }\n}\n\nasync function fetchAll(table, ids) {\n let results = [];\n\n // TODO: convert to `whereIn`\n\n for (let i = 0; i < ids.length; i += 500) {\n let partIds = ids.slice(i, i + 500);\n let sql;\n let column = `${table}.id`;\n\n // We have to provide *mapped* data so the spreadsheet works. The functions\n // which trigger budget changes based on data changes assumes data has been\n // mapped. The only mapped data that the budget is concerned about is\n // categories. This is kind of annoying, but we manually map it here\n if (table === 'transactions') {\n sql = `\n SELECT t.*, c.transferId AS category\n FROM transactions t\n LEFT JOIN category_mapping c ON c.id = t.category\n `;\n column = 't.id';\n } else {\n sql = `SELECT * FROM ${table}`;\n }\n\n sql += ` WHERE `;\n sql += partIds.map(id => `${column} = ?`).join(' OR ');\n\n try {\n let rows = await db.runQuery(sql, partIds, true);\n results = results.concat(rows);\n } catch (e) {\n throw new SyncError('invalid-schema');\n }\n }\n\n return results;\n}\n\nexport function serializeValue(value) {\n if (value === null) {\n return '0:';\n } else if (typeof value === 'number') {\n return 'N:' + value;\n } else if (typeof value === 'string') {\n return 'S:' + value;\n }\n\n throw new Error('Unserializable value type: ' + JSON.stringify(value));\n}\n\nexport function deserializeValue(value) {\n const type = value[0];\n switch (type) {\n case '0':\n return null;\n case 'N':\n return parseFloat(value.slice(2));\n case 'S':\n return value.slice(2);\n default:\n }\n\n throw new Error('Invalid type key for value: ' + value);\n}\n\nlet _syncListeners = [];\n\nexport function addSyncListener(func) {\n _syncListeners.push(func);\n\n return () => {\n _syncListeners = _syncListeners.filter(f => f !== func);\n };\n}\n\nasync function compareMessages(messages) {\n let newMessages = [];\n\n for (let i = 0; i < messages.length; i++) {\n let message = messages[i];\n let { dataset, row, column, timestamp } = message;\n let timestampStr = timestamp.toString();\n\n let res = db.runQuery(\n db.cache(\n 'SELECT timestamp FROM messages_crdt WHERE dataset = ? AND row = ? AND column = ? AND timestamp >= ?'\n ),\n [dataset, row, column, timestampStr],\n true\n );\n\n // Returned message is any one that is \"later\" than this message,\n // meaning if the result exists this message is an old one\n if (res.length === 0) {\n newMessages.push(message);\n } else if (res[0].timestamp !== timestampStr) {\n newMessages.push({ ...message, old: true });\n }\n }\n\n return newMessages;\n}\n\n// This is the fast path `apply` function when in \"import\" mode.\n// There's no need to run through the whole sync system when\n// importing, but **there is a caveat**: because we don't run sync\n// listeners importers should not rely on any functions that use any\n// projected state (like rules). We can't fire those because they\n// depend on having both old and new data which we don't quere here\nfunction applyMessagesForImport(messages) {\n db.transaction(() => {\n for (let i = 0; i < messages.length; i++) {\n let msg = messages[i];\n let { dataset, row, column, timestamp, value } = msg;\n\n if (!msg.old) {\n try {\n apply(msg);\n } catch (e) {\n apply(msg, true);\n }\n\n if (dataset === 'prefs') {\n throw new Error('Cannot set prefs while importing');\n }\n }\n }\n });\n}\n\nexport const applyMessages = sequential(async messages => {\n if (checkSyncingMode('import')) {\n return applyMessagesForImport(messages);\n } else if (checkSyncingMode('enabled')) {\n // Compare the messages with the existing crdt. This filters out\n // already applied messages and determines if a message is old or\n // not. An \"old\" message doesn't need to be applied, but it still\n // needs to be put into the merkle trie to maintain the hash.\n messages = await compareMessages(messages);\n }\n\n messages = [...messages].sort((m1, m2) => {\n let t1 = m1.timestamp ? m1.timestamp.toString() : '';\n let t2 = m2.timestamp ? m2.timestamp.toString() : '';\n if (t1 < t2) {\n return -1;\n } else if (t1 > t2) {\n return 1;\n }\n return 0;\n });\n\n let idsPerTable = {};\n messages.forEach(msg => {\n if (msg.dataset === 'prefs') {\n return;\n }\n\n if (idsPerTable[msg.dataset] == null) {\n idsPerTable[msg.dataset] = [];\n }\n idsPerTable[msg.dataset].push(msg.row);\n });\n\n async function fetchData() {\n let data = new Map();\n\n for (let table of Object.keys(idsPerTable)) {\n const rows = await fetchAll(table, idsPerTable[table]);\n\n for (let i = 0; i < rows.length; i++) {\n let row = rows[i];\n setIn(data, [table, row.id], row);\n }\n }\n\n return data;\n }\n\n let prefsToSet = {};\n let oldData = await fetchData();\n\n undo.appendMessages(messages, oldData);\n\n // It's important to not mutate the clock while processing the\n // messages. We only want to mutate it if the transaction succeeds.\n // The merkle variable will be updated while applying the messages and\n // we'll apply it afterwards.\n let clock;\n let currentMerkle;\n if (checkSyncingMode('enabled')) {\n clock = getClock();\n currentMerkle = clock.merkle;\n }\n\n if (sheet.get()) {\n sheet.get().startCacheBarrier();\n }\n\n // Now that we have all of the data, go through and apply the\n // messages carefully. This transaction is **crucial**: it\n // guarantees that everything is atomically committed to the\n // database, and if any part of it fails everything aborts and\n // nothing is changed. This is critical to maintain consistency. We\n // also avoid any side effects to in-memory objects, and apply them\n // after this succeeds.\n db.transaction(() => {\n let added = new Set();\n\n for (let i = 0; i < messages.length; i++) {\n let msg = messages[i];\n let { dataset, row, column, timestamp, value } = msg;\n\n if (!msg.old) {\n apply(msg, getIn(oldData, [dataset, row]) || added.has(dataset + row));\n\n if (dataset === 'prefs') {\n prefsToSet[row] = value;\n } else {\n // Keep track of which items have been added it in this sync\n // so it knows whether they already exist in the db or not. We\n // ignore any changes to the spreadsheet.\n added.add(dataset + row);\n }\n }\n\n if (checkSyncingMode('enabled')) {\n db.runQuery(\n db.cache(`INSERT INTO messages_crdt (timestamp, dataset, row, column, value)\n VALUES (?, ?, ?, ?, ?)`),\n [timestamp.toString(), dataset, row, column, serializeValue(value)]\n );\n\n currentMerkle = merkle.insert(currentMerkle, msg.timestamp);\n }\n }\n\n if (checkSyncingMode('enabled')) {\n currentMerkle = merkle.prune(currentMerkle);\n\n // Save the clock in the db first (queries might throw\n // exceptions)\n db.runQuery(\n db.cache(\n 'INSERT OR REPLACE INTO messages_clock (id, clock) VALUES (1, ?)'\n ),\n [serializeClock({ ...clock, merkle: currentMerkle })]\n );\n }\n });\n\n if (checkSyncingMode('enabled')) {\n // The transaction succeeded, so we can update in-memory objects\n // now. Update the in-memory clock.\n clock.merkle = currentMerkle;\n }\n\n // Save any synced prefs\n if (Object.keys(prefsToSet).length > 0) {\n prefs.savePrefs(prefsToSet, { avoidSync: true });\n\n if (prefsToSet.budgetType) {\n setBudgetType(prefsToSet.budgetType);\n }\n\n connection.send('prefs-updated');\n }\n\n let newData = await fetchData();\n\n // In testing, sometimes the spreadsheet isn't loaded, and that's ok\n if (sheet.get()) {\n // Need to clean up these APIs and make them consistent\n sheet.startTransaction();\n triggerBudgetChanges(oldData, newData);\n sheet.get().triggerDatabaseChanges(oldData, newData);\n sheet.endTransaction();\n\n // Allow the cache to be used in the future. At this point it's guaranteed\n // to be up-to-date because we are done mutating any other data\n sheet.get().endCacheBarrier();\n }\n\n _syncListeners.forEach(func => func(oldData, newData));\n\n let tables = getTablesFromMessages(messages.filter(msg => !msg.old));\n app.events.emit('sync', {\n type: 'applied',\n tables,\n data: newData,\n prevData: oldData\n });\n\n return messages;\n});\n\nexport function receiveMessages(messages) {\n messages.forEach(msg => {\n Timestamp.recv(msg.timestamp);\n });\n\n return runMutator(() => applyMessages(messages));\n}\n\nasync function _sendMessages(messages) {\n try {\n await applyMessages(messages);\n } catch (e) {\n if (e instanceof SyncError) {\n if (e.reason === 'invalid-schema') {\n // We know this message came from a local modification, and it\n // couldn't apply, which doesn't make any sense. Must be a bug\n // in the code. Send a specific error type for it for a custom\n // message.\n app.events.emit('sync', {\n type: 'error',\n subtype: 'apply-failure'\n });\n } else {\n app.events.emit('sync', { type: 'error' });\n }\n }\n\n throw e;\n }\n\n await scheduleFullSync();\n}\n\nlet IS_BATCHING = false;\nlet _BATCHED = [];\nexport async function batchMessages(func) {\n if (IS_BATCHING) {\n await func();\n return;\n }\n\n IS_BATCHING = true;\n let batched = [];\n\n try {\n await func();\n // TODO: if it fails, it shouldn't apply them?\n } finally {\n IS_BATCHING = false;\n batched = _BATCHED;\n _BATCHED = [];\n }\n\n if (batched.length > 0) {\n await _sendMessages(batched);\n }\n}\n\nexport async function sendMessages(messages) {\n if (IS_BATCHING) {\n _BATCHED = _BATCHED.concat(messages);\n } else {\n return _sendMessages(messages);\n }\n}\n\nexport function getMessagesSince(since) {\n return db.runQuery(\n 'SELECT timestamp, dataset, row, column, value FROM messages_crdt WHERE timestamp > ?',\n [since],\n true\n );\n}\n\nexport async function syncAndReceiveMessages(messages, since) {\n let localMessages = await getMessagesSince(since);\n await receiveMessages(\n messages.map(msg => ({\n ...msg,\n value: deserializeValue(msg.value),\n timestamp: Timestamp.parse(msg.timestamp)\n }))\n );\n return localMessages;\n}\n\nexport function clearFullSyncTimeout() {\n if (syncTimeout) {\n clearTimeout(syncTimeout);\n syncTimeout = null;\n }\n}\n\nlet syncTimeout = null;\nexport function scheduleFullSync() {\n clearFullSyncTimeout();\n\n if (checkSyncingMode('enabled') && !checkSyncingMode('offline')) {\n if (global.__TESTING__) {\n return fullSync().then(res => {\n if (res.error) {\n throw res.error;\n }\n return res;\n });\n } else {\n syncTimeout = setTimeout(fullSync, FULL_SYNC_DELAY);\n }\n }\n}\n\nfunction getTablesFromMessages(messages) {\n return messages.reduce((acc, message) => {\n let dataset =\n message.dataset === 'schedules_next_date' ? 'schedules' : message.dataset;\n\n if (!acc.includes(dataset)) {\n acc.push(dataset);\n }\n return acc;\n }, []);\n}\n\n// This is different than `fullSync` because it waits for the\n// spreadsheet to finish any processing. This is useful if we want to\n// perform a full sync and wait for everything to finish, usually if\n// you're doing an initial sync before working with a file.\nexport async function initialFullSync() {\n let result = await fullSync();\n if (!result.error) {\n // Make sure to wait for anything in the spreadsheet to process\n await sheet.waitOnSpreadsheet();\n }\n}\n\nexport const fullSync = once(async function() {\n app.events.emit('sync', { type: 'start' });\n let messages;\n\n try {\n messages = await _fullSync(null, 0, null);\n } catch (e) {\n console.log(e);\n\n if (e instanceof SyncError) {\n if (e.reason === 'out-of-sync') {\n captureException(e);\n\n app.events.emit('sync', {\n type: 'error',\n subtype: 'out-of-sync'\n });\n } else if (e.reason === 'invalid-schema') {\n app.events.emit('sync', {\n type: 'error',\n subtype: 'invalid-schema'\n });\n } else if (\n e.reason === 'decrypt-failure' ||\n e.reason === 'encrypt-failure'\n ) {\n app.events.emit('sync', {\n type: 'error',\n subtype: e.reason,\n meta: e.meta\n });\n } else if (e.reason === 'beta-version') {\n app.events.emit('sync', {\n type: 'error',\n subtype: e.reason\n });\n } else {\n app.events.emit('sync', { type: 'error' });\n }\n } else if (e instanceof PostError) {\n console.log(e);\n if (e.reason === 'unauthorized') {\n app.events.emit('sync', { type: 'unauthorized' });\n\n // Set the user into read-only mode\n asyncStorage.setItem('readOnly', 'true');\n } else if (e.reason === 'network-failure') {\n app.events.emit('sync', { type: 'error', subtype: 'network' });\n } else {\n app.events.emit('sync', { type: 'error', subtype: e.reason });\n }\n } else {\n captureException(e);\n // TODO: Send the message to the client and allow them to expand & view it\n app.events.emit('sync', { type: 'error' });\n }\n\n return { error: { message: e.message, reason: e.reason, meta: e.meta } };\n }\n\n let tables = getTablesFromMessages(messages);\n\n app.events.emit('sync', {\n type: 'success',\n tables,\n syncDisabled: checkSyncingMode('disabled')\n });\n return { messages };\n});\n\nasync function _fullSync(sinceTimestamp, count, prevDiffTime) {\n let { cloudFileId, groupId, lastSyncedTimestamp } = prefs.getPrefs() || {};\n\n clearFullSyncTimeout();\n\n if (checkSyncingMode('disabled') || checkSyncingMode('offline')) {\n return [];\n }\n\n // Snapshot the point at which we are currently syncing\n let currentTime = getClock().timestamp.toString();\n\n let since =\n sinceTimestamp ||\n lastSyncedTimestamp ||\n // Default to 5 minutes ago\n new Timestamp(Date.now() - 5 * 60 * 1000, 0, '0').toString();\n\n let messages = getMessagesSince(since);\n\n let userToken = await asyncStorage.getItem('user-token');\n\n logger.info(\n 'Syncing since',\n since,\n messages.length,\n '(attempt: ' + count + ')'\n );\n\n let buffer = await encoder.encode(groupId, cloudFileId, since, messages);\n\n // TODO: There a limit on how many messages we can send because of\n // the payload size. Right now it's at 20MB on the server. We should\n // check the worst case here and make multiple requests if it's\n // really large.\n let resBuffer = await postBinary(getServer().SYNC_SERVER + '/sync', buffer, {\n 'X-ACTUAL-TOKEN': userToken\n });\n\n // Abort if the file is either no longer loaded, the group id has\n // changed because of a sync reset\n if (!prefs.getPrefs() || prefs.getPrefs().groupId !== groupId) {\n return [];\n }\n\n let res = await encoder.decode(resBuffer);\n\n logger.info('Got messages from server', res.messages.length);\n\n let localTimeChanged = getClock().timestamp.toString() !== currentTime;\n\n // Apply the new messages\n let receivedMessages = [];\n if (res.messages.length > 0) {\n receivedMessages = await receiveMessages(\n res.messages.map(msg => ({\n ...msg,\n value: deserializeValue(msg.value),\n timestamp: Timestamp.parse(msg.timestamp)\n }))\n );\n }\n\n let diffTime = merkle.diff(res.merkle, getClock().merkle);\n let result = res.messages;\n\n if (diffTime !== null) {\n // This is a bit wonky, but we loop until we are in sync with the\n // server. While syncing, either the client or server could change\n // out from under us, so it might take a couple passes to\n // completely sync up. This is a check that stops the loop in case\n // we are corrupted and can't sync up. We try 10 times if we keep\n // getting the same diff time, and add a upper limit of 300 no\n // matter what (just to stop this from ever being an infinite\n // loop).\n //\n // It's slightly possible for the user to add more messages while we\n // are in `receiveMessages`, but `localTimeChanged` would still be\n // false. In that case, we don't reset the counter but it should be\n // very unlikely that this happens enough to hit the loop limit.\n\n if ((count >= 10 && diffTime === prevDiffTime) || count >= 100) {\n logger.info('SENT -------');\n logger.info(JSON.stringify(messages));\n logger.info('RECEIVED -------');\n logger.info(JSON.stringify(res.messages));\n\n let rebuiltMerkle = rebuildMerkleHash();\n\n console.log(\n count,\n 'messages:',\n messages.length,\n messages.length > 0 ? messages[0] : null,\n 'res.messages:',\n res.messages.length,\n res.messages.length > 0 ? res.messages[0] : null,\n 'clientId',\n getClock().timestamp.node(),\n 'groupId',\n groupId,\n 'diffTime:',\n diffTime,\n diffTime === prevDiffTime,\n 'local clock:',\n getClock().timestamp.toString(),\n getClock().merkle.hash,\n 'rebuilt hash:',\n rebuiltMerkle.numMessages,\n rebuiltMerkle.trie.hash,\n 'server hash:',\n res.merkle.hash,\n 'localTimeChanged:',\n localTimeChanged\n );\n\n if (rebuiltMerkle.trie.hash === res.merkle.hash) {\n // Rebuilding the merkle worked... but why?\n let clocks = await db.all('SELECT * FROM messages_clock');\n if (clocks.length !== 1) {\n console.log('Bad number of clocks:', clocks.length);\n }\n let hash = deserializeClock(clocks[0]).merkle.hash;\n console.log('Merkle hash in db:', hash);\n }\n\n throw new SyncError('out-of-sync');\n }\n\n receivedMessages = receivedMessages.concat(\n await _fullSync(\n new Timestamp(diffTime, 0, '0').toString(),\n // If something local changed while we were syncing, always\n // reset, token the counter. We never want to think syncing failed\n // because we tried to syncing many times and couldn't sync,\n // but it was because the user kept changing stuff in the\n // middle of syncing.\n localTimeChanged ? 0 : count + 1,\n diffTime\n )\n );\n } else {\n // All synced up, store the current time as a simple optimization\n // for the next sync\n await prefs.savePrefs({\n lastSyncedTimestamp: getClock().timestamp.toString()\n });\n }\n\n return receivedMessages;\n}\n","import encryption from '../encryption';\nlet SyncPb = require('./proto/sync_pb');\n\nasync function randomString() {\n return (await encryption.randomBytes(12)).toString();\n}\n\nexport default async function makeTestMessage(keyId) {\n let messagePb = new SyncPb.Message();\n messagePb.setDataset(await randomString());\n messagePb.setRow(await randomString());\n messagePb.setColumn(await randomString());\n messagePb.setValue(await randomString());\n let binaryMsg = messagePb.serializeBinary();\n\n return await encryption.encrypt(binaryMsg, keyId);\n}\n","import { addSyncListener, applyMessages } from './index';\nimport Timestamp from '../timestamp';\n\nfunction migrateParentIds(oldValues, newValues) {\n newValues.forEach((items, table) => {\n if (table === 'transactions') {\n let old = oldValues.get(table);\n let toApply = [];\n\n items.forEach(newValue => {\n if (\n newValue.isChild === 1 &&\n newValue.parent_id == null &&\n newValue.id.includes('/')\n ) {\n let parentId = newValue.id.split('/')[0];\n\n toApply.push({\n dataset: 'transactions',\n row: newValue.id,\n column: 'parent_id',\n value: parentId,\n timestamp: Timestamp.send()\n });\n }\n });\n\n if (toApply.length > 0) {\n applyMessages(toApply);\n }\n }\n });\n}\n\nlet _unlisten = null;\nexport function listen() {\n unlisten();\n _unlisten = addSyncListener(migrateParentIds);\n}\n\nexport function unlisten() {\n if (_unlisten) {\n _unlisten();\n _unlisten = null;\n }\n}\n","// source: sync.proto\n/**\n * @fileoverview\n * @enhanceable\n * @suppress {messageConventions} JS Compiler reports an error if a variable or\n * field starts with 'MSG_' and isn't a translatable message.\n * @public\n */\n// GENERATED CODE -- DO NOT EDIT!\n\nvar jspb = require('google-protobuf');\nvar goog = jspb;\nvar global = globalThis;\n\ngoog.exportSymbol('proto.EncryptedData', null, global);\ngoog.exportSymbol('proto.Message', null, global);\ngoog.exportSymbol('proto.MessageEnvelope', null, global);\ngoog.exportSymbol('proto.SyncRequest', null, global);\ngoog.exportSymbol('proto.SyncResponse', null, global);\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.EncryptedData = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.EncryptedData, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.EncryptedData.displayName = 'proto.EncryptedData';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.Message = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.Message, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.Message.displayName = 'proto.Message';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.MessageEnvelope = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.MessageEnvelope, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.MessageEnvelope.displayName = 'proto.MessageEnvelope';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.SyncRequest = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.SyncRequest.repeatedFields_, null);\n};\ngoog.inherits(proto.SyncRequest, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.SyncRequest.displayName = 'proto.SyncRequest';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.SyncResponse = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.SyncResponse.repeatedFields_, null);\n};\ngoog.inherits(proto.SyncResponse, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.SyncResponse.displayName = 'proto.SyncResponse';\n}\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.EncryptedData.prototype.toObject = function(opt_includeInstance) {\n return proto.EncryptedData.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.EncryptedData} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.EncryptedData.toObject = function(includeInstance, msg) {\n var f, obj = {\n iv: msg.getIv_asB64(),\n authtag: msg.getAuthtag_asB64(),\n data: msg.getData_asB64()\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.EncryptedData}\n */\nproto.EncryptedData.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.EncryptedData;\n return proto.EncryptedData.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.EncryptedData} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.EncryptedData}\n */\nproto.EncryptedData.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {!Uint8Array} */ (reader.readBytes());\n msg.setIv(value);\n break;\n case 2:\n var value = /** @type {!Uint8Array} */ (reader.readBytes());\n msg.setAuthtag(value);\n break;\n case 3:\n var value = /** @type {!Uint8Array} */ (reader.readBytes());\n msg.setData(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.EncryptedData.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.EncryptedData.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.EncryptedData} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.EncryptedData.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getIv_asU8();\n if (f.length > 0) {\n writer.writeBytes(\n 1,\n f\n );\n }\n f = message.getAuthtag_asU8();\n if (f.length > 0) {\n writer.writeBytes(\n 2,\n f\n );\n }\n f = message.getData_asU8();\n if (f.length > 0) {\n writer.writeBytes(\n 3,\n f\n );\n }\n};\n\n\n/**\n * optional bytes iv = 1;\n * @return {!(string|Uint8Array)}\n */\nproto.EncryptedData.prototype.getIv = function() {\n return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * optional bytes iv = 1;\n * This is a type-conversion wrapper around `getIv()`\n * @return {string}\n */\nproto.EncryptedData.prototype.getIv_asB64 = function() {\n return /** @type {string} */ (jspb.Message.bytesAsB64(\n this.getIv()));\n};\n\n\n/**\n * optional bytes iv = 1;\n * Note that Uint8Array is not supported on all browsers.\n * @see http://caniuse.com/Uint8Array\n * This is a type-conversion wrapper around `getIv()`\n * @return {!Uint8Array}\n */\nproto.EncryptedData.prototype.getIv_asU8 = function() {\n return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(\n this.getIv()));\n};\n\n\n/**\n * @param {!(string|Uint8Array)} value\n * @return {!proto.EncryptedData} returns this\n */\nproto.EncryptedData.prototype.setIv = function(value) {\n return jspb.Message.setProto3BytesField(this, 1, value);\n};\n\n\n/**\n * optional bytes authTag = 2;\n * @return {!(string|Uint8Array)}\n */\nproto.EncryptedData.prototype.getAuthtag = function() {\n return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * optional bytes authTag = 2;\n * This is a type-conversion wrapper around `getAuthtag()`\n * @return {string}\n */\nproto.EncryptedData.prototype.getAuthtag_asB64 = function() {\n return /** @type {string} */ (jspb.Message.bytesAsB64(\n this.getAuthtag()));\n};\n\n\n/**\n * optional bytes authTag = 2;\n * Note that Uint8Array is not supported on all browsers.\n * @see http://caniuse.com/Uint8Array\n * This is a type-conversion wrapper around `getAuthtag()`\n * @return {!Uint8Array}\n */\nproto.EncryptedData.prototype.getAuthtag_asU8 = function() {\n return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(\n this.getAuthtag()));\n};\n\n\n/**\n * @param {!(string|Uint8Array)} value\n * @return {!proto.EncryptedData} returns this\n */\nproto.EncryptedData.prototype.setAuthtag = function(value) {\n return jspb.Message.setProto3BytesField(this, 2, value);\n};\n\n\n/**\n * optional bytes data = 3;\n * @return {!(string|Uint8Array)}\n */\nproto.EncryptedData.prototype.getData = function() {\n return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * optional bytes data = 3;\n * This is a type-conversion wrapper around `getData()`\n * @return {string}\n */\nproto.EncryptedData.prototype.getData_asB64 = function() {\n return /** @type {string} */ (jspb.Message.bytesAsB64(\n this.getData()));\n};\n\n\n/**\n * optional bytes data = 3;\n * Note that Uint8Array is not supported on all browsers.\n * @see http://caniuse.com/Uint8Array\n * This is a type-conversion wrapper around `getData()`\n * @return {!Uint8Array}\n */\nproto.EncryptedData.prototype.getData_asU8 = function() {\n return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(\n this.getData()));\n};\n\n\n/**\n * @param {!(string|Uint8Array)} value\n * @return {!proto.EncryptedData} returns this\n */\nproto.EncryptedData.prototype.setData = function(value) {\n return jspb.Message.setProto3BytesField(this, 3, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.Message.prototype.toObject = function(opt_includeInstance) {\n return proto.Message.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.Message} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Message.toObject = function(includeInstance, msg) {\n var f, obj = {\n dataset: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n row: jspb.Message.getFieldWithDefault(msg, 2, \"\"),\n column: jspb.Message.getFieldWithDefault(msg, 3, \"\"),\n value: jspb.Message.getFieldWithDefault(msg, 4, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.Message}\n */\nproto.Message.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.Message;\n return proto.Message.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.Message} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.Message}\n */\nproto.Message.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setDataset(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setRow(value);\n break;\n case 3:\n var value = /** @type {string} */ (reader.readString());\n msg.setColumn(value);\n break;\n case 4:\n var value = /** @type {string} */ (reader.readString());\n msg.setValue(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.Message.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.Message.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.Message} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Message.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getDataset();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getRow();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n f = message.getColumn();\n if (f.length > 0) {\n writer.writeString(\n 3,\n f\n );\n }\n f = message.getValue();\n if (f.length > 0) {\n writer.writeString(\n 4,\n f\n );\n }\n};\n\n\n/**\n * optional string dataset = 1;\n * @return {string}\n */\nproto.Message.prototype.getDataset = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Message} returns this\n */\nproto.Message.prototype.setDataset = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional string row = 2;\n * @return {string}\n */\nproto.Message.prototype.getRow = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Message} returns this\n */\nproto.Message.prototype.setRow = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n/**\n * optional string column = 3;\n * @return {string}\n */\nproto.Message.prototype.getColumn = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Message} returns this\n */\nproto.Message.prototype.setColumn = function(value) {\n return jspb.Message.setProto3StringField(this, 3, value);\n};\n\n\n/**\n * optional string value = 4;\n * @return {string}\n */\nproto.Message.prototype.getValue = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Message} returns this\n */\nproto.Message.prototype.setValue = function(value) {\n return jspb.Message.setProto3StringField(this, 4, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.MessageEnvelope.prototype.toObject = function(opt_includeInstance) {\n return proto.MessageEnvelope.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.MessageEnvelope} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.MessageEnvelope.toObject = function(includeInstance, msg) {\n var f, obj = {\n timestamp: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n isencrypted: jspb.Message.getBooleanFieldWithDefault(msg, 2, false),\n content: msg.getContent_asB64()\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.MessageEnvelope}\n */\nproto.MessageEnvelope.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.MessageEnvelope;\n return proto.MessageEnvelope.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.MessageEnvelope} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.MessageEnvelope}\n */\nproto.MessageEnvelope.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setTimestamp(value);\n break;\n case 2:\n var value = /** @type {boolean} */ (reader.readBool());\n msg.setIsencrypted(value);\n break;\n case 3:\n var value = /** @type {!Uint8Array} */ (reader.readBytes());\n msg.setContent(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.MessageEnvelope.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.MessageEnvelope.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.MessageEnvelope} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.MessageEnvelope.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getTimestamp();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getIsencrypted();\n if (f) {\n writer.writeBool(\n 2,\n f\n );\n }\n f = message.getContent_asU8();\n if (f.length > 0) {\n writer.writeBytes(\n 3,\n f\n );\n }\n};\n\n\n/**\n * optional string timestamp = 1;\n * @return {string}\n */\nproto.MessageEnvelope.prototype.getTimestamp = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.MessageEnvelope} returns this\n */\nproto.MessageEnvelope.prototype.setTimestamp = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional bool isEncrypted = 2;\n * @return {boolean}\n */\nproto.MessageEnvelope.prototype.getIsencrypted = function() {\n return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false));\n};\n\n\n/**\n * @param {boolean} value\n * @return {!proto.MessageEnvelope} returns this\n */\nproto.MessageEnvelope.prototype.setIsencrypted = function(value) {\n return jspb.Message.setProto3BooleanField(this, 2, value);\n};\n\n\n/**\n * optional bytes content = 3;\n * @return {!(string|Uint8Array)}\n */\nproto.MessageEnvelope.prototype.getContent = function() {\n return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * optional bytes content = 3;\n * This is a type-conversion wrapper around `getContent()`\n * @return {string}\n */\nproto.MessageEnvelope.prototype.getContent_asB64 = function() {\n return /** @type {string} */ (jspb.Message.bytesAsB64(\n this.getContent()));\n};\n\n\n/**\n * optional bytes content = 3;\n * Note that Uint8Array is not supported on all browsers.\n * @see http://caniuse.com/Uint8Array\n * This is a type-conversion wrapper around `getContent()`\n * @return {!Uint8Array}\n */\nproto.MessageEnvelope.prototype.getContent_asU8 = function() {\n return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(\n this.getContent()));\n};\n\n\n/**\n * @param {!(string|Uint8Array)} value\n * @return {!proto.MessageEnvelope} returns this\n */\nproto.MessageEnvelope.prototype.setContent = function(value) {\n return jspb.Message.setProto3BytesField(this, 3, value);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array<number>}\n * @const\n */\nproto.SyncRequest.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.SyncRequest.prototype.toObject = function(opt_includeInstance) {\n return proto.SyncRequest.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.SyncRequest} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SyncRequest.toObject = function(includeInstance, msg) {\n var f, obj = {\n messagesList: jspb.Message.toObjectList(msg.getMessagesList(),\n proto.MessageEnvelope.toObject, includeInstance),\n fileid: jspb.Message.getFieldWithDefault(msg, 2, \"\"),\n groupid: jspb.Message.getFieldWithDefault(msg, 3, \"\"),\n keyid: jspb.Message.getFieldWithDefault(msg, 5, \"\"),\n since: jspb.Message.getFieldWithDefault(msg, 6, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.SyncRequest}\n */\nproto.SyncRequest.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.SyncRequest;\n return proto.SyncRequest.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.SyncRequest} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.SyncRequest}\n */\nproto.SyncRequest.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.MessageEnvelope;\n reader.readMessage(value,proto.MessageEnvelope.deserializeBinaryFromReader);\n msg.addMessages(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setFileid(value);\n break;\n case 3:\n var value = /** @type {string} */ (reader.readString());\n msg.setGroupid(value);\n break;\n case 5:\n var value = /** @type {string} */ (reader.readString());\n msg.setKeyid(value);\n break;\n case 6:\n var value = /** @type {string} */ (reader.readString());\n msg.setSince(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.SyncRequest.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.SyncRequest.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.SyncRequest} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SyncRequest.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getMessagesList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 1,\n f,\n proto.MessageEnvelope.serializeBinaryToWriter\n );\n }\n f = message.getFileid();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n f = message.getGroupid();\n if (f.length > 0) {\n writer.writeString(\n 3,\n f\n );\n }\n f = message.getKeyid();\n if (f.length > 0) {\n writer.writeString(\n 5,\n f\n );\n }\n f = message.getSince();\n if (f.length > 0) {\n writer.writeString(\n 6,\n f\n );\n }\n};\n\n\n/**\n * repeated MessageEnvelope messages = 1;\n * @return {!Array<!proto.MessageEnvelope>}\n */\nproto.SyncRequest.prototype.getMessagesList = function() {\n return /** @type{!Array<!proto.MessageEnvelope>} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.MessageEnvelope, 1));\n};\n\n\n/**\n * @param {!Array<!proto.MessageEnvelope>} value\n * @return {!proto.SyncRequest} returns this\n*/\nproto.SyncRequest.prototype.setMessagesList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.MessageEnvelope=} opt_value\n * @param {number=} opt_index\n * @return {!proto.MessageEnvelope}\n */\nproto.SyncRequest.prototype.addMessages = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.MessageEnvelope, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.clearMessagesList = function() {\n return this.setMessagesList([]);\n};\n\n\n/**\n * optional string fileId = 2;\n * @return {string}\n */\nproto.SyncRequest.prototype.getFileid = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.setFileid = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n/**\n * optional string groupId = 3;\n * @return {string}\n */\nproto.SyncRequest.prototype.getGroupid = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.setGroupid = function(value) {\n return jspb.Message.setProto3StringField(this, 3, value);\n};\n\n\n/**\n * optional string keyId = 5;\n * @return {string}\n */\nproto.SyncRequest.prototype.getKeyid = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.setKeyid = function(value) {\n return jspb.Message.setProto3StringField(this, 5, value);\n};\n\n\n/**\n * optional string since = 6;\n * @return {string}\n */\nproto.SyncRequest.prototype.getSince = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.setSince = function(value) {\n return jspb.Message.setProto3StringField(this, 6, value);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array<number>}\n * @const\n */\nproto.SyncResponse.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.SyncResponse.prototype.toObject = function(opt_includeInstance) {\n return proto.SyncResponse.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.SyncResponse} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SyncResponse.toObject = function(includeInstance, msg) {\n var f, obj = {\n messagesList: jspb.Message.toObjectList(msg.getMessagesList(),\n proto.MessageEnvelope.toObject, includeInstance),\n merkle: jspb.Message.getFieldWithDefault(msg, 2, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.SyncResponse}\n */\nproto.SyncResponse.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.SyncResponse;\n return proto.SyncResponse.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.SyncResponse} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.SyncResponse}\n */\nproto.SyncResponse.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.MessageEnvelope;\n reader.readMessage(value,proto.MessageEnvelope.deserializeBinaryFromReader);\n msg.addMessages(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setMerkle(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.SyncResponse.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.SyncResponse.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.SyncResponse} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SyncResponse.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getMessagesList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 1,\n f,\n proto.MessageEnvelope.serializeBinaryToWriter\n );\n }\n f = message.getMerkle();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n};\n\n\n/**\n * repeated MessageEnvelope messages = 1;\n * @return {!Array<!proto.MessageEnvelope>}\n */\nproto.SyncResponse.prototype.getMessagesList = function() {\n return /** @type{!Array<!proto.MessageEnvelope>} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.MessageEnvelope, 1));\n};\n\n\n/**\n * @param {!Array<!proto.MessageEnvelope>} value\n * @return {!proto.SyncResponse} returns this\n*/\nproto.SyncResponse.prototype.setMessagesList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.MessageEnvelope=} opt_value\n * @param {number=} opt_index\n * @return {!proto.MessageEnvelope}\n */\nproto.SyncResponse.prototype.addMessages = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.MessageEnvelope, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.SyncResponse} returns this\n */\nproto.SyncResponse.prototype.clearMessagesList = function() {\n return this.setMessagesList([]);\n};\n\n\n/**\n * optional string merkle = 2;\n * @return {string}\n */\nproto.SyncResponse.prototype.getMerkle = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncResponse} returns this\n */\nproto.SyncResponse.prototype.setMerkle = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\ngoog.object.extend(exports, proto);\n","import * as db from '../db';\nimport Timestamp, { serializeClock, getClock } from '../timestamp';\nimport * as merkle from '../merkle';\n\nexport function rebuildMerkleHash() {\n let rows = db.runQuery('SELECT timestamp FROM messages_crdt', [], true);\n let trie = {};\n\n for (let i = 0; i < rows.length; i++) {\n trie = merkle.insert(trie, Timestamp.parse(rows[i].timestamp));\n }\n\n return {\n numMessages: rows.length,\n trie: trie\n };\n}\n\nexport default async function repairSync() {\n let rebuilt = rebuildMerkleHash();\n let clock = getClock();\n\n // Save it locally\n clock.merkle = rebuilt.trie;\n\n // Persist it in the db\n db.runQuery(\n db.cache('INSERT OR REPLACE INTO messages_clock (id, clock) VALUES (1, ?)'),\n [serializeClock(clock)]\n );\n}\n","import * as cloudStorage from '../cloud-storage';\nimport * as db from '../db';\nimport * as prefs from '../prefs';\nimport asyncStorage from '../../platform/server/asyncStorage';\nimport { captureException } from '../../platform/exceptions';\nimport { runMutator } from '../mutators';\nconst connection = require('../../platform/server/connection');\n\nexport default async function resetSync(keyState) {\n if (!keyState) {\n // If we aren't resetting the key, make sure our key is up-to-date\n // so we don't accidentally upload a file encrypted with the wrong\n // key (or not encrypted at all)\n let { valid, error } = await cloudStorage.checkKey();\n if (error) {\n return { error };\n } else if (!valid) {\n return { error: { reason: 'file-has-new-key' } };\n }\n }\n\n let { error } = await cloudStorage.resetSyncState(keyState);\n if (error) {\n return { error };\n }\n\n await runMutator(async () => {\n // TOOD: We could automatically generate the list of tables to\n // cleanup by looking at the schema\n //\n // Be VERY careful here since we are bulk deleting data. It should\n // never delete any data that doesn't have `tombstone = 1`\n await db.execQuery(`\n DELETE FROM messages_crdt;\n DELETE FROM messages_clock;\n DELETE FROM transactions WHERE tombstone = 1;\n DELETE FROM accounts WHERE tombstone = 1;\n DELETE FROM payees WHERE tombstone = 1;\n DELETE FROM categories WHERE tombstone = 1;\n DELETE FROM category_groups WHERE tombstone = 1;\n DELETE FROM schedules WHERE tombstone = 1;\n DELETE FROM rules WHERE tombstone = 1;\n ANALYZE;\n VACUUM;\n `);\n await db.loadClock();\n });\n\n await prefs.savePrefs({\n groupId: null,\n lastSyncedTimestamp: null,\n lastUploaded: null\n });\n\n if (keyState) {\n let { key } = keyState;\n let { cloudFileId } = prefs.getPrefs();\n\n // The key has changed, we need to update our local data to\n // store the new key\n\n // Persist key in async storage\n let keys = JSON.parse((await asyncStorage.getItem(`encrypt-keys`)) || '{}');\n keys[cloudFileId] = key.serialize();\n await asyncStorage.setItem('encrypt-keys', JSON.stringify(keys));\n\n // Save the key id in prefs\n await prefs.savePrefs({ encryptKeyId: key.getId() });\n }\n\n // Finally, upload the file to make it the \"true\" version that all\n // other clients need to pull down to get back in sync\n try {\n await cloudStorage.upload();\n } catch (e) {\n if (e.reason) {\n return { error: e };\n }\n captureException(e);\n return { error: { reason: 'upload-failure' } };\n } finally {\n connection.send('prefs-updated');\n }\n\n return {};\n}\n","import murmurhash from 'murmurhash';\nconst uuid = require('../platform/uuid');\n\n/**\n * Hybrid Unique Logical Clock (HULC) timestamp generator\n *\n * Globally-unique, monotonic timestamps are generated from the\n * combination of the unreliable system time, a counter, and an\n * identifier for the current node (instance, machine, process, etc.).\n * These timestamps can accommodate clock stuttering (duplicate values),\n * regression, and node differences within the configured maximum drift.\n *\n * In order to generate timestamps locally or for transmission to another\n * node, use the send() method. For global causality, timestamps must\n * be included in each message processed by the system. Whenever a\n * message is received, its timestamp must be passed to the recv()\n * method.\n *\n * Timestamps serialize into a 46-character collatable string\n * example: 2015-04-24T22:23:42.123Z-1000-0123456789ABCDEF\n * example: 2015-04-24T22:23:42.123Z-1000-A219E7A71CC18912\n *\n * The 64-bit hybrid clock is based on the HLC specification,\n * http://www.cse.buffalo.edu/tech-reports/2014-04.pdf\n */\n\n// A mutable global clock\nlet clock = null;\n\nexport function setClock(clock_) {\n clock = clock_;\n}\n\nexport function getClock() {\n return clock;\n}\n\nexport function makeClock(timestamp, merkle = {}) {\n return { timestamp: MutableTimestamp.from(timestamp), merkle };\n}\n\nexport function serializeClock(clock) {\n return JSON.stringify({\n timestamp: clock.timestamp.toString(),\n merkle: clock.merkle\n });\n}\n\nexport function deserializeClock(clock) {\n let data;\n try {\n data = JSON.parse(clock);\n } catch (e) {\n data = {\n timestamp: '1970-01-01T00:00:00.000Z-0000-' + makeClientId(),\n merkle: {}\n };\n }\n\n return {\n timestamp: MutableTimestamp.from(Timestamp.parse(data.timestamp)),\n merkle: data.merkle\n };\n}\n\nexport function makeClientId() {\n return uuid\n .v4Sync()\n .replace(/-/g, '')\n .slice(-16);\n}\n\nvar config = {\n // Allow 5 minutes of clock drift\n maxDrift: 5 * 60 * 1000\n};\n\n/**\n * timestamp instance class\n */\nexport default class Timestamp {\n constructor(millis, counter, node) {\n this._state = {\n millis: millis,\n counter: counter,\n node: node\n };\n }\n\n valueOf() {\n return this.toString();\n }\n\n toString() {\n return [\n new Date(this.millis()).toISOString(),\n (\n '0000' +\n this.counter()\n .toString(16)\n .toUpperCase()\n ).slice(-4),\n ('0000000000000000' + this.node()).slice(-16)\n ].join('-');\n }\n\n millis() {\n return this._state.millis;\n }\n\n counter() {\n return this._state.counter;\n }\n\n node() {\n return this._state.node;\n }\n\n hash() {\n return murmurhash.v3(this.toString());\n }\n}\n\nexport class MutableTimestamp extends Timestamp {\n setMillis(n) {\n this._state.millis = n;\n }\n\n setCounter(n) {\n this._state.counter = n;\n }\n\n setNode(n) {\n this._state.node = n;\n }\n}\n\nMutableTimestamp.from = timestamp => {\n return new MutableTimestamp(\n timestamp.millis(),\n timestamp.counter(),\n timestamp.node()\n );\n};\n\n// Timestamp generator initialization\n// * sets the node ID to an arbitrary value\n// * useful for mocking/unit testing\nTimestamp.init = function(options = {}) {\n if (options.maxDrift) {\n config.maxDrift = options.maxDrift;\n }\n\n setClock(\n makeClock(\n new Timestamp(\n 0,\n 0,\n options.node\n ? ('0000000000000000' + options.node).toString().slice(-16)\n : ''\n )\n ),\n null\n );\n};\n\n/**\n * Timestamp send. Generates a unique, monotonic timestamp suitable\n * for transmission to another system in string format\n */\nTimestamp.send = function() {\n if (!clock) {\n return null;\n }\n\n // retrieve the local wall time\n var phys = Date.now();\n\n // unpack the clock.timestamp logical time and counter\n var lOld = clock.timestamp.millis();\n var cOld = clock.timestamp.counter();\n\n // calculate the next logical time and counter\n // * ensure that the logical time never goes backward\n // * increment the counter if phys time does not advance\n var lNew = Math.max(lOld, phys);\n var cNew = lOld === lNew ? cOld + 1 : 0;\n\n // check the result for drift and counter overflow\n if (lNew - phys > config.maxDrift) {\n throw new Timestamp.ClockDriftError(lNew, phys, config.maxDrift);\n }\n if (cNew > 65535) {\n throw new Timestamp.OverflowError();\n }\n\n // repack the logical time/counter\n clock.timestamp.setMillis(lNew);\n clock.timestamp.setCounter(cNew);\n\n return new Timestamp(\n clock.timestamp.millis(),\n clock.timestamp.counter(),\n clock.timestamp.node()\n );\n};\n\n// Timestamp receive. Parses and merges a timestamp from a remote\n// system with the local timeglobal uniqueness and monotonicity are\n// preserved\nTimestamp.recv = function(msg) {\n if (!clock) {\n return null;\n }\n\n // retrieve the local wall time\n var phys = Date.now();\n\n // unpack the message wall time/counter\n var lMsg = msg.millis();\n var cMsg = msg.counter();\n\n // assert the node id and remote clock drift\n // if (msg.node() === clock.timestamp.node()) {\n // throw new Timestamp.DuplicateNodeError(clock.timestamp.node());\n // }\n if (lMsg - phys > config.maxDrift) {\n throw new Timestamp.ClockDriftError();\n }\n\n // unpack the clock.timestamp logical time and counter\n var lOld = clock.timestamp.millis();\n var cOld = clock.timestamp.counter();\n\n // calculate the next logical time and counter\n // . ensure that the logical time never goes backward\n // . if all logical clocks are equal, increment the max counter\n // . if max = old > message, increment local counter\n // . if max = messsage > old, increment message counter\n // . otherwise, clocks are monotonic, reset counter\n var lNew = Math.max(Math.max(lOld, phys), lMsg);\n var cNew =\n lNew === lOld && lNew === lMsg\n ? Math.max(cOld, cMsg) + 1\n : lNew === lOld\n ? cOld + 1\n : lNew === lMsg\n ? cMsg + 1\n : 0;\n\n // check the result for drift and counter overflow\n if (lNew - phys > config.maxDrift) {\n throw new Timestamp.ClockDriftError();\n }\n if (cNew > 65535) {\n throw new Timestamp.OverflowError();\n }\n\n // repack the logical time/counter\n clock.timestamp.setMillis(lNew);\n clock.timestamp.setCounter(cNew);\n\n return new Timestamp(\n clock.timestamp.millis(),\n clock.timestamp.counter(),\n clock.timestamp.node()\n );\n};\n\n/**\n * timestamp parsing\n * converts a fixed-length string timestamp to the structured value\n */\nTimestamp.parse = function(timestamp) {\n if (typeof timestamp === 'string') {\n var parts = timestamp.split('-');\n if (parts && parts.length === 5) {\n var millis = Date.parse(parts.slice(0, 3).join('-')).valueOf();\n var counter = parseInt(parts[3], 16);\n var node = parts[4];\n if (!isNaN(millis) && !isNaN(counter))\n return new Timestamp(millis, counter, node);\n }\n }\n return null;\n};\n\n/**\n * zero/minimum timestamp\n */\nvar zero = Timestamp.parse('1970-01-01T00:00:00.000Z-0000-0000000000000000');\nTimestamp.zero = function() {\n return zero;\n};\n\n/**\n * maximum timestamp\n */\nvar max = Timestamp.parse('9999-12-31T23:59:59.999Z-FFFF-FFFFFFFFFFFFFFFF');\nTimestamp.max = function() {\n return max;\n};\n\nTimestamp.since = isoString => {\n return isoString + '-0000-0000000000000000';\n};\n\n/**\n * error classes\n */\nTimestamp.DuplicateNodeError = class extends Error {\n constructor(node) {\n super();\n this.type = 'DuplicateNodeError';\n this.message = 'duplicate node identifier ' + node;\n }\n};\n\nTimestamp.ClockDriftError = class extends Error {\n constructor(...args) {\n super();\n this.type = 'ClockDriftError';\n this.message = ['maximum clock drift exceeded'].concat(args).join(' ');\n }\n};\n\nTimestamp.OverflowError = class extends Error {\n constructor() {\n super();\n this.type = 'OverflowError';\n this.message = 'timestamp counter overflow';\n }\n};\n","import { batchMessages } from '../sync';\nimport { runMutator } from '../mutators';\nimport { createApp } from '../app';\nimport * as db from '../db';\nimport { batchUpdateTransactions } from '../accounts/transactions';\n\nlet app = createApp();\n\napp.method('tools/fix-split-transactions', async () => {\n // 1. Check for child transactions that have a blank payee, and set\n // the payee to whatever the parent has\n let blankPayeeRows = await db.all(`\n SELECT t.*, p.payee AS parentPayee FROM v_transactions_internal t\n LEFT JOIN v_transactions_internal p ON t.parent_id = p.id\n WHERE t.is_child = 1 AND t.payee IS NULL AND p.payee IS NOT NULL\n `);\n\n await runMutator(async () => {\n let updated = blankPayeeRows.map(row => ({\n id: row.id,\n payee: row.parentPayee\n }));\n await batchUpdateTransactions({ updated });\n });\n\n // 2. Make sure the \"cleared\" flag is synced up with the parent\n // transactions\n let clearedRows = await db.all(`\n SELECT t.id, p.cleared FROM v_transactions_internal t\n LEFT JOIN v_transactions_internal p ON t.parent_id = p.id\n WHERE t.is_child = 1 AND t.cleared != p.cleared\n `);\n\n await runMutator(async () => {\n let updated = clearedRows.map(row => ({\n id: row.id,\n cleared: row.cleared === 1\n }));\n await batchUpdateTransactions({ updated });\n });\n\n // 3. Mark the `tombstone` field as true on any child transactions\n // that have a dead parent\n let deletedRows = await db.all(`\n SELECT t.* FROM v_transactions_internal t\n LEFT JOIN v_transactions_internal p ON t.parent_id = p.id\n WHERE t.is_child = 1 AND t.tombstone = 0 AND (p.tombstone = 1 OR p.id IS NULL)\n `);\n\n await runMutator(async () => {\n let updated = deletedRows.map(row => ({ id: row.id, tombstone: 1 }));\n await batchUpdateTransactions({ updated });\n });\n\n return {\n numBlankPayees: blankPayeeRows.length,\n numCleared: clearedRows.length,\n numDeleted: deletedRows.length\n };\n});\n\nexport default app;\n","import asyncStorage from '../../platform/server/asyncStorage';\nimport { sha256String } from '../encryption-internals';\nlet uuid = require('../../platform/uuid');\n\nlet currentUniqueId;\nlet mixpanel;\nlet isEnabled = true;\n\nexport function toggle(trackUsage) {\n isEnabled = trackUsage == null || trackUsage === 'true' ? true : false;\n}\n\n// TODO: Figure out location, send to EU data centers if in EU\n// {\n// host: \"api-eu.mixpanel.com\",\n// },\n\n// This must stay up-to-date with all apps that hit mixpanel! That includes the\n// website and server. If changing this, make sure to change it everywhere\nasync function hash(userId) {\n let hashed = await sha256String(userId);\n return `user-${hashed.replace(/[=/]/g, '')}`;\n}\n\nfunction isAnonymous(id) {\n return !id.startsWith('user-');\n}\n\nexport async function init() {\n}\n\nexport async function login(userId) {\n}\n\nlet BUFFERING = false;\nlet BUFFER = [];\n\nfunction startBuffering() {\n BUFFERING = true;\n BUFFER = [];\n}\n\nfunction stopBuffering() {\n for (let call of BUFFER) {\n call[0](...call[1]);\n }\n BUFFERING = false;\n BUFFER = [];\n}\n\nfunction buffered(func) {\n return (...args) => {\n if (process.env.NODE_ENV !== 'development') {\n if (BUFFERING) {\n BUFFER.push([func, [currentUniqueId, ...args]]);\n } else {\n func(currentUniqueId, ...args);\n }\n }\n };\n}\n\nexport const track = buffered((distinct_id, name, props) => {});\n\nexport const setProfile = buffered((distinct_id, props) => {});\n","import { sendMessages } from './sync';\nimport { getIn } from '../shared/util';\nimport Timestamp from './timestamp';\nimport { withMutatorContext, getMutatorContext } from './mutators';\nconst connection = require('../platform/server/connection');\n\n// A marker always sits as the first entry to simplify logic\nlet MESSAGE_HISTORY = [{ type: 'marker' }];\nlet CURSOR = 0;\nlet HISTORY_SIZE = 20;\n\nfunction trimHistory() {\n MESSAGE_HISTORY = MESSAGE_HISTORY.slice(0, CURSOR + 1);\n\n let markers = MESSAGE_HISTORY.filter(item => item.type === 'marker');\n if (markers.length > HISTORY_SIZE) {\n let slice = markers.slice(-HISTORY_SIZE);\n let cutoff = MESSAGE_HISTORY.indexOf(slice[0]);\n MESSAGE_HISTORY = MESSAGE_HISTORY.slice(cutoff);\n CURSOR = MESSAGE_HISTORY.length - 1;\n }\n}\n\nexport function appendMessages(messages, oldData) {\n let context = getMutatorContext();\n\n if (context.undoListening && messages.length > 0) {\n trimHistory();\n\n let { undoTag } = context;\n\n MESSAGE_HISTORY.push({\n type: 'messages',\n messages,\n oldData,\n undoTag\n });\n CURSOR++;\n }\n}\n\nexport function clearUndo() {\n MESSAGE_HISTORY = [{ type: 'marker' }];\n CURSOR = 0;\n}\n\nexport function withUndo(func, meta) {\n let context = getMutatorContext();\n if (context.undoDisabled || context.undoListening) {\n return func();\n }\n\n MESSAGE_HISTORY = MESSAGE_HISTORY.slice(0, CURSOR + 1);\n\n let marker = { type: 'marker', meta };\n\n if (MESSAGE_HISTORY[MESSAGE_HISTORY.length - 1].type === 'marker') {\n MESSAGE_HISTORY[MESSAGE_HISTORY.length - 1] = marker;\n } else {\n MESSAGE_HISTORY.push(marker);\n CURSOR++;\n }\n\n return withMutatorContext(\n { undoListening: true, undoTag: context.undoTag },\n func\n );\n}\n\nexport function undoable(func) {\n return (...args) => {\n return withUndo(() => {\n return func(...args);\n });\n };\n}\n\nasync function applyUndoAction(messages, meta, undoTag) {\n await withMutatorContext({ undoListening: false }, () => {\n return sendMessages(\n messages.map(msg => ({ ...msg, timestamp: Timestamp.send() }))\n );\n });\n\n const tables = messages.reduce((acc, message) => {\n if (!acc.includes(message.dataset)) {\n acc.push(message.dataset);\n }\n return acc;\n }, []);\n\n connection.send('undo-event', {\n messages,\n tables,\n meta,\n undoTag\n });\n}\n\nexport async function undo() {\n let end = CURSOR;\n CURSOR = Math.max(CURSOR - 1, 0);\n\n // Walk back to the nearest marker\n while (CURSOR > 0 && MESSAGE_HISTORY[CURSOR].type !== 'marker') {\n CURSOR--;\n }\n\n let meta = MESSAGE_HISTORY[CURSOR].meta;\n let start = Math.max(CURSOR, 0);\n let entries = MESSAGE_HISTORY.slice(start, end + 1).filter(\n entry => entry.type === 'messages'\n );\n\n if (entries.length > 0) {\n let toApply = entries\n .reduce((acc, entry) => {\n return acc.concat(\n entry.messages\n .map(message => undoMessage(message, entry.oldData))\n .filter(x => x)\n );\n }, [])\n .reverse();\n\n await applyUndoAction(toApply, meta, entries[0].undoTag);\n }\n}\n\nfunction undoMessage(message, oldData) {\n let oldItem = getIn(oldData, [message.dataset, message.row]);\n if (oldItem) {\n let column = message.column;\n if (message.dataset === 'spreadsheet_cells') {\n // The spreadsheet messages use the `expr` column, but only as a\n // placeholder. We actually want to read the `cachedValue` prop\n // from the old item.\n column = 'cachedValue';\n }\n\n return { ...message, value: oldItem[column] };\n } else {\n if (message.dataset === 'spreadsheet_cells') {\n if (message.column === 'expr') {\n return { ...message, value: null };\n }\n return message;\n } else if (\n // The mapping fields aren't ever deleted... this should be\n // harmless since all they are is meta information. Maybe we\n // should fix this though.\n message.dataset !== 'category_mapping' &&\n message.dataset !== 'payee_mapping'\n ) {\n if (\n message.dataset === 'zero_budget_months' ||\n message.dataset === 'zero_budgets' ||\n message.dataset === 'reflect_budgets'\n ) {\n // Only these fields are reversable\n if (['buffered', 'amount', 'carryover'].includes(message.column)) {\n return { ...message, value: 0 };\n }\n return null;\n } else if (message.dataset === 'notes') {\n return { ...message, value: null };\n }\n\n return { ...message, column: 'tombstone', value: 1 };\n }\n }\n return null;\n}\n\nexport async function redo() {\n let meta =\n MESSAGE_HISTORY[CURSOR].type === 'marker'\n ? MESSAGE_HISTORY[CURSOR].meta\n : null;\n\n let start = CURSOR;\n CURSOR = Math.min(CURSOR + 1, MESSAGE_HISTORY.length - 1);\n\n // Walk forward to the nearest marker\n while (\n CURSOR < MESSAGE_HISTORY.length - 1 &&\n MESSAGE_HISTORY[CURSOR].type !== 'marker'\n ) {\n CURSOR++;\n }\n\n let end = CURSOR;\n let entries = MESSAGE_HISTORY.slice(start + 1, end + 1).filter(\n entry => entry.type === 'messages'\n );\n\n if (entries.length > 0) {\n let toApply = entries.reduce((acc, entry) => {\n return acc\n .concat(entry.messages)\n .concat(redoResurrections(entry.messages, entry.oldData));\n }, []);\n\n await applyUndoAction(toApply, meta, entries[entries.length - 1].undoTag);\n }\n}\n\nfunction redoResurrections(messages, oldData) {\n let resurrect = new Set();\n\n messages.forEach(message => {\n // If any of the ids didn't exist before, we need to \"resurrect\"\n // them by resetting their tombstones to 0\n let oldItem = getIn(oldData, [message.dataset, message.row]);\n if (\n !oldItem &&\n ![\n 'zero_budget_months',\n 'zero_budgets',\n 'reflect_budgets',\n 'notes',\n 'category_mapping',\n 'payee_mapping'\n ].includes(message.dataset)\n ) {\n resurrect.add(message.dataset + '.' + message.row);\n }\n });\n\n return [...resurrect].map(desc => {\n let [table, row] = desc.split('.');\n return {\n dataset: table,\n row,\n column: 'tombstone',\n value: 0,\n timestamp: Timestamp.send()\n };\n });\n}\n","import md5 from 'md5';\nimport * as migrations from './migrate/migrations';\nimport * as db from './db';\nimport { schema, schemaConfig } from './aql/schema';\nimport { makeViews } from './aql/views';\n\n// Managing the init/update process\n\nasync function runMigrations() {\n await migrations.migrate(db.getDatabase());\n}\n\nexport async function updateViews() {\n let hashKey = 'view-hash';\n let row = await db.first('SELECT value FROM __meta__ WHERE key = ?', [\n hashKey\n ]);\n let { value: hash } = row || {};\n\n let views = makeViews(schema, schemaConfig);\n let currentHash = md5(views);\n\n if (hash !== currentHash) {\n await db.execQuery(views);\n await db.runQuery(\n 'INSERT OR REPLACE INTO __meta__ (key, value) VALUES (?, ?)',\n [hashKey, currentHash]\n );\n }\n}\n\nexport async function updateVersion() {\n await runMigrations();\n await updateViews();\n}\n","import fs from '../../platform/server/fs';\nconst uuid = require('../../platform/uuid');\n\nexport async function uniqueFileName(existingFiles) {\n let initialName = 'My Finances';\n let idx = 1;\n\n // If there is a conflict, keep appending an index until there is no\n // conflict and we have a unique name\n let newName = initialName;\n while (existingFiles.find(file => file.name === newName)) {\n newName = `${initialName} ${idx}`;\n idx++;\n }\n\n return newName;\n}\n\nexport async function idFromFileName(name) {\n let id =\n name.replace(/( |[^A-Za-z0-9])/g, '-') + '-' + uuid.v4Sync().slice(0, 7);\n\n // Make sure the id is unique. There's a chance one could already\n // exist (although very unlikely now that we append unique\n // characters onto the id)\n let index = 0;\n\n let budgetDir = fs.getBudgetDir(id);\n while (await fs.exists(budgetDir)) {\n index++;\n budgetDir = fs.getBudgetDir(id + index.toString());\n }\n\n // If a suffix was added, update the id\n if (index > 0) {\n id = id + index.toString();\n }\n\n return id;\n}\n","import '@rschedule/standard-date-adapter/setup';\nimport '@rschedule/json-tools/Schedule';\n\nexport * from '@rschedule/standard-date-adapter';\nexport * from '@rschedule/core';\nexport * from '@rschedule/core/generators';\n","export function fromPlaidAccountType(type, subtype) {\n switch (type) {\n case 'brokerage':\n case 'investment':\n return 'investment';\n case 'credit':\n return 'credit';\n case 'loan':\n return 'debt';\n case 'other':\n return 'other';\n case 'depository':\n default:\n switch (subtype) {\n case 'money market':\n case 'savings':\n return 'savings';\n case 'cd':\n return 'cd';\n default:\n return 'checking';\n }\n }\n}\n\nexport function prettyAccountType(type) {\n switch (type) {\n case 'checking':\n return 'Checking';\n case 'savings':\n return 'Savings';\n case 'cd':\n return 'CD';\n case 'investment':\n return 'Investment';\n case 'credit':\n return 'Credit Card';\n case 'mortgage':\n return 'Mortgage';\n case 'debt':\n return 'Debt';\n case 'other':\n default:\n return 'Other';\n }\n}\n\nexport function determineOffBudget(type) {\n switch (type) {\n case 'investment':\n case 'mortgage':\n case 'debt':\n case 'other':\n return true;\n default:\n }\n return false;\n}\n","export function sequential(fn) {\n let sequenceState = {\n running: null,\n queue: []\n };\n\n function pump() {\n if (sequenceState.queue.length > 0) {\n const next = sequenceState.queue.shift();\n run(next.args, next.resolve, next.reject);\n } else {\n sequenceState.running = null;\n }\n }\n\n function run(args, resolve, reject) {\n sequenceState.running = fn(...args);\n\n sequenceState.running.then(\n val => {\n pump();\n resolve(val);\n },\n err => {\n pump();\n reject(err);\n }\n );\n }\n\n return (...args) => {\n if (!sequenceState.running) {\n return new Promise((resolve, reject) => {\n return run(args, resolve, reject);\n });\n } else {\n return new Promise((resolve, reject) => {\n sequenceState.queue.push({ resolve, reject, args });\n });\n }\n };\n}\n\nexport function once(fn) {\n let promise = null;\n let onceFn = (...args) => {\n if (!promise) {\n promise = fn(...args).finally(() => {\n promise = null;\n });\n return promise;\n }\n\n return promise;\n };\n\n return onceFn;\n}\n","import * as d from 'date-fns';\nimport memoizeOne from 'memoize-one';\n\nfunction _parse(value) {\n if (typeof value === 'string') {\n // Dates are hard. We just want to deal with months in the format\n // 2020-01 and days in the format 2020-01-01, but life is never\n // simple. We want to rely on native dates for date logic because\n // days are complicated (leap years, etc). But relying on native\n // dates mean we're exposed to craziness.\n //\n // The biggest problem is that JS dates work with local time by\n // default. We could try to only work with UTC, but there's not an\n // easy way to make `format` avoid local time, and not sure if we\n // want that anyway (`currentMonth` should surely print the local\n // time). We need to embrace local time, and as long as inputs to\n // date logic and outputs from format are local time, it should\n // work.\n //\n // To make sure we're in local time, always give Date integer\n // values. If you pass in a string to parse, different string\n // formats produce different results.\n //\n // A big problem is daylight savings, however. Usually, when\n // giving the time to the Date constructor, you get back a date\n // specifically for that time in your local timezone. However, if\n // daylight savings occurs on that exact time, you will get back\n // something different:\n //\n // This is fine:\n // > new Date(2017, 2, 12, 1).toString()\n // > 'Sun Mar 12 2017 01:00:00 GMT-0500 (Eastern Standard Time)'\n //\n // But wait, we got back a different time (3AM instead of 2AM):\n // > new Date(2017, 2, 12, 2).toString()\n // > 'Sun Mar 12 2017 03:00:00 GMT-0400 (Eastern Daylight Time)'\n //\n // The time is \"correctly\" adjusted via DST, but we _really_\n // wanted 2AM. The problem is that time simply doesn't exist.\n //\n // Why is this a problem? Well, consider a case where the DST\n // shift happens *at midnight* and it goes back an hour. You think\n // you have a date object for the next day, but when formatted it\n // actually shows the previous day. A more likely scenario: buggy\n // timezone data makes JS dates do this shift when it shouldn't,\n // so using midnight at the time for date logic gives back the\n // last day. See the time range of Sep 30 15:00 - Oct 1 1:00 for\n // the AEST timezone when nodejs-mobile incorrectly gives you back\n // a time an hour *before* you specified. Since this happens on\n // Oct 1, doing `addMonths(September, 1)` still gives you back\n // September. Issue here:\n // https://github.com/JaneaSystems/nodejs-mobile/issues/251\n //\n // The fix is simple once you understand this. Always use the 12th\n // hour of the day. That's it. There is no DST that shifts more\n // than 12 hours (god let's hope not) so no matter how far DST has\n // shifted backwards or forwards, doing date logic will stay\n // within the day we want.\n\n let [year, month, day] = value.split('-');\n if (day != null) {\n return new Date(parseInt(year), parseInt(month) - 1, parseInt(day), 12);\n } else if (month != null) {\n return new Date(parseInt(year), parseInt(month) - 1, 1, 12);\n } else {\n return new Date(parseInt(year), 0, 1, 12);\n }\n }\n return value;\n}\n\nexport const parseDate = _parse;\n\nexport function yearFromDate(date) {\n return d.format(_parse(date), 'yyyy');\n}\n\nexport function monthFromDate(date) {\n return d.format(_parse(date), 'yyyy-MM');\n}\n\nexport function dayFromDate(date) {\n return d.format(_parse(date), 'yyyy-MM-dd');\n}\n\nexport function currentMonth() {\n if (global.IS_TESTING) {\n return '2017-01';\n } else {\n return d.format(new Date(), 'yyyy-MM');\n }\n}\n\nexport function currentDay() {\n if (global.IS_TESTING) {\n return '2017-01-01';\n } else {\n return d.format(new Date(), 'yyyy-MM-dd');\n }\n}\n\nexport function nextMonth(month) {\n return d.format(d.addMonths(_parse(month), 1), 'yyyy-MM');\n}\n\nexport function prevMonth(month) {\n return d.format(d.subMonths(_parse(month), 1), 'yyyy-MM');\n}\n\nexport function addMonths(month, n) {\n return d.format(d.addMonths(_parse(month), n), 'yyyy-MM');\n}\n\nexport function subMonths(month, n) {\n return d.format(d.subMonths(_parse(month), n), 'yyyy-MM');\n}\n\nexport function addDays(day, n) {\n return d.format(d.addDays(_parse(day), n), 'yyyy-MM-dd');\n}\n\nexport function subDays(day, n) {\n return d.format(d.subDays(_parse(day), n), 'yyyy-MM-dd');\n}\n\nexport function isBefore(month1, month2) {\n return d.isBefore(_parse(month1), _parse(month2));\n}\n\nexport function isAfter(month1, month2) {\n return d.isAfter(_parse(month1), _parse(month2));\n}\n\n// TODO: This doesn't really fit in this module anymore, should\n// probably live elsewhere\nexport function bounds(month) {\n return {\n start: parseInt(d.format(d.startOfMonth(_parse(month)), 'yyyyMMdd')),\n end: parseInt(d.format(d.endOfMonth(_parse(month)), 'yyyyMMdd'))\n };\n}\n\nexport function _range(start, end, inclusive) {\n const months = [];\n let month = monthFromDate(start);\n while (d.isBefore(_parse(month), _parse(end))) {\n months.push(month);\n month = addMonths(month, 1);\n }\n\n if (inclusive) {\n months.push(month);\n }\n\n return months;\n}\n\nexport function range(start, end) {\n return _range(start, end);\n}\n\nexport function rangeInclusive(start, end) {\n return _range(start, end, true);\n}\n\nexport function _dayRange(start, end, inclusive) {\n const days = [];\n let day = start;\n while (d.isBefore(_parse(day), _parse(end))) {\n days.push(day);\n day = addDays(day, 1);\n }\n\n if (inclusive) {\n days.push(day);\n }\n\n return days;\n}\n\nexport function dayRange(start, end) {\n return _dayRange(start, end);\n}\n\nexport function dayRangeInclusive(start, end) {\n return _dayRange(start, end, true);\n}\n\nexport function getMonthIndex(month) {\n return parseInt(month.slice(5, 7)) - 1;\n}\n\nexport function getYear(month) {\n return month.slice(0, 4);\n}\n\nexport function getMonth(day) {\n return day.slice(0, 7);\n}\n\nexport function getYearStart(month) {\n return getYear(month) + '-01';\n}\n\nexport function getYearEnd(month) {\n return getYear(month) + '-12';\n}\n\nexport function sheetForMonth(month) {\n return 'budget' + month.replace('-', '');\n}\n\nexport function nameForMonth(month) {\n return d.format(_parse(month), \"MMMM 'yy\");\n}\n\nexport function format(month, str) {\n return d.format(_parse(month), str);\n}\n\nexport const getDateFormatRegex = memoizeOne(format => {\n return new RegExp(\n format\n .replace(/d+/g, '\\\\d{1,2}')\n .replace(/M+/g, '\\\\d{1,2}')\n .replace(/y+/g, '\\\\d{4}')\n );\n});\n\nexport const getDayMonthFormat = memoizeOne(format => {\n return format\n .replace(/y+/g, '')\n .replace(/[^\\w]$/, '')\n .replace(/^[^\\w]/, '');\n});\n\nexport const getDayMonthRegex = memoizeOne(format => {\n let regex = format\n .replace(/y+/g, '')\n .replace(/[^\\w]$/, '')\n .replace(/^[^\\w]/, '')\n .replace(/d+/g, '\\\\d{1,2}')\n .replace(/M+/g, '\\\\d{1,2}');\n return new RegExp('^' + regex + '$');\n});\n\nexport const getMonthYearFormat = memoizeOne(format => {\n return format\n .replace(/d+/g, '')\n .replace(/[^\\w]$/, '')\n .replace(/^[^\\w]/, '')\n .replace(/\\/\\//, '/')\n .replace(/\\.\\./, '.')\n .replace(/--/, '-');\n});\n\nexport const getMonthYearRegex = memoizeOne(format => {\n let regex = format\n .replace(/d+/g, '')\n .replace(/[^\\w]$/, '')\n .replace(/^[^\\w]/, '')\n .replace(/\\/\\//, '/')\n .replace(/M+/g, '\\\\d{1,2}')\n .replace(/y+/g, '\\\\d{2,4}');\n return new RegExp('^' + regex + '$');\n});\n\nexport const getShortYearFormat = memoizeOne(format => {\n return format.replace(/y+/g, 'yy');\n});\n\nexport const getShortYearRegex = memoizeOne(format => {\n let regex = format\n .replace(/[^\\w]$/, '')\n .replace(/^[^\\w]/, '')\n .replace(/d+/g, '\\\\d{1,2}')\n .replace(/M+/g, '\\\\d{1,2}')\n .replace(/y+/g, '\\\\d{2}');\n return new RegExp('^' + regex + '$');\n});\n","export class Query {\n constructor(state) {\n this.state = {\n filterExpressions: state.filterExpressions || [],\n selectExpressions: state.selectExpressions || [],\n groupExpressions: state.groupExpressions || [],\n orderExpressions: state.orderExpressions || [],\n calculation: false,\n rawMode: false,\n withDead: false,\n validateRefs: true,\n limit: null,\n offset: null,\n ...state\n };\n }\n\n filter(expr) {\n return new Query({\n ...this.state,\n filterExpressions: [...this.state.filterExpressions, expr]\n });\n }\n\n unfilter(exprs) {\n let exprSet = new Set(exprs);\n return new Query({\n ...this.state,\n filterExpressions: this.state.filterExpressions.filter(\n expr => !exprSet.has(Object.keys(expr)[0])\n )\n });\n }\n\n select(exprs = []) {\n if (!Array.isArray(exprs)) {\n exprs = [exprs];\n }\n\n let query = new Query({ ...this.state, selectExpressions: exprs });\n query.state.calculation = false;\n return query;\n }\n\n calculate(expr) {\n let query = this.select({ result: expr });\n query.state.calculation = true;\n return query;\n }\n\n groupBy(exprs) {\n if (!Array.isArray(exprs)) {\n exprs = [exprs];\n }\n\n return new Query({\n ...this.state,\n groupExpressions: [...this.state.groupExpressions, ...exprs]\n });\n }\n\n orderBy(exprs) {\n if (!Array.isArray(exprs)) {\n exprs = [exprs];\n }\n\n return new Query({\n ...this.state,\n orderExpressions: [...this.state.orderExpressions, ...exprs]\n });\n }\n\n limit(num) {\n return new Query({ ...this.state, limit: num });\n }\n\n offset(num) {\n return new Query({ ...this.state, offset: num });\n }\n\n raw() {\n return new Query({ ...this.state, rawMode: true });\n }\n\n withDead() {\n return new Query({ ...this.state, withDead: true });\n }\n\n withoutValidatedRefs() {\n return new Query({ ...this.state, validateRefs: false });\n }\n\n options(opts) {\n return new Query({ ...this.state, tableOptions: opts });\n }\n\n serialize() {\n return this.state;\n }\n}\n\nexport function getPrimaryOrderBy(query, defaultOrderBy) {\n let orderExprs = query.serialize().orderExpressions;\n if (orderExprs.length === 0) {\n if (defaultOrderBy) {\n return { order: 'asc', ...defaultOrderBy };\n }\n return null;\n }\n\n let firstOrder = orderExprs[0];\n if (typeof firstOrder === 'string') {\n return { field: firstOrder, order: 'asc' };\n }\n // Handle this form: { field: 'desc' }\n let [field] = Object.keys(firstOrder);\n return { field, order: firstOrder[field] };\n}\n\nexport default function q(table) {\n return new Query({ table });\n}\n","import { integerToAmount, amountToInteger, currencyToAmount } from './util';\n\n// For now, this info is duplicated from the backend. Figure out how\n// to share it later.\nexport const TYPE_INFO = {\n date: {\n ops: ['is', 'isapprox', 'gt', 'gte', 'lt', 'lte'],\n nullable: false\n },\n id: {\n ops: ['is', 'contains', 'oneOf'],\n nullable: true\n },\n string: {\n ops: ['is', 'contains', 'oneOf'],\n nullable: false\n },\n number: {\n ops: ['is', 'isapprox', 'isbetween', 'gt', 'gte', 'lt', 'lte'],\n nullable: false\n },\n boolean: {\n ops: ['is'],\n nullable: false\n }\n};\n\nexport const FIELD_TYPES = new Map(\n Object.entries({\n imported_payee: 'string',\n payee: 'id',\n date: 'date',\n notes: 'string',\n amount: 'number',\n amountInflow: 'number',\n amountOutfow: 'number',\n category: 'id',\n account: 'id',\n cleared: 'boolean'\n })\n);\n\nexport function mapField(field, opts) {\n opts = opts || {};\n\n switch (field) {\n case 'imported_payee':\n return 'imported payee';\n case 'amount':\n if (opts.inflow) {\n return 'amount (inflow)';\n } else if (opts.outflow) {\n return 'amount (outflow)';\n }\n return 'amount';\n case 'amount-inflow':\n return 'amount (inflow)';\n case 'amount-outflow':\n return 'amount (outflow)';\n default:\n return field;\n }\n}\n\nexport function friendlyOp(op, type) {\n switch (op) {\n case 'oneOf':\n return 'one of';\n case 'is':\n return 'is';\n case 'isapprox':\n return 'is approx';\n case 'isbetween':\n return 'is between';\n case 'contains':\n return 'contains';\n case 'gt':\n if (type === 'date') {\n return 'is after';\n }\n return 'is greater than';\n case 'gte':\n if (type === 'date') {\n return 'is after or equals';\n }\n return 'is greater than or equals';\n case 'lt':\n if (type === 'date') {\n return 'is before';\n }\n return 'is less than';\n case 'lte':\n if (type === 'date') {\n return 'is before or equals';\n }\n return 'is less than or equals';\n case 'true':\n return 'is true';\n case 'false':\n return 'is false';\n case 'set':\n return 'set';\n case 'link-schedule':\n return 'link schedule';\n default:\n return '';\n }\n}\n\nexport function deserializeField(field) {\n if (field === 'amount-inflow') {\n return { field: 'amount', options: { inflow: true } };\n } else if (field === 'amount-outflow') {\n return { field: 'amount', options: { outflow: true } };\n } else {\n return { field };\n }\n}\n\nexport function getFieldError(type) {\n switch (type) {\n case 'date-format':\n return 'Invalid date format';\n case 'no-null':\n case 'no-empty-array':\n case 'no-empty-string':\n return 'Value cannot be empty';\n case 'not-number':\n return 'Value must be a number';\n case 'invalid-field':\n return 'Please choose a valid field for this type of rule';\n default:\n return 'Internal error, sorry! Contact help@actualbudget.com';\n }\n}\n\nexport function sortNumbers(num1, num2) {\n if (num1 < num2) {\n return [num1, num2];\n }\n return [num2, num1];\n}\n\nexport function parse(item) {\n switch (item.type) {\n case 'number': {\n let parsed = item.value;\n if (item.field === 'amount' && item.op !== 'isbetween') {\n parsed = integerToAmount(parsed);\n }\n return { ...item, value: parsed };\n }\n case 'string': {\n let parsed = item.value == null ? '' : item.value;\n return { ...item, value: parsed };\n }\n default:\n }\n\n return { ...item, error: null };\n}\n\nexport function unparse({ error, inputKey, ...item }) {\n switch (item.type) {\n case 'number': {\n let unparsed = item.value;\n if (item.field === 'amount' && item.op !== 'isbetween') {\n unparsed = amountToInteger(unparsed);\n }\n\n return { ...item, value: unparsed };\n }\n case 'string': {\n let unparsed = item.value == null ? '' : item.value;\n return { ...item, value: unparsed };\n }\n default:\n }\n\n return item;\n}\n\nexport function makeValue(value, cond) {\n switch (cond.type) {\n case 'number': {\n if (cond.op !== 'isbetween') {\n return {\n ...cond,\n error: null,\n value: value ? currencyToAmount(value) || 0 : 0\n };\n }\n break;\n }\n default:\n }\n\n return { ...cond, error: null, value };\n}\n\nexport function getApproxNumberThreshold(number) {\n return (Math.abs(number) * 0.075) | 0;\n}\n","import * as monthUtils from './months';\nimport q from './query';\n\nexport function getStatus(nextDate, completed, hasTrans) {\n let today = monthUtils.currentDay();\n\n if (completed) {\n return 'completed';\n } else if (hasTrans) {\n return 'paid';\n } else if (nextDate === today) {\n return 'due';\n } else if (nextDate > today && nextDate <= monthUtils.addDays(today, 7)) {\n return 'upcoming';\n } else if (nextDate < today) {\n return 'missed';\n } else {\n return 'scheduled';\n }\n}\n\nexport function getHasTransactionsQuery(schedules) {\n let filters = schedules.map(schedule => {\n let dateCond = schedule._conditions.find(c => c.field === 'date');\n return {\n $and: {\n schedule: schedule.id,\n date: {\n $gte:\n dateCond && dateCond.op === 'is'\n ? schedule.next_date\n : monthUtils.subDays(schedule.next_date, 2)\n }\n }\n };\n });\n\n return q('transactions')\n .filter({ $or: filters })\n .orderBy({ date: 'desc' })\n .groupBy('schedule')\n .select(['schedule', 'date']);\n}\n\nfunction makeNumberSuffix(num) {\n // Slight abuse of date-fns to turn a number like \"1\" into the full\n // form \"1st\" but formatting a date with that number\n return monthUtils.format(new Date(2020, 0, num, 12), 'do');\n}\n\nfunction prettyDayName(day) {\n let days = {\n SU: 'Sunday',\n MO: 'Monday',\n TU: 'Tuesday',\n WE: 'Wednesday',\n TH: 'Thursday',\n FR: 'Friday',\n SA: 'Saturday'\n };\n return days[day];\n}\n\nexport function getRecurringDescription(config) {\n let interval = config.interval || 1;\n\n switch (config.frequency) {\n case 'weekly': {\n let desc = 'Every ';\n desc += interval !== 1 ? `${interval} weeks` : 'week';\n desc += ' on ' + monthUtils.format(config.start, 'EEEE');\n return desc;\n }\n case 'monthly': {\n let desc = 'Every ';\n desc += interval !== 1 ? `${interval} months` : 'month';\n\n if (config.patterns && config.patterns.length > 0) {\n // Sort the days ascending. We filter out -1 because that\n // represents \"last days\" and should always be last, but this\n // sort would put them first\n let patterns = [...config.patterns]\n .sort((p1, p2) => {\n let typeOrder =\n (p1.type === 'day' ? 1 : 0) - (p2.type === 'day' ? 1 : 0);\n let valOrder = p1.value - p2.value;\n\n if (typeOrder === 0) {\n return valOrder;\n }\n return typeOrder;\n })\n .filter(p => p.value !== -1);\n\n // Add on all -1 values to the end\n patterns = patterns.concat(config.patterns.filter(p => p.value === -1));\n\n desc += ' on the ';\n\n let strs = [];\n\n let uniqueDays = new Set(patterns.map(p => p.type));\n let isSameDay = uniqueDays.length === 1 && !uniqueDays.has('day');\n\n for (let pattern of patterns) {\n if (pattern.type === 'day') {\n if (pattern.value === -1) {\n strs.push('last day');\n } else {\n // Example: 15th day\n strs.push(makeNumberSuffix(pattern.value));\n }\n } else {\n let dayName = isSameDay ? '' : ' ' + prettyDayName(pattern.type);\n\n if (pattern.value === -1) {\n // Example: last Monday\n strs.push('last' + dayName);\n } else {\n // Example: 3rd Monday\n strs.push(makeNumberSuffix(pattern.value) + dayName);\n }\n }\n }\n\n if (strs.length > 2) {\n desc += strs.slice(0, strs.length - 1).join(', ');\n desc += ', and ';\n desc += strs[strs.length - 1];\n } else {\n desc += strs.join(' and ');\n }\n\n if (isSameDay) {\n desc += ' ' + prettyDayName(patterns[0].type);\n }\n } else {\n desc += ' on the ' + monthUtils.format(config.start, 'do');\n }\n\n return desc;\n }\n case 'yearly': {\n let desc = 'Every ';\n desc += interval !== 1 ? `${interval} years` : 'year';\n desc += ' on ' + monthUtils.format(config.start, 'LLL do');\n return desc;\n }\n default:\n return 'Recurring error';\n }\n}\n\nexport function recurConfigToRSchedule(config) {\n let base = {\n start: monthUtils.parseDate(config.start),\n frequency: config.frequency.toUpperCase(),\n byHourOfDay: [12]\n };\n\n if (config.interval) {\n base.interval = config.interval;\n }\n\n let abbrevDay = name => name.slice(0, 2).toUpperCase();\n\n switch (config.frequency) {\n case 'weekly':\n // Nothing to do\n return [base];\n case 'monthly':\n if (config.patterns && config.patterns.length > 0) {\n let days = config.patterns.filter(p => p.type === 'day');\n let dayNames = config.patterns.filter(p => p.type !== 'day');\n\n return [\n days.length > 0 && { ...base, byDayOfMonth: days.map(p => p.value) },\n dayNames.length > 0 && {\n ...base,\n byDayOfWeek: dayNames.map(p => [abbrevDay(p.type), p.value])\n }\n ].filter(Boolean);\n } else {\n // Nothing to do\n return [base];\n }\n case 'yearly':\n return [base];\n default:\n throw new Error('Invalid recurring date config');\n }\n}\n\nexport function extractScheduleConds(conditions) {\n return {\n payee:\n conditions.find(cond => cond.op === 'is' && cond.field === 'payee') ||\n conditions.find(\n cond => cond.op === 'is' && cond.field === 'description'\n ) ||\n null,\n account:\n conditions.find(cond => cond.op === 'is' && cond.field === 'account') ||\n conditions.find(cond => cond.op === 'is' && cond.field === 'acct') ||\n null,\n amount:\n conditions.find(\n cond =>\n (cond.op === 'is' ||\n cond.op === 'isapprox' ||\n cond.op === 'isbetween') &&\n cond.field === 'amount'\n ) || null,\n date:\n conditions.find(\n cond =>\n (cond.op === 'is' || cond.op === 'isapprox') && cond.field === 'date'\n ) || null\n };\n}\n\nexport function getScheduledAmount(amount) {\n if (amount && typeof amount !== 'number') {\n return ((amount.num1 + amount.num2) / 2) | 0;\n }\n return amount;\n}\n","import { last, diffItems, getChangedValues, applyChanges } from './util';\nconst uuid = require('../platform/uuid');\n\n// The amount might be null when adding a new transaction\nfunction num(n) {\n return typeof n === 'number' ? n : 0;\n}\n\nfunction SplitTransactionError(total, parent) {\n let difference = num(parent.amount) - total;\n\n return {\n type: 'SplitTransactionError',\n version: 1,\n difference\n };\n}\n\nexport function makeChild(parent, data) {\n let prefix = parent.id === 'temp' ? 'temp' : '';\n\n return {\n amount: 0,\n ...data,\n payee: data.payee || parent.payee,\n id: data.id ? data.id : prefix + uuid.v4Sync(),\n account: parent.account,\n date: parent.date,\n cleared: parent.cleared != null ? parent.cleared : null,\n starting_balance_flag:\n parent.starting_balance_flag != null\n ? parent.starting_balance_flag\n : null,\n is_child: true,\n parent_id: parent.id,\n error: null\n };\n}\n\nexport function recalculateSplit(trans) {\n // Calculate the new total of split transactions and make sure\n // that it equals the parent amount\n const total = trans.subtransactions.reduce(\n (acc, t) => acc + num(t.amount),\n 0\n );\n return {\n ...trans,\n error:\n total === num(trans.amount) ? null : SplitTransactionError(total, trans)\n };\n}\n\nexport function findParentIndex(transactions, idx) {\n // This relies on transactions being sorted in a way where parents\n // are always before children, which is enforced in the db layer.\n // Walk backwards and find the last parent;\n while (idx >= 0) {\n let trans = transactions[idx];\n if (trans.is_parent) {\n return idx;\n }\n idx--;\n }\n return null;\n}\n\nexport function getSplit(transactions, parentIndex) {\n let split = [transactions[parentIndex]];\n let curr = parentIndex + 1;\n while (curr < transactions.length && transactions[curr].is_child) {\n split.push(transactions[curr]);\n curr++;\n }\n return split;\n}\n\nexport function ungroupTransactions(transactions) {\n let x = transactions.reduce((list, parent) => {\n let { subtransactions, ...trans } = parent;\n subtransactions = subtransactions || [];\n\n list.push(trans);\n\n for (let i = 0; i < subtransactions.length; i++) {\n list.push(subtransactions[i]);\n }\n return list;\n }, []);\n return x;\n}\n\nexport function groupTransaction(split) {\n return { ...split[0], subtransactions: split.slice(1) };\n}\n\nexport function ungroupTransaction(split) {\n if (split == null) {\n return null;\n }\n return ungroupTransactions([split]);\n}\n\nexport function applyTransactionDiff(groupedTrans, diff) {\n return groupTransaction(applyChanges(diff, ungroupTransaction(groupedTrans)));\n}\n\nexport function replaceTransactions(transactions, id, func) {\n let idx = transactions.findIndex(t => t.id === id);\n let trans = transactions[idx];\n let transactionsCopy = [...transactions];\n\n if (idx === -1) {\n throw new Error('Tried to edit unknown transaction id: ' + id);\n }\n\n if (trans.is_parent || trans.is_child) {\n let parentIndex = findParentIndex(transactions, idx);\n if (parentIndex == null) {\n console.log('Cannot find parent index');\n return { diff: { deleted: [], updated: [] } };\n }\n\n let split = getSplit(transactions, parentIndex);\n let grouped = func(groupTransaction(split));\n let newSplit = ungroupTransaction(grouped);\n\n let diff;\n if (newSplit == null) {\n // If everything was deleted, just delete the parent which will\n // delete everything\n diff = { deleted: [{ id: split[0].id }], updated: [] };\n grouped = { id: split[0].id, _deleted: true };\n transactionsCopy.splice(parentIndex, split.length);\n } else {\n diff = diffItems(split, newSplit);\n transactionsCopy.splice(parentIndex, split.length, ...newSplit);\n }\n\n return { data: transactionsCopy, newTransaction: grouped, diff };\n } else {\n let grouped = func(trans);\n let newTrans = ungroupTransaction(grouped) || [];\n if (grouped) {\n grouped.subtransactions = grouped.subtransactions || [];\n }\n transactionsCopy.splice(idx, 1, ...newTrans);\n\n return {\n data: transactionsCopy,\n newTransaction: grouped || { id: trans.id, _deleted: true },\n diff: diffItems([trans], newTrans)\n };\n }\n}\n\nexport function addSplitTransaction(transactions, id) {\n return replaceTransactions(transactions, id, trans => {\n if (!trans.is_parent) {\n return trans;\n }\n let prevSub = last(trans.subtransactions);\n trans.subtransactions.push(\n makeChild(trans, {\n amount: 0,\n sort_order: num(prevSub && prevSub.sort_order) - 1\n })\n );\n return trans;\n });\n}\n\nexport function updateTransaction(transactions, transaction) {\n return replaceTransactions(transactions, transaction.id, trans => {\n if (trans.is_parent) {\n let parent = trans.id === transaction.id ? transaction : trans;\n let sub = trans.subtransactions.map(t => {\n // Make sure to update the children to reflect the updated\n // properties (if the parent updated)\n\n let child = t;\n if (trans.id === transaction.id) {\n child = {\n ...t,\n payee: t.payee === trans.payee ? transaction.payee : t.payee\n };\n } else if (t.id === transaction.id) {\n child = transaction;\n }\n\n return makeChild(parent, child);\n });\n\n return recalculateSplit({ ...parent, subtransactions: sub });\n } else {\n return transaction;\n }\n });\n}\n\nexport function deleteTransaction(transactions, id) {\n return replaceTransactions(transactions, id, trans => {\n if (trans.is_parent) {\n if (trans.id === id) {\n return null;\n } else if (trans.subtransactions.length === 1) {\n return {\n ...trans,\n subtransactions: null,\n is_parent: false,\n error: null\n };\n } else {\n let sub = trans.subtransactions.filter(t => t.id !== id);\n return recalculateSplit({ ...trans, subtransactions: sub });\n }\n } else {\n return null;\n }\n });\n}\n\nexport function splitTransaction(transactions, id) {\n return replaceTransactions(transactions, id, trans => {\n if (trans.is_parent || trans.is_child) {\n return trans;\n }\n\n return {\n ...trans,\n is_parent: true,\n error: num(trans.amount) === 0 ? null : SplitTransactionError(0, trans),\n subtransactions: [makeChild(trans, { amount: 0, sort_order: -1 })]\n };\n });\n}\n\nexport function realizeTempTransactions(transactions) {\n let parent = transactions.find(t => !t.is_child);\n parent = { ...parent, id: uuid.v4Sync() };\n\n let children = transactions.filter(t => t.is_child);\n return [\n parent,\n ...children.map(child => ({\n ...child,\n id: uuid.v4Sync(),\n parent_id: parent.id\n }))\n ];\n}\n","let currencyFormatter = require('currency-formatter');\n\nexport function cleanUUID(uuid) {\n return uuid.replace(/-/g, '');\n}\n\nexport function last(arr) {\n return arr[arr.length - 1];\n}\n\nexport function mergeObjects(objects) {\n return Object.assign.apply(null, [{}, ...objects]);\n}\n\nexport function composeCellChanges(objects) {\n const merged = {};\n Object.keys(objects).forEach(key => {\n if (merged[key]) {\n merged[key] = { ...merged[key], ...objects[key] };\n } else {\n merged[key] = objects[key];\n }\n });\n}\n\nexport function flattenArray(arrays) {\n return Array.prototype.concat.apply([], arrays);\n}\n\nexport function shallowEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n var numKeysA = 0,\n numKeysB = 0,\n key;\n for (key in b) {\n numKeysB++;\n if (!a.hasOwnProperty(key) || a[key] !== b[key]) {\n return false;\n }\n }\n for (key in a) {\n numKeysA++;\n }\n return numKeysA === numKeysB;\n}\n\nexport function getChangedValues(obj1, obj2) {\n // Keep the id field because this is mostly used to diff database\n // objects\n const diff = obj1.id ? { id: obj1.id } : {};\n const keys = Object.keys(obj2);\n let hasChanged = false;\n\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n\n if (obj1[key] !== obj2[key]) {\n diff[key] = obj2[key];\n hasChanged = true;\n }\n }\n\n return hasChanged ? diff : null;\n}\n\nexport function hasFieldsChanged(obj1, obj2, fields) {\n let changed = false;\n for (var i = 0; i < fields.length; i++) {\n let field = fields[i];\n if (obj1[field] !== obj2[field]) {\n changed = true;\n break;\n }\n }\n return changed;\n}\n\nexport function applyChanges(changes, items) {\n items = [...items];\n\n if (changes.added) {\n changes.added.forEach(add => {\n items.push(add);\n });\n }\n\n if (changes.updated) {\n changes.updated.forEach(({ id, ...fields }) => {\n const idx = items.findIndex(t => t.id === id);\n items[idx] = {\n ...items[idx],\n ...fields\n };\n });\n }\n\n if (changes.deleted) {\n changes.deleted.forEach(t => {\n const idx = items.findIndex(t2 => t.id === t2.id);\n if (idx !== -1) {\n items.splice(idx, 1);\n }\n });\n }\n\n return items;\n}\n\nexport function partitionByField(data, field) {\n let res = new Map();\n for (let i = 0; i < data.length; i++) {\n let item = data[i];\n let key = item[field];\n\n let items = res.get(key) || [];\n items.push(item);\n\n res.set(key, items);\n }\n return res;\n}\n\nexport function groupBy(data, field, mapper) {\n let res = new Map();\n for (let i = 0; i < data.length; i++) {\n let item = data[i];\n let key = item[field];\n let existing = res.get(key) || [];\n res.set(key, existing.concat([mapper ? mapper(item) : data[i]]));\n }\n return res;\n}\n\nexport function groupBySingle(data, field, mapper) {\n let res = new Map();\n for (let i = 0; i < data.length; i++) {\n let item = data[i];\n let key = item[field];\n if (res.has(key)) {\n throw new Error('groupBySingle found conflicting key: ' + key);\n }\n res.set(key, mapper ? mapper(item) : data[i]);\n }\n return res;\n}\n\n// This should replace the existing `groupById` function, since a\n// `Map` is better, but we can't swap it out because `Map` has a\n// different API and we need to go through and update everywhere that\n// uses it.\nfunction _groupById(data) {\n let res = new Map();\n for (let i = 0; i < data.length; i++) {\n let item = data[i];\n res.set(item.id, item);\n }\n return res;\n}\n\nexport function diffItems(items, newItems) {\n let grouped = _groupById(items);\n let newGrouped = _groupById(newItems);\n let added = [];\n let updated = [];\n\n let deleted = items\n .filter(item => !newGrouped.has(item.id))\n .map(item => ({ id: item.id }));\n\n newItems.forEach(newItem => {\n let item = grouped.get(newItem.id);\n if (!item) {\n added.push(newItem);\n } else {\n const changes = getChangedValues(item, newItem);\n if (changes) {\n updated.push(changes);\n }\n }\n });\n\n return { added, updated, deleted };\n}\n\nexport function groupById(data) {\n let res = {};\n for (let i = 0; i < data.length; i++) {\n let item = data[i];\n res[item.id] = item;\n }\n return res;\n}\n\nexport function debugMemoFailure(prevProps, nextProps) {\n let changed = getChangedValues(prevProps, nextProps);\n if (changed !== null) {\n console.log(changed);\n }\n return changed === null;\n}\n\nexport function setIn(map, keys, item) {\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n\n if (i === keys.length - 1) {\n map.set(key, item);\n } else {\n if (!map.has(key)) {\n map.set(key, new Map());\n }\n\n map = map.get(key);\n }\n }\n}\n\nexport function getIn(map, keys) {\n let item = map;\n for (let i = 0; i < keys.length; i++) {\n item = item.get(keys[i]);\n\n if (item == null) {\n return item;\n }\n }\n return item;\n}\n\n// Useful for throwing exception from expressions\nexport function throwError(err) {\n throw err;\n}\n\nexport function fastSetMerge(set1, set2) {\n let finalSet = new Set(set1);\n let iter = set2.values();\n let value = iter.next();\n while (!value.done) {\n finalSet.add(value.value);\n value = iter.next();\n }\n return finalSet;\n}\n\nexport function titleFirst(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\n\nexport let numberFormats = [\n { value: 'comma-dot', label: '1,000.33' },\n { value: 'dot-comma', label: '1.000,33' },\n { value: 'space-comma', label: '1 000,33' }\n];\n\nlet numberFormat = {\n value: null,\n formatter: null,\n regex: null\n};\n\nexport function setNumberFormat(format) {\n let locale, regex, separator;\n\n switch (format) {\n case 'space-comma':\n locale = 'za-ZA';\n regex = /[^-0-9,]/g;\n separator = ',';\n break;\n case 'dot-comma':\n locale = 'de-DE';\n regex = /[^-0-9,]/g;\n separator = ',';\n break;\n case 'comma-dot':\n default:\n locale = 'en-US';\n regex = /[^-0-9.]/g;\n separator = '.';\n }\n\n numberFormat = {\n value: format,\n separator,\n // This is the keep in line with the Intl API which we might\n // switch to when it's available on all mobile platforms\n formatter: {\n format: number =>\n currencyFormatter.format(number, { locale, format: '%v' })\n },\n regex\n };\n}\n\nexport function getNumberFormat() {\n return numberFormat;\n}\n\nsetNumberFormat('1,000.33');\n\nexport function toRelaxedNumber(value) {\n return integerToAmount(currencyToInteger(value) || 0);\n}\n\nexport function toRelaxedInteger(value) {\n return stringToInteger(value) || 0;\n}\n\nexport function integerToCurrency(n) {\n // Awesome\n return numberFormat.formatter.format(n / 100);\n}\n\nexport function amountToCurrency(n) {\n return numberFormat.formatter.format(n);\n}\n\nexport function amountToPrettyCurrency(n, code) {\n return currencyFormatter.format(n, { code });\n}\n\nexport function currencyToAmount(str) {\n let amount = parseFloat(\n str.replace(numberFormat.regex, '').replace(numberFormat.separator, '.')\n );\n return isNaN(amount) ? null : amount;\n}\n\nexport function currencyToInteger(str) {\n let amount = currencyToAmount(str);\n return amount ? amountToInteger(amount) : null;\n}\n\nexport function stringToInteger(str) {\n let amount = parseInt(str.replace(/[^-0-9.,]/g, ''));\n if (!isNaN(amount)) {\n return amount;\n }\n return null;\n}\n\nexport function amountToInteger(n) {\n return Math.round(n * 100);\n}\n\nexport function integerToAmount(n) {\n return parseFloat((n / 100).toFixed(2));\n}\n\n// This is used when the input format could be anything (from\n// financial files and we don't want to parse based on the user's\n// number format, because the user could be importing from many\n// currencies. We extract out the numbers and just ignore separators.\nexport function looselyParseAmount(amount) {\n function safeNumber(v) {\n return isNaN(v) ? null : v;\n }\n\n let m = amount.match(/[.,][^.,]*$/);\n if (!m || m.index === 0) {\n return safeNumber(parseFloat(amount));\n }\n\n let left = amount.slice(0, m.index);\n let right = amount.slice(m.index + 1);\n\n return safeNumber(parseFloat(left.replace(/[^0-9-]/g, '') + '.' + right));\n}\n\nexport function semverToNumber(str) {\n return parseInt(\n '1' +\n str\n .split('.')\n .map(x => {\n return ('000' + x.replace(/[^0-9]/g, '')).slice(-3);\n })\n .join('')\n );\n}\n","module.exports = require(\"better-sqlite3\");","module.exports = require(\"crypto\");","module.exports = require(\"fs\");","module.exports = require(\"node-fetch\");","module.exports = require(\"node-libofx\");","module.exports = require(\"path\");","module.exports = require(\"stream\");","module.exports = require(\"string_decoder\");","module.exports = require(\"util\");","module.exports = require(\"zlib\");"],"sourceRoot":""} |