@everyonesoftware/common 2.0.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/outputs/chunk-AY3YWKOM.js +7741 -0
- package/outputs/chunk-AY3YWKOM.js.map +1 -0
- package/outputs/sources.cjs +9007 -0
- package/outputs/sources.cjs.map +1 -0
- package/outputs/sources.d.cts +4082 -0
- package/outputs/sources.d.ts +4082 -0
- package/outputs/sources.js +1370 -0
- package/outputs/sources.js.map +1 -0
- package/outputs/tests.cjs +17208 -0
- package/outputs/tests.cjs.map +1 -0
- package/outputs/tests.d.cts +3 -0
- package/outputs/tests.d.ts +3 -0
- package/outputs/tests.js +9798 -0
- package/outputs/tests.js.map +1 -0
- package/package.json +11 -2
- package/.c8rc.json +0 -12
- package/.github/workflows/publish.yml +0 -36
- package/.mocharc.json +0 -9
- package/sources/assertMessageParameters.ts +0 -22
- package/sources/asyncIterator.ts +0 -437
- package/sources/asyncIteratorToJavascriptAsyncIteratorAdapter.ts +0 -48
- package/sources/asyncResult.ts +0 -95
- package/sources/basicDisposable.ts +0 -57
- package/sources/byteList.ts +0 -202
- package/sources/byteListStream.ts +0 -121
- package/sources/byteReadStream.ts +0 -24
- package/sources/byteWriteStream.ts +0 -16
- package/sources/bytes.ts +0 -25
- package/sources/characterList.ts +0 -195
- package/sources/characterListStream.ts +0 -151
- package/sources/characterReadStream.ts +0 -81
- package/sources/characterReadStreamIterator.ts +0 -128
- package/sources/characterWriteStream.ts +0 -45
- package/sources/commandLineParameter.ts +0 -45
- package/sources/commandLineParameters.ts +0 -21
- package/sources/comparable.ts +0 -144
- package/sources/comparer.ts +0 -133
- package/sources/comparison.ts +0 -20
- package/sources/concatenateIterable.ts +0 -119
- package/sources/concatenateIterator.ts +0 -165
- package/sources/condition.ts +0 -329
- package/sources/currentProcess.ts +0 -158
- package/sources/dateTime.ts +0 -130
- package/sources/depthFirstSearch.ts +0 -230
- package/sources/disposable.ts +0 -31
- package/sources/emptyError.ts +0 -10
- package/sources/english.ts +0 -45
- package/sources/equalFunctions.ts +0 -123
- package/sources/fetchHttpClient.ts +0 -89
- package/sources/fetchHttpResponse.ts +0 -106
- package/sources/flatMapIterable.ts +0 -104
- package/sources/flatMapIterator.ts +0 -152
- package/sources/generator.ts +0 -251
- package/sources/httpClient.ts +0 -36
- package/sources/httpHeader.ts +0 -37
- package/sources/httpHeaders.ts +0 -216
- package/sources/httpIncomingRequest.ts +0 -30
- package/sources/httpIncomingResponse.ts +0 -19
- package/sources/httpMethod.ts +0 -164
- package/sources/httpOutgoingRequest.ts +0 -119
- package/sources/httpOutgoingResponse.ts +0 -113
- package/sources/httpServer.ts +0 -34
- package/sources/inMemoryCharacterWriteStream.ts +0 -78
- package/sources/index.ts +0 -101
- package/sources/iterable.ts +0 -345
- package/sources/iterator.ts +0 -481
- package/sources/iteratorToJavascriptIteratorAdapter.ts +0 -48
- package/sources/javascript.ts +0 -59
- package/sources/javascriptArrayList.ts +0 -175
- package/sources/javascriptAsyncIteratorToAsyncIteratorAdapter.ts +0 -124
- package/sources/javascriptIteratorToIteratorAdapter.ts +0 -133
- package/sources/javascriptMapMap.ts +0 -143
- package/sources/javascriptSetSet.ts +0 -134
- package/sources/list.ts +0 -330
- package/sources/listQueue.ts +0 -62
- package/sources/listStack.ts +0 -62
- package/sources/luxonDateTime.ts +0 -109
- package/sources/map.ts +0 -302
- package/sources/mapAsyncIterator.ts +0 -141
- package/sources/mapIterable.ts +0 -105
- package/sources/mapIterator.ts +0 -145
- package/sources/mutableCondition.ts +0 -451
- package/sources/mutableHttpHeaders.ts +0 -204
- package/sources/mutableMap.ts +0 -292
- package/sources/network.ts +0 -18
- package/sources/node.ts +0 -37
- package/sources/nodeJSCharacterWriteStream.ts +0 -42
- package/sources/nodeJSHttpIncomingRequest.ts +0 -132
- package/sources/nodeJSHttpServer.ts +0 -134
- package/sources/notFoundError.ts +0 -12
- package/sources/postCondition.ts +0 -284
- package/sources/postConditionError.ts +0 -12
- package/sources/preCondition.ts +0 -284
- package/sources/preConditionError.ts +0 -12
- package/sources/promiseAsyncResult.ts +0 -174
- package/sources/property.ts +0 -63
- package/sources/queue.ts +0 -49
- package/sources/realNetwork.ts +0 -28
- package/sources/recreationDotGovClient.ts +0 -259
- package/sources/searchControl.ts +0 -42
- package/sources/set.ts +0 -244
- package/sources/skipAsyncIterator.ts +0 -145
- package/sources/skipIterator.ts +0 -155
- package/sources/stack.ts +0 -48
- package/sources/stringComparer.ts +0 -33
- package/sources/stringIterator.ts +0 -149
- package/sources/strings.ts +0 -322
- package/sources/syncResult.ts +0 -300
- package/sources/takeAsyncIterator.ts +0 -141
- package/sources/takeIterator.ts +0 -151
- package/sources/toStringFunctions.ts +0 -185
- package/sources/types.ts +0 -371
- package/sources/whereAsyncIterator.ts +0 -143
- package/sources/whereIterable.ts +0 -108
- package/sources/whereIterator.ts +0 -157
- package/sources/wonderlandTrailClient.ts +0 -1503
- package/tests/assertTest.ts +0 -113
- package/tests/assertTestTests.ts +0 -75
- package/tests/basicTestSkip.ts +0 -51
- package/tests/byteListStreamTests.ts +0 -390
- package/tests/byteListTests.ts +0 -27
- package/tests/bytesTests.ts +0 -43
- package/tests/characterListStreamTests.ts +0 -391
- package/tests/characterListTests.ts +0 -250
- package/tests/characterWriteStreamTests.ts +0 -12
- package/tests/comparerTests.ts +0 -92
- package/tests/conditionTests.ts +0 -877
- package/tests/consoleTestRunner.ts +0 -404
- package/tests/consoleTestRunnerTests.ts +0 -651
- package/tests/dateTimeTests.ts +0 -30
- package/tests/depthFirstSearchTests.ts +0 -106
- package/tests/disposableTests.ts +0 -121
- package/tests/englishTests.ts +0 -103
- package/tests/equalFunctionsTests.ts +0 -223
- package/tests/failedTest.ts +0 -43
- package/tests/fetchHttpClientTests.ts +0 -33
- package/tests/generatorTests.ts +0 -86
- package/tests/httpClientTests.ts +0 -18
- package/tests/inMemoryCharacterWriteStreamTests.ts +0 -117
- package/tests/iterableTests.ts +0 -141
- package/tests/iteratorTests.ts +0 -1086
- package/tests/javascriptMapMapTests.ts +0 -21
- package/tests/listTests.ts +0 -338
- package/tests/mapIteratorTests.ts +0 -55
- package/tests/mapTests.ts +0 -104
- package/tests/mutableConditionTests.ts +0 -273
- package/tests/mutableMapTests.ts +0 -154
- package/tests/nodeJSHttpServerTests.ts +0 -75
- package/tests/notFoundErrorTests.ts +0 -24
- package/tests/postConditionErrorTests.ts +0 -24
- package/tests/preConditionErrorTests.ts +0 -24
- package/tests/promiseAsyncResultTests.ts +0 -688
- package/tests/propertyTests.ts +0 -63
- package/tests/queueTests.ts +0 -29
- package/tests/recreationDotGovClientTests.ts +0 -191
- package/tests/setTests.ts +0 -140
- package/tests/skippedTest.ts +0 -39
- package/tests/stackTests.ts +0 -66
- package/tests/stringComparerTests.ts +0 -60
- package/tests/stringIteratorTests.ts +0 -156
- package/tests/stringsTests.ts +0 -516
- package/tests/syncResultTests.ts +0 -1251
- package/tests/test.ts +0 -228
- package/tests/testAction.ts +0 -75
- package/tests/testActionTests.ts +0 -93
- package/tests/testFailureTests.ts +0 -12
- package/tests/testRunner.ts +0 -267
- package/tests/testRunnerTests.ts +0 -895
- package/tests/testSkip.ts +0 -34
- package/tests/tests.ts +0 -103
- package/tests/toStringFunctionsTests.ts +0 -55
- package/tests/typesTests.ts +0 -257
- package/tests/whereIteratorTests.ts +0 -77
- package/tests/wonderlandTrailClientTests.ts +0 -452
- package/tsconfig.json +0 -20
- package/tsup.config.ts +0 -13
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../tests/assertTest.ts","../tests/test.ts","../tests/failedTest.ts","../tests/skippedTest.ts","../tests/testAction.ts","../tests/basicTestSkip.ts","../tests/testSkip.ts","../tests/testRunner.ts","../tests/consoleTestRunner.ts","../tests/assertTestTests.ts","../tests/byteListStreamTests.ts","../tests/byteListTests.ts","../tests/bytesTests.ts","../tests/characterListStreamTests.ts","../tests/characterListTests.ts","../tests/comparerTests.ts","../tests/conditionTests.ts","../tests/consoleTestRunnerTests.ts","../tests/testRunnerTests.ts","../tests/dateTimeTests.ts","../tests/depthFirstSearchTests.ts","../tests/disposableTests.ts","../tests/englishTests.ts","../tests/equalFunctionsTests.ts","../tests/fetchHttpClientTests.ts","../tests/generatorTests.ts","../tests/iteratorTests.ts","../tests/httpClientTests.ts","../tests/inMemoryCharacterWriteStreamTests.ts","../tests/characterWriteStreamTests.ts","../tests/iterableTests.ts","../tests/javascriptMapMapTests.ts","../tests/mapTests.ts","../tests/listTests.ts","../tests/mapIteratorTests.ts","../tests/mutableConditionTests.ts","../tests/mutableMapTests.ts","../tests/notFoundErrorTests.ts","../tests/postConditionErrorTests.ts","../tests/preConditionErrorTests.ts","../tests/promiseAsyncResultTests.ts","../tests/propertyTests.ts","../tests/queueTests.ts","../tests/nodeJSHttpServerTests.ts","../tests/recreationDotGovClientTests.ts","../tests/setTests.ts","../tests/stackTests.ts","../tests/stringComparerTests.ts","../tests/stringIteratorTests.ts","../tests/stringsTests.ts","../tests/syncResultTests.ts","../tests/testActionTests.ts","../tests/toStringFunctionsTests.ts","../tests/typesTests.ts","../tests/whereIteratorTests.ts","../tests/wonderlandTrailClientTests.ts","../tests/tests.ts"],"sourcesContent":["import * as assert from \"assert\";\r\n\r\nimport { PreCondition } from \"../sources/preCondition\";\r\nimport { isFunction, Type } from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { SyncResult } from \"../sources/syncResult\";\r\nimport { PromiseAsyncResult } from \"../sources/promiseAsyncResult\";\r\n\r\n/**\r\n * A {@link Test} type that uses the standard \"assert\" module to make assertions.\r\n */\r\nexport class AssertTest implements Test\r\n{\r\n private readonly name: string;\r\n\r\n protected constructor(name: string)\r\n {\r\n this.name = name;\r\n }\r\n\r\n /**\r\n * Create a new {@link AssertTest} object.\r\n */\r\n public static create(name: string): AssertTest\r\n {\r\n return new AssertTest(name);\r\n }\r\n\r\n public fail(message: string): never\r\n {\r\n PreCondition.assertNotEmpty(message, \"message\");\r\n\r\n assert.fail(message);\r\n }\r\n\r\n public assertUndefined(value: unknown): asserts value is undefined\r\n {\r\n Test.assertUndefined(this, value);\r\n }\r\n\r\n public assertNotUndefined<T>(value: T): asserts value is NonNullable<T>\r\n {\r\n Test.assertNotUndefined(this, value);\r\n }\r\n\r\n public assertNull(value: unknown): asserts value is null\r\n {\r\n Test.assertNull(this, value);\r\n }\r\n\r\n public assertNotNull<T>(value: T): asserts value is NonNullable<T>\r\n {\r\n Test.assertNotNull(this, value);\r\n }\r\n\r\n public assertNotUndefinedAndNotNull<T>(value: T): asserts value is NonNullable<T>\r\n {\r\n Test.assertNotUndefinedAndNotNull(this, value);\r\n }\r\n\r\n public assertSame<T>(left: T, right: T): void\r\n {\r\n assert.strictEqual(left, right);\r\n }\r\n\r\n public assertNotSame<T>(left: T, right: T): void\r\n {\r\n assert.notStrictEqual(left, right);\r\n }\r\n\r\n public assertEqual<T>(left: T, right: T, message?: string): void\r\n {\r\n assert.deepStrictEqual(left, right, message);\r\n }\r\n\r\n public assertNotEqual<T>(left: T, right: T): void\r\n {\r\n assert.notDeepStrictEqual(left, right);\r\n }\r\n\r\n public assertFalse(value: boolean): void\r\n {\r\n Test.assertFalse(this, value);\r\n }\r\n\r\n public assertTrue(value: boolean): void\r\n {\r\n Test.assertTrue(this, value);\r\n }\r\n\r\n public assertThrows(action: SyncResult<unknown> | (() => void), expectedError?: Error): void\r\n {\r\n if (!isFunction(action))\r\n {\r\n const syncResult: SyncResult<unknown> = action;\r\n action = () => { syncResult.await(); };\r\n }\r\n assert.throws(action, expectedError);\r\n }\r\n\r\n public assertThrowsAsync(action: Promise<unknown> | (() => Promise<unknown>), expectedError: Error): PromiseAsyncResult<void>\r\n {\r\n const promiseOrAsyncAction = isFunction(action)\r\n ? async () => await action()\r\n : action;\r\n return PromiseAsyncResult.create(assert.rejects(promiseOrAsyncAction, expectedError));\r\n }\r\n\r\n public assertInstanceOf<T>(value: unknown, type: Type<T>, typeCheck?: (value: unknown) => value is T): asserts value is T\r\n {\r\n Test.assertInstanceOf(this, value, type, typeCheck);\r\n }\r\n}","import { PromiseAsyncResult } from \"../sources/promiseAsyncResult\";\r\nimport { PreCondition } from \"../sources/preCondition\";\r\nimport { SyncResult } from \"../sources/syncResult\";\r\nimport { isUndefinedOrNull, Type } from \"../sources/types\";\r\n\r\n/**\r\n * A type that can be used to make assertions during a test.\r\n */\r\nexport abstract class Test\r\n{\r\n /**\r\n * Fail the current test with the provided message.\r\n * @param message The message that explains why this test failed.\r\n */\r\n public abstract fail(message: string): never;\r\n\r\n /**\r\n * Assert that the provided value is undefined;\r\n * @param value The value to check.\r\n */\r\n public assertUndefined(value: unknown): asserts value is undefined\r\n {\r\n Test.assertUndefined(this, value);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is undefined.\r\n * @param test The current {@link Test}.\r\n * @param value The value to check.\r\n */\r\n public static assertUndefined(test: Test, value: unknown): asserts value is undefined\r\n {\r\n test.assertSame(value, undefined);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is not undefined;\r\n * @param value The value to check.\r\n */\r\n public assertNotUndefined<T>(value: T): asserts value is NonNullable<T>\r\n {\r\n Test.assertNotUndefined(this, value);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is not undefined.\r\n * @param test The current {@link Test}.\r\n * @param value The value to check.\r\n */\r\n public static assertNotUndefined<T>(test: Test, value: unknown): asserts value is NonNullable<T>\r\n {\r\n test.assertNotSame(value, undefined);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is null.\r\n * @param value The value to check.\r\n */\r\n public assertNull(value: unknown): asserts value is null\r\n {\r\n Test.assertNull(this, value);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is null.\r\n * @param value The value to check.\r\n */\r\n public static assertNull(test: Test, value: unknown): asserts value is null\r\n {\r\n test.assertSame(value, null);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is not null.\r\n * @param value The value to check.\r\n */\r\n public assertNotNull<T>(value: T): asserts value is NonNullable<T>\r\n {\r\n Test.assertNull(this, value);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is not null.\r\n * @param value The value to check.\r\n */\r\n public static assertNotNull<T>(test: Test, value: T): asserts value is NonNullable<T>\r\n {\r\n test.assertNotSame(value, null);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is not undefined and not null.\r\n * @param value The value to check.\r\n */\r\n public assertNotUndefinedAndNotNull<T>(value: T): asserts value is NonNullable<T>\r\n {\r\n Test.assertNotUndefinedAndNotNull(this, value);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is not undefined and not null.\r\n * @param value The value to check.\r\n */\r\n public static assertNotUndefinedAndNotNull<T>(test: Test, value: T): asserts value is NonNullable<T>\r\n {\r\n test.assertNotSame(value, null);\r\n test.assertNotSame(value, undefined);\r\n }\r\n\r\n /**\r\n * Assert that the provided values point to the same object.\r\n * @param left The first value.\r\n * @param right The second value.\r\n */\r\n public abstract assertSame<T>(left: T, right: T): void;\r\n\r\n /**\r\n * Assert that the provided values don't point to the same object.\r\n * @param left The first value.\r\n * @param right The second value.\r\n */\r\n public abstract assertNotSame<T>(left: T, right: T): void;\r\n\r\n /**\r\n * Assert that the provided values are equal.\r\n * @param left The first value.\r\n * @param right The second value.\r\n * @param message A message that will be shown when the values are not equal.\r\n */\r\n public abstract assertEqual<T>(left: T, right: T, message?: string): void;\r\n\r\n /**\r\n * Assert that the provided values are not equal.\r\n * @param left The first value.\r\n * @param right The second value.\r\n */\r\n public abstract assertNotEqual<T>(left: T, right: T): void;\r\n\r\n /**\r\n * Assert that the provided value is false.\r\n * @param value The value to check.\r\n */\r\n public assertFalse(value: boolean): asserts value is false\r\n {\r\n Test.assertFalse(this, value);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is false.\r\n * @param value The value to check.\r\n */\r\n public static assertFalse(test: Test, value: boolean): asserts value is false\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(test, \"test\");\r\n\r\n test.assertSame(value, false);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is true.\r\n * @param value The value to check.\r\n */\r\n public assertTrue(value: boolean): asserts value is true\r\n {\r\n Test.assertTrue(this, value);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is true.\r\n * @param value The value to check.\r\n */\r\n public static assertTrue(test: Test, value: boolean): asserts value is true\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(test, \"test\");\r\n\r\n test.assertSame(value, true);\r\n }\r\n\r\n /**\r\n * Assert that the provided action throws the provided {@link Error} when it is run.\r\n * @param action The action to run.\r\n * @param expectedError The optional expected {@link Error} to compare against the thrown\r\n * {@link Error}. If the expected {@link Error} is not provided, then any {@link Error} will\r\n * satisfy this assertion.\r\n */\r\n public abstract assertThrows(action: SyncResult<unknown> | (() => void), expectedError?: Error): void;\r\n\r\n /**\r\n * Assert that the provided action throws the provided {@link Error} when it is run.\r\n * @param action The action to run.\r\n * @param expectedError The expected {@link Error}.\r\n */\r\n public abstract assertThrowsAsync(action: PromiseLike<unknown> | (() => PromiseLike<unknown>), expectedError: Error): PromiseAsyncResult<void>;\r\n\r\n /**\r\n * Assert that the provided value is an instance of the provided {@link Type}.\r\n * @param value The value to check.\r\n * @param type The {@link Type} to check.\r\n * @param expression The expression that produced the value.\r\n * @param message An optional error message.\r\n */\r\n public assertInstanceOf<T>(value: unknown, type: Type<T>, typeCheck?: (value: unknown) => value is T): asserts value is T\r\n {\r\n return Test.assertInstanceOf(this, value, type, typeCheck);\r\n }\r\n\r\n /**\r\n * Assert that the provided value is an instance of the provided {@link Type}.\r\n * @param value The value to check.\r\n * @param type The {@link Type} to check.\r\n * @param expression The expression that produced the value.\r\n * @param message An optional error message.\r\n */\r\n public static assertInstanceOf<T>(test: Test, value: unknown, type: Type<T>, typeCheck?: (value: unknown) => value is T): asserts value is T\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(type, \"type\");\r\n\r\n if (isUndefinedOrNull(typeCheck))\r\n {\r\n typeCheck = ((value: unknown) => value instanceof type) as (value: unknown) => value is T;\r\n }\r\n\r\n if (!typeCheck(value))\r\n {\r\n test.fail(`Expected value to be of type ${type.name} but found ${value} instead.`);\r\n }\r\n }\r\n}","import { JavascriptIterable } from \"../sources/javascript\";\r\nimport { PreCondition } from \"../sources/preCondition\";\r\nimport { join } from \"../sources/strings\";\r\n\r\nexport class FailedTest\r\n{\r\n private readonly fullTestNameParts: JavascriptIterable<string>;\r\n private readonly error: unknown;\r\n\r\n private constructor(fullTestNameParts: JavascriptIterable<string>, error: unknown)\r\n {\r\n PreCondition.assertNotEmpty(fullTestNameParts, \"fullTestName\");\r\n PreCondition.assertNotUndefinedAndNotNull(error, \"error\");\r\n\r\n this.fullTestNameParts = fullTestNameParts;\r\n this.error = error;\r\n }\r\n\r\n public static create(fullTestNameParts: JavascriptIterable<string>, error: unknown): FailedTest\r\n {\r\n return new FailedTest(fullTestNameParts, error);\r\n }\r\n\r\n public getFullTestNameParts(): JavascriptIterable<string>\r\n {\r\n return this.fullTestNameParts;\r\n }\r\n\r\n public getFullTestName(): string\r\n {\r\n return join(\" \", this.fullTestNameParts);\r\n }\r\n\r\n public getError(): unknown\r\n {\r\n return this.error;\r\n }\r\n\r\n public getErrorMessage(): string\r\n {\r\n return this.error instanceof Error && this.error.stack ? this.error.stack : `${this.error}`;\r\n }\r\n}","import { JavascriptIterable } from \"../sources/javascript\";\r\nimport { PreCondition } from \"../sources/preCondition\";\r\nimport { join } from \"../sources/strings\";\r\nimport { TestSkip } from \"./testSkip\";\r\n\r\nexport class SkippedTest\r\n{\r\n private readonly skip: TestSkip;\r\n private readonly fullTestNameParts: JavascriptIterable<string>;\r\n\r\n private constructor(skip: TestSkip, fullTestNameParts: JavascriptIterable<string>)\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(skip, \"skip\");\r\n PreCondition.assertNotEmpty(fullTestNameParts, \"fullTestNameParts\");\r\n\r\n this.skip = skip;\r\n this.fullTestNameParts = fullTestNameParts;\r\n }\r\n\r\n public static create(skip: TestSkip, fullTestNameParts: JavascriptIterable<string>): SkippedTest\r\n {\r\n return new SkippedTest(skip, fullTestNameParts);\r\n }\r\n\r\n public getSkipMessage(): string\r\n {\r\n return this.skip.getMessage();\r\n }\r\n\r\n public getFullTestNameParts(): JavascriptIterable<string>\r\n {\r\n return this.fullTestNameParts;\r\n }\r\n\r\n public getFullTestName(): string\r\n {\r\n return join(\" \", this.fullTestNameParts);\r\n }\r\n}","import { JavascriptIterable } from \"../sources/javascript\";\r\nimport { List } from \"../sources/list\";\r\nimport { PreCondition } from \"../sources/preCondition\";\r\nimport { join } from \"../sources/strings\";\r\nimport { TestSkip } from \"./testSkip\";\r\n\r\nexport class TestAction\r\n{\r\n private readonly parent: TestAction | undefined;\r\n private readonly name: string;\r\n private readonly skip: TestSkip | undefined;\r\n private readonly action: () => (void | Promise<void>);\r\n\r\n private constructor(parent: TestAction | undefined, name: string, skip: TestSkip | undefined, action: () => (void | Promise<void>))\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(name, \"name\");\r\n PreCondition.assertNotUndefinedAndNotNull(action, \"action\");\r\n\r\n this.parent = parent;\r\n this.name = name;\r\n this.skip = skip;\r\n this.action = action;\r\n }\r\n\r\n public static create(parent: TestAction | undefined, name: string, skip: TestSkip | undefined, action: () => (void | Promise<void>)): TestAction\r\n {\r\n return new TestAction(parent, name, skip, action);\r\n }\r\n\r\n public getParent(): TestAction | undefined\r\n {\r\n return this.parent;\r\n }\r\n\r\n public getName(): string\r\n {\r\n return this.name;\r\n }\r\n\r\n public getFullNameParts(): JavascriptIterable<string>\r\n {\r\n const result: List<string> = List.create();\r\n if (this.parent)\r\n {\r\n result.addAll(this.parent.getFullNameParts());\r\n }\r\n result.add(this.getName());\r\n return result;\r\n }\r\n\r\n public getFullName(): string\r\n {\r\n return join(\" \", this.getFullNameParts());\r\n }\r\n\r\n public getSkip(): TestSkip | undefined\r\n {\r\n return this.skip || this.parent?.getSkip();\r\n }\r\n\r\n public shouldSkip(): boolean\r\n {\r\n return !!this.getSkip()?.getShouldSkip();\r\n }\r\n\r\n public getAction(): () => (void | Promise<void>)\r\n {\r\n return this.action;\r\n }\r\n \r\n public runAsync(): void | Promise<void>\r\n {\r\n return this.action();\r\n }\r\n}","import { PreCondition } from \"../sources/preCondition\";\r\nimport { TestSkip } from \"./testSkip\";\r\n\r\n/**\r\n * A type that is used to mark that a test group or a test should be skipped.\r\n */\r\nexport class BasicTestSkip implements TestSkip\r\n{\r\n private readonly shouldSkip: boolean;\r\n private readonly message: string;\r\n\r\n private constructor(shouldSkip: boolean, message: string)\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(message, \"message\");\r\n\r\n this.shouldSkip = shouldSkip;\r\n this.message = message;\r\n }\r\n\r\n /**\r\n * Create a new {@link TestSkip} with the provided properties.\r\n * @param shouldSkip Whether the tests associated with the new {@link TestSkip}\r\n * should be skipped.\r\n * @param message The message that explains why the tests associated with this {@link TestSkip}\r\n * should be skipped.\r\n */\r\n public static create(shouldSkip?: boolean, message?: string): BasicTestSkip\r\n {\r\n if (shouldSkip === undefined || shouldSkip === null)\r\n {\r\n shouldSkip = true;\r\n }\r\n\r\n if (message === undefined || message === null)\r\n {\r\n message = \"\";\r\n }\r\n\r\n return new BasicTestSkip(shouldSkip, message);\r\n }\r\n\r\n public getShouldSkip(): boolean\r\n {\r\n return this.shouldSkip;\r\n }\r\n\r\n public getMessage(): string\r\n {\r\n return this.message;\r\n }\r\n}","import { BasicTestSkip } from \"./basicTestSkip\";\r\n\r\n/**\r\n * A type that is used to mark that a test group or a test should be skipped.\r\n */\r\nexport abstract class TestSkip\r\n{\r\n protected constructor()\r\n {\r\n }\r\n\r\n /**\r\n * Create a new {@link TestSkip} with the provided properties.\r\n * @param shouldSkip Whether the tests associated with the new {@link TestSkip}\r\n * should be skipped.\r\n * @param message The message that explains why the tests associated with this {@link TestSkip}\r\n * should be skipped.\r\n */\r\n public static create(shouldSkip?: boolean, message?: string): TestSkip\r\n {\r\n return BasicTestSkip.create(shouldSkip, message);\r\n }\r\n\r\n /**\r\n * Get whether the tests associated with this {@link TestSkip} should be skipped.\r\n */\r\n public abstract getShouldSkip(): boolean;\r\n\r\n /**\r\n * Get the message that explains why the tests associated with this {@link TestSkip}\r\n * should be skipped.\r\n */\r\n public abstract getMessage(): string;\r\n}","import { andList } from \"../sources/english\";\r\nimport { Iterable } from \"../sources/iterable\";\r\nimport { PreCondition } from \"../sources/preCondition\";\r\nimport { ToStringFunctions } from \"../sources/toStringFunctions\";\r\nimport {\r\n getName, getParameterCount, isBoolean, isFunction, isString, Type\r\n} from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { TestSkip } from \"./testSkip\";\r\n\r\n/**\r\n * A type that can be used to run tests.\r\n */\r\nexport abstract class TestRunner\r\n{\r\n /**\r\n * Get a {@link string} that concatenates the {@link string} representation of each\r\n * of the provided values into an \"and-list\".\r\n * @param values The values to concatenate.\r\n */\r\n public andList(values: unknown[] | Iterable<unknown>): string\r\n {\r\n return TestRunner.andList(this, values);\r\n }\r\n\r\n /**\r\n * Get a {@link string} that concatenates the {@link string} representation of each\r\n * of the provided values into an \"and-list\".\r\n * @param values The values to concatenate.\r\n */\r\n public static andList(runner: TestRunner, values: unknown[] | Iterable<unknown>): string\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(runner, \"runner\");\r\n PreCondition.assertNotUndefinedAndNotNull(values, \"values\");\r\n\r\n return andList(values.map((value: unknown) => runner.toString(value)));\r\n }\r\n\r\n /**\r\n * Get the {@link string} representation of the provided value.\r\n * @param value The value to get the {@link string} representation of.\r\n */\r\n public toString(value: unknown): string\r\n {\r\n return TestRunner.toString(this, value);\r\n }\r\n\r\n /**\r\n * Get the {@link string} representation of the provided value.\r\n * @param value The value to get the {@link string} representation of.\r\n */\r\n public static toString(_runner: TestRunner, value: unknown): string\r\n {\r\n const toStringFunctions: ToStringFunctions = ToStringFunctions.create();\r\n return toStringFunctions.toString(value);\r\n }\r\n\r\n public skip(message?: string): TestSkip;\r\n /**\r\n * Create a {@link TestSkip} object that will prevent tests from being run.\r\n * @param shouldSkip Whether these tests should be skipped.\r\n * @param message The message that explains why the tests are being skipped.\r\n */\r\n public skip(shouldSkip: boolean, message?: string): TestSkip;\r\n skip(messageOrShouldSkip?: string | boolean | undefined, message?: string): TestSkip\r\n {\r\n let shouldSkip: boolean;\r\n if (!isBoolean(messageOrShouldSkip))\r\n {\r\n shouldSkip = true;\r\n message = messageOrShouldSkip;\r\n }\r\n else\r\n {\r\n shouldSkip = messageOrShouldSkip;\r\n }\r\n return TestRunner.skip(this, shouldSkip, message);\r\n }\r\n\r\n /**\r\n * Create a {@link TestSkip} object that will prevent tests from being run.\r\n * @param shouldSkip Whether these tests should be skipped.\r\n * @param message The message that explains why the tests are being skipped.\r\n */\r\n public static skip(_runner: TestRunner, shouldSkip?: boolean, message?: string): TestSkip\r\n {\r\n return TestSkip.create(shouldSkip, message);\r\n }\r\n\r\n public static runTestAction(runner: TestRunner, name: string, skip: TestSkip | undefined, testAction: (() => void) | ((test: Test) => void)): void\r\n {\r\n if (getParameterCount(testAction) === 0)\r\n {\r\n runner.testGroup(name, skip, <() => void>testAction);\r\n }\r\n else\r\n {\r\n runner.test(name, skip, <(test: Test) => void>testAction);\r\n }\r\n }\r\n\r\n /**\r\n * Create a test group that will test the provided file.\r\n * @param fileName The name of the file that is being tested.\r\n * @param testAction The action that will run the tests.\r\n */\r\n public testFile(fileName: string, testAction: (() => void) | ((test: Test) => void)): void;\r\n /**\r\n * Create a test group that will test the provided file.\r\n * @param fileName The name of the file that is being tested.\r\n * @param skip A value that indicates whether these tests should be skipped.\r\n * @param testAction The action that will run the tests.\r\n */\r\n public testFile(fileName: string, skip: TestSkip | undefined, testAction: (() => void) | ((test: Test) => void)): void;\r\n testFile(fileName: string, skipOrTestAction: TestSkip | ((() => void) | ((test: Test) => void)) | undefined, testAction?: (() => void) | ((test: Test) => void)): void\r\n {\r\n TestRunner.testFile(this, fileName, skipOrTestAction, testAction);\r\n }\r\n\r\n /**\r\n * Create a test group that will test the provided file.\r\n * @param runner The {@link TestRunner} that will run the tests.\r\n * @param fileName The name of the file that is being tested.\r\n * @param testAction The action that will run the tests.\r\n */\r\n public static testFile(runner: TestRunner, fileName: string, skipOrTestAction: TestSkip | ((() => void) | ((test: Test) => void)) | undefined, testAction?: (() => void) | ((test: Test) => void)): void\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(runner, \"runner\");\r\n PreCondition.assertNotUndefinedAndNotNull(fileName, \"fileName\");\r\n PreCondition.assertNotEmpty(fileName, \"fileName\");\r\n let skip: TestSkip | undefined;\r\n if (isFunction(skipOrTestAction))\r\n {\r\n PreCondition.assertUndefined(testAction, \"testAction\");\r\n\r\n skip = undefined;\r\n testAction = skipOrTestAction;\r\n }\r\n else\r\n {\r\n skip = skipOrTestAction;\r\n }\r\n PreCondition.assertNotUndefinedAndNotNull(testAction, \"testAction\");\r\n\r\n TestRunner.runTestAction(runner, fileName, skip, testAction);\r\n }\r\n\r\n /**\r\n * Create a test group that will test the provided type.\r\n * @param type The {@link Type} or name of the type that is being tested.\r\n * @param testAction The action that will run the tests.\r\n */\r\n public testType(typeNameOrType: string | Type<unknown>, testAction: (() => void) | ((test: Test) => void)): void;\r\n /**\r\n * Create a test group that will test the provided type.\r\n * @param type The {@link Type} or name of the type that is being tested.\r\n * @param skip A value that indicates whether these tests should be skipped.\r\n * @param testAction The action that will run the tests.\r\n */\r\n public testType(typeNameOrType: string | Type<unknown>, skip: TestSkip | undefined, testAction: (() => void) | ((test: Test) => void)): void;\r\n testType(typeNameOrType: string | Type<unknown>, skipOrTestAction: TestSkip | undefined | ((() => void) | ((test: Test) => void)), testAction?: (() => void) | ((test: Test) => void)): void\r\n {\r\n TestRunner.testType(this, typeNameOrType, skipOrTestAction, testAction);\r\n }\r\n\r\n /**\r\n * Create a test group that will test the provided type.\r\n * @param runner The {@link TestRunner} that will run the tests.\r\n * @param type The {@link Type} or name of the type that is being tested.\r\n * @param testAction The action that will run the tests.\r\n */\r\n public static testType(runner: TestRunner, typeNameOrType: string | Type<unknown>, skipOrTestAction: TestSkip | undefined | ((() => void) | ((test: Test) => void)), testAction: ((() => void) | ((test: Test) => void)) | undefined): void\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(runner, \"runner\");\r\n PreCondition.assertNotUndefinedAndNotNull(typeNameOrType, \"typeNameOrType\");\r\n let typeName: string;\r\n if (isString(typeNameOrType))\r\n {\r\n typeName = typeNameOrType;\r\n }\r\n else\r\n {\r\n typeName = getName(typeNameOrType);\r\n }\r\n PreCondition.assertNotEmpty(typeName, \"typeName\");\r\n let skip: TestSkip | undefined;\r\n if (isFunction(skipOrTestAction))\r\n {\r\n PreCondition.assertUndefined(testAction, \"testAction\");\r\n\r\n skip = undefined;\r\n testAction = skipOrTestAction;\r\n }\r\n else\r\n {\r\n skip = skipOrTestAction;\r\n }\r\n PreCondition.assertNotUndefinedAndNotNull(testAction, \"testAction\");\r\n\r\n TestRunner.runTestAction(runner, typeName, skip, testAction);\r\n }\r\n\r\n /**\r\n * Create a test group that will test the provided function.\r\n * @param functionSignature The signature of the function that is being tested.\r\n * @param testAction The action that will run the tests.\r\n */\r\n public testFunction(functionSignature: string, testAction: (() => void) | ((test: Test) => void)): void;\r\n public testFunction(functionSignature: string, skip: TestSkip | undefined, testAction: (() => void) | ((test: Test) => void)): void;\r\n testFunction(functionSignature: string, skipOrTestAction: TestSkip | undefined | ((() => void) | ((test: Test) => void)), testAction?: (() => void) | ((test: Test) => void)): void\r\n {\r\n TestRunner.testFunction(this, functionSignature, skipOrTestAction, testAction);\r\n }\r\n\r\n /**\r\n * Create a test group that will test the provided function.\r\n * @param runner The {@link TestRunner} that will run the tests.\r\n * @param functionSignature The signature of the function that is being tested.\r\n * @param testAction The action that will run the tests.\r\n */\r\n public static testFunction(runner: TestRunner, functionSignature: string, skipOrTestAction: TestSkip | undefined | ((() => void) | ((test: Test) => void)), testAction: ((() => void) | ((test: Test) => void)) | undefined): void\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(runner, \"runner\");\r\n PreCondition.assertNotEmpty(functionSignature, \"functionSignature\");\r\n let skip: TestSkip | undefined;\r\n if (isFunction(skipOrTestAction))\r\n {\r\n PreCondition.assertUndefined(testAction, \"testAction\");\r\n\r\n skip = undefined;\r\n testAction = skipOrTestAction;\r\n }\r\n else\r\n {\r\n skip = skipOrTestAction;\r\n }\r\n PreCondition.assertNotUndefinedAndNotNull(testAction, \"testAction\");\r\n\r\n TestRunner.runTestAction(runner, functionSignature, skip, testAction);\r\n }\r\n\r\n /**\r\n * Create and run a test group with the provided name.\r\n * @param testGroupName The name of the test group to run.\r\n * @param testAction The action that runs the test group.\r\n */\r\n public abstract testGroup(testGroupName: string, testAction: () => void): void;\r\n /**\r\n * Create and run a test group with the provided name.\r\n * @param testGroupName The name of the test group to run.\r\n * @param testAction The action that runs the test group.\r\n */\r\n public abstract testGroup(testGroupName: string, skip: TestSkip | undefined, testAction: () => void): void;\r\n\r\n /**\r\n * Create and run a test with the provided name.\r\n * @param testName The name of the test to run.\r\n * @param testAction The action that runs the test.\r\n */\r\n public abstract test(testName: string, testAction: (test: Test) => void): void;\r\n /**\r\n * Create and run a test with the provided name.\r\n * @param testName The name of the test to run.\r\n * @param testAction The action that runs the test.\r\n */\r\n public abstract test(testName: string, skip: TestSkip | undefined, testAction: (test: Test) => void): void;\r\n}","import { PromiseAsyncResult } from \"../sources/promiseAsyncResult\";\r\nimport { CharacterWriteStream } from \"../sources/characterWriteStream\";\r\nimport { CurrentProcess } from \"../sources/currentProcess\";\r\nimport { Iterable } from \"../sources/iterable\";\r\nimport { JavascriptIterable } from \"../sources/javascript\";\r\nimport { List } from \"../sources/list\";\r\nimport { NodeJSCharacterWriteStream } from \"../sources/nodeJSCharacterWriteStream\";\r\nimport { PreCondition } from \"../sources/preCondition\";\r\nimport { join } from \"../sources/strings\";\r\nimport { isFunction, isJavascriptIterable, isPromise } from \"../sources/types\";\r\nimport { AssertTest } from \"./assertTest\";\r\nimport { FailedTest } from \"./failedTest\";\r\nimport { SkippedTest } from \"./skippedTest\";\r\nimport { Test } from \"./test\";\r\nimport { TestAction } from \"./testAction\";\r\nimport { TestRunner } from \"./testRunner\";\r\nimport { TestSkip } from \"./testSkip\";\r\n\r\nexport type ConsoleTestFunction = (runner: ConsoleTestRunner) => (void | Promise<void>);\r\nexport type ConsoleTestFunctionContainer = { test: ConsoleTestFunction };\r\n\r\nexport class ConsoleTestRunner extends TestRunner\r\n{\r\n private writeStream: CharacterWriteStream;\r\n\r\n private readonly pendingActions: List<TestAction>;\r\n private pendingActionsInsertIndex: number;\r\n private currentTestAction: TestAction | undefined;\r\n private currentTest: Test | undefined;\r\n\r\n private passedTestCount: number;\r\n private readonly skippedTests: List<SkippedTest>;\r\n private readonly testFailures: List<FailedTest>;\r\n\r\n public constructor()\r\n {\r\n super();\r\n\r\n this.writeStream = NodeJSCharacterWriteStream.create(process.stdout);\r\n\r\n this.pendingActions = List.create();\r\n this.pendingActionsInsertIndex = 0;\r\n\r\n this.passedTestCount = 0;\r\n this.skippedTests = List.create();\r\n this.testFailures = List.create();\r\n }\r\n\r\n public static create(): ConsoleTestRunner\r\n {\r\n return new ConsoleTestRunner();\r\n }\r\n\r\n public static run(testFunction: ConsoleTestFunction | ConsoleTestFunctionContainer): Promise<void>;\r\n public static run(testFunctions: JavascriptIterable<ConsoleTestFunction | ConsoleTestFunctionContainer>): Promise<void>;\r\n static run(testFunctionOrTestFunctions: ConsoleTestFunction | ConsoleTestFunctionContainer | JavascriptIterable<ConsoleTestFunction | ConsoleTestFunctionContainer>): Promise<void>\r\n {\r\n let testFunction: ConsoleTestFunction;\r\n if (isFunction(testFunctionOrTestFunctions))\r\n {\r\n testFunction = testFunctionOrTestFunctions;\r\n }\r\n else if (!isJavascriptIterable(testFunctionOrTestFunctions))\r\n {\r\n testFunction = testFunctionOrTestFunctions.test;\r\n }\r\n else\r\n {\r\n const testFunctions: JavascriptIterable<ConsoleTestFunction | ConsoleTestFunctionContainer> = testFunctionOrTestFunctions;\r\n testFunction = async (runner: ConsoleTestRunner) =>\r\n {\r\n for (const testFunction of testFunctions)\r\n {\r\n if (isFunction(testFunction))\r\n {\r\n await testFunction(runner);\r\n }\r\n else\r\n {\r\n await testFunction.test(runner);\r\n }\r\n }\r\n };\r\n }\r\n\r\n return CurrentProcess.run(async (currentProcess: CurrentProcess) =>\r\n {\r\n const runner: ConsoleTestRunner = ConsoleTestRunner.create()\r\n .setWriteStream(currentProcess.getOutputWriteStream());\r\n\r\n await testFunction(runner);\r\n\r\n await runner.runAsync();\r\n\r\n await runner.printSummary();\r\n });\r\n }\r\n\r\n public setWriteStream(writeStream: CharacterWriteStream): this\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(writeStream, \"writeStream\");\r\n\r\n this.writeStream = writeStream;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get the number of {@link TestAction}s that have yet to be executed.\r\n */\r\n public getPendingTestActionsCount(): number\r\n {\r\n return this.pendingActions.getCount().await();\r\n }\r\n\r\n /**\r\n * Get the index in the pending-{@link TestAction} stack that new {@link TestAction}s will be\r\n * inserted at.\r\n */\r\n public getPendingTestActionsInsertIndex(): number\r\n {\r\n return this.pendingActionsInsertIndex;\r\n }\r\n\r\n /**\r\n * Get the number of tests that have been skipped.\r\n */\r\n public getSkippedTestCount(): number\r\n {\r\n return this.skippedTests.getCount().await();\r\n }\r\n\r\n public getSkippedTests(): Iterable<SkippedTest>\r\n {\r\n return this.skippedTests;\r\n }\r\n\r\n /**\r\n * Get the number of tests that have passed.\r\n */\r\n public getPassedTestCount(): number\r\n {\r\n return this.passedTestCount;\r\n }\r\n\r\n public getFailedTestCount(): number\r\n {\r\n return this.testFailures.getCount().await();\r\n }\r\n\r\n public getFailedTests(): Iterable<FailedTest>\r\n {\r\n return this.testFailures;\r\n }\r\n\r\n /**\r\n * Get the {@link TestAction} that is currently executing or undefined if no {@link TestAction}\r\n * is executing.\r\n */\r\n public getCurrentTestAction(): TestAction | undefined\r\n {\r\n return this.currentTestAction;\r\n }\r\n\r\n public getCurrentTest(): Test | undefined\r\n {\r\n return this.currentTest;\r\n }\r\n\r\n private assertNoCurrentTest(): void\r\n {\r\n if (this.currentTest !== undefined)\r\n {\r\n this.currentTest.fail(\"Can't start a new test group or a new test while running a test.\");\r\n }\r\n }\r\n\r\n public beforeTest(fullTestNameParts: JavascriptIterable<string>): PromiseAsyncResult<void>\r\n {\r\n return PromiseAsyncResult.create(async () =>\r\n {\r\n await this.writeStream.writeString(join(\" \", fullTestNameParts));\r\n });\r\n }\r\n\r\n public afterPassedTest(): PromiseAsyncResult<void>\r\n {\r\n return PromiseAsyncResult.create(async () =>\r\n {\r\n await this.writeStream.writeLine(\" - Passed\");\r\n this.passedTestCount++;\r\n });\r\n }\r\n\r\n public afterSkippedTest(fullTestNameParts: JavascriptIterable<string>, skip: TestSkip | undefined): PromiseAsyncResult<void>\r\n {\r\n PreCondition.assertNotEmpty(fullTestNameParts, \"fullTestNameParts\");\r\n PreCondition.assertNotUndefinedAndNotNull(skip, \"skip\");\r\n\r\n return PromiseAsyncResult.create(async () =>\r\n {\r\n this.skippedTests.add(SkippedTest.create(skip, fullTestNameParts));\r\n await this.writeStream.writeLine(\" - Skipped\");\r\n });\r\n }\r\n\r\n public afterFailedTest(fullTestNameParts: JavascriptIterable<string>, error: unknown): PromiseAsyncResult<void>\r\n {\r\n PreCondition.assertNotEmpty(fullTestNameParts, \"fullTestNameParts\");\r\n PreCondition.assertNotUndefinedAndNotNull(error, \"error\");\r\n\r\n return PromiseAsyncResult.create(async () =>\r\n {\r\n this.testFailures.add(FailedTest.create(fullTestNameParts, error));\r\n await this.writeStream.writeLine(\" - Failed\");\r\n });\r\n }\r\n\r\n public testGroup(testGroupName: string, testAction: () => (void | Promise<void>)): void;\r\n public testGroup(testGroupName: string, skip: TestSkip | undefined, testAction: () => (void | Promise<void>)): void;\r\n testGroup(testGroupName: string, skipOrTestAction: TestSkip | undefined | (() => (void | Promise<void>)), testAction?: () => (void | Promise<void>)): void\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(testGroupName, \"testGroupName\");\r\n PreCondition.assertNotEmpty(testGroupName, \"testGroupName\");\r\n let skip: TestSkip | undefined;\r\n if (isFunction(skipOrTestAction))\r\n {\r\n PreCondition.assertUndefined(testAction, \"testAction\");\r\n\r\n skip = undefined;\r\n testAction = skipOrTestAction;\r\n }\r\n else\r\n {\r\n skip = skipOrTestAction;\r\n }\r\n PreCondition.assertNotUndefinedAndNotNull(testAction, \"testAction\");\r\n\r\n this.assertNoCurrentTest();\r\n\r\n this.pendingActions.insert(\r\n this.pendingActionsInsertIndex,\r\n TestAction.create(\r\n this.getCurrentTestAction(),\r\n testGroupName,\r\n skip,\r\n async () =>\r\n {\r\n const previousTestActionInsertIndex: number = this.pendingActionsInsertIndex;\r\n this.pendingActionsInsertIndex = this.pendingActions.getCount().await();\r\n const currentTestAction: TestAction = this.getCurrentTestAction()!;\r\n try\r\n {\r\n await testAction();\r\n }\r\n catch (error)\r\n {\r\n await this.afterFailedTest(currentTestAction.getFullNameParts(), error);\r\n }\r\n finally\r\n {\r\n this.pendingActionsInsertIndex = previousTestActionInsertIndex;\r\n }\r\n },\r\n ),\r\n );\r\n }\r\n\r\n public test(testName: string, testAction: (test: Test) => (void | Promise<void>)): void;\r\n public test(testName: string, skip: TestSkip | undefined, testAction: (test: Test) => (void | Promise<void>)): void;\r\n test(testName: string, skipOrTestAction: TestSkip | undefined | ((test: Test) => (void | Promise<void>)), testAction?: (test: Test) => (void | Promise<void>)): void\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(testName, \"testName\");\r\n PreCondition.assertNotEmpty(testName, \"testName\");\r\n let skip: TestSkip | undefined;\r\n if (isFunction(skipOrTestAction))\r\n {\r\n PreCondition.assertUndefined(testAction, \"testAction\");\r\n\r\n skip = undefined;\r\n testAction = skipOrTestAction;\r\n }\r\n else\r\n {\r\n skip = skipOrTestAction;\r\n }\r\n PreCondition.assertNotUndefinedAndNotNull(testAction, \"testAction\");\r\n\r\n this.assertNoCurrentTest();\r\n\r\n this.pendingActions.insert(\r\n this.pendingActionsInsertIndex,\r\n TestAction.create(\r\n this.getCurrentTestAction(),\r\n testName,\r\n skip,\r\n async () =>\r\n {\r\n const currentTestAction: TestAction = this.getCurrentTestAction()!;\r\n try\r\n {\r\n await this.beforeTest(currentTestAction.getFullNameParts());\r\n if (currentTestAction.shouldSkip())\r\n {\r\n await this.afterSkippedTest(currentTestAction.getFullNameParts(), currentTestAction.getSkip());\r\n }\r\n else\r\n {\r\n this.currentTest = AssertTest.create(testName);\r\n try\r\n {\r\n await testAction(this.currentTest);\r\n await this.afterPassedTest();\r\n }\r\n finally\r\n {\r\n this.currentTest = undefined;\r\n }\r\n }\r\n }\r\n catch (error)\r\n {\r\n await this.afterFailedTest(currentTestAction.getFullNameParts(), error);\r\n }\r\n },\r\n ),\r\n );\r\n }\r\n\r\n public async runAsync(): Promise<void>\r\n {\r\n while (this.pendingActions.any().await())\r\n {\r\n this.currentTestAction = this.pendingActions.removeLast().await();\r\n try\r\n {\r\n const result: void | Promise<void> = this.currentTestAction.runAsync();\r\n if (isPromise(result))\r\n {\r\n await result;\r\n }\r\n }\r\n finally\r\n {\r\n this.currentTestAction = undefined;\r\n }\r\n }\r\n }\r\n\r\n public printSummary(): PromiseAsyncResult<void>\r\n {\r\n return PromiseAsyncResult.create(async () =>\r\n {\r\n await this.writeStream.writeLine();\r\n\r\n const skippedTests: Iterable<SkippedTest> = this.getSkippedTests();\r\n if (await skippedTests.any())\r\n {\r\n await this.writeStream.writeLine(`Skipped Tests:`);\r\n let counter: number = 0;\r\n for (const skippedTest of skippedTests)\r\n {\r\n await this.writeStream.writeLine(`${++counter}) ${skippedTest.getFullTestName()}`);\r\n const skipMessage: string = skippedTest.getSkipMessage();\r\n if (skipMessage)\r\n {\r\n await this.writeStream.writeLine(` ${skipMessage}`);\r\n }\r\n }\r\n await this.writeStream.writeLine();\r\n }\r\n\r\n const failedTests: Iterable<FailedTest> = this.getFailedTests();\r\n if (await failedTests.any())\r\n {\r\n await this.writeStream.writeLine(\"Failed Tests:\");\r\n\r\n let counter: number = 0;\r\n for (const failedTest of failedTests)\r\n {\r\n await this.writeStream.writeLine(`${++counter}) ${failedTest.getFullTestName()}`);\r\n await this.writeStream.writeLine(` ${failedTest.getErrorMessage()}`);\r\n await this.writeStream.writeLine();\r\n }\r\n }\r\n\r\n const passedTestCount: number = this.getPassedTestCount();\r\n if (passedTestCount > 0)\r\n {\r\n await this.writeStream.writeLine(`Passed: ${passedTestCount}`);\r\n }\r\n\r\n if (await skippedTests.any())\r\n {\r\n await this.writeStream.writeLine(`Skipped: ${skippedTests.getCount().await()}`);\r\n }\r\n\r\n if (await failedTests.any())\r\n {\r\n await this.writeStream.writeLine(`Failed: ${failedTests.getCount().await()}`);\r\n }\r\n });\r\n }\r\n}","import { AssertionError } from \"assert\";\nimport { AssertTest } from \"./assertTest\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"assertTest.ts\", () =>\n {\n runner.testType(\"AssertTest\", () =>\n {\n runner.testFunction(\"assertThrows()\", () =>\n {\n runner.test(\"with throwing action\", (test: Test) =>\n {\n const at: AssertTest = AssertTest.create(\"fake-test-name\");\n at.assertThrows(() => { throw new Error(\"abc\"); }, new Error(\"abc\"));\n });\n\n runner.test(\"with non-throwing action\", (test: Test) =>\n {\n const at: AssertTest = AssertTest.create(\"fake-test-name\");\n test.assertThrows(\n () => at.assertThrows(() => {}, new Error(\"oops\")),\n new AssertionError({\n message: \"Missing expected exception (Error).\",\n operator: \"throws\",\n expected: new Error(\"oops\"),\n }),\n );\n });\n });\n\n runner.testFunction(\"assertThrowsAsync()\", () =>\n {\n runner.test(\"with throwing sync action\", async (test: Test) =>\n {\n const at: AssertTest = AssertTest.create(\"fake-test-name\");\n await at.assertThrowsAsync(() => { throw new Error(\"abc\"); }, new Error(\"abc\"));\n });\n\n runner.test(\"with throwing async action\", async (test: Test) =>\n {\n const at: AssertTest = AssertTest.create(\"fake-test-name\");\n await at.assertThrowsAsync(async () => { throw new Error(\"abc\"); }, new Error(\"abc\"));\n });\n\n runner.test(\"with rejected Promise\", async (test: Test) =>\n {\n const at: AssertTest = AssertTest.create(\"fake-test-name\");\n await at.assertThrowsAsync(Promise.reject(new Error(\"abc\")), new Error(\"abc\"));\n });\n\n runner.test(\"with throwing action that returns a rejected Promise\", async (test: Test) =>\n {\n const at: AssertTest = AssertTest.create(\"fake-test-name\");\n await at.assertThrowsAsync(() => Promise.reject(new Error(\"abc\")), new Error(\"abc\"));\n });\n\n runner.test(\"with non-throwing async action\", async (test: Test) =>\n {\n const at: AssertTest = AssertTest.create(\"fake-test-name\");\n await test.assertThrowsAsync(\n async () => await at.assertThrowsAsync(async () => {}, new Error(\"oops\")),\n new AssertionError({\n message: \"Missing expected rejection (Error).\",\n operator: \"rejects\",\n expected: new Error(\"oops\"),\n }),\n );\n });\n });\n });\n });\n}","import { ByteListStream } from \"../sources/byteListStream\";\nimport { EmptyError } from \"../sources/emptyError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"byteListStream.ts\", () =>\n {\n runner.testType(\"ByteListStream\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n runner.test(\"with no arguments\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with empty array\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([]);\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with non-empty array\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n });\n\n runner.testFunction(\"writeBytes()\", () =>\n {\n runner.test(\"with undefined bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes(undefined!), new PreConditionError(\n \"Expression: bytes\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with null bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes(null!), new PreConditionError(\n \"Expression: bytes\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with empty bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertEqual(0, stream.writeBytes([]).await());\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with non-empty bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n\n test.assertEqual(4, stream.writeBytes([1, 2, 3, 4]).await());\n test.assertEqual(4, stream.getAvailableByteCount());\n\n const bytes: Uint8Array = stream.readBytes(10).await();\n test.assertNotUndefinedAndNotNull(bytes);\n test.assertEqual(4, bytes.length);\n test.assertEqual(new Uint8Array([1, 2, 3, 4]), bytes);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with negative startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes([1, 2], -1), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 2\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with too large startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes([1, 2], 3), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 2\",\n \"Actual: 3\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with valid non-zero startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n const writeBytesResult: number = stream.writeBytes([1, 2], 1).await();\n test.assertEqual(1, writeBytesResult);\n test.assertEqual(1, stream.getAvailableByteCount());\n\n test.assertEqual(new Uint8Array([2]), stream.readBytes(5).await());\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex equal to bytes length\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n const writeBytesResult: number = stream.writeBytes([1, 2], 2).await();\n test.assertEqual(0, writeBytesResult);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with negative length\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes([1, 2], 0, -1), new PreConditionError(\n \"Expression: length\",\n \"Expected: between 0 and 2\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with too large length\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.writeBytes([1, 2], 0, 3), new PreConditionError(\n \"Expression: length\",\n \"Expected: between 0 and 2\",\n \"Actual: 3\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with valid startIndex and length values\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n const writeBytesResult: number = stream.writeBytes([1, 2, 3, 4, 5], 2, 2).await();\n test.assertEqual(2, writeBytesResult);\n test.assertEqual(2, stream.getAvailableByteCount());\n\n test.assertEqual(new Uint8Array([3, 4]), stream.readBytes(50).await());\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n });\n\n runner.testFunction(\"readBytes()\", () =>\n {\n runner.testGroup(\"with empty stream\", () =>\n {\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.readBytes(-1).await(), new PreConditionError(\n \"Expression: count\",\n \"Expected: greater than or equal to 0\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with zero count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.readBytes(0).await(), new EmptyError());\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with positive count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create();\n test.assertThrows(() => stream.readBytes(1).await(), new EmptyError());\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n });\n\n runner.testGroup(\"with non-empty stream\", () =>\n {\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n test.assertThrows(() => stream.readBytes(-1).await(), new PreConditionError(\n \"Expression: count\",\n \"Expected: greater than or equal to 0\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with zero count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const readBytesResult: Uint8Array = stream.readBytes(0).await();\n test.assertEqual(new Uint8Array(), readBytesResult);\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with positive count less than bytes available\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const readBytesResult: Uint8Array = stream.readBytes(2).await();\n test.assertEqual(new Uint8Array([1, 2]), readBytesResult);\n test.assertEqual(1, stream.getAvailableByteCount());\n });\n\n runner.test(\"with positive count equal to bytes available\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const readBytesResult: Uint8Array = stream.readBytes(3).await();\n test.assertEqual(new Uint8Array([1, 2, 3]), readBytesResult);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with positive count greater than bytes available\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const readBytesResult: Uint8Array = stream.readBytes(4).await();\n test.assertEqual(new Uint8Array([1, 2, 3]), readBytesResult);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with undefined output\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n test.assertThrows(() => stream.readBytes(undefined!), new PreConditionError(\n \"Expression: output\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with null output\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n test.assertThrows(() => stream.readBytes(null!), new PreConditionError(\n \"Expression: output\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with empty output\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array();\n const readBytesResult: number = stream.readBytes(output).await();\n test.assertEqual(0, readBytesResult);\n test.assertEqual(output, new Uint8Array());\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with output smaller than the available bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(1);\n const readBytesResult: number = stream.readBytes(output).await();\n test.assertEqual(1, readBytesResult);\n test.assertEqual(output, new Uint8Array([1]));\n test.assertEqual(2, stream.getAvailableByteCount());\n });\n\n runner.test(\"with output equal to the available bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(3);\n const readBytesResult: number = stream.readBytes(output).await();\n test.assertEqual(3, readBytesResult);\n test.assertEqual(output, new Uint8Array([1, 2, 3]));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with output larger than available bytes\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n const readBytesResult: number = stream.readBytes(output).await();\n test.assertEqual(3, readBytesResult);\n test.assertEqual(output, new Uint8Array([1, 2, 3, 0, 0]));\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with negative startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertThrows(() => stream.readBytes(output, -1), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 5\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with too large startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertThrows(() => stream.readBytes(output, 6), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 5\",\n \"Actual: 6\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex with enough space to read the entire stream\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertEqual(3, stream.readBytes(output, 2).await());\n test.assertEqual(new Uint8Array([0, 0, 1, 2, 3]), output);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex with not enough space to read the entire stream\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertEqual(2, stream.readBytes(output, 3).await());\n test.assertEqual(new Uint8Array([0, 0, 0, 1, 2]), output);\n test.assertEqual(1, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex equal to output length\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertEqual(0, stream.readBytes(output, 5).await());\n test.assertEqual(new Uint8Array(5), output);\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertThrows(() => stream.readBytes(output, 1, -1), new PreConditionError(\n \"Expression: count\",\n \"Expected: between 0 and 4\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with count larger than output.length - startIndex\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertThrows(() => stream.readBytes(output, 1, 5), new PreConditionError(\n \"Expression: count\",\n \"Expected: between 0 and 4\",\n \"Actual: 5\",\n ));\n test.assertEqual(3, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex with enough space to read the entire stream\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertEqual(3, stream.readBytes(output, 2, 3).await());\n test.assertEqual(new Uint8Array([0, 0, 1, 2, 3]), output);\n test.assertEqual(0, stream.getAvailableByteCount());\n });\n\n runner.test(\"with startIndex with not enough space to read the entire stream\", (test: Test) =>\n {\n const stream: ByteListStream = ByteListStream.create([1, 2, 3]);\n const output: Uint8Array = new Uint8Array(5);\n test.assertEqual(1, stream.readBytes(output, 3, 1).await());\n test.assertEqual(new Uint8Array([0, 0, 0, 1, 0]), output);\n test.assertEqual(2, stream.getAvailableByteCount());\n });\n });\n });\n });\n });\n}","import { ByteList } from \"../sources/byteList\";\nimport { EqualFunctions } from \"../sources/equalFunctions\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { isNumber } from \"../sources/types\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"byteList.ts\", () =>\n {\n \n \n\n\n\n\n\n\n\n\n\n\n \n });\n}","import { Bytes } from \"../sources/bytes\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"bytes.ts\", () =>\r\n {\r\n runner.testType(\"Bytes\", () =>\r\n {\r\n runner.test(\"minimumValue\", (test: Test) =>\r\n {\r\n test.assertSame(Bytes.minimumValue, 0);\r\n });\r\n\r\n runner.test(\"maximumValue\", (test: Test) =>\r\n {\r\n test.assertSame(Bytes.maximumValue, 255);\r\n });\r\n\r\n runner.testFunction(\"isByte(number)\", () =>\r\n {\r\n function isByteTest(value: number, expected: boolean): void\r\n {\r\n runner.test(`with ${value}`, (test: Test) =>\r\n {\r\n test.assertSame(Bytes.isByte(value), expected);\r\n });\r\n }\r\n\r\n isByteTest(-2, false);\r\n isByteTest(-1, false);\r\n isByteTest(0, true);\r\n isByteTest(1, true);\r\n isByteTest(128, true);\r\n isByteTest(254, true);\r\n isByteTest(255, true);\r\n isByteTest(256, false);\r\n isByteTest(257, false);\r\n });\r\n });\r\n });\r\n}","import { CharacterList } from \"../sources/characterList\";\nimport { CharacterListStream } from \"../sources/characterListStream\";\nimport { EmptyError } from \"../sources/emptyError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"characterListStream.ts\", () =>\n {\n runner.testType(\"CharacterListStream\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n runner.test(\"with no arguments\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with empty array\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([]);\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with non-empty array\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create(\"abc\");\n test.assertNotUndefinedAndNotNull(stream);\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n });\n\n runner.testFunction(\"writeCharacters()\", () =>\n {\n runner.test(\"with undefined characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(undefined!), new PreConditionError(\n \"Expression: characters\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with null characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(null!), new PreConditionError(\n \"Expression: characters\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with empty characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertEqual(0, stream.writeCharacters([]).await());\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with non-empty characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n\n test.assertEqual(4, stream.writeCharacters(\"abcd\").await());\n test.assertEqual(4, stream.getAvailableCharacterCount());\n\n const characters: string = stream.readCharacters(10).await();\n test.assertNotUndefinedAndNotNull(characters);\n test.assertEqual(4, characters.length);\n test.assertEqual(\"abcd\", characters);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with negative startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(\"ab\", -1), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 2\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with too large startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(\"ab\", 3), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 2\",\n \"Actual: 3\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with valid non-zero startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n const writeCharactersResult: number = stream.writeCharacters(\"ab\", 1).await();\n test.assertEqual(1, writeCharactersResult);\n test.assertEqual(1, stream.getAvailableCharacterCount());\n\n test.assertEqual(\"b\", stream.readCharacters(5).await());\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex equal to characters length\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n const writeCharactersResult: number = stream.writeCharacters(\"ab\", 2).await();\n test.assertEqual(0, writeCharactersResult);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with negative length\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(\"ab\", 0, -1), new PreConditionError(\n \"Expression: length\",\n \"Expected: between 0 and 2\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with too large length\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.writeCharacters(\"ab\", 0, 3), new PreConditionError(\n \"Expression: length\",\n \"Expected: between 0 and 2\",\n \"Actual: 3\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with valid startIndex and length values\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n const writeCharactersResult: number = stream.writeCharacters([\"a\", \"b\", \"c\", \"d\", \"e\"], 2, 2).await();\n test.assertEqual(2, writeCharactersResult);\n test.assertEqual(2, stream.getAvailableCharacterCount());\n\n test.assertEqual(\"cd\", stream.readCharacters(50).await());\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n });\n\n runner.testFunction(\"readCharacters()\", () =>\n {\n runner.testGroup(\"with empty stream\", () =>\n {\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.readCharacters(-1).await(), new PreConditionError(\n \"Expression: count\",\n \"Expected: greater than or equal to 0\",\n \"Actual: -1\",\n ));\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with zero count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.readCharacters(0).await(), new EmptyError());\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with positive count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create();\n test.assertThrows(() => stream.readCharacters(1).await(), new EmptyError());\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n });\n\n runner.testGroup(\"with non-empty stream\", () =>\n {\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n test.assertThrows(() => stream.readCharacters(-1).await(), new PreConditionError(\n \"Expression: count\",\n \"Expected: greater than or equal to 0\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with zero count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const readCharactersResult: string = stream.readCharacters(0).await();\n test.assertEqual(\"\", readCharactersResult);\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with positive count less than characters available\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const readCharactersResult: string = stream.readCharacters(2).await();\n test.assertEqual(\"ab\", readCharactersResult);\n test.assertEqual(1, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with positive count equal to characters available\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const readCharactersResult: string = stream.readCharacters(3).await();\n test.assertEqual(\"abc\", readCharactersResult);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with positive count greater than characters available\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const readCharactersResult: string = stream.readCharacters(4).await();\n test.assertEqual(\"abc\", readCharactersResult);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with undefined output\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n test.assertThrows(() => stream.readCharacters(undefined!), new PreConditionError(\n \"Expression: output\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with null output\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n test.assertThrows(() => stream.readCharacters(null!), new PreConditionError(\n \"Expression: output\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with empty output\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = [];\n const readCharactersResult: number = stream.readCharacters(output).await();\n test.assertEqual(0, readCharactersResult);\n test.assertEqual(output, []);\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with output smaller than the available characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(1);\n const readCharactersResult: number = stream.readCharacters(output).await();\n test.assertEqual(1, readCharactersResult);\n test.assertEqual(output, [\"a\"]);\n test.assertEqual(2, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with output equal to the available characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n const readCharactersResult: number = stream.readCharacters(output).await();\n test.assertEqual(3, readCharactersResult);\n test.assertEqual(output, [\"a\", \"b\", \"c\", \"\", \"\"]);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with output larger than available characters\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n const readCharactersResult: number = stream.readCharacters(output).await();\n test.assertEqual(3, readCharactersResult);\n test.assertEqual(output, [\"a\", \"b\", \"c\", \"\", \"\"]);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with negative startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5);\n test.assertThrows(() => stream.readCharacters(output, -1), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 5\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with too large startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5);\n test.assertThrows(() => stream.readCharacters(output, 6), new PreConditionError(\n \"Expression: startIndex\",\n \"Expected: between 0 and 5\",\n \"Actual: 6\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex with enough space to read the entire stream\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n test.assertEqual(3, stream.readCharacters(output, 2).await());\n test.assertEqual([\"\", \"\", \"a\", \"b\", \"c\"], output);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex with not enough space to read the entire stream\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n test.assertEqual(2, stream.readCharacters(output, 3).await());\n test.assertEqual([\"\", \"\", \"\", \"a\", \"b\"], output);\n test.assertEqual(1, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex equal to output length\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n test.assertEqual(0, stream.readCharacters(output, 5).await());\n test.assertEqual([\"\", \"\", \"\", \"\", \"\"], output);\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with negative count\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5);\n test.assertThrows(() => stream.readCharacters(output, 1, -1), new PreConditionError(\n \"Expression: count\",\n \"Expected: between 0 and 4\",\n \"Actual: -1\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with count larger than output.length - startIndex\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5);\n test.assertThrows(() => stream.readCharacters(output, 1, 5), new PreConditionError(\n \"Expression: count\",\n \"Expected: between 0 and 4\",\n \"Actual: 5\",\n ));\n test.assertEqual(3, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex with enough space to read the entire stream\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n test.assertEqual(3, stream.readCharacters(output, 2, 3).await());\n test.assertEqual([\"\", \"\", \"a\", \"b\", \"c\"], output);\n test.assertEqual(0, stream.getAvailableCharacterCount());\n });\n\n runner.test(\"with startIndex with not enough space to read the entire stream\", (test: Test) =>\n {\n const stream: CharacterListStream = CharacterListStream.create([\"a\", \"b\", \"c\"]);\n const output: string[] = new Array(5).fill(\"\");\n test.assertEqual(1, stream.readCharacters(output, 3, 1).await());\n test.assertEqual([\"\", \"\", \"\", \"a\", \"\"], output);\n test.assertEqual(2, stream.getAvailableCharacterCount());\n });\n });\n });\n });\n });\n}","import { CharacterList } from \"../sources/characterList\";\nimport { EqualFunctions } from \"../sources/equalFunctions\";\nimport { JavascriptIterable } from \"../sources/javascript\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { isNumber, isString } from \"../sources/types\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"characterList.ts\", () =>\n {\n runner.testType(\"CharacterList\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n runner.test(\"with no arguments\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(0, list.getCount().await());\n test.assertFalse(list.any().await());\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with undefined\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create(undefined);\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(0, list.getCount().await());\n test.assertFalse(list.any().await());\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with null\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create(null!);\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(0, list.getCount().await());\n test.assertFalse(list.any().await());\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with empty initialValues\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([]);\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(0, list.getCount().await());\n test.assertFalse(list.any().await());\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with one value\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([\"m\"]);\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(1, list.getCount().await());\n test.assertTrue(list.any().await());\n test.assertEqual([\"m\"], list.toArray().await());\n });\n\n runner.test(\"with two values\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([\"n\", \"l\"]);\n test.assertNotUndefinedAndNotNull(list);\n test.assertEqual(2, list.getCount().await());\n test.assertTrue(list.any().await());\n test.assertEqual([\"n\", \"l\"], list.toArray().await());\n });\n });\n\n runner.testFunction(\"add()\", () =>\n {\n function addErrorTest(value: string, expected: Error): void\n {\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n test.assertThrows(() => list.add(value), expected);\n test.assertEqual([], list.toArray().await());\n });\n }\n\n addErrorTest(\"\", new PreConditionError(\n \"Expression: value\",\n \"Expected: character\",\n \"Actual: \\\"\\\"\",\n ));\n addErrorTest(\"ab\", new PreConditionError(\n \"Expression: value\",\n \"Expected: character\",\n \"Actual: \\\"ab\\\"\",\n ));\n\n runner.test(\"with valid value\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n\n const addResult1: CharacterList = list.add(\"a\");\n test.assertSame(list, addResult1);\n test.assertEqual([\"a\"], addResult1.toArray().await());\n\n const addResult2: CharacterList = list.add(\"b\");\n test.assertSame(list, addResult2);\n test.assertEqual([\"a\", \"b\"], addResult2.toArray().await());\n\n const addResult3: CharacterList = list.add(\"c\");\n test.assertSame(list, addResult3);\n test.assertEqual([\"a\", \"b\", \"c\"], addResult3.toArray().await());\n\n const addResult4: CharacterList = list.add(\"d\");\n test.assertSame(list, addResult4);\n test.assertEqual([\"a\", \"b\", \"c\", \"d\"], addResult4.toArray().await());\n });\n });\n\n runner.testFunction(\"addAll()\", () =>\n {\n runner.test(\"with empty values\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n\n const addAllResult: CharacterList = list.addAll([]);\n test.assertSame(list, addAllResult);\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with non-empty values\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n\n const addAllResult: CharacterList = list.addAll(\"abcde\");\n test.assertSame(list, addAllResult);\n test.assertEqual([\"a\", \"b\", \"c\", \"d\", \"e\"], list.toArray().await());\n });\n });\n\n runner.testFunction(\"insert()\", () =>\n {\n function insertErrorTest(initialValues: string[], index: number, value: string, expected: Error): void\n {\n runner.test(`with ${runner.andList([initialValues, index, value])}`, (test: Test) =>\n {\n const list: CharacterList = CharacterList.create(initialValues);\n test.assertThrows(() => list.insert(index, value), expected);\n test.assertEqual(initialValues, list.toArray().await());\n });\n }\n\n insertErrorTest([], -1, \"a\", new PreConditionError(\n \"Expression: index\",\n \"Expected: 0\",\n \"Actual: -1\",\n ));\n insertErrorTest([], 1, \"a\", new PreConditionError(\n \"Expression: index\",\n \"Expected: 0\",\n \"Actual: 1\",\n ));\n insertErrorTest([\"z\"], -1, \"a\", new PreConditionError(\n \"Expression: index\",\n \"Expected: between 0 and 1\",\n \"Actual: -1\",\n ));\n insertErrorTest([\"z\"], 2, \"a\", new PreConditionError(\n \"Expression: index\",\n \"Expected: between 0 and 1\",\n \"Actual: 2\",\n ));\n insertErrorTest([], 0, \"\", new PreConditionError(\n \"Expression: value\",\n \"Expected: character\",\n \"Actual: \\\"\\\"\",\n ));\n insertErrorTest([], 0, \"ab\", new PreConditionError(\n \"Expression: value\",\n \"Expected: character\",\n \"Actual: \\\"ab\\\"\",\n ));\n\n function insertTest(initialValues: JavascriptIterable<string>, index: number, value: string, expected: string[]): void\n {\n runner.test(`with ${runner.andList([initialValues, index, value])}`, (test: Test) =>\n {\n const list: CharacterList = CharacterList.create(initialValues);\n\n const insertResult: CharacterList = list.insert(index, value);\n test.assertSame(list, insertResult);\n test.assertEqual(expected, list.toArray().await());\n });\n }\n\n insertTest([], 0, \"z\", [\"z\"]);\n insertTest([\"a\"], 0, \"y\", [\"y\", \"a\"]);\n insertTest([\"a\"], 1, \"y\", [\"a\", \"y\"]);\n insertTest([\"a\", \"b\", \"c\"], 0, \"z\", [\"z\", \"a\", \"b\", \"c\"]);\n insertTest([\"a\", \"b\", \"c\"], 1, \"z\", [\"a\", \"z\", \"b\", \"c\"]);\n insertTest([\"a\", \"b\", \"c\"], 2, \"z\", [\"a\", \"b\", \"z\", \"c\"]);\n insertTest([\"a\", \"b\", \"c\"], 3, \"z\", [\"a\", \"b\", \"c\", \"z\"]);\n insertTest([\"a\", \"b\", \"c\", \"d\", \"e\"], 2, \"z\", [\"a\", \"b\", \"z\", \"c\", \"d\", \"e\"]);\n });\n\n runner.testFunction(\"remove()\", () =>\n {\n runner.test(\"with not-found value\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create();\n\n test.assertThrows(() => list.remove(\"a\").await(), new NotFoundError(\"Could not find the value to remove: \\\"a\\\"\"));\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with found value\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([\"a\"]);\n\n const removeResult: string = list.remove(\"a\").await();\n test.assertEqual(\"a\", removeResult);\n test.assertEqual([], list.toArray().await());\n });\n\n runner.test(\"with multiple found values\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([\"a\", \"a\", \"a\"]);\n\n const removeResult: string = list.remove(\"a\").await();\n test.assertEqual(\"a\", removeResult);\n test.assertEqual([\"a\", \"a\"], list.toArray().await());\n });\n\n runner.test(\"with multiple found values and equalFunctions\", (test: Test) =>\n {\n const list: CharacterList = CharacterList.create([\"a\", \"b\", \"c\", \"d\", \"e\"]);\n const isVowel = (character: string) => [\"a\", \"e\", \"i\", \"o\", \"u\"].includes(character);\n const equalFunctions: EqualFunctions = EqualFunctions.create()\n .add((left: unknown, right: unknown) =>\n {\n return isString(left) && isString(right)\n ? isVowel(left) === isVowel(right)\n : undefined;\n });\n const removeResult: string = list.remove(\"i\", equalFunctions).await();\n test.assertEqual(\"a\", removeResult);\n test.assertEqual([\"b\", \"c\", \"d\", \"e\"], list.toArray().await());\n });\n });\n });\n });\n}","import { Comparer } from \"../sources/comparer\";\r\nimport { Comparison } from \"../sources/comparison\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"comparer.ts\", () =>\r\n {\r\n runner.testType(\"Comparer<TLeft,TRight>\", () =>\r\n {\r\n runner.testFunction(\"compareSameUndefinedNull()\", () =>\r\n {\r\n function compareSameUndefinedNullTest(left: unknown, right: unknown, expected: Comparison | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n test.assertEqual(Comparer.compareSameUndefinedNull(left, right), expected);\r\n });\r\n }\r\n\r\n compareSameUndefinedNullTest(undefined, undefined, Comparison.Equal);\r\n compareSameUndefinedNullTest(undefined, null, Comparison.LessThan);\r\n compareSameUndefinedNullTest(undefined, \"hello\", Comparison.LessThan);\r\n compareSameUndefinedNullTest(undefined, 50, Comparison.LessThan);\r\n\r\n compareSameUndefinedNullTest(null, undefined, Comparison.GreaterThan);\r\n compareSameUndefinedNullTest(null, null, Comparison.Equal);\r\n compareSameUndefinedNullTest(null, \"hello\", Comparison.LessThan);\r\n compareSameUndefinedNullTest(null, 50, Comparison.LessThan);\r\n\r\n compareSameUndefinedNullTest(\"hello\", undefined, Comparison.GreaterThan);\r\n compareSameUndefinedNullTest(\"hello\", null, Comparison.GreaterThan);\r\n compareSameUndefinedNullTest(\"hello\", \"hello\", Comparison.Equal);\r\n compareSameUndefinedNullTest(\"hello\", \"abc\", undefined);\r\n compareSameUndefinedNullTest(\"hello\", 50, undefined);\r\n });\r\n\r\n runner.testFunction(\"equalSameUndefinedNull()\", () =>\r\n {\r\n function equalSameUndefinedNullTest(left: unknown, right: unknown, expected: boolean | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n test.assertEqual(Comparer.equalSameUndefinedNull(left, right), expected);\r\n });\r\n }\r\n\r\n equalSameUndefinedNullTest(undefined, undefined, true);\r\n equalSameUndefinedNullTest(undefined, null, false);\r\n equalSameUndefinedNullTest(undefined, \"hello\", false);\r\n equalSameUndefinedNullTest(undefined, 50, false);\r\n\r\n equalSameUndefinedNullTest(null, undefined, false);\r\n equalSameUndefinedNullTest(null, null, true);\r\n equalSameUndefinedNullTest(null, \"hello\", false);\r\n equalSameUndefinedNullTest(null, 50, false);\r\n\r\n equalSameUndefinedNullTest(\"hello\", undefined, false);\r\n equalSameUndefinedNullTest(\"hello\", null, false);\r\n equalSameUndefinedNullTest(\"hello\", \"hello\", true);\r\n equalSameUndefinedNullTest(\"hello\", \"abc\", undefined);\r\n equalSameUndefinedNullTest(\"hello\", 50, undefined);\r\n });\r\n\r\n runner.testFunction(\"compareNumbers()\", () =>\r\n {\r\n function compareNumbersTest(left: number | null | undefined, right: number | null | undefined, expected: Comparison | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n test.assertEqual(Comparer.compareNumbers(left, right), expected);\r\n });\r\n }\r\n\r\n compareNumbersTest(undefined, undefined, Comparison.Equal);\r\n compareNumbersTest(undefined, null, Comparison.LessThan);\r\n compareNumbersTest(undefined, 50, Comparison.LessThan);\r\n\r\n compareNumbersTest(null, undefined, Comparison.GreaterThan);\r\n compareNumbersTest(null, null, Comparison.Equal);\r\n compareNumbersTest(null, 50, Comparison.LessThan);\r\n\r\n compareNumbersTest(50, undefined, Comparison.GreaterThan);\r\n compareNumbersTest(50, null, Comparison.GreaterThan);\r\n compareNumbersTest(50, 30, Comparison.GreaterThan);\r\n compareNumbersTest(50, 50, Comparison.Equal);\r\n compareNumbersTest(50, 60, Comparison.LessThan);\r\n });\r\n });\r\n });\r\n}","import { Condition } from \"../sources/condition\";\r\nimport { JavascriptIterable } from \"../sources/javascript\";\r\nimport { MutableCondition } from \"../sources/mutableCondition\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { join } from \"../sources/strings\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"condition.ts\", () =>\r\n {\r\n runner.testType(\"Condition\", () =>\r\n {\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertNotUndefinedAndNotNull(condition);\r\n test.assertThrows(() => condition.assertFalse(true),\r\n new Error([\r\n \"Expected: false\",\r\n \"Actual: true\",\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.testFunction(\"assertUndefined(unknown,string?,string?)\", () =>\r\n {\r\n runner.test(\"with undefined\", () =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertUndefined(undefined, \"fake-expression\", \"fake-message\");\r\n });\r\n\r\n function assertUndefinedErrorTest(value: unknown, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertUndefined(value), expected);\r\n });\r\n }\r\n\r\n assertUndefinedErrorTest(\r\n null,\r\n new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: null\",\r\n ])));\r\n assertUndefinedErrorTest(\r\n \"\",\r\n new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: \\\"\\\"\",\r\n ])));\r\n assertUndefinedErrorTest(\r\n 50,\r\n new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: 50\",\r\n ])));\r\n });\r\n\r\n runner.testFunction(\"assertNotUndefinedAndNotNull<T>(undefined|null|T,string?,string?)\", () =>\r\n {\r\n runner.test(\"with undefined\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotUndefinedAndNotNull(undefined),\r\n new Error([\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.test(\"with null\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotUndefinedAndNotNull(null),\r\n new Error([\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.test(\"with not undefined and not null\", (test: Test) =>\r\n {\r\n function valueCreator(): string | undefined\r\n {\r\n return \"hello\";\r\n }\r\n\r\n const condition: MutableCondition = Condition.create();\r\n const value: string | undefined = valueCreator();\r\n condition.assertNotUndefinedAndNotNull(value);\r\n test.assertEqual(value.substring(1, 3), \"el\");\r\n });\r\n\r\n runner.test(\"with undefined and expression\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotUndefinedAndNotNull(undefined, \"fake-expression\"),\r\n new Error([\r\n \"Expression: fake-expression\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.test(\"with null, expression, and message\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotUndefinedAndNotNull(null, \"fake-expression\", \"fake-message\"),\r\n new Error([\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"\r\n ].join(\"\\n\")));\r\n });\r\n });\r\n\r\n runner.testFunction(\"assertTrue(boolean)\", () =>\r\n {\r\n runner.test(\"with false\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertTrue(false),\r\n new Error([\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.test(\"with true\", (test: Test) =>\r\n {\r\n function valueCreator(): boolean { return true; }\r\n const condition: MutableCondition = Condition.create();\r\n const value: boolean = valueCreator();\r\n condition.assertTrue(value);\r\n test.assertTrue(value);\r\n });\r\n });\r\n\r\n runner.testFunction(\"assertFalse(boolean)\", () =>\r\n {\r\n runner.test(\"with true\", (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertFalse(true),\r\n new Error([\r\n \"Expected: false\",\r\n \"Actual: true\",\r\n ].join(\"\\n\")));\r\n });\r\n\r\n runner.test(\"with false\", (test: Test) =>\r\n {\r\n function valueCreator(): boolean { return false; }\r\n const condition: MutableCondition = Condition.create();\r\n const value: boolean = valueCreator();\r\n condition.assertFalse(value);\r\n test.assertFalse(value);\r\n });\r\n });\r\n\r\n runner.testFunction(\"assertSame<T>(T,T,string?,string?)\", () =>\r\n {\r\n function assertSameErrorTest<T>(expected: T, actual: T, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([expected, actual, expression, message])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertSame(expected, actual, expression, message), expectedError);\r\n });\r\n }\r\n \r\n assertSameErrorTest(\r\n undefined,\r\n null,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: undefined\",\r\n \"Actual: null\",\r\n ])));\r\n assertSameErrorTest(\r\n 3,\r\n 4,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: 3\",\r\n \"Actual: 4\",\r\n ])));\r\n assertSameErrorTest(\r\n {},\r\n {},\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: {}\",\r\n \"Actual: {}\",\r\n ])));\r\n assertSameErrorTest(\r\n { \"a\": \"b\" },\r\n { \"a\": \"b\" },\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: {\\\"a\\\":\\\"b\\\"}\",\r\n \"Actual: {\\\"a\\\":\\\"b\\\"}\",\r\n ])));\r\n assertSameErrorTest(\r\n [],\r\n [],\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: []\",\r\n \"Actual: []\",\r\n ])));\r\n\r\n function assertSameTest<T>(expected: T, actual: T, expression: string | undefined, message: string | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([expected, actual, expression, message])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertSame(expected, actual, expression, message);\r\n });\r\n }\r\n\r\n assertSameTest(undefined, undefined, \"fake-expression\", \"fake-message\");\r\n assertSameTest(null, null, \"fake-expression\", \"fake-message\");\r\n assertSameTest(0, 0, \"fake-expression\", \"fake-message\");\r\n assertSameTest(10, 10, \"fake-expression\", \"fake-message\");\r\n assertSameTest(true, true, \"fake-expression\", \"fake-message\");\r\n assertSameTest(\"abc\", \"abc\", \"fake-expression\", \"fake-message\");\r\n \r\n const o = {};\r\n assertSameTest(o, o, \"fake-expression\", \"fake-message\");\r\n });\r\n\r\n runner.testFunction(\"assertNotSame<T>(T,T,string?,string?)\", () =>\r\n {\r\n function assertNotSameErrorTest<T>(expected: T, actual: T, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([expected, actual, expression, message])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotSame(expected, actual, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertNotSameErrorTest(\r\n undefined,\r\n undefined,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not undefined\",\r\n \"Actual: undefined\",\r\n ])));\r\n assertNotSameErrorTest(\r\n null,\r\n null,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not null\",\r\n \"Actual: null\",\r\n ])));\r\n assertNotSameErrorTest(\r\n 0,\r\n 0,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not 0\",\r\n \"Actual: 0\",\r\n ])));\r\n assertNotSameErrorTest(\r\n 10,\r\n 10,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not 10\",\r\n \"Actual: 10\",\r\n ])));\r\n assertNotSameErrorTest(\r\n true,\r\n true,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not true\",\r\n \"Actual: true\",\r\n ])));\r\n assertNotSameErrorTest(\r\n \"abc\",\r\n \"abc\",\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not \\\"abc\\\"\",\r\n \"Actual: \\\"abc\\\"\",\r\n ])));\r\n \r\n const o = {};\r\n assertNotSameErrorTest(\r\n o,\r\n o,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not {}\",\r\n \"Actual: {}\",\r\n ])));\r\n\r\n function assertNotSameTest<T>(expected: T, actual: T, expression: string | undefined, message: string | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([expected, actual, expression, message])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertNotSame(expected, actual, expression, message);\r\n });\r\n }\r\n\r\n assertNotSameTest(undefined, null, \"fake-expression\", \"fake-message\");\r\n assertNotSameTest(false, true, \"fake-expression\", \"fake-message\");\r\n assertNotSameTest(1, 2, \"fake-expression\", \"fake-message\");\r\n assertNotSameTest({}, {}, \"fake-expression\", \"fake-message\");\r\n assertNotSameTest({ \"a\": \"b\" }, { \"a\": \"b\" }, \"fake-expression\", \"fake-message\");\r\n assertNotSameTest([], [], \"fake-expression\", \"fake-message\");\r\n });\r\n\r\n runner.testFunction(\"assertNotEmpty(string,string?,string?)\", () =>\r\n {\r\n function assertNotEmptyErrorTest(value: string, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([value, expression, message])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertNotEmpty(value, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertNotEmptyErrorTest(undefined!, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n assertNotEmptyErrorTest(null!, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n assertNotEmptyErrorTest(\"\", \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ])));\r\n\r\n function assertNotEmptyTest(value: string, expression: string | undefined, message: string | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([value, expression, message])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertNotEmpty(value, expression, message);\r\n });\r\n }\r\n\r\n assertNotEmptyTest(\" \", \"fake-expression\", \"fake-message\");\r\n assertNotEmptyTest(\"a\", \"fake-expression\", \"fake-message\");\r\n });\r\n\r\n runner.testFunction(\"assertLessThan(number,number,string?,string?)\", () =>\r\n {\r\n function assertLessThanErrorTest(value: number, upperBound: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([value, upperBound])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertLessThan(value, upperBound, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertLessThanErrorTest(-1, -1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: less than -1\",\r\n \"Actual: -1\",\r\n ])));\r\n assertLessThanErrorTest(0, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: less than 0\",\r\n \"Actual: 0\",\r\n ])));\r\n assertLessThanErrorTest(2, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: less than 1\",\r\n \"Actual: 2\",\r\n ])));\r\n assertLessThanErrorTest(2, 1, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: less than 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function assertLessThanTest(value: number, upperBound: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, upperBound])}`, () =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertLessThan(value, upperBound, expression, message);\r\n });\r\n }\r\n\r\n assertLessThanTest(-10, -9);\r\n assertLessThanTest(-1, 0);\r\n assertLessThanTest(0, 1);\r\n assertLessThanTest(4, 5);\r\n });\r\n\r\n runner.testFunction(\"assertLessThanOrEqualTo(number,number,string?,string?)\", () =>\r\n {\r\n function assertLessThanOrEqualToErrorTest(value: number, upperBound: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([value, upperBound])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertLessThanOrEqualTo(value, upperBound, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertLessThanOrEqualToErrorTest(2, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: less than or equal to 1\",\r\n \"Actual: 2\",\r\n ])));\r\n assertLessThanOrEqualToErrorTest(2, 1, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: less than or equal to 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function assertLessThanOrEqualToTest(value: number, upperBound: number, expression: string | undefined, message: string | undefined): void\r\n {\r\n runner.test(`with ${runner.andList([value, upperBound])}`, () =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertLessThanOrEqualTo(value, upperBound, expression, message);\r\n });\r\n }\r\n\r\n assertLessThanOrEqualToTest(-10, -9, undefined, undefined);\r\n assertLessThanOrEqualToTest(-1, 0, undefined, undefined);\r\n assertLessThanOrEqualToTest(0, 1, undefined, undefined);\r\n assertLessThanOrEqualToTest(4, 5, undefined, undefined);\r\n assertLessThanOrEqualToTest(-1, -1, undefined, undefined);\r\n assertLessThanOrEqualToTest(0, 0, undefined, undefined);\r\n assertLessThanOrEqualToTest(1, 1, undefined, undefined);\r\n });\r\n\r\n runner.testFunction(\"assertGreaterThanOrEqualTo(number,number,string?,string?)\", () =>\r\n {\r\n function assertGreaterThanOrEqualToErrorTest(value: number, lowerBound: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([value, lowerBound])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertGreaterThanOrEqualTo(value, lowerBound, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertGreaterThanOrEqualToErrorTest(1, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: greater than or equal to 2\",\r\n \"Actual: 1\",\r\n ])));\r\n assertGreaterThanOrEqualToErrorTest(1, 2, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: greater than or equal to 2\",\r\n \"Actual: 1\",\r\n ])));\r\n\r\n function assertGreaterThanOrEqualToTest(value: number, lowerBound: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, lowerBound])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertGreaterThanOrEqualTo(value, lowerBound, expression, message);\r\n });\r\n }\r\n\r\n assertGreaterThanOrEqualToTest(-9, -10);\r\n assertGreaterThanOrEqualToTest(0, -1);\r\n assertGreaterThanOrEqualToTest(1, 0);\r\n assertGreaterThanOrEqualToTest(5, 4);\r\n assertGreaterThanOrEqualToTest(-1, -1);\r\n assertGreaterThanOrEqualToTest(0, 0);\r\n assertGreaterThanOrEqualToTest(1, 1);\r\n });\r\n\r\n runner.testFunction(\"assertGreaterThan(number,number,string?,string?)\", () =>\r\n {\r\n function assertGreaterThanErrorTest(value: number, lowerBound: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([value, lowerBound])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertGreaterThan(value, lowerBound, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertGreaterThanErrorTest(-1, -1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: greater than -1\",\r\n \"Actual: -1\",\r\n ])));\r\n assertGreaterThanErrorTest(0, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: greater than 0\",\r\n \"Actual: 0\",\r\n ])));\r\n assertGreaterThanErrorTest(1, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: greater than 2\",\r\n \"Actual: 1\",\r\n ])));\r\n assertGreaterThanErrorTest(1, 2, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: greater than 2\",\r\n \"Actual: 1\",\r\n ])));\r\n\r\n function assertGreaterThanTest(value: number, lowerBound: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, lowerBound])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertGreaterThan(value, lowerBound, expression, message);\r\n });\r\n }\r\n\r\n assertGreaterThanTest(-9, -10);\r\n assertGreaterThanTest(0, -1);\r\n assertGreaterThanTest(1, 0);\r\n assertGreaterThanTest(5, 4);\r\n });\r\n\r\n runner.testFunction(\"assertBetween(number,number,number,string?,string?)\", () =>\r\n {\r\n function assertBetweenErrorTest(lowerBound: number, value: number, upperBound: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([lowerBound, value, upperBound])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertBetween(lowerBound, value, upperBound, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertBetweenErrorTest(0, 1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: 1\",\r\n ])));\r\n assertBetweenErrorTest(0, -1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: -1\",\r\n ])));\r\n assertBetweenErrorTest(0, -1, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 2\",\r\n \"Actual: -1\",\r\n ])));\r\n assertBetweenErrorTest(0, 3, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 2\",\r\n \"Actual: 3\",\r\n ])));\r\n assertBetweenErrorTest(5, 3, 2, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Expression: lowerBound\",\r\n \"Expected: less than or equal to 2\",\r\n \"Actual: 5\",\r\n ])));\r\n\r\n function assertBetweenTest(lowerBound: number, value: number, upperBound: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([lowerBound, value, upperBound])}`, () =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertBetween(lowerBound, value, upperBound, expression, message);\r\n });\r\n }\r\n\r\n assertBetweenTest(-12, -11, -10);\r\n assertBetweenTest(-1, 0, 1);\r\n assertBetweenTest(0, 1, 2);\r\n assertBetweenTest(4, 5, 6);\r\n assertBetweenTest(0, 0, 0);\r\n assertBetweenTest(1, 1, 1);\r\n });\r\n\r\n runner.testFunction(\"assertAccessIndex(number,number,string?,string?)\", () =>\r\n {\r\n function assertAccessIndexTest(index: number, count: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([index, count])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertAccessIndex(index, count, expression, message);\r\n });\r\n }\r\n\r\n assertAccessIndexTest(0, 1);\r\n assertAccessIndexTest(0, 2);\r\n assertAccessIndexTest(1, 2);\r\n\r\n function assertAccessIndexErrorTest(index: number, count: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([index, count])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertAccessIndex(index, count, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertAccessIndexErrorTest(-1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\",\r\n ])));\r\n assertAccessIndexErrorTest(0, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\",\r\n ])));\r\n assertAccessIndexErrorTest(1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\",\r\n ])));\r\n assertAccessIndexErrorTest(-1, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: -1\",\r\n ])));\r\n assertAccessIndexErrorTest(1, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: 1\",\r\n ])));\r\n assertAccessIndexErrorTest(-1, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 1\",\r\n \"Actual: -1\",\r\n ])));\r\n assertAccessIndexErrorTest(1, 1, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: 0\",\r\n \"Actual: 1\",\r\n ])));\r\n assertAccessIndexErrorTest(3, 2, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: 3\",\r\n ])));\r\n });\r\n\r\n runner.testFunction(\"assertInsertIndex(number,number,string?,string?)\", () =>\r\n {\r\n function assertInsertIndexErrorTest(index: number, count: number, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([index, count])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertInsertIndex(index, count, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertInsertIndexErrorTest(-1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: -1\",\r\n ])));\r\n assertInsertIndexErrorTest(1, 0, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: 0\",\r\n \"Actual: 1\",\r\n ])));\r\n assertInsertIndexErrorTest(-1, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 1\",\r\n \"Actual: -1\",\r\n ])));\r\n assertInsertIndexErrorTest(2, 1, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 1\",\r\n \"Actual: 2\",\r\n ])));\r\n assertInsertIndexErrorTest(-1, 2, undefined, undefined, new Error(join(\"\\n\", [\r\n \"Expected: between 0 and 2\",\r\n \"Actual: -1\",\r\n ])));\r\n assertInsertIndexErrorTest(2, 1, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: 2\",\r\n ])));\r\n assertInsertIndexErrorTest(3, 2, \"fake-expression\", \"fake-message\", new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: between 0 and 2\",\r\n \"Actual: 3\",\r\n ])));\r\n\r\n function assertInsertIndexTest(index: number, count: number, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([index, count])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertInsertIndex(index, count, expression, message);\r\n });\r\n }\r\n\r\n assertInsertIndexTest(0, 0);\r\n assertInsertIndexTest(0, 1);\r\n assertInsertIndexTest(1, 1);\r\n assertInsertIndexTest(0, 2);\r\n assertInsertIndexTest(1, 2);\r\n assertInsertIndexTest(2, 2);\r\n });\r\n\r\n runner.testFunction(\"assertOneOf<T>(JavascriptIterable<T>,T,string?,string?)\", () =>\r\n {\r\n function assertOneOfErrorTest<T>(possibilities: JavascriptIterable<T>, value: T, expression: string | undefined, message: string | undefined, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([possibilities, value, expression, message])}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertOneOf(possibilities, value, expression, message), expectedError);\r\n });\r\n }\r\n\r\n assertOneOfErrorTest(\r\n undefined!,\r\n 5,\r\n undefined,\r\n undefined,\r\n new PreConditionError(\r\n \"Expression: possibilities\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n assertOneOfErrorTest(\r\n null!,\r\n 5,\r\n undefined,\r\n undefined,\r\n new PreConditionError(\r\n \"Expression: possibilities\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n assertOneOfErrorTest(\r\n [],\r\n 5,\r\n undefined,\r\n undefined,\r\n new PreConditionError(\r\n \"Expected: one of []\",\r\n \"Actual: 5\",\r\n ));\r\n assertOneOfErrorTest(\r\n [],\r\n 5,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new PreConditionError(\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: one of []\",\r\n \"Actual: 5\",\r\n ));\r\n assertOneOfErrorTest(\r\n [1, 2, 3],\r\n 5,\r\n \"fake-expression\",\r\n \"fake-message\",\r\n new PreConditionError(\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: one of [1,2,3]\",\r\n \"Actual: 5\",\r\n ));\r\n\r\n function assertOneOfTest<T>(possibilities: JavascriptIterable<T>, value: T, expression?: string, message?: string): void\r\n {\r\n runner.test(`with ${runner.andList([possibilities, value, expression, message])}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertOneOf(possibilities, value, expression, message);\r\n });\r\n }\r\n\r\n assertOneOfTest([5], 5);\r\n assertOneOfTest([1, 3, 5, 7], 5);\r\n });\r\n\r\n runner.testFunction(\"assertInteger(number,string?,string?)\", () =>\r\n {\r\n function assertIntegerErrorTest(value: number, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n test.assertThrows(() => condition.assertInteger(value), expected);\r\n });\r\n }\r\n\r\n assertIntegerErrorTest(\r\n 1.2,\r\n new Error(join(\"\\n\", [\r\n \"Expected: integer\",\r\n \"Actual: 1.2\",\r\n ])));\r\n assertIntegerErrorTest(\r\n NaN,\r\n new Error(join(\"\\n\", [\r\n \"Expected: integer\",\r\n \"Actual: NaN\",\r\n ])));\r\n assertIntegerErrorTest(\r\n Infinity,\r\n new Error(join(\"\\n\", [\r\n \"Expected: integer\",\r\n \"Actual: Infinity\",\r\n ])));\r\n assertIntegerErrorTest(\r\n -Infinity,\r\n new Error(join(\"\\n\", [\r\n \"Expected: integer\",\r\n \"Actual: -Infinity\",\r\n ])));\r\n\r\n function assertIntegerTest(value: number): void\r\n {\r\n runner.test(`with ${value}`, (_test: Test) =>\r\n {\r\n const condition: MutableCondition = Condition.create();\r\n condition.assertInteger(value);\r\n });\r\n }\r\n\r\n assertIntegerTest(-1);\r\n assertIntegerTest(0);\r\n assertIntegerTest(1);\r\n });\r\n });\r\n });\r\n}","import { AssertionError } from \"assert\";\r\n\r\nimport { InMemoryCharacterWriteStream } from \"../sources/inMemoryCharacterWriteStream\";\r\nimport { Iterable } from \"../sources/iterable\";\r\nimport { List } from \"../sources/list\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { WhereIterable } from \"../sources/whereIterable\";\r\nimport { ConsoleTestRunner } from \"./consoleTestRunner\";\r\nimport { FailedTest } from \"./failedTest\";\r\nimport { SkippedTest } from \"./skippedTest\";\r\nimport { Test } from \"./test\";\r\nimport { TestAction } from \"./testAction\";\r\nimport { TestRunner } from \"./testRunner\";\r\nimport * as testRunnerTests from \"./testRunnerTests\";\r\n\r\ninterface RunnerStats\r\n{\r\n pendingTestActionsCount: number;\r\n pendingTestActionInsertIndex: number;\r\n passed: number;\r\n skipped: number;\r\n failed: number;\r\n}\r\n\r\nfunction assertRunnerStats(test: Test, runner: ConsoleTestRunner, stats: RunnerStats): void\r\n{\r\n test.assertEqual(stats.pendingTestActionsCount, runner.getPendingTestActionsCount(), \"Wrong pending TestActions count\");\r\n test.assertEqual(stats.pendingTestActionInsertIndex, runner.getPendingTestActionsInsertIndex(), \"Wrong pending TestActions insert index\");\r\n test.assertEqual(stats.passed, runner.getPassedTestCount(), \"Wrong passed test count\");\r\n test.assertEqual(stats.skipped, runner.getSkippedTestCount(), \"Wrong skipped test count\");\r\n test.assertEqual(stats.failed, runner.getFailedTestCount(), \"Wrong failed test count\");\r\n}\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"consoleTestRunner.ts\", () =>\r\n {\r\n runner.testType(\"ConsoleTestRunner\", () =>\r\n {\r\n testRunnerTests.test2(runner, ConsoleTestRunner.create);\r\n\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n test.assertNotUndefinedAndNotNull(runner2);\r\n test.assertEqual(0, runner2.getPendingTestActionsCount());\r\n test.assertEqual(0, runner2.getPendingTestActionsInsertIndex());\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n });\r\n\r\n runner.testFunction(\"testFile()\", () =>\r\n {\r\n runner.test(\"with no Test argument in testAction\", async (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n runner2.testFile(\"fakeFile.ts\", () =>\r\n {\r\n counter++;\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertUndefined(currentTestAction.getParent());\r\n test.assertEqual(\"fakeFile.ts\", currentTestAction.getName());\r\n });\r\n test.assertEqual(0, counter);\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n await runner2.runAsync();\r\n\r\n test.assertEqual(1, counter);\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n }\r\n });\r\n\r\n runner.test(\"with skip, no Test argument in testFile() action, but no tests\", async (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create().setWriteStream(writeStream);\r\n runner2.testFile(\"fakeFile.ts\", runner2.skip(), () =>\r\n {\r\n counter++;\r\n });\r\n test.assertEqual(0, counter);\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n await runner2.runAsync();\r\n\r\n test.assertEqual(1, counter);\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n }\r\n });\r\n\r\n runner.test(\"with Test argument in testAction\", async (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.testFile(\"fakeFile.ts\", (test2: Test) =>\r\n {\r\n counter++;\r\n\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertUndefined(currentTestAction.getParent());\r\n test.assertEqual(\"fakeFile.ts\", currentTestAction.getName());\r\n\r\n test.assertNotUndefinedAndNotNull(test2);\r\n test.assertNotSame(test, test2);\r\n test.assertSame(test2, runner2.getCurrentTest());\r\n });\r\n test.assertEqual(0, counter);\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n await runner2.runAsync();\r\n\r\n test.assertEqual(1, counter);\r\n test.assertUndefined(runner2.getCurrentTestAction());\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 1,\r\n failed: 0,\r\n });\r\n }\r\n });\r\n });\r\n\r\n runner.testFunction(\"testType()\", () =>\r\n {\r\n runner.test(\"with Type instead of type name\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.testType(WhereIterable, () =>\r\n {\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertEqual(\"_WhereIterable\", currentTestAction.getName());\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"testFunction()\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.testFunction(\"fakeFunction()\", () =>\r\n {\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertEqual(\"fakeFunction()\", currentTestAction.getName());\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.testFunction(\"testGroup()\", () =>\r\n {\r\n runner.test(\"normal behavior\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.testGroup(\"fake group\", () =>\r\n {\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertEqual(\"fake group\", currentTestAction.getName());\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.test(\"with skip but no tests\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n let counter: number = 0;\r\n runner2.testGroup(\"fake group\", runner2.skip(), () =>\r\n {\r\n counter++;\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertEqual(0, counter);\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n test.assertEqual(1, counter);\r\n });\r\n\r\n runner.test(\"with skip and one test\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.testGroup(\"fake-group\", runner2.skip(\"fake-group-skip-message\"), () =>\r\n {\r\n runner2.test(\"fake-test\", (test: Test) =>\r\n {\r\n test.fail(\"Shouldn't run test!\");\r\n });\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 1,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n const skippedTests: Iterable<SkippedTest> = runner2.getSkippedTests();\r\n test.assertNotUndefinedAndNotNull(skippedTests);\r\n const skippedTest: SkippedTest = await skippedTests.first();\r\n test.assertNotUndefinedAndNotNull(skippedTest);\r\n test.assertEqual(\r\n List.create([\"fake-group\", \"fake-test\"]),\r\n skippedTest.getFullTestNameParts(),\r\n );\r\n test.assertEqual(\"fake-group-skip-message\", skippedTest.getSkipMessage());\r\n });\r\n\r\n runner.test(\"with unhandled exception\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.testGroup(\"fake group\", () =>\r\n {\r\n throw Error(\"oops!\");\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 1,\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"test()\", () =>\r\n {\r\n runner.test(\"with no parent\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.test(\"fake test\", (test2: Test) =>\r\n {\r\n const currentTestAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(currentTestAction);\r\n test.assertEqual(\"fake test\", currentTestAction.getName());\r\n\r\n test.assertSame(test2, runner2.getCurrentTest());\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 1,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.test(\"with TestGroup parent\", async (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.testGroup(\"fake-test-group\", () =>\r\n {\r\n counter++;\r\n test.assertEqual(1, counter);\r\n\r\n const testGroupAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(testGroupAction);\r\n test.assertEqual(\"fake-test-group\", testGroupAction.getName());\r\n\r\n runner2.test(\"fake-test\", (test2: Test) =>\r\n {\r\n counter++;\r\n test.assertEqual(2, counter);\r\n\r\n const testAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(testAction);\r\n test.assertEqual(\"fake-test-group fake-test\", testAction.getFullName());\r\n test.assertEqual(\"fake-test\", testAction.getName());\r\n test.assertSame(testGroupAction, testAction.getParent());\r\n\r\n test.assertSame(test2, runner2.getCurrentTest());\r\n });\r\n\r\n test.assertEqual(1, counter);\r\n });\r\n test.assertEqual(0, counter);\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n test.assertEqual(2, counter);\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 1,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.test(\"with TestGroup grandparent\", async (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.testGroup(\"fake-test-group-1\", () =>\r\n {\r\n counter++;\r\n test.assertEqual(1, counter);\r\n\r\n const testGroupAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(testGroupAction);\r\n test.assertEqual(\"fake-test-group-1\", testGroupAction.getFullName());\r\n test.assertEqual(\"fake-test-group-1\", testGroupAction.getName());\r\n\r\n runner2.testGroup(\"fake-test-group-2\", () =>\r\n {\r\n counter++;\r\n test.assertEqual(2, counter);\r\n\r\n const testGroupAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(testGroupAction);\r\n test.assertEqual(\"fake-test-group-1 fake-test-group-2\", testGroupAction.getFullName());\r\n test.assertEqual(\"fake-test-group-2\", testGroupAction.getName());\r\n \r\n runner2.test(\"fake-test\", (test2: Test) =>\r\n {\r\n counter++;\r\n test.assertEqual(3, counter);\r\n\r\n const testAction: TestAction | undefined = runner2.getCurrentTestAction();\r\n test.assertNotUndefinedAndNotNull(testAction);\r\n test.assertEqual(\"fake-test-group-1 fake-test-group-2 fake-test\", testAction.getFullName());\r\n test.assertEqual(\"fake-test\", testAction.getName());\r\n test.assertSame(testGroupAction, testAction.getParent());\r\n\r\n test.assertSame(test2, runner2.getCurrentTest());\r\n });\r\n\r\n test.assertEqual(2, counter);\r\n });\r\n\r\n test.assertEqual(1, counter);\r\n });\r\n test.assertEqual(0, counter);\r\n test.assertEqual(1, runner2.getPendingTestActionsCount());\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n test.assertEqual(3, counter);\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 1,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.test(\"with Test parent\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.test(\"fake-test-1\", () =>\r\n {\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n test.assertThrows(\r\n () => runner2.test(\"fake-test-2\", () =>\r\n {\r\n test.fail(\"Shouldn't execute inner test since it's inside another test.\");\r\n }),\r\n new AssertionError({\r\n message: \"Can't start a new test group or a new test while running a test.\",\r\n operator: \"fail\",\r\n }),\r\n );\r\n\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 1,\r\n failed: 0,\r\n });\r\n });\r\n\r\n runner.test(\"with skip\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.test(\"fake-test-1\", runner2.skip(true, \"fake-skip-message\"), () =>\r\n {\r\n test.fail(\"Should not run test action\")\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 1,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n const skippedTests: Iterable<SkippedTest> = runner2.getSkippedTests();\r\n test.assertNotUndefinedAndNotNull(skippedTests);\r\n test.assertEqual(1, await skippedTests.getCount());\r\n const skippedTest: SkippedTest = await skippedTests.first();\r\n test.assertNotUndefinedAndNotNull(skippedTest);\r\n test.assertEqual(Iterable.create([\"fake-test-1\"]), skippedTest.getFullTestNameParts());\r\n test.assertEqual(\"fake-skip-message\", skippedTest.getSkipMessage());\r\n });\r\n\r\n runner.test(\"with assert failure\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.test(\"fake-test-1\", () =>\r\n {\r\n test.assertEqual(1, 2);\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 1,\r\n });\r\n\r\n const failedTests: Iterable<FailedTest> = runner2.getFailedTests();\r\n test.assertNotUndefinedAndNotNull(failedTests);\r\n test.assertEqual(1, await failedTests.getCount());\r\n const failedTest: FailedTest = await failedTests.first();\r\n test.assertNotUndefinedAndNotNull(failedTest);\r\n test.assertEqual(Iterable.create([\"fake-test-1\"]), failedTest.getFullTestNameParts());\r\n const errorMessage: string = failedTest.getErrorMessage();\r\n test.assertTrue(errorMessage.includes(\"AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:\"));\r\n test.assertTrue(errorMessage.includes(\"1 !== 2\"));\r\n });\r\n\r\n runner.test(\"with unexpected failure\", async (test: Test) =>\r\n {\r\n const runner2: ConsoleTestRunner = ConsoleTestRunner.create();\r\n runner2.test(\"fake-test-1\", () =>\r\n {\r\n throw new PreConditionError(\"oops!\");\r\n });\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 1,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 0,\r\n });\r\n\r\n await runner2.runAsync();\r\n assertRunnerStats(test, runner2, {\r\n pendingTestActionsCount: 0,\r\n pendingTestActionInsertIndex: 0,\r\n skipped: 0,\r\n passed: 0,\r\n failed: 1,\r\n });\r\n\r\n const failedTests: Iterable<FailedTest> = runner2.getFailedTests();\r\n test.assertNotUndefinedAndNotNull(failedTests);\r\n test.assertEqual(1, await failedTests.getCount());\r\n const failedTest: FailedTest = await failedTests.first();\r\n test.assertNotUndefinedAndNotNull(failedTest);\r\n test.assertEqual(Iterable.create([\"fake-test-1\"]), failedTest.getFullTestNameParts());\r\n const errorMessage: string = failedTest.getErrorMessage();\r\n test.assertTrue(errorMessage.includes(\"Error: oops!\"));\r\n test.assertEqual(failedTest.getError(), new PreConditionError(\"oops!\"));\r\n });\r\n });\r\n });\r\n });\r\n}","import { Iterable } from \"../sources/iterable\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { join } from \"../sources/strings\";\r\nimport { Type } from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\nimport { TestSkip } from \"./testSkip\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"testRunner.ts\", () =>\r\n {\r\n runner.testType(\"TestRunner\", () =>\r\n {\r\n });\r\n });\r\n}\r\n\r\nexport function test2(runner: TestRunner, creator: () => TestRunner): void\r\n{\r\n runner.testFile(\"testRunner.ts\", () =>\r\n {\r\n runner.testType(\"TestRunner\", () =>\r\n {\r\n runner.testFunction(\"andList()\", () =>\r\n {\r\n function andListErrorTest(values: unknown[] | Iterable<unknown>, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.andList(values), expected);\r\n });\r\n }\r\n\r\n andListErrorTest(undefined!, new PreConditionError(join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n andListErrorTest(null!, new PreConditionError(join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n\r\n function andListTest(values: unknown[] | Iterable<unknown>, expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertEqual(expected, runner2.andList(values));\r\n });\r\n }\r\n\r\n andListTest([], \"\");\r\n andListTest([\"a\"], `\"a\"`);\r\n andListTest([1, \"a\"], `1 and \"a\"`);\r\n andListTest([1, \"a\", {a:7}], `1, \"a\", and {\"a\":7}`);\r\n });\r\n\r\n runner.testFunction(\"toString()\", () =>\r\n {\r\n function toStringTest(value: unknown, expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertEqual(expected, runner2.toString(value));\r\n });\r\n }\r\n\r\n toStringTest(undefined, \"undefined\");\r\n toStringTest(null, \"null\");\r\n toStringTest(false, \"false\");\r\n toStringTest(true, \"true\");\r\n toStringTest(5, \"5\");\r\n toStringTest(6.4, \"6.4\");\r\n toStringTest(\"\", `\"\"`);\r\n toStringTest(\"hello there\", `\"hello there\"`);\r\n toStringTest({}, \"{}\");\r\n toStringTest({a:{b:\"c\"}}, `{\"a\":{\"b\":\"c\"}}`);\r\n toStringTest([], \"[]\");\r\n toStringTest([false, 1, \"d\"], `[false,1,\"d\"]`);\r\n });\r\n\r\n runner.testFunction(\"skip()\", () =>\r\n {\r\n runner.test(\"with no arguments\", (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const testSkip: TestSkip = runner2.skip();\r\n test.assertNotUndefinedAndNotNull(testSkip);\r\n test.assertTrue(testSkip.getShouldSkip());\r\n test.assertEqual(\"\", testSkip.getMessage());\r\n });\r\n\r\n runner.test(\"with false\", (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const testSkip: TestSkip = runner2.skip(false);\r\n test.assertNotUndefinedAndNotNull(testSkip);\r\n test.assertFalse(testSkip.getShouldSkip());\r\n test.assertEqual(\"\", testSkip.getMessage());\r\n });\r\n\r\n runner.test(\"with true\", (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const testSkip: TestSkip = runner2.skip(true);\r\n test.assertNotUndefinedAndNotNull(testSkip);\r\n test.assertTrue(testSkip.getShouldSkip());\r\n test.assertEqual(\"\", testSkip.getMessage());\r\n });\r\n\r\n runner.test(\"with message\", (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const testSkip: TestSkip = runner2.skip(true, \"hello there!\");\r\n test.assertNotUndefinedAndNotNull(testSkip);\r\n test.assertTrue(testSkip.getShouldSkip());\r\n test.assertEqual(\"hello there!\", testSkip.getMessage());\r\n });\r\n });\r\n\r\n runner.testFunction(\"testFile()\", () =>\r\n {\r\n runner.testGroup(\"with no skip\", () =>\r\n {\r\n function testFileErrorTest(testName: string, fileName: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFile(fileName, testAction), expected);\r\n })\r\n }\r\n\r\n testFileErrorTest(\r\n \"with undefined fileName\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null fileName\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with empty fileName\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with undefined skip\", () =>\r\n {\r\n function testFileErrorTest(testName: string, fileName: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFile(fileName, undefined, testAction), expected);\r\n })\r\n }\r\n\r\n testFileErrorTest(\r\n \"with undefined fileName\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null fileName\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with empty fileName\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with null skip\", () =>\r\n {\r\n function testFileErrorTest(testName: string, fileName: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFile(fileName, null!, testAction), expected);\r\n })\r\n }\r\n\r\n testFileErrorTest(\r\n \"with undefined fileName\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null fileName\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with empty fileName\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with skip\", () =>\r\n {\r\n function testFileErrorTest(testName: string, fileName: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const skip: TestSkip = runner2.skip();\r\n test.assertThrows(() => runner2.testFile(fileName, skip, testAction), expected);\r\n })\r\n }\r\n\r\n testFileErrorTest(\r\n \"with undefined fileName\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null fileName\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with empty fileName\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: fileName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFileErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n });\r\n\r\n runner.testFunction(\"testType()\", () =>\r\n {\r\n runner.testGroup(\"with no skip\", () =>\r\n {\r\n function testTypeErrorTest(testName: string, typeNameOrType: string | Type<unknown>, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testType(typeNameOrType, testAction), expected);\r\n })\r\n }\r\n\r\n testTypeErrorTest(\r\n \"with undefined typeNameOrType\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null typeNameOrType\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with empty typeNameOrType\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with undefined skip\", () =>\r\n {\r\n function testTypeErrorTest(testName: string, typeNameOrType: string | Type<unknown>, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testType(typeNameOrType, undefined, testAction), expected);\r\n })\r\n }\r\n\r\n testTypeErrorTest(\r\n \"with undefined typeNameOrType\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null typeNameOrType\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with empty typeNameOrType\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with null skip\", () =>\r\n {\r\n function testTypeErrorTest(testName: string, typeNameOrType: string | Type<unknown>, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testType(typeNameOrType, null!, testAction), expected);\r\n })\r\n }\r\n\r\n testTypeErrorTest(\r\n \"with undefined typeNameOrType\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null typeNameOrType\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with empty typeNameOrType\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with skip\", () =>\r\n {\r\n function testTypeErrorTest(testName: string, typeNameOrType: string | Type<unknown>, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const skip: TestSkip = runner2.skip();\r\n test.assertThrows(() => runner2.testType(typeNameOrType, skip, testAction), expected);\r\n })\r\n }\r\n\r\n testTypeErrorTest(\r\n \"with undefined typeNameOrType\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null typeNameOrType\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeNameOrType\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with empty typeNameOrType\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: typeName\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testTypeErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n });\r\n\r\n runner.testFunction(\"testFunction()\", () =>\r\n {\r\n runner.testGroup(\"with no skip\", () =>\r\n {\r\n function testFunctionErrorTest(testName: string, functionSignature: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFunction(functionSignature, testAction), expected);\r\n })\r\n }\r\n\r\n testFunctionErrorTest(\r\n \"with undefined functionSignature\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null functionSignature\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with empty functionSignature\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with undefined skip\", () =>\r\n {\r\n function testFunctionErrorTest(testName: string, functionSignature: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFunction(functionSignature, undefined, testAction), expected);\r\n })\r\n }\r\n\r\n testFunctionErrorTest(\r\n \"with undefined functionSignature\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null functionSignature\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with empty functionSignature\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with null skip\", () =>\r\n {\r\n function testFunctionErrorTest(testName: string, functionSignature: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n test.assertThrows(() => runner2.testFunction(functionSignature, null!, testAction), expected);\r\n })\r\n }\r\n\r\n testFunctionErrorTest(\r\n \"with undefined functionSignature\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null functionSignature\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with empty functionSignature\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n\r\n runner.testGroup(\"with skip\", () =>\r\n {\r\n function testFunctionErrorTest(testName: string, functionSignature: string, testAction: () => void, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const runner2: TestRunner = creator();\r\n const skip: TestSkip = runner2.skip();\r\n test.assertThrows(() => runner2.testFunction(functionSignature, skip, testAction), expected);\r\n })\r\n }\r\n\r\n testFunctionErrorTest(\r\n \"with undefined functionSignature\",\r\n undefined!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null functionSignature\",\r\n null!,\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with empty functionSignature\",\r\n \"\",\r\n () => {},\r\n new PreConditionError(\r\n \"Expression: functionSignature\",\r\n \"Expected: not empty\",\r\n \"Actual: \\\"\\\"\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with undefined testAction\",\r\n \"abc\",\r\n undefined!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n )\r\n testFunctionErrorTest(\r\n \"with null testAction\",\r\n \"abc\",\r\n null!,\r\n new PreConditionError(\r\n \"Expression: testAction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n )\r\n });\r\n });\r\n });\r\n });\r\n}","import { DateTime } from \"../sources/dateTime\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"dateTime.ts\", () =>\n {\n runner.testType(\"DateTime\", () =>\n {\n runner.testFunction(\"parse()\", () =>\n {\n runner.test(`with \"2025-03-14T20:18:30\"`, (test: Test) =>\n {\n const dateTime: DateTime = DateTime.parse(\"2025-03-14T20:18:30\");\n test.assertNotUndefinedAndNotNull(dateTime);\n test.assertEqual(2025, dateTime.getYear());\n test.assertEqual(3, dateTime.getMonth());\n test.assertEqual(14, dateTime.getDay());\n test.assertEqual(20, dateTime.getHour());\n test.assertEqual(18, dateTime.getMinute());\n test.assertEqual(30, dateTime.getSecond());\n test.assertEqual(\"2025-03-14\", dateTime.toDateString());\n test.assertEqual(\"2025-03-14T20:18:30.000-07:00\", dateTime.toString());\n test.assertEqual(\"2025-03-14T20:18:30.000-07:00\", dateTime.debug);\n });\n });\n });\n });\n}","import { depthFirstSearch } from \"../sources/depthFirstSearch\";\nimport { Node } from \"../sources/node\";\nimport { Iterator } from \"../sources/iterator\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\nimport { List } from \"../sources/list\";\nimport { SearchControl } from \"../sources/searchControl\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"depthFirstSearch.ts\", () =>\n {\n runner.testFunction(\"depthFirstSearch()\", () =>\n {\n runner.test(\"with undefined initialToVisit\", (test: Test) =>\n {\n test.assertThrows(() => depthFirstSearch(undefined!, () => {}), new PreConditionError(\n \"Expression: parameters\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null initialToVisit\", (test: Test) =>\n {\n test.assertThrows(() => depthFirstSearch(null!, () => {}), new PreConditionError(\n \"Expression: parameters\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with undefined searchAction\", (test: Test) =>\n {\n test.assertThrows(() => depthFirstSearch([], undefined!), new PreConditionError(\n \"Expression: searchAction\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null searchAction\", (test: Test) =>\n {\n test.assertThrows(() => depthFirstSearch([], null!), new PreConditionError(\n \"Expression: searchAction\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with empty initialToVisit\", (test: Test) =>\n {\n const iterator: Iterator<number> = depthFirstSearch([], (searchControl: SearchControl<Node<number>,number>, current: Node<number>) =>\n {\n searchControl.addAllToVisit(current.iterateConnectedNodes());\n\n const currentValue: number = current.getValue();\n if (currentValue >= 7)\n {\n searchControl.addResult(currentValue);\n }\n });\n test.assertEqual([], iterator.toArray().await());\n });\n\n runner.test(\"with non-empty initialToVisit with return values\", (test: Test) =>\n {\n const nodes: List<Node<number>> = List.create();\n for (let i = 0; i < 10; i++)\n {\n nodes.add(Node.create(i));\n }\n \n function connectNodes(index1: number, index2: number): void\n {\n nodes.get(index1).await().addConnectedNode(nodes.get(index2).await());\n }\n connectNodes(0, 1);\n connectNodes(0, 2);\n connectNodes(1, 5);\n connectNodes(2, 4);\n connectNodes(3, 6);\n connectNodes(4, 5);\n connectNodes(4, 6);\n connectNodes(5, 9);\n connectNodes(6, 7);\n connectNodes(7, 3);\n connectNodes(8, 9);\n\n const iterator: Iterator<number> = depthFirstSearch([nodes.get(0).await()], (searchControl: SearchControl<Node<number>,number>, current: Node<number>) =>\n {\n searchControl.addAllToVisit(current.iterateConnectedNodes());\n\n const currentValue: number = current.getValue();\n if (currentValue >= 7)\n {\n searchControl.addResult(currentValue);\n }\n });\n\n test.assertEqual([7, 9], iterator.toArray().await());\n });\n });\n });\n}","import { SyncDisposable } from \"../sources/basicDisposable\";\r\nimport { Disposable } from \"../sources/disposable\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { SyncResult } from \"../sources/syncResult\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"disposable.ts\", () =>\r\n {\r\n runner.testType(\"Disposable\", () =>\r\n {\r\n runner.testFunction(\"create()\", () =>\r\n {\r\n function createErrorTest(testName: string, disposedFunction: () => void, expectedError: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n test.assertThrows(() => Disposable.create(disposedFunction), expectedError);\r\n });\r\n }\r\n\r\n createErrorTest(\"with undefined\", undefined!, new PreConditionError(\r\n \"Expression: disposedFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n createErrorTest(\"with null\", null!, new PreConditionError(\r\n \"Expression: disposedFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n runner.test(\"with function\", (test: Test) =>\r\n {\r\n let value: number = 0;\r\n const disposable: Disposable = Disposable.create(() => value += 1);\r\n test.assertNotUndefinedAndNotNull(disposable);\r\n test.assertFalse(disposable.isDisposed());\r\n test.assertEqual(value, 0);\r\n });\r\n });\r\n\r\n runner.testFunction(\"dispose()\", () =>\r\n {\r\n runner.test(\"with function that doesn't throw\", (test: Test) =>\r\n {\r\n let value: number = 0;\r\n const disposable: SyncDisposable = Disposable.create(() =>\r\n {\r\n test.assertEqual(disposable.isDisposed(), value !== 0);\r\n value += 1;\r\n });\r\n\r\n const result1: SyncResult<boolean> = disposable.dispose();\r\n test.assertNotUndefinedAndNotNull(result1);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const resultValue: boolean = result1.await();\r\n test.assertTrue(resultValue);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n }\r\n\r\n const result2: SyncResult<boolean> = disposable.dispose();\r\n test.assertNotUndefinedAndNotNull(result2);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const resultValue: boolean = result2.await();\r\n test.assertFalse(resultValue);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n }\r\n });\r\n\r\n runner.test(\"with function that throws\", (test: Test) =>\r\n {\r\n let value: number = 0;\r\n const disposable: SyncDisposable = Disposable.create(() =>\r\n {\r\n test.assertEqual(disposable.isDisposed(), value !== 0);\r\n value += 1;\r\n throw new Error(\"oops!\");\r\n });\r\n\r\n const result1: SyncResult<boolean> = disposable.dispose();\r\n test.assertNotUndefinedAndNotNull(result1);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertThrows(() => result1.await(), new Error(\"oops!\"));\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n }\r\n\r\n const result2: SyncResult<boolean> = disposable.dispose();\r\n test.assertNotUndefinedAndNotNull(result2);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const resultValue: boolean = result2.await();\r\n test.assertFalse(resultValue);\r\n test.assertTrue(disposable.isDisposed());\r\n test.assertEqual(value, 1);\r\n }\r\n });\r\n });\r\n });\r\n });\r\n}","import { andList, orList } from \"../sources/english\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { join } from \"../sources/strings\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"english.ts\", () =>\r\n {\r\n runner.testFunction(\"andList(string[])\", () =>\r\n {\r\n function andListErrorTest(values: string[] | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => andList(values!), expectedError);\r\n });\r\n }\r\n\r\n andListErrorTest(\r\n undefined,\r\n new PreConditionError(\r\n join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n andListErrorTest(\r\n null,\r\n new PreConditionError(\r\n join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n\r\n function andListTest(values: string[], expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n test.assertEqual(andList(values), expected);\r\n });\r\n }\r\n\r\n andListTest([], \"\");\r\n andListTest([\"\"], \"\");\r\n andListTest([\"\", \"\"], \" and \");\r\n andListTest([\"\", \"\", \"\"], \", , and \");\r\n \r\n andListTest([\"a\"], \"a\");\r\n andListTest([\"a\", \"b\"], \"a and b\");\r\n andListTest([\"a\", \"b\", \"c\"], \"a, b, and c\");\r\n andListTest([\"a\", \"b\", \"c\", \"d\"], \"a, b, c, and d\");\r\n });\r\n\r\n runner.testFunction(\"orList(string[])\", () =>\r\n {\r\n function orListErrorTest(values: string[] | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => orList(values!), expectedError);\r\n });\r\n }\r\n\r\n orListErrorTest(\r\n undefined,\r\n new PreConditionError(\r\n join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n orListErrorTest(\r\n null,\r\n new PreConditionError(\r\n join(\"\\n\", [\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n\r\n function orListTest(values: string[], expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n test.assertEqual(orList(values), expected);\r\n });\r\n }\r\n\r\n orListTest([], \"\");\r\n orListTest([\"\"], \"\");\r\n orListTest([\"\", \"\"], \" or \");\r\n orListTest([\"\", \"\", \"\"], \", , or \");\r\n \r\n orListTest([\"a\"], \"a\");\r\n orListTest([\"a\", \"b\"], \"a or b\");\r\n orListTest([\"a\", \"b\", \"c\"], \"a, b, or c\");\r\n orListTest([\"a\", \"b\", \"c\", \"d\"], \"a, b, c, or d\");\r\n });\r\n });\r\n}","import { andList } from \"../sources/english\";\r\nimport { EqualFunctions } from \"../sources/equalFunctions\";\r\nimport { List } from \"../sources/list\";\r\nimport { Map } from \"../sources/map\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { isNumber } from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"equalFunctions.ts\", () =>\r\n {\r\n runner.testType(\"EqualFunctions\", () =>\r\n {\r\n runner.test(\"create()\", (test: Test) =>\r\n {\r\n const functions: EqualFunctions = EqualFunctions.create();\r\n test.assertNotUndefinedAndNotNull(functions);\r\n });\r\n\r\n runner.testFunction(\"areEqual()\", () =>\r\n {\r\n function areEqualTest(left: unknown, right: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n const functions: EqualFunctions = EqualFunctions.create();\r\n test.assertEqual(functions.areEqual(left, right).await(), expected);\r\n });\r\n }\r\n\r\n areEqualTest(undefined, undefined, true);\r\n areEqualTest(undefined, null, false);\r\n areEqualTest(undefined, false, false);\r\n areEqualTest(undefined, true, false);\r\n areEqualTest(undefined, \"hello\", false);\r\n areEqualTest(undefined, 20, false);\r\n areEqualTest(undefined, {}, false);\r\n areEqualTest(undefined, [], false);\r\n areEqualTest(undefined, Map.create(), false);\r\n\r\n areEqualTest(null, undefined, false);\r\n areEqualTest(null, null, true);\r\n areEqualTest(null, false, false);\r\n areEqualTest(null, true, false);\r\n areEqualTest(null, \"hello\", false);\r\n areEqualTest(null, 20, false);\r\n areEqualTest(null, {}, false);\r\n areEqualTest(null, [], false);\r\n areEqualTest(null, Map.create(), false);\r\n\r\n areEqualTest(false, undefined, false);\r\n areEqualTest(false, null, false);\r\n areEqualTest(false, false, true);\r\n areEqualTest(false, true, false);\r\n areEqualTest(false, \"hello\", false);\r\n areEqualTest(false, 20, false);\r\n areEqualTest(false, {}, false);\r\n areEqualTest(false, [], false);\r\n areEqualTest(false, Map.create(), false);\r\n\r\n areEqualTest(true, undefined, false);\r\n areEqualTest(true, null, false);\r\n areEqualTest(true, false, false);\r\n areEqualTest(true, true, true);\r\n areEqualTest(true, \"hello\", false);\r\n areEqualTest(true, 20, false);\r\n areEqualTest(true, {}, false);\r\n areEqualTest(true, [], false);\r\n areEqualTest(true, Map.create(), false);\r\n \r\n areEqualTest(\"hello\", undefined, false);\r\n areEqualTest(\"hello\", null, false);\r\n areEqualTest(\"hello\", false, false);\r\n areEqualTest(\"hello\", true, false);\r\n areEqualTest(\"hello\", \"hello\", true);\r\n areEqualTest(\"hello\", \"hello there\", false);\r\n areEqualTest(\"hello\", \"HELLO\", false);\r\n areEqualTest(\"hello\", 20, false);\r\n areEqualTest(\"hello\", {}, false);\r\n areEqualTest(\"hello\", [], false);\r\n areEqualTest(\"\", [], false);\r\n areEqualTest(\"abc\", [\"a\", \"b\", \"c\"], false);\r\n areEqualTest(\"hello\", Map.create(), false);\r\n\r\n areEqualTest(10, undefined, false);\r\n areEqualTest(10, null, false);\r\n areEqualTest(10, false, false);\r\n areEqualTest(10, true, false);\r\n areEqualTest(10, \"hello\", false);\r\n areEqualTest(10, 10, true);\r\n areEqualTest(10, 10.0, true);\r\n areEqualTest(10, -10, false);\r\n areEqualTest(10, 10.0000001, false);\r\n areEqualTest(10, 20, false);\r\n areEqualTest(10, {}, false);\r\n areEqualTest(10, [], false);\r\n areEqualTest(10, Map.create(), false);\r\n\r\n areEqualTest({}, undefined, false);\r\n areEqualTest({}, null, false);\r\n areEqualTest({}, false, false);\r\n areEqualTest({}, true, false);\r\n areEqualTest({}, \"hello\", false);\r\n areEqualTest({}, 20, false);\r\n areEqualTest({}, {}, true);\r\n areEqualTest({}, {a:5}, false);\r\n areEqualTest({a:5}, {a:5}, true);\r\n areEqualTest({a:{b:5}}, {a:{b:5}}, true);\r\n areEqualTest({a:6}, {a:5}, false);\r\n areEqualTest({A:5}, {a:5}, false);\r\n areEqualTest({}, [], false);\r\n areEqualTest({}, Map.create(), false);\r\n areEqualTest({a:5}, Map.create<string,number>().set(\"a\", 5), false);\r\n\r\n areEqualTest([], undefined, false);\r\n areEqualTest([], null, false);\r\n areEqualTest([], false, false);\r\n areEqualTest([], true, false);\r\n areEqualTest([], \"hello\", false);\r\n areEqualTest([\"a\", \"b\", \"c\"], \"abc\", false);\r\n areEqualTest([], 20, false);\r\n areEqualTest([], {}, false);\r\n areEqualTest([], List.create(), true);\r\n areEqualTest([], [], true);\r\n areEqualTest([], [1], false);\r\n areEqualTest([1], [1], true);\r\n areEqualTest([1,2,3], [1,2,3], true);\r\n areEqualTest([1,2], [1,2,3], false);\r\n areEqualTest([1,2], [1,3], false);\r\n areEqualTest([], Map.create(), false);\r\n\r\n areEqualTest(List.create(), undefined, false);\r\n areEqualTest(List.create(), null, false);\r\n areEqualTest(List.create(), false, false);\r\n areEqualTest(List.create(), true, false);\r\n areEqualTest(List.create(), \"hello\", false);\r\n areEqualTest(List.create(), 20, false);\r\n areEqualTest(List.create(), {}, false);\r\n areEqualTest(List.create(), [], true);\r\n areEqualTest(List.create(), [1], false);\r\n areEqualTest(List.create([1]), [1], true);\r\n areEqualTest(List.create([1,2,3]), [1,2,3], true);\r\n areEqualTest(List.create([1,2]), [1,2,3], false);\r\n areEqualTest(List.create([1,2]), [1,3], false);\r\n areEqualTest(List.create(), Map.create(), false);\r\n\r\n areEqualTest(Map.create(), undefined, false);\r\n areEqualTest(Map.create(), null, false);\r\n areEqualTest(Map.create(), false, false);\r\n areEqualTest(Map.create(), true, false);\r\n areEqualTest(Map.create(), \"hello\", false);\r\n areEqualTest(Map.create(), 20, false);\r\n areEqualTest(Map.create(), {}, false);\r\n areEqualTest(Map.create().set(\"d\", 4), {d:4}, false);\r\n areEqualTest(Map.create().set(\"d\", 4), {d:5}, false);\r\n areEqualTest(Map.create().set(\"d\", 4), {e:4}, false);\r\n areEqualTest(Map.create(), [], false);\r\n areEqualTest(Map.create(), Map.create(), true);\r\n areEqualTest(Map.create(), Map.create().set(\"e\", 5), false);\r\n areEqualTest(Map.create().set(\"e\", 5), Map.create().set(\"e\", 5), true);\r\n areEqualTest(Map.create().set(\"e\", 5), Map.create().set(\"f\", 5), false);\r\n areEqualTest(Map.create().set(\"e\", 5), Map.create().set(\"e\", 6), false);\r\n areEqualTest(Map.create().set(\"e\", 5).set(\"f\", 6), Map.create().set(\"f\", 6).set(\"e\", 5), true);\r\n });\r\n\r\n runner.testFunction(\"add()\", () =>\r\n {\r\n runner.test(\"with undefined equalFunction\", (test: Test) =>\r\n {\r\n const functions: EqualFunctions = EqualFunctions.create();\r\n test.assertThrows(\r\n () => functions.add(undefined!),\r\n new PreConditionError([\r\n \"Expression: equalFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"\r\n ].join(\"\\n\")),\r\n );\r\n });\r\n\r\n runner.test(\"with null equalFunction\", (test: Test) =>\r\n {\r\n const functions: EqualFunctions = EqualFunctions.create();\r\n test.assertThrows(\r\n () => functions.add(null!),\r\n new PreConditionError([\r\n \"Expression: equalFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"\r\n ].join(\"\\n\")),\r\n );\r\n });\r\n\r\n runner.test(\"with equalFunction that compares numbers based on their mod 2 result\", (test: Test) =>\r\n {\r\n const functions: EqualFunctions = EqualFunctions.create();\r\n const result: EqualFunctions = functions.add((left: unknown, right: unknown) =>\r\n {\r\n let result: boolean | undefined;\r\n if (isNumber(left) && isNumber(right))\r\n {\r\n const leftMod2: number = left % 2;\r\n const rightMod2: number = right % 2;\r\n result = leftMod2 === rightMod2;\r\n }\r\n return result;\r\n });\r\n test.assertSame(functions, result);\r\n test.assertTrue(functions.areEqual(0, 0).await());\r\n test.assertTrue(functions.areEqual(1, 1).await());\r\n test.assertTrue(functions.areEqual(0, 2).await());\r\n test.assertTrue(functions.areEqual(1, 3).await());\r\n test.assertFalse(functions.areEqual(-1, 5).await());\r\n test.assertFalse(functions.areEqual(0, 1).await());\r\n test.assertTrue(functions.areEqual(false, false).await());\r\n test.assertFalse(functions.areEqual(false, true).await());\r\n });\r\n });\r\n });\r\n });\r\n}","import { FetchHttpClient } from \"../sources/fetchHttpClient\";\r\nimport { FetchHttpIncomingResponse } from \"../sources/fetchHttpResponse\";\r\nimport { HttpOutgoingRequest } from \"../sources/httpOutgoingRequest\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\nimport { hasNetworkAccess } from \"./tests\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"fetchHttpClient.ts\", () =>\r\n {\r\n runner.testType(\"FetchHttpClient\", () =>\r\n {\r\n runner.test(\"create()\", (test: Test) =>\r\n {\r\n const client: FetchHttpClient = FetchHttpClient.create();\r\n test.assertNotUndefinedAndNotNull(client);\r\n });\r\n\r\n runner.testFunction(\"sendRequest()\", () =>\r\n {\r\n runner.test(\"to URL that exists\", runner.skip(!hasNetworkAccess), async (test: Test) =>\r\n {\r\n const client: FetchHttpClient = FetchHttpClient.create();\r\n\r\n const response: FetchHttpIncomingResponse = await client.sendRequest(HttpOutgoingRequest.get(\"https://www.example.com\"));\r\n test.assertNotUndefinedAndNotNull(response);\r\n test.assertEqual(200, response.getStatusCode());\r\n });\r\n });\r\n });\r\n });\r\n}","import { Generator } from \"../sources/generator\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\nimport { iteratorTests } from \"./iteratorTests\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"generator.ts\", () =>\n {\n runner.testType(\"Generator<T>\", () =>\n {\n iteratorTests(runner, () => Generator.create(() => {}));\n\n runner.testFunction(\"create()\", () =>\n {\n runner.test(\"with undefined\", (test: Test) =>\n {\n test.assertThrows(() => Generator.create(undefined!), new PreConditionError(\n \"Expression: generatorAction\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null\", (test: Test) =>\n {\n test.assertThrows(() => Generator.create(null!), new PreConditionError(\n \"Expression: generatorAction\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with function that doesn't add any return values or return a value\", (test: Test) =>\n {\n const generator: Generator<void> = Generator.create(() => {});\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([], generator.toArray().await());\n });\n\n runner.test(\"with function that returns a constant value\", (test: Test) =>\n {\n const generator: Generator<number> = Generator.create(() => 20);\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([20, 20, 20, 20], generator.take(4).toArray().await());\n });\n\n runner.test(\"with function that returns an incrementing value\", (test: Test) =>\n {\n let value: number = 20;\n const generator: Generator<number> = Generator.create(() => value++);\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([20, 21, 22, 23, 24], generator.take(5).toArray().await());\n });\n\n runner.test(\"with function that always adds a return value\", (test: Test) =>\n {\n const generator: Generator<number> = Generator.create(control => control.addValue(20));\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([20, 20, 20, 20], generator.take(4).toArray().await());\n });\n\n runner.test(\"with function that always adds multiple return values\", (test: Test) =>\n {\n const generator: Generator<number> = Generator.create(control => { control.addValues([20, 21, 22]); });\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([20, 21, 22, 20, 21], generator.take(5).toArray().await());\n });\n\n runner.test(\"with function that always adds a return value and returns a value\", (test: Test) =>\n {\n const generator: Generator<number> = Generator.create(control =>\n {\n control.addValue(20);\n test.assertTrue(control.hasCurrent());\n test.assertEqual(20, control.getCurrent());\n return 21;\n });\n test.assertNotUndefinedAndNotNull(generator);\n test.assertEqual([20, 21, 20, 21, 20], generator.take(5).toArray().await());\n });\n });\n });\n });\n}","import { EmptyError } from \"../sources/emptyError\";\r\nimport { Iterator } from \"../sources/iterator\";\r\nimport\r\n{\r\n JavascriptIterable, JavascriptIterator, JavascriptIteratorResult\r\n} from \"../sources/javascript\";\r\nimport { NotFoundError } from \"../sources/notFoundError\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"iterator.ts\", () =>\r\n {\r\n runner.testType(\"Iterator<T>\", () =>\r\n {\r\n runner.testFunction(\"create(T[])\", () =>\r\n {\r\n function createErrorTest<T>(values: T[], expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => Iterator.create(values), expected);\r\n });\r\n }\r\n\r\n createErrorTest(undefined!, new PreConditionError(\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n createErrorTest(null!, new PreConditionError(\r\n \"Expression: values\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n function createTest<T>(values: T[]): void\r\n {\r\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = Iterator.create(values);\r\n test.assertEqual(iterator.toArray().await(), values);\r\n });\r\n }\r\n\r\n createTest([]);\r\n createTest([1, 2, 3]);\r\n createTest([false, true]);\r\n });\r\n\r\n runner.testFunction(\"next()\", () =>\r\n {\r\n runner.testGroup(\"not empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (const value of values)\r\n {\r\n test.assertTrue(iterator.next().await());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertEqual(value, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(iterator.next().await());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertThrows(\r\n () => iterator.getCurrent(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ),\r\n );\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(1, iterator.getCurrent());\r\n\r\n for (const value of values.slice(1))\r\n {\r\n test.assertTrue(iterator.next().await());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertEqual(value, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(iterator.next().await());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertThrows(\r\n () => iterator.getCurrent(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ),\r\n );\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"start()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2, 3]);\r\n for (let i: number = 0; i < 2; i++)\r\n {\r\n const startResult: Iterator<number> = iterator.start().await();\r\n test.assertSame(startResult, iterator);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(1, iterator.getCurrent());\r\n }\r\n });\r\n\r\n runner.testFunction(\"takeCurrent()\", () =>\r\n {\r\n runner.testGroup(\"with non-empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2, 3]);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertThrows(() => iterator.takeCurrent(),\r\n new PreConditionError(\r\n \"Expression: iterator.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(1, iterator.getCurrent());\r\n\r\n for (let i = 0; i < values.length - 1; i++)\r\n {\r\n test.assertEqual(values[i], iterator.takeCurrent().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[i + 1], iterator.getCurrent());\r\n }\r\n\r\n test.assertEqual(values[values.length - 1], iterator.takeCurrent().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"any()\", () =>\r\n {\r\n runner.testGroup(\"with non-empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertTrue(iterator.any().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertTrue(iterator.any().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent());\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"getCount()\", () =>\r\n {\r\n runner.testGroup(\"with non-empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertEqual(values.length, iterator.getCount().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertEqual(iterator.getCount().await(), 0);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent());\r\n\r\n test.assertEqual(values.length, iterator.getCount().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertEqual(iterator.getCount().await(), 0);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"toArray()\", () =>\r\n {\r\n runner.testGroup(\"not empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n\r\n test.assertEqual(values, iterator.toArray().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertEqual([], iterator.toArray().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n\r\n test.assertEqual(values, iterator.toArray().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertEqual([], iterator.toArray().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n });\r\n });\r\n\r\n runner.testGroup(\"concatenate()\", () =>\r\n {\r\n runner.testGroup(\"with non-started\", () =>\r\n {\r\n runner.testGroup(\"empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([]);\r\n test.assertEqual(concatenateIterator.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([5]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [5]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([5], [6, 7]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [5, 6, 7]);\r\n });\r\n });\r\n\r\n runner.testGroup(\"non-empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [1, 2]);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([3]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([4, 5, 6]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [3, 4, 5, 6]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([7, 8, 9]);\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([10, 11, 12], [13]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [7, 8, 9, 10, 11, 12, 13]);\r\n });\r\n });\r\n });\r\n\r\n runner.testGroup(\"with started\", () =>\r\n {\r\n runner.testGroup(\"empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([]);\r\n test.assertEqual(concatenateIterator.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([5]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [5]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([5], [6, 7]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [5, 6, 7]);\r\n });\r\n });\r\n\r\n runner.testGroup(\"non-empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [1, 2]);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([3]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([4, 5, 6]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [3, 4, 5, 6]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([7, 8, 9]).start().await();\r\n const concatenateIterator: Iterator<number> = iterator.concatenate([10, 11, 12], [13]);\r\n test.assertEqual(concatenateIterator.toArray().await(), [7, 8, 9, 10, 11, 12, 13]);\r\n });\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"where()\", () =>\r\n {\r\n runner.testGroup(\"with non-empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3, 4, 5];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n const result: Iterator<number> = iterator.where(x => x % 2 === 1);\r\n test.assertNotUndefinedAndNotNull(result);\r\n test.assertNotSame(result, iterator);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n\r\n for (const expectedValue of [1, 3, 5])\r\n {\r\n test.assertTrue(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertTrue(result.hasCurrent());\r\n test.assertEqual(expectedValue, result.getCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(expectedValue, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3, 4, 5];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n const result: Iterator<number> = iterator.where(x => x % 2 === 1);\r\n test.assertNotUndefinedAndNotNull(result);\r\n test.assertNotSame(result, iterator);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent())\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n\r\n for (const expectedValue of [1, 3, 5])\r\n {\r\n test.assertTrue(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertTrue(result.hasCurrent());\r\n test.assertEqual(expectedValue, result.getCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(expectedValue, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"map()\", () =>\r\n {\r\n runner.testGroup(\"with non-empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values);\r\n const result: Iterator<number> = iterator.map(x => x + 10);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n\r\n for (const value of values)\r\n {\r\n test.assertTrue(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertTrue(result.hasCurrent());\r\n test.assertEqual(value + 10, result.getCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(value, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const values: number[] = [1, 2, 3];\r\n const iterator: Iterator<number> = Iterator.create(values).start().await();\r\n const result: Iterator<number> = iterator.map(x => x + 10);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(values[0], iterator.getCurrent());\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n\r\n for (const value of values)\r\n {\r\n test.assertTrue(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertTrue(result.hasCurrent());\r\n test.assertEqual(value + 10, result.getCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertEqual(value, iterator.getCurrent());\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"flatMap()\", () =>\r\n {\r\n runner.test(\"with empty non-started iterator\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]);\r\n const flatMapIterator: Iterator<string> = iterator.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterator.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"with empty started iterator\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([]).start().await();\r\n const flatMapIterator: Iterator<string> = iterator.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterator.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"with non-empty non-started iterator\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2, 3]);\r\n const flatMapIterator: Iterator<string> = iterator.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterator.toArray().await(), [\"1\", \"2\", \"2\", \"3\", \"3\", \"3\"]);\r\n });\r\n\r\n runner.test(\"with non-empty started iterator\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2, 3]).start().await();\r\n const flatMapIterator: Iterator<string> = iterator.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterator.toArray().await(), [\"1\", \"2\", \"2\", \"3\", \"3\", \"3\"]);\r\n });\r\n\r\n runner.test(\"with mapping that sometimes returns an empty iterable\", (test: Test) =>\r\n {\r\n const iterator: Iterator<number> = Iterator.create([1, 2, 3, 4]).start().await();\r\n const flatMapIterator: Iterator<string> = iterator.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n if (value % 2 === 1)\r\n {\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterator.toArray().await(), [\"1\", \"3\", \"3\", \"3\"]);\r\n });\r\n });\r\n\r\n runner.testFunction(\"first()\", () =>\r\n {\r\n runner.testGroup(\"with no condition\", () =>\r\n {\r\n function firstErrorTest(iterable: JavascriptIterable<string>, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(iterable)}`, (test: Test) =>\r\n {\r\n const iterator: Iterator<string> = Iterator.create(iterable);\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertThrows(() => { iterator.first().await(); }, expected);\r\n }\r\n });\r\n }\r\n\r\n firstErrorTest(\r\n [],\r\n new EmptyError(),\r\n );\r\n\r\n function firstTest<T>(iterable: JavascriptIterable<T>, expected: T): void\r\n {\r\n runner.test(`with ${runner.toString(iterable)}`, (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = Iterator.create(iterable);\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertEqual(iterator.first().await(), expected);\r\n }\r\n });\r\n }\r\n\r\n firstTest([1], 1);\r\n firstTest([2, 3], 2);\r\n firstTest([4, 5, 6, 7, 8], 4);\r\n });\r\n\r\n runner.testGroup(\"with condition argument\", () =>\r\n {\r\n function firstErrorTest<T>(iterable: JavascriptIterable<T>, condition: (value: T) => boolean, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(iterable)} and ${condition?.name} condition`, (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = Iterator.create(iterable);\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertThrows(() =>\r\n {\r\n iterator.first(condition).await();\r\n }, expected);\r\n }\r\n });\r\n }\r\n\r\n function isOdd(value: number): boolean\r\n {\r\n return value % 2 === 1;\r\n }\r\n\r\n function isEven(value: number): boolean\r\n {\r\n return value % 2 === 0;\r\n }\r\n\r\n firstErrorTest(\r\n [],\r\n undefined!,\r\n new EmptyError(),\r\n );\r\n firstErrorTest(\r\n [],\r\n null!,\r\n new EmptyError(),\r\n );\r\n firstErrorTest(\r\n [1],\r\n isEven,\r\n new NotFoundError(\"No value was found in the Iterator that matched the provided condition.\"),\r\n );\r\n firstErrorTest(\r\n [2, 4],\r\n isOdd,\r\n new NotFoundError(\"No value was found in the Iterator that matched the provided condition.\"),\r\n );\r\n\r\n function firstTest<T>(iterable: JavascriptIterable<T>, condition: (value: T) => boolean, expected: T): void\r\n {\r\n runner.test(`with ${runner.toString(iterable)} and ${condition?.name} condition`, (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = Iterator.create(iterable);\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertEqual(iterator.first(condition).await(), expected);\r\n }\r\n });\r\n }\r\n\r\n firstTest([1], isOdd, 1);\r\n firstTest([2, 3], isEven, 2);\r\n firstTest([2, 3], isOdd, 3);\r\n firstTest([4, 6, 7, 8], isEven, 4);\r\n firstTest([4, 6, 7, 8], isOdd, 7);\r\n });\r\n });\r\n\r\n runner.testFunction(\"skip(number)\", () =>\r\n {\r\n function skipErrorTest(iterable: JavascriptIterable<string>, maximumToSkip: number, expected: Error): void\r\n {\r\n runner.test(`with ${runner.andList([iterable, maximumToSkip])}`, (test: Test) =>\r\n {\r\n const iterator: Iterator<string> = Iterator.create(iterable);\r\n test.assertThrows(() => iterator.skip(maximumToSkip), expected);\r\n });\r\n }\r\n\r\n skipErrorTest([], undefined!, new PreConditionError(\r\n \"Expression: maximumToSkip\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n skipErrorTest([], null!, new PreConditionError(\r\n \"Expression: maximumToSkip\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n skipErrorTest([], 0.5, new PreConditionError(\r\n \"Expression: maximumToSkip\",\r\n \"Expected: integer\",\r\n \"Actual: 0.5\",\r\n ));\r\n skipErrorTest([], -1, new PreConditionError(\r\n \"Expression: maximumToSkip\",\r\n \"Expected: greater than or equal to 0\",\r\n \"Actual: -1\",\r\n ));\r\n\r\n function skipTest(iterable: JavascriptIterable<string>, maximumToSkip: number, expected: JavascriptIterable<string>): void\r\n {\r\n runner.test(`with ${runner.andList([iterable, maximumToSkip])}`, (test: Test) =>\r\n {\r\n const iterator: Iterator<string> = Iterator.create(iterable);\r\n const skipIterator: Iterator<string> = iterator.skip(maximumToSkip);\r\n test.assertEqual(expected, skipIterator.toArray().await());\r\n });\r\n }\r\n\r\n skipTest([], 0, []);\r\n skipTest([], 1, []);\r\n skipTest([], 2, []);\r\n skipTest([\"a\", \"b\", \"c\"], 0, [\"a\", \"b\", \"c\"]);\r\n skipTest([\"a\", \"b\", \"c\"], 1, [\"b\", \"c\"]);\r\n skipTest([\"a\", \"b\", \"c\"], 2, [\"c\"]);\r\n skipTest([\"a\", \"b\", \"c\"], 3, []);\r\n skipTest([\"a\", \"b\", \"c\"], 4, []);\r\n });\r\n });\r\n });\r\n}\r\n\r\nexport function iteratorTests<T>(runner: TestRunner, creator: () => Iterator<T>): void\r\n{\r\n runner.testType(\"Iterator<T>\", () =>\r\n {\r\n runner.testFunction(\"creator()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertNotUndefinedAndNotNull(iterator);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertThrows(() => iterator.getCurrent(), new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n });\r\n\r\n runner.testFunction(\"start()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n for (let i: number = 0; i < 2; i++)\r\n {\r\n const startResult: Iterator<T> = iterator.start().await();\r\n test.assertSame(startResult, iterator);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.testFunction(\"takeCurrent()\", () =>\r\n {\r\n runner.testGroup(\"with empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertThrows(() => iterator.takeCurrent(),\r\n new PreConditionError(\r\n \"Expression: iterator.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator().start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertThrows(() => iterator.takeCurrent(),\r\n new PreConditionError(\r\n \"Expression: iterator.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"next()\", () =>\r\n {\r\n runner.testGroup(\"with empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(iterator.next().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator().start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(iterator.next().await());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n });\r\n\r\n });\r\n\r\n runner.testFunction(\"[Symbol.iterator]()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n const jsIterator: JavascriptIterator<T> = iterator[Symbol.iterator]();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n const result: JavascriptIteratorResult<T> = jsIterator.next();\r\n test.assertEqual(result.done, true);\r\n test.assertUndefined(result.value);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.testFunction(\"any()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertFalse(iterator.any().await());\r\n\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.testFunction(\"getCount()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertEqual(iterator.getCount().await(), 0);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.testFunction(\"toArray()\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n const array: T[] = iterator.toArray().await();\r\n test.assertEqual(array, []);\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n }\r\n });\r\n\r\n runner.testFunction(\"where()\", () =>\r\n {\r\n runner.test(\"with undefined condition\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertThrows(() => iterator.where(undefined!), new PreConditionError(\r\n \"Expression: condition\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.test(\"with null condition\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertThrows(() => iterator.where(null!), new PreConditionError(\r\n \"Expression: condition\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.testGroup(\"with empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n\r\n const result: Iterator<T> = iterator.where((value: T) => value !== undefined);\r\n test.assertNotUndefinedAndNotNull(result);\r\n test.assertNotSame(result, iterator);\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator().start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n const result: Iterator<T> = iterator.where((value: T) => value !== undefined);\r\n test.assertNotUndefinedAndNotNull(result);\r\n test.assertNotSame(result, iterator);\r\n test.assertFalse(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertFalse(result.next().await());\r\n test.assertTrue(result.hasStarted());\r\n test.assertFalse(result.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"map()\", () =>\r\n {\r\n runner.test(\"with undefined\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertThrows(() => iterator.map(undefined!), new PreConditionError(\r\n \"Expression: mapping\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.test(\"with null\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertThrows(() => iterator.map(null!), new PreConditionError(\r\n \"Expression: mapping\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.testGroup(\"with empty\", () =>\r\n {\r\n runner.test(\"not started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator();\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n const mapIterator: Iterator<number> = iterator.map(_ => 5);\r\n test.assertFalse(mapIterator.hasStarted());\r\n test.assertFalse(mapIterator.hasCurrent());\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n\r\n runner.test(\"started\", (test: Test) =>\r\n {\r\n const iterator: Iterator<T> = creator().start().await();\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n const mapIterator: Iterator<number> = iterator.map(_ => 5);\r\n test.assertFalse(mapIterator.hasStarted());\r\n test.assertFalse(mapIterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n\r\n test.assertFalse(mapIterator.next().await());\r\n test.assertTrue(mapIterator.hasStarted());\r\n test.assertFalse(mapIterator.hasCurrent());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n });\r\n });\r\n });\r\n}","import { HttpClient } from \"../sources/httpClient\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"httpClient.ts\", () =>\r\n {\r\n runner.testType(\"HttpClient\", () =>\r\n {\r\n runner.test(\"create()\", (test: Test) =>\r\n {\r\n const client: HttpClient = HttpClient.create();\r\n test.assertNotUndefinedAndNotNull(client);\r\n });\r\n });\r\n });\r\n}","import { InMemoryCharacterWriteStream } from \"../sources/inMemoryCharacterWriteStream\";\r\nimport { SyncResult } from \"../sources/syncResult\";\r\nimport { isUndefined } from \"../sources/types\";\r\nimport * as characterWriteStreamTests from \"./characterWriteStreamTests\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"inMemoryCharacterWriteStream.ts\", () =>\r\n {\r\n runner.testType(\"InMemoryCharacterWriteStream\", () =>\r\n {\r\n characterWriteStreamTests.test(runner, InMemoryCharacterWriteStream.create);\r\n\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const writeStream: InMemoryCharacterWriteStream = InMemoryCharacterWriteStream.create();\r\n test.assertNotUndefinedAndNotNull(writeStream);\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n test.assertEqual(\"\\n\", writeStream.getNewlineSequence());\r\n });\r\n\r\n runner.testFunction(\"clearWrittenText()\", (test: Test) =>\r\n {\r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n\r\n const result1: InMemoryCharacterWriteStream = writeStream.clearWrittenText();\r\n test.assertSame(writeStream, result1);\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n\r\n writeStream.writeString(\"hello world!\").await();\r\n test.assertEqual(\"hello world!\", writeStream.getWrittenText());\r\n\r\n const result2: InMemoryCharacterWriteStream = writeStream.clearWrittenText();\r\n test.assertSame(writeStream, result2);\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n });\r\n\r\n runner.testFunction(\"setNewlineSequence()\", (test: Test) =>\r\n {\r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n\r\n const result1: InMemoryCharacterWriteStream = writeStream.setNewlineSequence(\"e\");\r\n test.assertSame(writeStream, result1);\r\n test.assertEqual(\"e\", writeStream.getNewlineSequence());\r\n test.assertEqual(\"\", writeStream.getWrittenText());\r\n\r\n const result2: SyncResult<number> = writeStream.writeString(\"ab\");\r\n test.assertEqual(\"ab\", writeStream.getWrittenText());\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertEqual(2, result2.await());\r\n test.assertEqual(\"ab\", writeStream.getWrittenText());\r\n }\r\n\r\n const result3: SyncResult<number> = writeStream.writeLine(\"cd\");\r\n test.assertEqual(\"abcde\", writeStream.getWrittenText());\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertEqual(3, result3.await());\r\n test.assertEqual(\"abcde\", writeStream.getWrittenText());\r\n }\r\n });\r\n\r\n runner.testFunction(\"writeString()\", () =>\r\n {\r\n function writeStringTest(text: string): void\r\n {\r\n runner.test(`with ${runner.toString(text)}`, (test: Test) =>\r\n {\r\n const expectedWrittenText: string = text || \"\";\r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n const result: number = writeStream.writeString(text).await();\r\n test.assertEqual(expectedWrittenText.length, result);\r\n test.assertEqual(expectedWrittenText, writeStream.getWrittenText());\r\n });\r\n }\r\n\r\n writeStringTest(undefined!);\r\n writeStringTest(null!);\r\n writeStringTest(\"\");\r\n writeStringTest(\"a\");\r\n writeStringTest(\"abc\");\r\n });\r\n\r\n runner.testFunction(\"writeLine()\", () =>\r\n {\r\n function writeLineTest(text: string, newlineSequence?: string): void\r\n {\r\n runner.test(`with ${runner.toString(text)}${isUndefined(newlineSequence) ? \"\" : ` and ${runner.toString(newlineSequence)}`}`, (test: Test) =>\r\n {\r\n \r\n const writeStream = InMemoryCharacterWriteStream.create();\r\n if (!isUndefined(newlineSequence))\r\n {\r\n writeStream.setNewlineSequence(newlineSequence);\r\n }\r\n const expectedWrittenText: string = (text || \"\") + writeStream.getNewlineSequence();\r\n\r\n const result: number = writeStream.writeLine(text).await();\r\n test.assertEqual(expectedWrittenText.length, result);\r\n test.assertEqual(expectedWrittenText, writeStream.getWrittenText());\r\n });\r\n }\r\n\r\n writeLineTest(undefined!);\r\n writeLineTest(null!);\r\n writeLineTest(\"\");\r\n writeLineTest(\"a\");\r\n writeLineTest(\"abc\");\r\n writeLineTest(\"abc\", \"\\r\\n\");\r\n writeLineTest(\"abc\", \"\");\r\n });\r\n });\r\n });\r\n}","import { CharacterWriteStream } from \"../sources/characterWriteStream\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner, creator: () => CharacterWriteStream): void\r\n{\r\n runner.testFile(\"characterWriteStream.ts\", () =>\r\n {\r\n runner.testType(\"CharacterWriteStream\", () =>\r\n {\r\n });\r\n });\r\n}","import { Iterable } from \"../sources/iterable\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"iterable.ts\", () =>\r\n {\r\n runner.testType(\"Iterable<T>\", () =>\r\n {\r\n runner.testFunction(\"create(JavascriptIterable<T>|undefined)\", () =>\r\n {\r\n runner.test(\"with no arguments\", async (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create();\r\n test.assertNotUndefinedAndNotNull(iterable);\r\n test.assertEqual(await iterable.toArray(), []);\r\n test.assertEqual(await iterable.getCount(), 0);\r\n });\r\n\r\n runner.test(\"with empty array\", async (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create<number>([]);\r\n test.assertNotUndefinedAndNotNull(iterable);\r\n test.assertEqual(await iterable.toArray(), []);\r\n test.assertEqual(await iterable.getCount(), 0);\r\n });\r\n\r\n runner.test(\"with non-empty array\", async (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([1, 2, 3]);\r\n test.assertNotUndefinedAndNotNull(iterable);\r\n test.assertEqual(await iterable.toArray(), [1, 2, 3]);\r\n test.assertEqual(await iterable.getCount(), 3);\r\n });\r\n });\r\n\r\n runner.testGroup(\"concatenate()\", () =>\r\n {\r\n runner.testGroup(\"empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([]);\r\n test.assertEqual(concatenateIterable.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([5]);\r\n test.assertEqual(concatenateIterable.toArray().await(), [5]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([5], [6, 7]);\r\n test.assertEqual(concatenateIterable.toArray().await(), [5, 6, 7]);\r\n });\r\n });\r\n\r\n runner.testGroup(\"non-empty and\", () =>\r\n {\r\n runner.test(\"empty\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([1, 2]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([]);\r\n test.assertEqual(concatenateIterable.toArray().await(), [1, 2]);\r\n });\r\n\r\n runner.test(\"non-empty\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([3]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([4, 5, 6]);\r\n test.assertEqual(concatenateIterable.toArray().await(), [3, 4, 5, 6]);\r\n });\r\n\r\n runner.test(\"two non-emptys\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([7, 8, 9]);\r\n const concatenateIterable: Iterable<number> = iterable.concatenate([10, 11, 12], [13]);\r\n test.assertEqual(concatenateIterable.toArray().await(), [7, 8, 9, 10, 11, 12, 13]);\r\n });\r\n });\r\n });\r\n\r\n runner.testFunction(\"flatMap()\", () =>\r\n {\r\n runner.test(\"with empty iterable\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([]);\r\n const flatMapIterable: Iterable<string> = iterable.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterable.toArray().await(), []);\r\n });\r\n\r\n runner.test(\"with non-empty iterable\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([1, 2, 3]);\r\n const flatMapIterable: Iterable<string> = iterable.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterable.toArray().await(), [\"1\", \"2\", \"2\", \"3\", \"3\", \"3\"]);\r\n });\r\n\r\n runner.test(\"with mapping that sometimes returns an empty iterable\", (test: Test) =>\r\n {\r\n const iterable: Iterable<number> = Iterable.create([1, 2, 3, 4]);\r\n const flatMapIterable: Iterable<string> = iterable.flatMap((value: number) =>\r\n {\r\n const result: string[] = [];\r\n if (value % 2 === 1)\r\n {\r\n for (let i = 0; i < value; i++)\r\n {\r\n result.push(value.toString());\r\n }\r\n }\r\n return result;\r\n });\r\n test.assertEqual(flatMapIterable.toArray().await(), [\"1\", \"3\", \"3\", \"3\"]);\r\n });\r\n });\r\n });\r\n });\r\n}","import { JavascriptMapMap } from \"../sources/javascriptMapMap\";\r\nimport { mapTests } from \"./mapTests\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"javascriptMapMap.ts\", () =>\r\n {\r\n runner.testType(\"JavascriptMapMap<TKey,TValue>\", () =>\r\n {\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const map: JavascriptMapMap<number,string> = JavascriptMapMap.create();\r\n test.assertEqual(map.getCount().await(), 0);\r\n });\r\n\r\n mapTests(runner, JavascriptMapMap.create);\r\n });\r\n });\r\n}\r\n","import { Iterator } from \"../sources/iterator\";\r\nimport { JavascriptIterable } from \"../sources/javascript\";\r\nimport { isMap, Map } from \"../sources/map\";\r\nimport { MutableMap } from \"../sources/mutableMap\";\r\nimport { NotFoundError } from \"../sources/notFoundError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"map.ts\", () =>\r\n {\r\n runner.testType(\"Map<TKey,TValue>\", () =>\r\n {\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const map: MutableMap<number,string> = Map.create();\r\n test.assertSame(map.getCount().await(), 0);\r\n });\r\n\r\n mapTests(runner, Map.create);\r\n });\r\n });\r\n}\r\n\r\nexport function mapTests(runner: TestRunner, creator: () => Map<number,string>): void\r\n{\r\n runner.testType(\"Map<TKey,TValue>\", () =>\r\n {\r\n runner.testFunction(\"creator()\", (test: Test) =>\r\n {\r\n test.assertNotUndefinedAndNotNull(creator);\r\n \r\n const map: Map<number,string> = creator();\r\n test.assertNotUndefinedAndNotNull(map);\r\n test.assertEqual(map.getCount().await(), 0);\r\n test.assertTrue(isMap(map));\r\n });\r\n\r\n runner.testFunction(\"containsKey(TKey)\", () =>\r\n {\r\n runner.test(\"when it doesn't contain the key\", (test: Test) =>\r\n {\r\n const map: Map<number,string> = creator();\r\n\r\n test.assertFalse(map.containsKey(50).await());\r\n });\r\n });\r\n\r\n runner.testFunction(\"get(TKey)\", () =>\r\n {\r\n runner.test(\"when it doesn't contain the key\", (test: Test) =>\r\n {\r\n const map: Map<number,string> = creator();\r\n\r\n test.assertThrows(() => map.get(1).await(),\r\n new NotFoundError(\r\n \"The key 1 was not found in the map.\"));\r\n test.assertEqual(map.getCount().await(), 0);\r\n });\r\n });\r\n\r\n runner.testFunction(\"toString()\", () =>\r\n {\r\n function toStringTest(map: Map<number,string>, expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(map)}`, (test: Test) =>\r\n {\r\n test.assertEqual(map.toString(), expected);\r\n });\r\n }\r\n\r\n toStringTest(creator(), \"{}\");\r\n });\r\n\r\n runner.testFunction(\"iterateKeys()\", () =>\r\n {\r\n function iterateKeysTests(map: Map<number,string>, expected: JavascriptIterable<number>): void\r\n {\r\n runner.test(`with ${runner.toString(map)}`, async (test: Test) =>\r\n {\r\n const keyIterator: Iterator<number> = map.iterateKeys();\r\n test.assertEqual(await keyIterator.toArray(), [...expected]);\r\n });\r\n }\r\n\r\n iterateKeysTests(creator(), []);\r\n });\r\n\r\n runner.testFunction(\"iterateValues()\", () =>\r\n {\r\n function iterateValuesTests(map: Map<number,string>, expected: JavascriptIterable<string>): void\r\n {\r\n runner.test(`with ${runner.toString(map)}`, async (test: Test) =>\r\n {\r\n const valueIterator: Iterator<string> = map.iterateValues();\r\n test.assertEqual(await valueIterator.toArray(), [...expected]);\r\n });\r\n }\r\n\r\n iterateValuesTests(creator(), []);\r\n });\r\n });\r\n}","import { JavascriptIterable } from \"../sources/javascript\";\r\nimport { List } from \"../sources/list\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { isIterable } from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"list.ts\", () =>\r\n {\r\n runner.testType(\"List<T>\", () =>\r\n {\r\n runner.testFunction(\"create(T[]|Iterable<T>|undefined)\", () =>\r\n {\r\n runner.test(\"with no arguments\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create();\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), []);\r\n test.assertEqual(list.toString(), \"[]\");\r\n test.assertEqual(list.getCount().await(), 0);\r\n });\r\n\r\n runner.test(\"with undefined\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create(undefined);\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), []);\r\n test.assertEqual(list.toString(), \"[]\");\r\n test.assertEqual(list.getCount().await(), 0);\r\n });\r\n\r\n runner.test(\"with empty array\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create<number>([]);\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), []);\r\n test.assertSame(list.toString(), \"[]\");\r\n test.assertSame(list.getCount().await(), 0);\r\n });\r\n\r\n runner.test(\"with non-empty array\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create([1, 2, 3]);\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), [1, 2, 3]);\r\n test.assertSame(list.toString(), \"[1,2,3]\");\r\n test.assertSame(list.getCount().await(), 3);\r\n });\r\n\r\n runner.test(\"with empty Iterable<T>\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create(List.create());\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), []);\r\n test.assertSame(list.toString(), \"[]\");\r\n test.assertSame(list.getCount().await(), 0);\r\n });\r\n\r\n runner.test(\"with non-empty Iterable<T>\", (test: Test) =>\r\n {\r\n const list: List<number> = List.create(List.create([1, 2, 3]));\r\n test.assertNotUndefinedAndNotNull(list);\r\n test.assertEqual(list.toArray().await(), [1, 2, 3]);\r\n test.assertTrue(isIterable(list));\r\n test.assertSame(list.toString(), \"[1,2,3]\");\r\n test.assertSame(list.getCount().await(), 3);\r\n });\r\n });\r\n\r\n runner.testFunction(\"set(number,T)\", () =>\r\n {\r\n function setErrorTest(list: List<number>, index: number, value: number, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, value])}`, (test: Test) =>\r\n {\r\n const backupList: List<number> = List.create(list);\r\n test.assertThrows(() => list.set(index, value), expectedError);\r\n test.assertEqual(list, backupList);\r\n });\r\n }\r\n\r\n setErrorTest(List.create(), -1, 5, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\",\r\n ));\r\n setErrorTest(List.create(), 0, 5, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\",\r\n ));\r\n setErrorTest(List.create(), 1, 5, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\"\r\n ));\r\n setErrorTest(List.create([1]), -1, 5, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: -1\"\r\n ));\r\n setErrorTest(List.create([1]), 1, 5, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: 1\"\r\n ));\r\n\r\n function setTest(list: List<number>, index: number, value: number, expected: number[]): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, value])}`, (test: Test) =>\r\n {\r\n const setResult: List<number> = list.set(index, value);\r\n test.assertSame(list, setResult);\r\n test.assertEqual(list.toArray().await(), expected);\r\n });\r\n }\r\n\r\n setTest(List.create([1]), 0, 5, [5]);\r\n setTest(List.create([1, 2]), 0, 5, [5, 2]);\r\n setTest(List.create([1, 2]), 1, 5, [1, 5]);\r\n });\r\n\r\n runner.testFunction(\"get(number)\", () =>\r\n {\r\n function getErrorTest(list: List<number>, index: number, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.andList([list, index])}`, (test: Test) =>\r\n {\r\n const backupList: List<number> = List.create(list);\r\n test.assertThrows(() => list.get(index), expectedError);\r\n test.assertEqual(list, backupList);\r\n });\r\n }\r\n\r\n getErrorTest(List.create(), -1, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\"\r\n ));\r\n getErrorTest(List.create(), 0, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\"\r\n ));\r\n getErrorTest(List.create(), 1, new PreConditionError(\r\n \"Expression: count\",\r\n \"Expected: greater than or equal to 1\",\r\n \"Actual: 0\"\r\n ));\r\n getErrorTest(List.create([1]), -1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: -1\"\r\n ));\r\n getErrorTest(List.create([1]), 1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: 1\"\r\n ));\r\n\r\n function getTest(list: List<number>, index: number, expected: number): void\r\n {\r\n runner.test(`with ${runner.andList([list, index])}`, (test: Test) =>\r\n {\r\n test.assertSame(list.get(index).await(), expected);\r\n });\r\n }\r\n\r\n getTest(List.create([1]), 0, 1);\r\n getTest(List.create([1, 2]), 0, 1);\r\n getTest(List.create([1, 2]), 1, 2);\r\n });\r\n\r\n runner.testFunction(\"add(T)\", () =>\r\n {\r\n function addTest(list: List<number>, value: number, expected: number[]): void\r\n {\r\n runner.test(`with ${runner.andList([list, value])}`, (test: Test) =>\r\n {\r\n const addResult: List<number> = list.add(value);\r\n test.assertSame(addResult, list);\r\n test.assertEqual(list.toArray().await(), expected);\r\n });\r\n }\r\n\r\n addTest(List.create(), 1, [1]);\r\n addTest(List.create([1]), 2, [1, 2]);\r\n addTest(List.create([1, 2]), 3, [1, 2, 3]);\r\n });\r\n\r\n runner.testFunction(\"addAll(T)\", () =>\r\n {\r\n function addAllTest(list: List<number>, values: JavascriptIterable<number>, expected: number[]): void\r\n {\r\n runner.test(`with ${runner.andList([list, values])}`, (test: Test) =>\r\n {\r\n const addResult: List<number> = list.addAll(values);\r\n test.assertSame(addResult, list);\r\n test.assertEqual(list.toArray().await(), expected);\r\n });\r\n }\r\n\r\n addAllTest(List.create(), [1], [1]);\r\n addAllTest(List.create([1]), [2], [1, 2]);\r\n addAllTest(List.create([1, 2]), [3], [1, 2, 3]);\r\n addAllTest(List.create(), [1, 2], [1, 2]);\r\n addAllTest(List.create([1]), [2, 3], [1, 2, 3]);\r\n addAllTest(List.create([1, 2]), [3, 4], [1, 2, 3, 4]);\r\n\r\n addAllTest(List.create(), List.create([1]), [1]);\r\n addAllTest(List.create([1]), List.create([2]), [1, 2]);\r\n addAllTest(List.create([1, 2]), List.create([3]), [1, 2, 3]);\r\n addAllTest(List.create(), List.create([1, 2]), [1, 2]);\r\n addAllTest(List.create([1]), List.create([2, 3]), [1, 2, 3]);\r\n addAllTest(List.create([1, 2]), List.create([3, 4]), [1, 2, 3, 4]);\r\n });\r\n\r\n runner.testFunction(\"insert(number,T)\", () =>\r\n {\r\n function insertErrorTest(list: List<number>, index: number, value: number, expected: Error): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, value])}`, (test: Test) =>\r\n {\r\n const backupList: List<number> = List.create(list);\r\n test.assertThrows(() => list.insert(index, value), expected);\r\n test.assertEqual(list, backupList);\r\n });\r\n }\r\n\r\n insertErrorTest(List.create(), -1, 1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: -1\"\r\n ));\r\n insertErrorTest(List.create(), 1, 1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: 1\"\r\n ));\r\n insertErrorTest(List.create([1]), -1, 1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: -1\"\r\n ));\r\n insertErrorTest(List.create([1]), 2, 1, new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: 2\"\r\n ));\r\n\r\n function insertTest(list: List<number>, index: number, value: number, expected: number[]): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, value])}`, (test: Test) =>\r\n {\r\n const insertResult: List<number> = list.insert(index, value);\r\n test.assertSame(insertResult, list);\r\n test.assertEqual(list.toArray().await(), expected);\r\n });\r\n }\r\n\r\n insertTest(List.create(), 0, 1, [1]);\r\n insertTest(List.create([2]), 0, 1, [1, 2]);\r\n insertTest(List.create([1]), 1, 2, [1, 2]);\r\n insertTest(List.create([2, 3]), 0, 1, [1, 2, 3]);\r\n insertTest(List.create([1, 3]), 1, 2, [1, 2, 3]);\r\n insertTest(List.create([1, 2]), 2, 3, [1, 2, 3]);\r\n });\r\n\r\n runner.testFunction(\"insertAll(number,T)\", () =>\r\n {\r\n function insertAllErrorTest(list: List<number>, index: number, values: number[] | Iterable<number>, expected: Error): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, values])}`, (test: Test) =>\r\n {\r\n const backupList: List<number> = List.create(list);\r\n test.assertThrows(() => list.insertAll(index, values), expected);\r\n test.assertEqual(list, backupList);\r\n });\r\n }\r\n\r\n insertAllErrorTest(List.create(), -1, [1], new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: -1\"\r\n ));\r\n insertAllErrorTest(List.create(), 1, [1], new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: 0\",\r\n \"Actual: 1\"\r\n ));\r\n insertAllErrorTest(List.create([1]), -1, [1], new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: -1\"\r\n ));\r\n insertAllErrorTest(List.create([1]), 2, [1], new PreConditionError(\r\n \"Expression: index\",\r\n \"Expected: between 0 and 1\",\r\n \"Actual: 2\",\r\n ));\r\n\r\n function insertAllTest(list: List<number>, index: number, values: JavascriptIterable<number>, expected: number[]): void\r\n {\r\n runner.test(`with ${runner.andList([list, index, values])}`, (test: Test) =>\r\n {\r\n const insertResult: List<number> = list.insertAll(index, values);\r\n test.assertSame(insertResult, list);\r\n test.assertEqual(list.toArray().await(), expected);\r\n });\r\n }\r\n\r\n insertAllTest(List.create(), 0, [], []);\r\n insertAllTest(List.create(), 0, [1], [1]);\r\n insertAllTest(List.create([2]), 0, [1], [1, 2]);\r\n insertAllTest(List.create([1]), 1, [2], [1, 2]);\r\n insertAllTest(List.create([2, 3]), 0, [1], [1, 2, 3]);\r\n insertAllTest(List.create([1, 3]), 1, [2], [1, 2, 3]);\r\n insertAllTest(List.create([1, 2]), 2, [3], [1, 2, 3]);\r\n insertAllTest(List.create([3]), 0, [1, 2], [1, 2, 3]);\r\n insertAllTest(List.create([1]), 1, [2, 3], [1, 2, 3]);\r\n insertAllTest(List.create([1, 4]), 1, [2, 3], [1, 2, 3, 4]);\r\n\r\n insertAllTest(List.create(), 0, List.create(), []);\r\n insertAllTest(List.create(), 0, List.create([1]), [1]);\r\n insertAllTest(List.create([2]), 0, List.create([1]), [1, 2]);\r\n insertAllTest(List.create([1]), 1, List.create([2]), [1, 2]);\r\n insertAllTest(List.create([2, 3]), 0, List.create([1]), [1, 2, 3]);\r\n insertAllTest(List.create([1, 3]), 1, List.create([2]), [1, 2, 3]);\r\n insertAllTest(List.create([1, 2]), 2, List.create([3]), [1, 2, 3]);\r\n insertAllTest(List.create([3]), 0, List.create([1, 2]), [1, 2, 3]);\r\n insertAllTest(List.create([1]), 1, List.create([2, 3]), [1, 2, 3]);\r\n insertAllTest(List.create([1, 4]), 1, List.create([2, 3]), [1, 2, 3, 4]);\r\n });\r\n });\r\n });\r\n}\r\n","import { Iterator } from \"../sources/iterator\";\r\nimport { MapIterator } from \"../sources/mapIterator\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"mapIterator.ts\", () =>\r\n {\r\n runner.testType(\"MapIterator<TInput,TOutput>\", () =>\r\n {\r\n runner.testFunction(\"create(Iterator<TInput>,(TInput)=>TOutput)\", () =>\r\n {\r\n function createErrorTest<TInput,TOutput>(testName: string, innerIterator: Iterator<TInput>, mapping: (value: TInput) => TOutput, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n test.assertThrows(() => MapIterator.create(innerIterator, mapping), expected);\r\n });\r\n }\r\n \r\n createErrorTest(\r\n \"with undefined inputIterator\",\r\n undefined!,\r\n (value: number) => value.toString(),\r\n new PreConditionError(\r\n \"Expression: inputIterator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n createErrorTest(\r\n \"with null inputIterator\",\r\n null!,\r\n (value: number) => value.toString(),\r\n new PreConditionError(\r\n \"Expression: inputIterator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n \r\n runner.test(\"with valid values\", (test: Test) =>\r\n {\r\n const inputIterator: Iterator<number> = Iterator.create([1, 2, 3]);\r\n test.assertFalse(inputIterator.hasStarted());\r\n test.assertFalse(inputIterator.hasCurrent());\r\n \r\n const iterator: MapIterator<number,string> = MapIterator.create(inputIterator, (value: number) => value.toString());\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n });\r\n });\r\n });\r\n });\r\n}","\r\n\r\nimport { EqualFunctions } from \"../sources/equalFunctions\";\r\nimport { MutableCondition } from \"../sources/mutableCondition\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { join } from \"../sources/strings\";\r\nimport { ToStringFunctions } from \"../sources/toStringFunctions\";\r\nimport { isNumber, isString } from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"mutableCondition.ts\", () =>\r\n {\r\n runner.testType(\"MutableCondition\", () =>\r\n {\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertNotUndefinedAndNotNull(mc);\r\n });\r\n\r\n runner.testFunction(\"setToStringFunctions()\", () =>\r\n {\r\n function setToStringFunctionsErrorTest(testName: string, toStringFunctions: ToStringFunctions, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(() => mc.setToStringFunctions(toStringFunctions), expected);\r\n });\r\n }\r\n\r\n setToStringFunctionsErrorTest(\"with undefined\", undefined!, new PreConditionError(\r\n \"Expression: toStringFunctions\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n setToStringFunctionsErrorTest(\"with null\", null!, new PreConditionError(\r\n \"Expression: toStringFunctions\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n runner.test(\"with valid value\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertEqual(`\"hello\"`, mc.toValueString(\"hello\"));\r\n\r\n mc.setToStringFunctions(\r\n ToStringFunctions.create()\r\n .add(isString, (value: string) => `---${value}---`),\r\n );\r\n test.assertEqual(`---hello---`, mc.toValueString(\"hello\"));\r\n });\r\n });\r\n\r\n runner.testFunction(\"setEqualFunctions()\", () =>\r\n {\r\n function setEqualFunctionsErrorTest(testName: string, equalFunctions: EqualFunctions, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(() => mc.setEqualFunctions(equalFunctions), expected);\r\n });\r\n }\r\n\r\n setEqualFunctionsErrorTest(\"with undefined\", undefined!, new PreConditionError(\r\n \"Expression: equalFunctions\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n setEqualFunctionsErrorTest(\"with null\", null!, new PreConditionError(\r\n \"Expression: equalFunctions\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n runner.test(\"with valid value\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertFalse(mc.areEqual(3, 5));\r\n test.assertFalse(mc.areEqual(3, 4));\r\n test.assertTrue(mc.areEqual(4, 4));\r\n\r\n mc.setEqualFunctions(\r\n EqualFunctions.create()\r\n .add((left: unknown, right: unknown) =>\r\n {\r\n return isNumber(left) && isNumber(right)\r\n ? left % 2 === right % 2\r\n : undefined;\r\n })\r\n )\r\n\r\n test.assertTrue(mc.areEqual(3, 5));\r\n test.assertFalse(mc.areEqual(3, 4));\r\n test.assertTrue(mc.areEqual(4, 4));\r\n });\r\n });\r\n\r\n runner.testFunction(\"setCreateErrorFunction()\", () =>\r\n {\r\n function setCreateErrorFunctionErrorTest(testName: string, createErrorFunction: ((message: string) => Error), expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(() => mc.setCreateErrorFunction(createErrorFunction), expected);\r\n });\r\n }\r\n\r\n setCreateErrorFunctionErrorTest(\"with undefined\", undefined!, new PreConditionError(\r\n \"Expression: createErrorFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n setCreateErrorFunctionErrorTest(\"with null\", null!, new PreConditionError(\r\n \"Expression: createErrorFunction\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n runner.test(\"with valid function\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(() => mc.assertEqual(1, 2));\r\n\r\n mc.setCreateErrorFunction((message: string) =>\r\n {\r\n return Error(`fake '${message}' fake`);\r\n });\r\n\r\n mc.setEqualFunctions(\r\n EqualFunctions.create()\r\n .add((left: unknown, right: unknown) =>\r\n {\r\n return isNumber(left) && isNumber(right)\r\n ? left % 2 === right % 2\r\n : undefined;\r\n })\r\n )\r\n\r\n test.assertTrue(mc.areEqual(3, 5));\r\n test.assertFalse(mc.areEqual(3, 4));\r\n test.assertTrue(mc.areEqual(4, 4));\r\n });\r\n });\r\n\r\n runner.testFunction(\"assertUndefined()\", () =>\r\n {\r\n runner.test(\"with undefined\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n mc.assertUndefined(undefined);\r\n });\r\n\r\n function assertUndefinedErrorTest(value: unknown, expected: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(() => mc.assertUndefined(value), expected);\r\n });\r\n }\r\n\r\n assertUndefinedErrorTest(null, new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: null\",\r\n ])));\r\n assertUndefinedErrorTest(false, new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: false\",\r\n ])));\r\n assertUndefinedErrorTest(\"abc\", new Error(join(\"\\n\", [\r\n \"Expected: undefined\",\r\n \"Actual: \\\"abc\\\"\",\r\n ])));\r\n });\r\n\r\n runner.testFunction(\"assertNotUndefined()\", () =>\r\n {\r\n runner.test(\"with undefined\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertThrows(\r\n () => mc.assertNotUndefined(undefined),\r\n new Error(join(\"\\n\", [\r\n \"Expected: not undefined\",\r\n \"Actual: undefined\",\r\n ])),\r\n );\r\n });\r\n\r\n function assertNotUndefinedTest(value: unknown): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n mc.assertNotUndefined(value);\r\n });\r\n }\r\n\r\n assertNotUndefinedTest(null);\r\n assertNotUndefinedTest(\"\");\r\n assertNotUndefinedTest(false);\r\n });\r\n\r\n runner.testFunction(\"areEqual()\", () =>\r\n {\r\n function areEqualTest(left: unknown, right: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertEqual(mc.areEqual(left, right), expected);\r\n });\r\n }\r\n\r\n areEqualTest(undefined, undefined, true);\r\n areEqualTest(5, 5, true);\r\n areEqualTest(true, true, true);\r\n areEqualTest({}, {}, true);\r\n\r\n areEqualTest(undefined, \"\", false);\r\n areEqualTest(1, 2, false);\r\n areEqualTest(false, true, false);\r\n areEqualTest({a:1}, {a:2}, false);\r\n });\r\n\r\n runner.testFunction(\"toValueString()\", () =>\r\n {\r\n function toValueStringTest(value: unknown, expected: string): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n test.assertEqual(expected, mc.toValueString(value));\r\n });\r\n }\r\n\r\n toValueStringTest(undefined, \"undefined\");\r\n toValueStringTest(null, \"null\");\r\n toValueStringTest(0, \"0\");\r\n toValueStringTest(\"abc\", `\"abc\"`);\r\n toValueStringTest({}, \"{}\");\r\n toValueStringTest({a:\"a\"}, `{\"a\":\"a\"}`);\r\n });\r\n\r\n runner.testFunction(\"createError()\", () =>\r\n {\r\n runner.test(\"with all properties\", (test: Test) =>\r\n {\r\n const mc: MutableCondition = MutableCondition.create();\r\n const error: Error = mc.createError({\r\n actual: \"fake-actual\",\r\n expected: \"fake-expected\",\r\n expression: \"fake-expression\",\r\n message: \"fake-message\",\r\n });\r\n test.assertEqual(error, new Error(join(\"\\n\", [\r\n \"Message: fake-message\",\r\n \"Expression: fake-expression\",\r\n \"Expected: fake-expected\",\r\n \"Actual: fake-actual\",\r\n ])));\r\n });\r\n });\r\n });\r\n });\r\n}","import { Iterator } from \"../sources/iterator\";\nimport { JavascriptIterable } from \"../sources/javascript\";\nimport { isMap } from \"../sources/map\";\nimport { MutableMap } from \"../sources/mutableMap\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { mapTests } from \"./mapTests\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"mutableMap.ts\", () =>\n {\n runner.testType(\"MutableMap<TKey,TValue>\", () =>\n {\n runner.testFunction(\"create()\", (test: Test) =>\n {\n const map: MutableMap<number,string> = MutableMap.create();\n test.assertSame(map.getCount().await(), 0);\n });\n\n mutableMapTests(runner, MutableMap.create);\n });\n });\n}\n\nexport function mutableMapTests(runner: TestRunner, creator: () => MutableMap<number,string>): void\n{\n runner.testType(\"MutableMap<TKey,TValue>\", () =>\n {\n mapTests(runner, creator);\n\n runner.testFunction(\"creator()\", (test: Test) =>\n {\n test.assertNotUndefinedAndNotNull(creator);\n \n const map: MutableMap<number,string> = creator();\n test.assertNotUndefinedAndNotNull(map);\n test.assertEqual(map.getCount().await(), 0);\n test.assertTrue(isMap(map));\n });\n\n runner.testFunction(\"containsKey(TKey)\", () =>\n {\n runner.test(\"when it doesn't contain the key\", (test: Test) =>\n {\n const map: MutableMap<number,string> = creator();\n\n test.assertFalse(map.containsKey(50).await());\n });\n\n runner.test(\"when it contains the key\", (test: Test) =>\n {\n const map: MutableMap<number,string> = creator().set(50, \"fifty\");\n\n test.assertTrue(map.containsKey(50).await());\n });\n });\n\n runner.testFunction(\"get(TKey)\", () =>\n {\n runner.test(\"when it contains the key\", (test: Test) =>\n {\n const map: MutableMap<number,string> = creator().set(1, \"one\");\n test.assertEqual(map.getCount().await(), 1);\n test.assertEqual(map.get(1).await(), \"one\");\n test.assertEqual(map.getCount().await(), 1);\n });\n\n runner.test(\"when it doesn't contain the key\", (test: Test) =>\n {\n const map: MutableMap<number,string> = creator();\n\n test.assertThrows(() => map.get(1).await(),\n new NotFoundError(\n \"The key 1 was not found in the map.\"));\n test.assertEqual(map.getCount().await(), 0);\n });\n });\n\n runner.testFunction(\"set(TKey,TValue)\", () =>\n {\n function setTest(map: MutableMap<number,string>, key: number, value: string): void\n {\n runner.test(`with ${runner.andList([map, key, value])}`, (test: Test) =>\n {\n const setResult: MutableMap<number,string> = map.set(key, value);\n test.assertSame(setResult, map);\n test.assertSame(map.get(key).await(), value);\n });\n }\n\n setTest(creator(), 0, \"zero\");\n setTest(creator(), 1, \"1\");\n setTest(creator(), -1, \"negative one\");\n\n setTest(creator(), undefined!, \"hello\");\n setTest(creator(), null!, \"oops\");\n setTest(creator(), 10, undefined!);\n setTest(creator(), 11, null!);\n\n setTest(creator().set(1, \"1\"), 1, \"one\");\n });\n\n runner.testFunction(\"toString()\", () =>\n {\n function toStringTest(map: MutableMap<number,string>, expected: string): void\n {\n runner.test(`with ${runner.toString(map)}`, (test: Test) =>\n {\n test.assertEqual(map.toString(), expected);\n });\n }\n\n toStringTest(creator(), \"{}\");\n toStringTest(creator().set(1, \"one\"), `{1:\"one\"}`);\n toStringTest(creator().set(2, \"2\").set(1, \"one\"), `{2:\"2\",1:\"one\"}`);\n });\n\n runner.testFunction(\"iterateKeys()\", () =>\n {\n function iterateKeysTests(map: MutableMap<number,string>, expected: JavascriptIterable<number>): void\n {\n runner.test(`with ${runner.toString(map)}`, async (test: Test) =>\n {\n const keyIterator: Iterator<number> = map.iterateKeys();\n test.assertEqual(await keyIterator.toArray(), [...expected]);\n });\n }\n\n iterateKeysTests(creator(), []);\n iterateKeysTests(creator().set(5, \"five\"), [5]);\n iterateKeysTests(creator().set(5, \"five\").set(6, \"six\"), [5, 6]);\n iterateKeysTests(creator().set(5, \"5\").set(6, \"6\").set(7, \"7\"), [5, 6, 7]);\n });\n\n runner.testFunction(\"iterateValues()\", () =>\n {\n function iterateValuesTests(map: MutableMap<number,string>, expected: JavascriptIterable<string>): void\n {\n runner.test(`with ${runner.toString(map)}`, async (test: Test) =>\n {\n const valueIterator: Iterator<string> = map.iterateValues();\n test.assertEqual(await valueIterator.toArray(), [...expected]);\n });\n }\n\n iterateValuesTests(creator(), []);\n iterateValuesTests(creator().set(5, \"five\"), [\"five\"]);\n iterateValuesTests(creator().set(5, \"five\").set(6, \"six\"), [\"five\", \"six\"]);\n iterateValuesTests(creator().set(5, \"5\").set(6, \"6\").set(7, \"7\"), [\"5\", \"6\", \"7\"]);\n });\n });\n}","import { NotFoundError } from \"../sources/notFoundError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"notFoundError.ts\", () =>\r\n {\r\n runner.testType(\"NotFoundError\", () =>\r\n {\r\n runner.testFunction(\"constructor(...string[])\", () =>\r\n {\r\n runner.test(\"with no arguments\", (test: Test) =>\r\n {\r\n const error: NotFoundError = new NotFoundError();\r\n test.assertNotUndefinedAndNotNull(error);\r\n test.assertEqual(error.name, \"Error\");\r\n test.assertEqual(error.message, \"\");\r\n test.assertNotUndefinedAndNotNull(error.stack);\r\n });\r\n });\r\n });\r\n });\r\n}\r\n","import { PostConditionError } from \"../sources/postConditionError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"postConditionError.ts\", () =>\r\n {\r\n runner.testType(PostConditionError.name, () =>\r\n {\r\n runner.testFunction(\"constructor(string|undefined)\", () =>\r\n {\r\n runner.test(\"with no arguments\", (test: Test) =>\r\n {\r\n const error: PostConditionError = new PostConditionError();\r\n test.assertNotUndefinedAndNotNull(error);\r\n test.assertEqual(error.name, \"Error\");\r\n test.assertEqual(error.message, \"\");\r\n test.assertNotUndefinedAndNotNull(error.stack);\r\n });\r\n });\r\n });\r\n });\r\n}\r\n","import { PreConditionError } from \"../sources/preConditionError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"preConditionError.ts\", () =>\r\n {\r\n runner.testType(\"PreConditionError\", () =>\r\n {\r\n runner.testFunction(\"constructor(string|undefined)\", () =>\r\n {\r\n runner.test(\"with no arguments\", (test: Test) =>\r\n {\r\n const error: PreConditionError = new PreConditionError();\r\n test.assertNotUndefinedAndNotNull(error);\r\n test.assertEqual(error.name, \"Error\");\r\n test.assertEqual(error.message, \"\");\r\n test.assertNotUndefinedAndNotNull(error.stack);\r\n });\r\n });\r\n });\r\n });\r\n}","import { PromiseAsyncResult } from \"../sources/promiseAsyncResult\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"promiseAsyncResult.ts\", () =>\n {\n runner.testType(\"PromiseAsyncResult<T>\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n function createErrorTest<T>(testName: string, promise: Promise<T>, expected: Error): void\n {\n runner.test(testName, (test: Test) =>\n {\n test.assertThrows(() => PromiseAsyncResult.create(promise), expected);\n });\n }\n\n createErrorTest(\"with undefined\", undefined!, new PreConditionError(\n \"Expression: action or promise\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n createErrorTest(\"with null\", null!, new PreConditionError(\n \"Expression: action or promise\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n runner.test(\"with Promise\", async (test: Test) =>\n {\n const result: PromiseAsyncResult<number> = PromiseAsyncResult.create(Promise.resolve(5));\n test.assertNotUndefinedAndNotNull(result);\n\n const value: number = await result;\n test.assertEqual(5, value);\n });\n });\n\n runner.testFunction(\"then()\", () =>\n {\n runner.test(\"with error parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n const thenResult: PromiseAsyncResult<string> = parentResult.then(() => \"hello\");\n await test.assertThrowsAsync(thenResult, new Error(\"abc\"));\n });\n\n runner.test(\"with error parent and thenFunction with side-effects\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const thenResult: PromiseAsyncResult<string> = parentResult.then(() => { counter++; return \"hello\"; });\n test.assertEqual(0, counter);\n await test.assertThrowsAsync(thenResult, new Error(\"abc\"));\n test.assertEqual(0, counter, \"counter should still be 0 because the thenFunction shouldn't be invoked.\");\n });\n\n runner.test(\"with successful parent and successful thenFunction that ignores parentResult value\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(1);\n const thenResult: PromiseAsyncResult<string> = parentResult.then(() => \"hello\");\n test.assertEqual(\"hello\", await thenResult);\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(1);\n const thenResult: PromiseAsyncResult<string> = parentResult.then((argument: number) => (argument + 1).toString());\n test.assertEqual(\"2\", await thenResult);\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value with side-effects\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(1);\n let counter: number = 0;\n const thenResult: PromiseAsyncResult<string> = parentResult.then((argument: number) => { counter++; return (argument + 1).toString(); });\n test.assertEqual(0, counter);\n\n await PromiseAsyncResult.yield();\n test.assertEqual(1, counter);\n\n test.assertEqual(\"2\", await thenResult);\n test.assertEqual(1, counter);\n });\n\n runner.test(\"with successful parent and thenFunction that throws\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(10);\n let counter: number = 0;\n const thenResult: PromiseAsyncResult<string> = parentResult.then((argument: number) =>\n {\n counter++;\n throw new Error(`arg: ${argument}, ${counter}`);\n });\n test.assertEqual(counter, 0);\n\n await PromiseAsyncResult.yield();\n test.assertEqual(counter, 1);\n\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(thenResult, new Error(\"arg: 10, 1\"));\n test.assertEqual(counter, 1);\n }\n });\n });\n\n runner.testFunction(\"onValue()\", () =>\n {\n runner.test(\"with error parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const onValueResult: PromiseAsyncResult<number> = parentResult.onValue(() => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(onValueResult, new Error(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with successful parent and successful thenFunction that ignores parentResult value\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(10);\n let counter: number = 0;\n const onValueResult: PromiseAsyncResult<number> = parentResult.onValue(() => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(10, await onValueResult);\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(2);\n let counter: number = 0;\n const onValueResult: PromiseAsyncResult<number> = parentResult.onValue((argument: number) => { counter += argument; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await onValueResult, 2);\n test.assertSame(counter, 2);\n }\n });\n\n runner.test(\"with successful parent and onValueFunction that throws\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(2);\n let counter: number = 0;\n const onValueResult: PromiseAsyncResult<number> = parentResult.onValue((argument: number) =>\n {\n counter += argument;\n throw new Error(`argument: ${argument}`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(onValueResult, new Error(\"argument: 2\"));\n test.assertSame(counter, 2);\n }\n });\n });\n\n runner.testFunction(\"catch()\", () =>\n {\n runner.test(\"with undefined errorType\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.catch(undefined!, () => 6),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null errorType\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.catch(null!, () => 6),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.test(\"with error parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, () => 20);\n test.assertSame(await catchResult, 20);\n });\n\n runner.test(\"with error parent, no errorType, and no error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(() => { counter++; return 21; });\n test.assertSame(0, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.catch((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n return 21;\n });\n test.assertSame(0, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with error parent and catchFunction with side-effects\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, () => { counter++; return 21; });\n test.assertSame(0, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, () => 5);\n test.assertSame(await catchResult, 5);\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, (error: Error) => error.message.length);\n test.assertSame(await catchResult, 3);\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(PreConditionError, () => 20);\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"def\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(RangeError, () => 20);\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"def\"));\n });\n\n runner.test(\"with catchFunction that throws\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"def\"));\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, () => { throw new TypeError(\"abc\"); });\n await test.assertThrowsAsync(catchResult, new TypeError(\"abc\"));\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(1);\n const catchResult: PromiseAsyncResult<number> = parentResult.catch(Error, () => 2);\n test.assertSame(await catchResult, 1);\n });\n });\n\n runner.testFunction(\"onError()\", () =>\n {\n runner.test(\"with undefined errorType\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.onError(undefined!, () => { }),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null errorType\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.onError(null!, () => { }),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.test(\"with error parent, no errorType, and no error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(() => { counter++; });\n test.assertSame(0, counter);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n });\n test.assertSame(0, counter);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(Error, (error: Error) => { counter += error.message.length; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 3);\n }\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(PreConditionError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(RangeError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"def\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with onErrorFunction that throws\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(Error, () => { counter++; throw new Error(\"abc\"); });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(1);\n let counter: number = 0;\n const catchResult: PromiseAsyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 1);\n test.assertSame(counter, 0);\n }\n });\n });\n\n runner.testFunction(\"convertError()\", () =>\n {\n runner.test(\"with undefined convertErrorFunction\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(undefined!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null convertErrorFunction\", (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(null!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await convertErrorResult, 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n throw new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await convertErrorResult, 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(`abc - def`));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(TypeError, (error: TypeError) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.convertError(PreConditionError, () =>\n {\n counter++;\n throw new Error(\"def\");\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new TypeError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n });\n\n runner.testFunction(\"finally()\", () =>\n {\n runner.test(\"with successful parent and non-throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n let counter: number = 0;\n const finallyResult: PromiseAsyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await finallyResult, 5);\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent and throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.value(5);\n let counter: number = 0;\n const finallyResult: PromiseAsyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"oops!\");\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(finallyResult, new RangeError(\"oops!\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and non-throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const finallyResult: PromiseAsyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(finallyResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: PromiseAsyncResult<number> = PromiseAsyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: PromiseAsyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"def\");\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new RangeError(\"def\"));\n test.assertSame(counter, 1);\n }\n });\n });\n });\n });\n}","import { Property } from \"../sources/property\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"property.ts\", () =>\r\n {\r\n runner.testType(\"Property<T>\", () =>\r\n {\r\n runner.testFunction(\"create()\", () =>\r\n {\r\n runner.test(\"with initialValue\", (test: Test) =>\r\n {\r\n const property: Property<number> = Property.create(5);\r\n test.assertEqual(5, property.getValue());\r\n \r\n const setResult: Property<number> = property.setValue(20);\r\n test.assertSame(property, setResult);\r\n test.assertEqual(20, property.getValue());\r\n \r\n test.assertEqual(\"20\", property.toString());\r\n });\r\n\r\n runner.test(\"with getter and setter functions\", (test: Test) =>\r\n {\r\n let propertyValue: string = \"hello\";\r\n\r\n const property: Property<string> = Property.create(\r\n () => propertyValue,\r\n (value: string) => { propertyValue = value; },\r\n );\r\n test.assertEqual(\"hello\", property.getValue());\r\n \r\n const setResult: Property<string> = property.setValue(\"there\");\r\n test.assertSame(property, setResult);\r\n test.assertEqual(\"there\", property.getValue());\r\n test.assertEqual(\"there\", propertyValue);\r\n \r\n test.assertEqual(\"there\", property.toString());\r\n });\r\n\r\n runner.test(\"with options\", (test: Test) =>\r\n {\r\n let propertyValue: string = \"hello\";\r\n\r\n const property: Property<string> = Property.create({\r\n getter: () => propertyValue,\r\n setter: (value: string) => { propertyValue = value; },\r\n });\r\n test.assertEqual(\"hello\", property.getValue());\r\n \r\n const setResult: Property<string> = property.setValue(\"there\");\r\n test.assertSame(property, setResult);\r\n test.assertEqual(\"there\", property.getValue());\r\n test.assertEqual(\"there\", propertyValue);\r\n \r\n test.assertEqual(\"there\", property.toString());\r\n });\r\n });\r\n });\r\n });\r\n}","import { EmptyError } from \"../sources/emptyError\";\nimport { ListQueue } from \"../sources/listQueue\";\nimport { Queue } from \"../sources/queue\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"queue.ts\", () =>\n {\n runner.testType(\"Queue<T>\", () =>\n {\n runner.testFunction(\"create()\", (test: Test) =>\n {\n const queue: ListQueue<number> = Queue.create();\n test.assertNotUndefinedAndNotNull(queue);\n test.assertFalse(queue.any().await());\n test.assertThrows(() => queue.remove().await(), new EmptyError());\n });\n\n runner.testFunction(\"add()\", (test: Test) =>\n {\n const queue: ListQueue<number> = Queue.create();\n queue.add(20).await();\n test.assertEqual(20, queue.remove().await());\n });\n });\n });\n}","import { FetchHttpClient } from \"../sources/fetchHttpClient\";\r\nimport { FetchHttpIncomingResponse } from \"../sources/fetchHttpResponse\";\r\nimport { NodeJSHttpServer as NodeJSHttpServer } from \"../sources/nodeJSHttpServer\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"nodeJSHttpServer.ts\", () =>\r\n {\r\n runner.testType(\"NodeJSHttpServer\", () =>\r\n {\r\n runner.testFunction(\"create()\", (test: Test) =>\r\n {\r\n const httpServer: NodeJSHttpServer = NodeJSHttpServer.create();\r\n test.assertNotUndefinedAndNotNull(httpServer);\r\n test.assertFalse(httpServer.isDisposed());\r\n test.assertFalse(httpServer.isStarted());\r\n });\r\n\r\n runner.testFunction(\"dispose()\", async (test: Test) =>\r\n {\r\n const httpServer: NodeJSHttpServer = NodeJSHttpServer.create();\r\n\r\n test.assertTrue(await httpServer.dispose());\r\n test.assertTrue(httpServer.isDisposed());\r\n test.assertFalse(httpServer.isStarted());\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n test.assertFalse(await httpServer.dispose());\r\n test.assertTrue(httpServer.isDisposed());\r\n test.assertFalse(httpServer.isStarted());\r\n }\r\n });\r\n\r\n runner.testFunction(\"start()\", () =>\r\n {\r\n runner.test(\"when disposed\", async (test: Test) =>\r\n {\r\n const httpServer: NodeJSHttpServer = NodeJSHttpServer.create();\r\n test.assertTrue(await httpServer.dispose());\r\n\r\n test.assertThrows(() => httpServer.start(3000), new PreConditionError(\r\n \"Expression: this.isDisposed()\",\r\n \"Expected: false\",\r\n \"Actual: true\",\r\n ));\r\n test.assertTrue(httpServer.isDisposed());\r\n test.assertFalse(httpServer.isStarted());\r\n });\r\n\r\n runner.test(\"simple scenario\", async (test: Test) =>\r\n {\r\n const httpServer: NodeJSHttpServer = NodeJSHttpServer.create();\r\n\r\n httpServer.start(3000);\r\n try\r\n {\r\n const httpClient: FetchHttpClient = FetchHttpClient.create();\r\n const response: FetchHttpIncomingResponse = await httpClient.sendGetRequest(\"http://localhost:3000\");\r\n\r\n test.assertNotUndefinedAndNotNull(response);\r\n test.assertEqual(200, response.getStatusCode());\r\n }\r\n finally\r\n {\r\n await httpServer.dispose();\r\n }\r\n });\r\n });\r\n });\r\n });\r\n}","import { HttpClient } from \"../sources/httpClient\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { RecreationDotGovClient, RecreationDotGovDivisionAvailability, RecreationDotGovDivisionAvailabilityJson, RecreationDotGovError, RecreationDotGovPermitItineraryJson } from \"../sources/recreationDotGovClient\";\nimport { WonderlandTrailClient, WonderlandTrailLocations } from \"../sources/wonderlandTrailClient\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\nimport { hasNetworkAccess } from \"./tests\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"recreationDotGovClient.ts\", () =>\n {\n runner.testType(\"RecreationDotGovClient\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n function createErrorTest(httpClient: HttpClient, expected: Error): void\n {\n runner.test(`with ${runner.toString(httpClient)}`, (test: Test) =>\n {\n test.assertThrows(() => RecreationDotGovClient.create(httpClient), expected);\n });\n }\n\n createErrorTest(undefined!, new PreConditionError(\n \"Expression: httpClient\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n createErrorTest(null!, new PreConditionError(\n \"Expression: httpClient\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n runner.test(\"with default HttpClient\", (test: Test) =>\n {\n const httpClient: HttpClient = HttpClient.create();\n const recreationDotGovClient: RecreationDotGovClient = RecreationDotGovClient.create(httpClient);\n test.assertNotUndefinedAndNotNull(recreationDotGovClient);\n });\n });\n\n runner.testFunction(\"getPermitItinerary()\", () =>\n {\n function getPermitItineraryErrorTest(itineraryId: string, expected: Error): void\n {\n runner.test(`with ${runner.toString(itineraryId)}`, async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n await test.assertThrowsAsync(async () => await client.getPermitItinerary(itineraryId), expected);\n });\n }\n\n getPermitItineraryErrorTest(undefined!, new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n getPermitItineraryErrorTest(null!, new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n getPermitItineraryErrorTest(\"\", new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not empty\",\n \"Actual: \\\"\\\"\",\n ));\n\n runner.test(\"with invalid permit itinerary id\", runner.skip(!hasNetworkAccess), async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n await test.assertThrowsAsync(\n async () => await client.getPermitItinerary(\"oopsie!\"),\n new RecreationDotGovError(\n `No permit itinerary found for id: \"oopsie!\"`,\n ),\n );\n });\n\n runner.test(\"with valid permit itinerary id\", runner.skip(!hasNetworkAccess), async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n const result: RecreationDotGovPermitItineraryJson = await client.getPermitItinerary(WonderlandTrailClient.permitItineraryId);\n test.assertNotUndefinedAndNotNull(result);\n test.assertEqual(result.id, WonderlandTrailClient.permitItineraryId);\n test.assertEqual(result.name, \"Mount Rainier National Park Wilderness and Climbing Permits\");\n test.assertNotUndefinedAndNotNull(result.divisions);\n test.assertTrue(Object.keys(result.divisions).length > 0);\n for (const division of Object.values(result.divisions))\n {\n test.assertNotUndefinedAndNotNull(division.id);\n test.assertNotUndefinedAndNotNull(division.district);\n test.assertNotUndefinedAndNotNull(division.name);\n test.assertNotUndefinedAndNotNull(division.type);\n }\n });\n });\n\n runner.testFunction(\"getDivisionAvailability()\", () =>\n {\n function getDivisionAvailabilityErrorTest(itineraryId: string, divisionId: string, month: number, year: number, expected: Error): void\n {\n runner.test(`with ${runner.andList([itineraryId, divisionId, month, year])}`, async (test: Test) =>\n {\n\n });\n }\n\n getDivisionAvailabilityErrorTest(undefined!, \"fake-division-id\", 5, 2026, new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n getDivisionAvailabilityErrorTest(null!, \"fake-division-id\", 5, 2026, new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n getDivisionAvailabilityErrorTest(\"\", \"fake-division-id\", 5, 2026, new PreConditionError(\n \"Expression: permitItineraryId\",\n \"Expected: not empty\",\n \"Actual: \\\"\\\"\",\n ));\n getDivisionAvailabilityErrorTest(\"oopsie!\", \"fake-division-id\", 5, 2026, new RecreationDotGovError(\n `No permit itinerary found for id: \"oopsie!\"`,\n ));\n\n runner.test(\"with invalid division id\", runner.skip(!hasNetworkAccess), async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n const itineraryId: string = WonderlandTrailClient.permitItineraryId;\n const divisionId: string = \"fake-division-id\";\n const month: number = 5;\n const year: number = 2026;\n const earlyAccessPermitLotteryId: string = \"\";\n \n const response: RecreationDotGovDivisionAvailability = await client.getDivisionAvailability(itineraryId, divisionId, month, year, earlyAccessPermitLotteryId);\n\n test.assertNotUndefinedAndNotNull(response);\n test.assertNotUndefinedAndNotNull(response.json);\n test.assertNotUndefinedAndNotNull(response.dayAvailabilities);\n test.assertEqual(0, response.dayAvailabilities.getCount().await());\n test.assertUndefined(response.maximumGroupSize);\n test.assertUndefined(response.minimumGroupSize);\n });\n\n runner.test(\"with Sunrise Camp division id\", runner.skip(!hasNetworkAccess), async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n\n const itineraryId: string = WonderlandTrailClient.permitItineraryId;\n const divisionId: string = WonderlandTrailLocations.sunriseCamp.divisionId;\n const month: number = 8;\n const year: number = 2026;\n const earlyAccessPermitLotteryId: string = \"\";\n \n const response: RecreationDotGovDivisionAvailability = await client.getDivisionAvailability(itineraryId, divisionId, month, year, earlyAccessPermitLotteryId);\n\n test.assertNotUndefinedAndNotNull(response);\n test.assertNotUndefinedAndNotNull(response.json);\n test.assertNotUndefinedAndNotNull(response.dayAvailabilities);\n test.assertEqual(31, response.dayAvailabilities.getCount().await());\n test.assertNotUndefinedAndNotNull(response.maximumGroupSize);\n test.assertNotUndefinedAndNotNull(response.minimumGroupSize);\n });\n\n runner.test(\"with Indian Bar division id\", runner.skip(!hasNetworkAccess), async (test: Test) =>\n {\n const client: RecreationDotGovClient = RecreationDotGovClient.create(HttpClient.create());\n\n const itineraryId: string = WonderlandTrailClient.permitItineraryId;\n const divisionId: string = WonderlandTrailLocations.indianBar.divisionId;\n const month: number = 7;\n const year: number = 2026;\n const earlyAccessPermitLotteryId: string = \"\";\n \n const response: RecreationDotGovDivisionAvailability = await client.getDivisionAvailability(itineraryId, divisionId, month, year, earlyAccessPermitLotteryId);\n\n test.assertNotUndefinedAndNotNull(response);\n test.assertNotUndefinedAndNotNull(response.json);\n test.assertNotUndefinedAndNotNull(response.dayAvailabilities);\n test.assertEqual(31, response.dayAvailabilities.getCount().await());\n test.assertNotUndefinedAndNotNull(response.maximumGroupSize);\n test.assertNotUndefinedAndNotNull(response.minimumGroupSize);\n });\n });\n });\n });\n}","import { TestRunner } from \"./testRunner\";\nimport { Set } from \"../sources/set\";\nimport { Test } from \"./test\";\nimport { JavascriptSetSet } from \"../sources/javascriptSetSet\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { SyncResult } from \"../sources/syncResult\";\nimport { JavascriptIterable } from \"../sources/javascript\";\nimport { PreCondition } from \"../sources/preCondition\";\nimport { PreConditionError } from \"../sources/preConditionError\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"set.ts\", () =>\n {\n runner.testType(\"Set<T>\", () =>\n {\n runner.testFunction(\"create()\", (test: Test) =>\n {\n const set: JavascriptSetSet<number> = Set.create();\n test.assertNotUndefinedAndNotNull(set);\n test.assertEqual(0, set.getCount().await());\n test.assertEqual([], set.toArray().await());\n });\n\n runner.testFunction(\"add()\", (test: Test) =>\n {\n const set: Set<number> = Set.create();\n for (let i = 0; i < 3; i++)\n {\n const addResult: Set<number> = set.add(20);\n test.assertSame(set, addResult);\n test.assertTrue(set.contains(20).await());\n test.assertEqual(set.getCount().await(), 1);\n test.assertEqual([20], set.toArray().await());\n }\n });\n\n runner.testFunction(\"addAll()\", (test: Test) =>\n {\n const set: Set<number> = Set.create();\n for (let i = 0; i < 3; i++)\n {\n const addResult: Set<number> = set.addAll([20, 20, 25, 26]);\n test.assertSame(set, addResult);\n test.assertTrue(set.contains(20).await());\n test.assertTrue(set.contains(25).await());\n test.assertTrue(set.contains(26).await());\n test.assertEqual(set.getCount().await(), 3);\n test.assertEqual([20, 25, 26], set.toArray().await());\n }\n });\n\n runner.testFunction(\"remove()\", (test: Test) =>\n {\n const set: Set<number> = Set.create();\n\n test.assertThrows(set.remove(15), new NotFoundError(\"Could not find 15.\"));\n\n set.add(16);\n const removeResult: SyncResult<void> = set.remove(16);\n test.assertNotUndefinedAndNotNull(removeResult);\n test.assertFalse(set.contains(16).await());\n test.assertUndefined(removeResult.await());\n\n test.assertThrows(set.remove(16), new NotFoundError(\"Could not find 16.\"));\n });\n\n runner.testFunction(\"toString()\", () =>\n {\n function toStringTest<T>(set: Set<T>, expected: string): void\n {\n runner.test(`with ${runner.toString(set)}`, (test: Test) =>\n {\n test.assertEqual(set.toString(), expected);\n });\n }\n\n toStringTest(Set.create(), \"{}\");\n toStringTest(Set.create().addAll([1]), \"{1}\");\n toStringTest(Set.create().addAll([1, 2]), \"{1,2}\");\n toStringTest(Set.create().addAll([3, 1, 2]), \"{3,1,2}\");\n });\n\n runner.testFunction(\"equals()\", () =>\n {\n function equalsTest<T>(set: Set<T>, right: JavascriptIterable<T>, expected: boolean): void\n {\n runner.test(`with ${runner.andList([set, right])}`, (test: Test) =>\n {\n test.assertEqual(set.equals(right).await(), expected);\n });\n }\n\n equalsTest(Set.create(), [], true);\n equalsTest(Set.create(), [1], false);\n equalsTest(Set.create<number>().addAll([1]), [], false);\n equalsTest(Set.create<number>().addAll([1]), [1], true);\n equalsTest(Set.create<number>().addAll([1]), [1, 1], false);\n equalsTest(Set.create<number>().addAll([1, 2]), [1, 2], true);\n equalsTest(Set.create<number>().addAll([1, 2]), [2, 1], false);\n equalsTest(Set.create<number>().addAll([1, 2]), Set.create<number>().addAll([2, 1]), true);\n });\n\n runner.testFunction(\"union()\", () =>\n {\n function unionErrorTest<T>(set: Set<T>, values: JavascriptIterable<T>, expected: Error): void\n {\n runner.test(`with ${runner.andList([set, values])}`, (test: Test) =>\n {\n test.assertThrows(() => set.union(values), expected);\n });\n }\n\n unionErrorTest(Set.create<number>(), undefined!, new PreConditionError(\n \"Expression: values\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n unionErrorTest(Set.create<number>(), null!, new PreConditionError(\n \"Expression: values\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n function unionTest<T>(set: Set<T>, values: JavascriptIterable<T>, expected: JavascriptIterable<T>): void\n {\n runner.test(`with ${runner.andList([set, values])}`, (test: Test) =>\n {\n test.assertEqual(set.union(values).toArray().await(), expected);\n });\n }\n\n unionTest(Set.create(), [], []);\n unionTest(Set.create(), [1, 2], [1, 2]);\n unionTest(Set.create([1]), [2], [1, 2]);\n unionTest(Set.create([1, 2]), [1], [1, 2]);\n });\n });\n });\n}","import { EmptyError } from \"../sources/emptyError\";\nimport { ListStack } from \"../sources/listStack\";\nimport { Stack } from \"../sources/stack\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"stack.ts\", () =>\n {\n runner.testType(\"Stack<T>\", () =>\n {\n runner.testFunction(\"create()\", (test: Test) =>\n {\n const stack: ListStack<number> = Stack.create();\n test.assertNotUndefinedAndNotNull(stack);\n test.assertFalse(stack.any().await());\n });\n\n runner.testFunction(\"add()\", (test: Test) =>\n {\n const stack: ListStack<number> = Stack.create();\n\n stack.add(10).await();\n test.assertTrue(stack.any().await());\n\n stack.add(20).await();\n test.assertTrue(stack.any().await());\n\n test.assertEqual(20, stack.remove().await());\n test.assertEqual(10, stack.remove().await());\n test.assertFalse(stack.any().await());\n });\n\n runner.testFunction(\"addAll()\", () =>\n {\n function addAllTest(values: number[]): void\n {\n runner.test(`with ${runner.toString(values)}`, (test: Test) =>\n {\n const stack: ListStack<number> = Stack.create();\n stack.addAll(values).await();\n\n for (const value of values.reverse())\n {\n test.assertTrue(stack.any().await());\n test.assertEqual(value, stack.remove().await());\n }\n test.assertFalse(stack.any().await());\n });\n }\n\n addAllTest([]);\n addAllTest([1]);\n addAllTest([1, 2]);\n addAllTest([1, 2, 3]);\n });\n\n runner.testFunction(\"remove()\", (test: Test) =>\n {\n const stack: ListStack<number> = Stack.create();\n test.assertThrows(() => stack.remove().await(), new EmptyError());\n });\n });\n });\n}","import { Comparison } from \"../sources/comparison\";\r\nimport { StringComparer } from \"../sources/stringComparer\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"stringComparer.ts\", () =>\r\n {\r\n runner.testType(\"StringComparer\", () =>\r\n {\r\n runner.testFunction(\"compare(string, string)\", () =>\r\n {\r\n function compareTest(left: string, right: string, expected: Comparison): void\r\n {\r\n runner.test(`with ${runner.andList([left, right])}`, (test: Test) =>\r\n {\r\n const comparer: StringComparer = StringComparer.create();\r\n test.assertEqual(comparer.compare(left, right), expected);\r\n test.assertEqual(comparer.lessThan(left, right), expected === Comparison.LessThan);\r\n test.assertEqual(comparer.lessThanOrEqual(left, right), expected !== Comparison.GreaterThan);\r\n test.assertEqual(comparer.equal(left, right), expected === Comparison.Equal);\r\n test.assertEqual(comparer.greaterThanOrEqualTo(left, right), expected !== Comparison.LessThan);\r\n test.assertEqual(comparer.greaterThan(left, right), expected === Comparison.GreaterThan);\r\n });\r\n }\r\n\r\n compareTest(undefined!, undefined!, Comparison.Equal);\r\n compareTest(undefined!, null!, Comparison.LessThan);\r\n compareTest(undefined!, \"\", Comparison.LessThan);\r\n compareTest(undefined!, \"a\", Comparison.LessThan);\r\n compareTest(undefined!, \"def\", Comparison.LessThan);\r\n\r\n compareTest(null!, undefined!, Comparison.GreaterThan);\r\n compareTest(null!, null!, Comparison.Equal);\r\n compareTest(null!, \"\", Comparison.LessThan);\r\n compareTest(null!, \"a\", Comparison.LessThan);\r\n compareTest(null!, \"def\", Comparison.LessThan);\r\n\r\n compareTest(\"\", undefined!, Comparison.GreaterThan);\r\n compareTest(\"\", null!, Comparison.GreaterThan);\r\n compareTest(\"\", \"\", Comparison.Equal);\r\n compareTest(\"\", \"a\", Comparison.LessThan);\r\n compareTest(\"\", \"def\", Comparison.LessThan);\r\n\r\n compareTest(\"a\", undefined!, Comparison.GreaterThan);\r\n compareTest(\"a\", null!, Comparison.GreaterThan);\r\n compareTest(\"a\", \"\", Comparison.GreaterThan);\r\n compareTest(\"a\", \"a\", Comparison.Equal);\r\n compareTest(\"a\", \"def\", Comparison.LessThan);\r\n\r\n compareTest(\"def\", undefined!, Comparison.GreaterThan);\r\n compareTest(\"def\", null!, Comparison.GreaterThan);\r\n compareTest(\"def\", \"\", Comparison.GreaterThan);\r\n compareTest(\"def\", \"a\", Comparison.GreaterThan);\r\n compareTest(\"def\", \"def\", Comparison.Equal);\r\n });\r\n });\r\n });\r\n}","import { PreConditionError } from \"../sources/preConditionError\";\r\nimport { StringIterator } from \"../sources/stringIterator\";\r\nimport { iteratorTests } from \"./iteratorTests\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"stringIterator.ts\", () =>\r\n {\r\n runner.testType(\"StringIterator\", () =>\r\n {\r\n iteratorTests(runner, () => StringIterator.create(\"\"));\r\n\r\n runner.testFunction(\"create(string)\", () =>\r\n {\r\n function createErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => StringIterator.create(value!),\r\n expectedError);\r\n });\r\n }\r\n\r\n createErrorTest(\r\n undefined,\r\n new PreConditionError(\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ));\r\n createErrorTest(\r\n null,\r\n new PreConditionError(\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ));\r\n\r\n function createTest(value: string): void\r\n {\r\n runner.test(`with \"${runner.toString(value)}\"`, (test: Test) =>\r\n {\r\n const iterator: StringIterator = StringIterator.create(value);\r\n test.assertFalse(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertThrows(() => iterator.getCurrentIndex(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertThrows(() => iterator.getCurrent(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n });\r\n }\r\n\r\n createTest(\"\");\r\n createTest(\"abc\");\r\n });\r\n\r\n runner.testFunction(\"next()\", () =>\r\n {\r\n function nextTest(value: string): void\r\n {\r\n runner.test(`with \"${runner.toString(value)}\"`, async (test: Test) =>\r\n {\r\n const iterator: StringIterator = StringIterator.create(value);\r\n\r\n for (let i = 0; i < value.length; i++)\r\n {\r\n test.assertTrue(await iterator.next());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertSame(iterator.getCurrentIndex(), i);\r\n test.assertSame(iterator.getCurrent(), value[i]);\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(await iterator.next());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertThrows(() => iterator.getCurrentIndex(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertThrows(() => iterator.getCurrent(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n }\r\n });\r\n }\r\n\r\n nextTest(\"\");\r\n nextTest(\"a\");\r\n nextTest(\"abc\");\r\n });\r\n\r\n runner.testGroup(\"for...of\", () =>\r\n {\r\n function forOfTest(value: string): void\r\n {\r\n runner.test(`with \"${runner.toString(value)}\"`, async (test: Test) =>\r\n {\r\n const iterator: StringIterator = StringIterator.create(value);\r\n\r\n let expectedIndex: number = 0;\r\n for (const c of iterator)\r\n {\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertTrue(iterator.hasCurrent());\r\n test.assertSame(iterator.getCurrentIndex(), expectedIndex);\r\n test.assertSame(iterator.getCurrent(), value[expectedIndex]);\r\n test.assertSame(c, value[expectedIndex]);\r\n expectedIndex++;\r\n }\r\n\r\n for (let i = 0; i < 2; i++)\r\n {\r\n test.assertFalse(await iterator.next());\r\n test.assertTrue(iterator.hasStarted());\r\n test.assertFalse(iterator.hasCurrent());\r\n test.assertThrows(() => iterator.getCurrentIndex(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n test.assertThrows(() => iterator.getCurrent(),\r\n new PreConditionError(\r\n \"Expression: this.hasCurrent()\",\r\n \"Expected: true\",\r\n \"Actual: false\",\r\n ));\r\n }\r\n });\r\n }\r\n\r\n forOfTest(\"\");\r\n forOfTest(\"a\");\r\n forOfTest(\"abc\");\r\n });\r\n });\r\n });\r\n}","import { PreConditionError } from \"../sources/preConditionError\";\r\nimport {\r\n escape, escapeAndQuote, getLength, isDigit, isLetter, isLetterOrDigit, isLowercasedLetter,\r\n isUppercasedLetter, isWhitespace, join, quote\r\n} from \"../sources/strings\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"strings.ts\", () =>\r\n {\r\n runner.testFunction(\"getLength(string | undefined | null)\", () =>\r\n {\r\n function getLengthTest(value: string | undefined | null, expected: number): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(getLength(value), expected);\r\n });\r\n }\r\n\r\n getLengthTest(undefined, 0);\r\n getLengthTest(null, 0);\r\n getLengthTest(\"\", 0);\r\n getLengthTest(\"a\", 1);\r\n getLengthTest(\"abc\", 3);\r\n });\r\n\r\n runner.testFunction(\"join(string, string[])\", () =>\r\n {\r\n function joinErrorTest(separator: string, values: string[], expected: Error): void\r\n {\r\n runner.test(`with ${runner.andList([separator, values.map(v => runner.toString(v))])}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => join(separator, values), expected);\r\n });\r\n }\r\n\r\n joinErrorTest(undefined!, [],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"));\r\n joinErrorTest(undefined!, [\"a\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"));\r\n joinErrorTest(undefined!, [\"a\", \"b\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"));\r\n joinErrorTest(undefined!, [\"a\", \"b\", \"c\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\"));\r\n\r\n joinErrorTest(null!, [],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"));\r\n joinErrorTest(null!, [\"a\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"));\r\n joinErrorTest(null!, [\"a\", \"b\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"));\r\n joinErrorTest(null!, [\"a\", \"b\", \"c\"],\r\n new PreConditionError(\r\n \"Expression: separator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\"));\r\n\r\n function joinTest(separator: string, values: string[], expected: string): void\r\n {\r\n runner.test(`with ${runner.andList([separator, values.map(v => runner.toString(v))])}`, (test: Test) =>\r\n {\r\n test.assertSame(join(separator, values), expected);\r\n });\r\n }\r\n\r\n \r\n\r\n joinTest(\"\", [], \"\");\r\n joinTest(\"\", [\"a\"], \"a\");\r\n joinTest(\"\", [\"a\", \"b\"], \"ab\");\r\n joinTest(\"\", [\"a\", \"b\", \"c\"], \"abc\");\r\n\r\n joinTest(\" \", [], \"\");\r\n joinTest(\" \", [\"a\"], \"a\");\r\n joinTest(\" \", [\"a\", \"b\"], \"a b\");\r\n joinTest(\" \", [\"a\", \"b\", \"c\"], \"a b c\");\r\n\r\n joinTest(\" _ \", [], \"\");\r\n joinTest(\" _ \", [\"a\"], \"a\");\r\n joinTest(\" _ \", [\"a\", \"b\"], \"a _ b\");\r\n joinTest(\" _ \", [\"a\", \"b\", \"c\"], \"a _ b _ c\");\r\n });\r\n\r\n runner.testFunction(\"escape(string|undefined|null,string[]|undefined)\", () =>\r\n {\r\n function escapeTest(value: string | undefined | null, dontEscape: string[] | undefined, expected: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, dontEscape?.map((value: string) => runner.toString(value))])}`, (test: Test) =>\r\n {\r\n const result: string = escape(value, dontEscape);\r\n test.assertSame(result, expected);\r\n });\r\n }\r\n\r\n escapeTest(undefined, undefined, \"undefined\");\r\n escapeTest(null, undefined, \"null\");\r\n escapeTest(\"\", undefined, \"\");\r\n escapeTest(\"a\", undefined, \"a\");\r\n escapeTest(\"A\", undefined, \"A\");\r\n escapeTest(\"abc\", undefined, \"abc\");\r\n escapeTest(\"\\t\", undefined, \"\\\\t\");\r\n escapeTest(\"\\n\", undefined, \"\\\\n\");\r\n escapeTest(\"\\r\", undefined, \"\\\\r\");\r\n escapeTest(\"'\", undefined, \"\\\\'\");\r\n escapeTest(\"\\\"\", undefined, \"\\\\\\\"\");\r\n escapeTest(\"&\", undefined, \"&\");\r\n escapeTest(\" \\r\\n \\t \", undefined, \" \\\\r\\\\n \\\\t \");\r\n escapeTest(\"\\t\", [], \"\\\\t\");\r\n escapeTest(\"\\t\", [\"\\n\"], \"\\\\t\");\r\n escapeTest(\"\\t\", [\"\\t\"], \"\\t\");\r\n });\r\n\r\n runner.testFunction(\"quote(string|undefined|null)\", () =>\r\n {\r\n function quoteTest(value: string | undefined | null, quoteString: string | undefined, expected: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, quoteString])}`, (test: Test) =>\r\n {\r\n const result: string = quote(value, quoteString);\r\n test.assertSame(result, expected);\r\n });\r\n }\r\n\r\n quoteTest(undefined, undefined, \"undefined\");\r\n quoteTest(null, undefined, \"null\");\r\n quoteTest(\"\", undefined, `\"\"`);\r\n quoteTest(\"a\", undefined, `\"a\"`);\r\n quoteTest(\"A\", undefined, `\"A\"`);\r\n quoteTest(\"abc\", undefined, `\"abc\"`);\r\n quoteTest(\"abc\", \"'\", `'abc'`);\r\n });\r\n\r\n runner.testFunction(\"escapeAndQuote(string|undefined|null,string|undefined,string[]|undefined)\", () =>\r\n {\r\n function escapeAndQuoteTest(value: string | undefined | null, quote: string | undefined, dontEscape: string[] | undefined, expected: string): void\r\n {\r\n runner.test(`with ${runner.andList([value, quote, dontEscape?.map(x => runner.toString(x))])}`, (test: Test) =>\r\n {\r\n const result: string = escapeAndQuote(value, quote, dontEscape);\r\n test.assertSame(result, expected);\r\n });\r\n }\r\n\r\n escapeAndQuoteTest(undefined, undefined, undefined, \"undefined\");\r\n escapeAndQuoteTest(null, undefined, undefined, \"null\");\r\n escapeAndQuoteTest(\"\", undefined, undefined, `\"\"`);\r\n escapeAndQuoteTest(\"a\", undefined, undefined, `\"a\"`);\r\n escapeAndQuoteTest(\"A\", undefined, undefined, `\"A\"`);\r\n escapeAndQuoteTest(\"abc\", undefined, undefined, `\"abc\"`);\r\n escapeAndQuoteTest(\"\\t\", undefined, undefined, `\"\\\\t\"`);\r\n escapeAndQuoteTest(\"\\n\", undefined, undefined, `\"\\\\n\"`);\r\n escapeAndQuoteTest(\"\\r\", undefined, undefined, `\"\\\\r\"`);\r\n escapeAndQuoteTest(\"'\", undefined, undefined, `\"\\\\'\"`);\r\n escapeAndQuoteTest(\"\\\"\", undefined, undefined, `\"\\\\\\\"\"`);\r\n escapeAndQuoteTest(\"&\", undefined, undefined, `\"&\"`);\r\n escapeAndQuoteTest(\" \\r\\n \\t \", undefined, undefined, `\" \\\\r\\\\n \\\\t \"`);\r\n escapeAndQuoteTest(\"\\t\", undefined, [], `\"\\\\t\"`);\r\n escapeAndQuoteTest(\"\\t\", undefined, [\"\\n\"], `\"\\\\t\"`);\r\n escapeAndQuoteTest(\"\\t\", undefined, [\"\\t\"], `\"\\t\"`);\r\n });\r\n\r\n runner.testFunction(\"isWhitespace(string)\", () =>\r\n {\r\n function isWhitespaceErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isWhitespace(value!), expectedError);\r\n });\r\n }\r\n\r\n isWhitespaceErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isWhitespaceErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isWhitespaceErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isWhitespaceErrorTest(\" \", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isWhitespaceTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isWhitespace(value), expected);\r\n });\r\n }\r\n\r\n isWhitespaceTest(\" \", true);\r\n isWhitespaceTest(\"\\n\", true);\r\n isWhitespaceTest(\"\\r\", true);\r\n isWhitespaceTest(\"\\t\", true);\r\n\r\n isWhitespaceTest(\"a\", false);\r\n isWhitespaceTest(\"_\", false);\r\n isWhitespaceTest(\"-\", false);\r\n });\r\n\r\n runner.testFunction(\"isLetter(string)\", () =>\r\n {\r\n function isLetterErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isLetter(value!), expectedError);\r\n });\r\n }\r\n\r\n isLetterErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isLetterErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isLetterErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isLetterErrorTest(\" \", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isLetterTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isLetter(value), expected);\r\n });\r\n }\r\n\r\n isLetterTest(\"a\", true);\r\n isLetterTest(\"m\", true);\r\n isLetterTest(\"z\", true);\r\n isLetterTest(\"A\", true);\r\n isLetterTest(\"N\", true);\r\n isLetterTest(\"Z\", true);\r\n \r\n isLetterTest(\" \", false);\r\n isLetterTest(\"\\n\", false);\r\n isLetterTest(\"\\r\", false);\r\n isLetterTest(\"\\t\", false);\r\n isLetterTest(\"_\", false);\r\n isLetterTest(\"-\", false);\r\n isLetterTest(\"5\", false);\r\n });\r\n\r\n runner.testFunction(\"isLowercasedLetter(string)\", () =>\r\n {\r\n function isLowercasedLetterErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isLowercasedLetter(value!), expectedError);\r\n });\r\n }\r\n\r\n isLowercasedLetterErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isLowercasedLetterErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isLowercasedLetterErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isLowercasedLetterErrorTest(\" \", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isLowercasedLetterTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isLowercasedLetter(value), expected);\r\n });\r\n }\r\n\r\n isLowercasedLetterTest(\"a\", true);\r\n isLowercasedLetterTest(\"m\", true);\r\n isLowercasedLetterTest(\"z\", true);\r\n\r\n isLowercasedLetterTest(\"A\", false);\r\n isLowercasedLetterTest(\"N\", false);\r\n isLowercasedLetterTest(\"Z\", false);\r\n isLowercasedLetterTest(\" \", false);\r\n isLowercasedLetterTest(\"\\n\", false);\r\n isLowercasedLetterTest(\"\\r\", false);\r\n isLowercasedLetterTest(\"\\t\", false);\r\n isLowercasedLetterTest(\"_\", false);\r\n isLowercasedLetterTest(\"-\", false);\r\n isLowercasedLetterTest(\"5\", false);\r\n });\r\n\r\n runner.testFunction(\"isUppercasedLetter(string)\", () =>\r\n {\r\n function isUppercasedLetterErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isUppercasedLetter(value!), expectedError);\r\n });\r\n }\r\n\r\n isUppercasedLetterErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isUppercasedLetterErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isUppercasedLetterErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isUppercasedLetterErrorTest(\" \", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isUppercasedLetterTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isUppercasedLetter(value), expected);\r\n });\r\n }\r\n \r\n isUppercasedLetterTest(\"A\", true);\r\n isUppercasedLetterTest(\"N\", true);\r\n isUppercasedLetterTest(\"Z\", true);\r\n\r\n isUppercasedLetterTest(\"a\", false);\r\n isUppercasedLetterTest(\"m\", false);\r\n isUppercasedLetterTest(\"z\", false);\r\n isUppercasedLetterTest(\" \", false);\r\n isUppercasedLetterTest(\"\\n\", false);\r\n isUppercasedLetterTest(\"\\r\", false);\r\n isUppercasedLetterTest(\"\\t\", false);\r\n isUppercasedLetterTest(\"_\", false);\r\n isUppercasedLetterTest(\"-\", false);\r\n isUppercasedLetterTest(\"5\", false);\r\n });\r\n\r\n runner.testFunction(\"isDigit(string)\", () =>\r\n {\r\n function isDigitErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isDigit(value!), expectedError);\r\n });\r\n }\r\n\r\n isDigitErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isDigitErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isDigitErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isDigitErrorTest(\" \", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isDigitTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isDigit(value), expected);\r\n });\r\n }\r\n \r\n isDigitTest(\"0\", true);\r\n isDigitTest(\"5\", true);\r\n isDigitTest(\"9\", true);\r\n\r\n isDigitTest(\".\", false);\r\n isDigitTest(\"a\", false);\r\n isDigitTest(\"m\", false);\r\n isDigitTest(\"z\", false);\r\n isDigitTest(\"A\", false);\r\n isDigitTest(\"N\", false);\r\n isDigitTest(\"Z\", false);\r\n isDigitTest(\" \", false);\r\n isDigitTest(\"\\n\", false);\r\n isDigitTest(\"\\r\", false);\r\n isDigitTest(\"\\t\", false);\r\n isDigitTest(\"_\", false);\r\n isDigitTest(\"-\", false);\r\n });\r\n\r\n runner.testFunction(\"isLetterOrDigit(string)\", () =>\r\n {\r\n function isLetterOrDigitErrorTest(value: string | undefined | null, expectedError: Error): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => isLetterOrDigit(value!), expectedError);\r\n });\r\n }\r\n\r\n isLetterOrDigitErrorTest(undefined, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])));\r\n isLetterOrDigitErrorTest(null, new PreConditionError(join(\"\\n\", [\r\n \"Expression: value\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])));\r\n isLetterOrDigitErrorTest(\"\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 0\",\r\n ])));\r\n isLetterOrDigitErrorTest(\"ab\", new PreConditionError(join(\"\\n\", [\r\n \"Expression: value.length\",\r\n \"Expected: 1\",\r\n \"Actual: 2\",\r\n ])));\r\n\r\n function isLetterOrDigitTest(value: string, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isLetterOrDigit(value), expected);\r\n });\r\n }\r\n \r\n isLetterOrDigitTest(\"0\", true);\r\n isLetterOrDigitTest(\"5\", true);\r\n isLetterOrDigitTest(\"9\", true);\r\n isLetterOrDigitTest(\"a\", true);\r\n isLetterOrDigitTest(\"m\", true);\r\n isLetterOrDigitTest(\"z\", true);\r\n isLetterOrDigitTest(\"A\", true);\r\n isLetterOrDigitTest(\"N\", true);\r\n isLetterOrDigitTest(\"Z\", true);\r\n\r\n isLetterOrDigitTest(\".\", false);\r\n isLetterOrDigitTest(\" \", false);\r\n isLetterOrDigitTest(\"\\n\", false);\r\n isLetterOrDigitTest(\"\\r\", false);\r\n isLetterOrDigitTest(\"\\t\", false);\r\n isLetterOrDigitTest(\"_\", false);\r\n isLetterOrDigitTest(\"-\", false);\r\n });\r\n });\r\n}","import { NotFoundError } from \"../sources/notFoundError\";\nimport { PreConditionError } from \"../sources/preConditionError\";\nimport { SyncResult } from \"../sources/syncResult\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"syncResult.ts\", () =>\n {\n runner.testType(\"SyncResult<T>\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n function createErrorTest<T>(testName: string, action: () => T, expected: Error): void\n {\n runner.test(testName, (test: Test) =>\n {\n test.assertThrows(() => SyncResult.create(action), expected);\n });\n }\n\n createErrorTest(\"with undefined\", undefined!, new PreConditionError(\n \"Expression: action\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n createErrorTest(\"with null\", null!, new PreConditionError(\n \"Expression: action\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n runner.test(\"with action\", (test: Test) =>\n {\n const result: SyncResult<number> = SyncResult.create(() => 5);\n test.assertNotUndefinedAndNotNull(result);\n\n const value: number = result.await();\n test.assertEqual(5, value);\n });\n\n runner.test(\"with action with side-effects\", (test: Test) =>\n {\n let counter = 0;\n const result: SyncResult<number> = SyncResult.create(() => { return ++counter; });\n test.assertEqual(counter, 1);\n\n for (let i = 0; i < 3; i++)\n {\n test.assertEqual(1, result.await());\n test.assertEqual(1, counter);\n }\n });\n });\n\n runner.testFunction(\"value()\", () =>\n {\n function valueTest<T>(value: T): void\n {\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\n {\n const result: SyncResult<T> = SyncResult.value(value);\n test.assertNotUndefinedAndNotNull(result);\n\n const awaitResult: T = result.await();\n test.assertSame(awaitResult, value);\n });\n }\n\n valueTest(undefined);\n valueTest(null);\n valueTest(50);\n valueTest({});\n });\n\n runner.testFunction(\"error()\", () =>\n {\n function errorTest<T>(error: Error): void\n {\n runner.test(`with ${runner.toString(error)}`, (test: Test) =>\n {\n const result: SyncResult<T> = SyncResult.error(error);\n test.assertNotUndefinedAndNotNull(result);\n\n test.assertThrows(result, error);\n });\n }\n\n errorTest(new Error(\"oops\"));\n errorTest(new NotFoundError(\"not here\"));\n });\n\n runner.testGroup(\"async/await\", () =>\n {\n runner.test(\"with value\", async (test: Test) =>\n {\n const result: SyncResult<number> = SyncResult.value(5);\n test.assertEqual(await result, 5);\n });\n\n runner.test(\"with error\", async (test: Test) =>\n {\n const result: SyncResult<number> = SyncResult.error(new NotFoundError(\"abc\"));\n await test.assertThrowsAsync(result, new NotFoundError(\"abc\"));\n });\n });\n\n runner.testFunction(\"then()\", () =>\n {\n runner.testGroup(\"with non-PromiseLike return type\", () =>\n {\n runner.test(\"with error parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n const thenResult: SyncResult<string> = parentResult.then(() => \"hello\");\n test.assertThrows(() => thenResult.await(), new Error(\"abc\"));\n });\n\n runner.test(\"with error parent and thenFunction with side-effects\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const thenResult: SyncResult<string> = parentResult.then(() => { counter++; return \"hello\"; });\n test.assertSame(0, counter);\n test.assertThrows(() => thenResult.await(), new Error(\"abc\"));\n test.assertSame(0, counter);\n });\n\n runner.test(\"with successful parent and successful thenFunction that ignores parentResult value\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n const thenResult: SyncResult<string> = parentResult.then(() => \"hello\");\n test.assertSame(\"hello\", thenResult.await());\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n const thenResult: SyncResult<string> = parentResult.then((argument: number) => (argument + 1).toString());\n test.assertSame(\"2\", thenResult.await());\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value with side-effects\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n let counter: number = 0;\n const thenResult: SyncResult<string> = parentResult.then((argument: number) => { counter++; return (argument + 1).toString(); });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(\"2\", thenResult.await());\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with successful parent and thenFunction that throws\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(10);\n let counter: number = 0;\n const thenResult: SyncResult<string> = parentResult.then((argument: number) =>\n {\n counter++;\n throw new Error(`arg: ${argument}`);\n });\n test.assertSame(counter, 1);\n\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(thenResult, new Error(\"arg: 10\"));\n test.assertSame(counter, 1);\n\n await test.assertThrowsAsync(thenResult, new Error(\"arg: 10\"));\n test.assertSame(counter, 1);\n }\n });\n });\n });\n\n runner.testFunction(\"onValue()\", () =>\n {\n runner.test(\"with error parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const onValueResult: SyncResult<number> = parentResult.onValue(() => counter++);\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(onValueResult, new Error(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with successful parent and successful thenFunction that ignores parentResult value\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(10);\n let counter: number = 0;\n const onValueResult: SyncResult<number> = parentResult.onValue(() => counter++);\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(10, onValueResult.await());\n test.assertSame(counter, 1);\n\n test.assertSame(10, await onValueResult);\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent and successful thenFunction that uses parentResult value\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(2);\n let counter: number = 0;\n const onValueResult: SyncResult<number> = parentResult.onValue((argument: number) => counter += argument);\n test.assertSame(counter, 2);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(onValueResult.await(), 2);\n test.assertSame(counter, 2);\n\n test.assertSame(await onValueResult, 2);\n test.assertSame(counter, 2);\n }\n });\n\n runner.test(\"with successful parent and onValueFunction that throws\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(2);\n let counter: number = 0;\n const onValueResult: SyncResult<number> = parentResult.onValue((argument: number) =>\n {\n counter += argument;\n throw new Error(`argument: ${argument}`);\n });\n test.assertSame(counter, 2);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(onValueResult, new Error(\"argument: 2\"));\n test.assertSame(counter, 2);\n\n await test.assertThrowsAsync(onValueResult, new Error(\"argument: 2\"));\n test.assertSame(counter, 2);\n }\n });\n });\n\n runner.testFunction(\"catch()\", () =>\n {\n runner.test(\"with undefined errorType\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.catch(undefined!, () => 6),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null errorType\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.catch(null!, () => 6),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.testGroup(\"sync\", () =>\n {\n runner.test(\"with error parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 20);\n test.assertSame(catchResult.await(), 20);\n });\n\n runner.test(\"with error parent, no errorType, and no error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch(() => { counter++; return 21; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(catchResult.await(), 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n return 21;\n });\n test.assertSame(3, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(catchResult.await(), 21);\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with error parent and catchFunction with side-effects\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => { counter++; return 21; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(catchResult.await(), 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 5);\n test.assertSame(catchResult.await(), 5);\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, (error: Error) => error.message.length);\n test.assertSame(catchResult.await(), 3);\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(PreConditionError, () => 20);\n test.assertThrows(catchResult, new Error(\"abc\"));\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n const catchResult: SyncResult<number> = parentResult.catch(RangeError, () => 20);\n test.assertThrows(catchResult, new PreConditionError(\"def\"));\n });\n\n runner.test(\"with catchFunction that throws\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => { throw new TypeError(\"abc\"); });\n test.assertThrows(catchResult, new TypeError(\"abc\"));\n });\n\n runner.test(\"with successful parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 2);\n test.assertSame(catchResult.await(), 1);\n });\n });\n\n runner.testGroup(\"async\", () =>\n {\n runner.test(\"with error parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 20);\n test.assertSame(await catchResult, 20);\n });\n\n runner.test(\"with error parent, no errorType, and no error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch(() => { counter++; return 21; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n return 21;\n });\n test.assertSame(3, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with error parent and catchFunction with side-effects\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => { counter++; return 21; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 21);\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 5);\n test.assertSame(await catchResult, 5);\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, (error: Error) => error.message.length);\n test.assertSame(await catchResult, 3);\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n const catchResult: SyncResult<number> = parentResult.catch(PreConditionError, () => 20);\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n const catchResult: SyncResult<number> = parentResult.catch(RangeError, () => 20);\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"def\"));\n });\n\n runner.test(\"with catchFunction that throws\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => { throw new TypeError(\"abc\"); });\n await test.assertThrowsAsync(catchResult, new TypeError(\"abc\"));\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n const catchResult: SyncResult<number> = parentResult.catch(Error, () => 2);\n test.assertSame(await catchResult, 1);\n });\n });\n });\n\n runner.testFunction(\"onError()\", () =>\n {\n runner.test(\"with undefined errorType\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.onError(undefined!, () => { }),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null errorType\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.onError(null!, () => { }),\n new PreConditionError(\n \"Expression: errorType\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.testGroup(\"sync\", () =>\n {\n runner.test(\"with error parent, no errorType, and no error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(() => { counter++; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new Error(\"abc\"));\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n });\n test.assertSame(3, counter);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new Error(\"abc\"));\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, (error: Error) => { counter += error.message.length; });\n test.assertSame(counter, 3);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 3);\n }\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(PreConditionError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(RangeError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new PreConditionError(\"def\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with onErrorFunction that throws\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; throw new Error(\"abc\"); });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(catchResult.await(), 1);\n test.assertSame(counter, 0);\n }\n });\n });\n\n runner.testGroup(\"async\", () =>\n {\n runner.test(\"with error parent, no errorType, and no error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(() => { counter++; });\n test.assertSame(1, counter);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(1, counter);\n }\n });\n\n runner.test(\"with error parent, no errorType, and unknown error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError((error: unknown) =>\n {\n if (error instanceof Error)\n {\n counter += error.message.length;\n }\n else\n {\n counter -= 1;\n }\n });\n test.assertSame(3, counter);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(3, counter);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error without error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with errorType that is a super-type of the actual error with error parameter\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, (error: Error) => { counter += error.message.length; });\n test.assertSame(counter, 3);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 3);\n }\n });\n\n runner.test(\"with errorType that is a sub-type of the actual error\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(PreConditionError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with errorType that is unrelated to the actual error\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(RangeError, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new PreConditionError(\"def\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with onErrorFunction that throws\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"def\"));\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; throw new Error(\"abc\"); });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(catchResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(1);\n let counter: number = 0;\n const catchResult: SyncResult<number> = parentResult.onError(Error, () => { counter++; });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await catchResult, 1);\n test.assertSame(counter, 0);\n }\n });\n });\n });\n\n runner.testFunction(\"convertError()\", () =>\n {\n runner.testGroup(\"async\", () =>\n {\n runner.test(\"with undefined convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(undefined!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(null!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await convertErrorResult, 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n throw new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await convertErrorResult, 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(`abc - def`));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and non-throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(TypeError, (error: TypeError) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and throwing convertErrorFunction\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(PreConditionError, () =>\n {\n counter++;\n throw new Error(\"def\");\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new TypeError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n });\n\n runner.testGroup(\"sync\", () =>\n {\n runner.test(\"with undefined convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(undefined!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\"));\n });\n\n runner.test(\"with null convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n test.assertThrows(() => parentResult.convertError(null!),\n new PreConditionError(\n \"Expression: convertErrorFunction\",\n \"Expected: not undefined and not null\",\n \"Actual: null\"));\n });\n\n runner.test(\"with successful parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(convertErrorResult.await(), 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent and non-throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n return new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError((error: unknown) =>\n {\n counter++;\n throw new Error(`${(error as Error).message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(convertErrorResult.await(), 5);\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and non-throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and non-throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n return new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(`abc - def`));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and non-throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new PreConditionError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(TypeError, (error: TypeError) =>\n {\n counter++;\n return new Error(`${error} - def`);\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new PreConditionError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n\n runner.test(\"with error parent, exact error match, and throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, super error match, and throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(Error, (error: Error) =>\n {\n counter++;\n throw new Error(`${error.message} - def`);\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new Error(\"abc - def\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent, no error match, and throwing convertErrorFunction\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new TypeError(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.convertError(PreConditionError, () =>\n {\n counter++;\n throw new Error(\"def\");\n });\n test.assertSame(counter, 0);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new TypeError(\"abc\"));\n test.assertSame(counter, 0);\n }\n });\n });\n });\n\n runner.testFunction(\"finally()\", () =>\n {\n runner.testGroup(\"async\", () =>\n {\n runner.test(\"with successful parent and non-throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(await finallyResult, 5);\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent and throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"oops!\");\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(finallyResult, new RangeError(\"oops!\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and non-throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(finallyResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing onfinally function\", async (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"def\");\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n await test.assertThrowsAsync(convertErrorResult, new RangeError(\"def\"));\n test.assertSame(counter, 1);\n }\n });\n });\n\n runner.testGroup(\"sync\", () =>\n {\n runner.test(\"with successful parent and non-throwing onfinally function\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertSame(finallyResult.await(), 5);\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with successful parent and throwing onfinally function\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.value(5);\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"oops!\");\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(finallyResult, new RangeError(\"oops!\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and non-throwing onfinally function\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const finallyResult: SyncResult<number> = parentResult.finally(() => { counter++; });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(finallyResult, new Error(\"abc\"));\n test.assertSame(counter, 1);\n }\n });\n\n runner.test(\"with error parent and throwing onfinally function\", (test: Test) =>\n {\n const parentResult: SyncResult<number> = SyncResult.error(new Error(\"abc\"));\n let counter: number = 0;\n const convertErrorResult: SyncResult<number> = parentResult.finally(() =>\n {\n counter++;\n throw new RangeError(\"def\");\n });\n test.assertSame(counter, 1);\n for (let i = 0; i < 3; i++)\n {\n test.assertThrows(convertErrorResult, new RangeError(\"def\"));\n test.assertSame(counter, 1);\n }\n });\n });\n });\n });\n });\n}","import { PreConditionError } from \"../sources/preConditionError\";\r\nimport { join } from \"../sources/strings\";\r\nimport { Test } from \"./test\";\r\nimport { TestAction } from \"./testAction\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"testAction.ts\", () =>\r\n {\r\n runner.testType(\"TestAction\", () =>\r\n {\r\n runner.testFunction(\"create()\", () =>\r\n {\r\n function createErrorTest(parent: TestAction | undefined, name: string, action: () => (void | Promise<void>), expected: Error): void\r\n {\r\n runner.test(`with ${!parent ? runner.toString(parent) : \"defined parent\"}, ${runner.toString(name)}, and ${!action ? runner.toString(action) : \"defined action\"}`, (test: Test) =>\r\n {\r\n test.assertThrows(() => TestAction.create(parent, name, undefined, action), expected);\r\n });\r\n }\r\n\r\n createErrorTest(\r\n undefined,\r\n undefined!,\r\n () => {},\r\n new PreConditionError(join(\"\\n\", [\r\n \"Expression: name\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])),\r\n );\r\n createErrorTest(\r\n undefined,\r\n null!,\r\n () => {},\r\n new PreConditionError(join(\"\\n\", [\r\n \"Expression: name\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])),\r\n );\r\n createErrorTest(\r\n undefined,\r\n \"a\",\r\n undefined!,\r\n new PreConditionError(join(\"\\n\", [\r\n \"Expression: action\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ])),\r\n );\r\n createErrorTest(\r\n undefined,\r\n \"a\",\r\n null!,\r\n new PreConditionError(join(\"\\n\", [\r\n \"Expression: action\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ])),\r\n );\r\n\r\n function createTest(parent: TestAction | undefined, name: string, action: () => (void | Promise<void>)): void\r\n {\r\n runner.test(`with ${!parent ? runner.toString(parent) : \"defined parent\"}, ${runner.toString(name)}, and ${!action ? runner.toString(action) : \"defined action\"}`, (test: Test) =>\r\n {\r\n const testAction: TestAction = TestAction.create(parent, name, undefined, action);\r\n test.assertNotUndefinedAndNotNull(testAction);\r\n test.assertSame(parent, testAction.getParent());\r\n test.assertSame(name, testAction.getName());\r\n test.assertSame(action, testAction.getAction());\r\n });\r\n }\r\n\r\n createTest(undefined, \"b\", () => {});\r\n });\r\n\r\n runner.testFunction(\"run()\", (test: Test) =>\r\n {\r\n let counter: number = 0;\r\n const action: TestAction = TestAction.create(undefined, \"c\", undefined, () => { counter++; });\r\n test.assertEqual(0, counter);\r\n\r\n for (let i = 1; i <= 3; i++)\r\n {\r\n action.runAsync();\r\n test.assertEqual(i, counter);\r\n }\r\n });\r\n });\r\n });\r\n}","import { Comparison } from \"../sources/comparison\";\r\nimport { Iterable } from \"../sources/iterable\";\r\nimport { List } from \"../sources/list\";\r\nimport { Map } from \"../sources/map\";\r\nimport { ToStringFunctions } from \"../sources/toStringFunctions\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"toStringFunctions.ts\", () =>\r\n {\r\n runner.testType(\"ToStringFunctions\", () =>\r\n {\r\n runner.testFunction(\"toString(unknown)\", () =>\r\n {\r\n function toStringTest(value: unknown, expected: string)\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n const functions: ToStringFunctions = ToStringFunctions.create();\r\n test.assertSame(functions.toString(value), expected);\r\n });\r\n }\r\n\r\n // toStringTest(undefined, \"undefined\");\r\n // toStringTest(null, \"null\");\r\n // toStringTest(false, \"false\");\r\n // toStringTest(true, \"true\");\r\n // toStringTest(50, \"50\");\r\n // toStringTest(NaN, \"NaN\");\r\n // toStringTest(Infinity, \"Infinity\");\r\n // toStringTest(-Infinity, \"-Infinity\");\r\n // toStringTest(1.2, \"1.2\");\r\n // toStringTest(\"hello\\tthere\\nfriend\", `\"hello\\\\tthere\\\\nfriend\"`);\r\n // toStringTest({}, \"{}\");\r\n // toStringTest({1:\"one\", b: \"two\"}, `{\"1\":\"one\",\"b\":\"two\"}`);\r\n // toStringTest([], \"[]\");\r\n // toStringTest([undefined, undefined], \"[undefined,undefined]\");\r\n // toStringTest([1, 2.3, false], \"[1,2.3,false]\");\r\n // toStringTest([[[]]], \"[[[]]]\");\r\n // toStringTest(Iterable.create(), `[]`);\r\n // toStringTest(Iterable.create<string>([\"abc\"]), `[\"abc\"]`);\r\n // toStringTest(Iterable.create([1, 2, 3]), `[1,2,3]`);\r\n // toStringTest(List.create(), `[]`);\r\n // toStringTest(List.create<string>([\"abc\"]), `[\"abc\"]`);\r\n // toStringTest(List.create([1, 2, 3]), `[1,2,3]`);\r\n toStringTest(Map.create(), `{}`);\r\n // toStringTest(Map.create<string,number>().set(\"a\", 1), `{\"a\":1}`);\r\n // toStringTest(Map.create<string,number>().set(\"a\", 1).set(\"b\", 2), `{\"a\":1,\"b\":2}`);\r\n // toStringTest(Comparison.LessThan, \"0\");\r\n });\r\n });\r\n });\r\n}","import { Iterable } from \"../sources/iterable\";\r\nimport { List } from \"../sources/list\";\r\nimport {\r\n asBoolean, hasFunction, hasProperty, isArray, isBoolean, isFunction, isNumber, isObject,\r\n isObjectOrArrayOrNull, isString\r\n} from \"../sources/types\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"types.ts\", () =>\r\n {\r\n runner.testFunction(\"isBoolean(unknown)\", () =>\r\n {\r\n function isBooleanTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isBoolean(value), expected);\r\n });\r\n }\r\n\r\n isBooleanTest(undefined, false);\r\n isBooleanTest(null, false);\r\n isBooleanTest(\"\", false);\r\n isBooleanTest(\"true\", false);\r\n isBooleanTest(123, false);\r\n isBooleanTest({}, false);\r\n isBooleanTest([], false);\r\n isBooleanTest(true, true);\r\n isBooleanTest(false, true);\r\n });\r\n\r\n runner.testFunction(\"asBoolean(unknown)\", () =>\r\n {\r\n function asBooleanTest(value: unknown, expected: boolean | undefined): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertEqual(asBoolean(value), expected);\r\n });\r\n }\r\n\r\n asBooleanTest(undefined, undefined);\r\n asBooleanTest(null, undefined);\r\n asBooleanTest(\"\", undefined);\r\n asBooleanTest(\"true\", undefined);\r\n asBooleanTest(123, undefined);\r\n asBooleanTest({}, undefined);\r\n asBooleanTest([], undefined);\r\n asBooleanTest(true, true);\r\n asBooleanTest(false, false);\r\n asBooleanTest(() => false, undefined);\r\n asBooleanTest(() => true, undefined);\r\n });\r\n\r\n runner.testFunction(\"isNumber(unknown)\", () =>\r\n {\r\n function isNumberTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isNumber(value), expected);\r\n });\r\n }\r\n\r\n isNumberTest(undefined, false);\r\n isNumberTest(null, false);\r\n isNumberTest(\"\", false);\r\n isNumberTest(\"123\", false);\r\n isNumberTest({}, false);\r\n isNumberTest([], false);\r\n isNumberTest(true, false);\r\n isNumberTest(false, false);\r\n isNumberTest(123, true);\r\n isNumberTest(Infinity, true);\r\n isNumberTest(-Infinity, true);\r\n isNumberTest(NaN, true);\r\n });\r\n\r\n runner.testFunction(\"isString(unknown)\", () =>\r\n {\r\n function isStringTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isString(value), expected);\r\n });\r\n }\r\n\r\n isStringTest(undefined, false);\r\n isStringTest(null, false);\r\n isStringTest(50, false);\r\n isStringTest({}, false);\r\n isStringTest(\"\", true);\r\n isStringTest(\"hello\", true);\r\n });\r\n\r\n runner.testFunction(\"isFunction(unknown)\", () =>\r\n {\r\n function isFunctionTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isFunction(value), expected);\r\n });\r\n }\r\n\r\n isFunctionTest(undefined, false);\r\n isFunctionTest(null, false);\r\n isFunctionTest(false, false);\r\n isFunctionTest(true, false);\r\n isFunctionTest(123, false);\r\n isFunctionTest(\"abc\", false);\r\n isFunctionTest({}, false);\r\n isFunctionTest([], false);\r\n\r\n isFunctionTest(isArray, true);\r\n isFunctionTest(isFunction, true);\r\n isFunctionTest(() => 123, true);\r\n });\r\n\r\n runner.testFunction(\"isArray(unknown)\", () =>\r\n {\r\n function isArrayTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isArray(value), expected);\r\n });\r\n }\r\n\r\n isArrayTest(undefined, false);\r\n isArrayTest(null, false);\r\n isArrayTest(50, false);\r\n isArrayTest({}, false);\r\n isArrayTest(\"\", false);\r\n isArrayTest(\"hello\", false);\r\n isArrayTest(Iterable.create(), false);\r\n isArrayTest(List.create(), false);\r\n isArrayTest(new Uint8Array(), false);\r\n\r\n isArrayTest([], true);\r\n isArrayTest([\"a\", \"b\"], true);\r\n isArrayTest(new Array(), true);\r\n isArrayTest(Array.from([1, 2]), true);\r\n });\r\n\r\n runner.testFunction(\"isObjectOrArrayOrNull(unknown)\", () =>\r\n {\r\n function isObjectOrArrayOrNullTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isObjectOrArrayOrNull(value), expected);\r\n });\r\n }\r\n\r\n isObjectOrArrayOrNullTest(undefined, false);\r\n isObjectOrArrayOrNullTest(50, false);\r\n isObjectOrArrayOrNullTest(\"\", false);\r\n isObjectOrArrayOrNullTest(\"hello\", false);\r\n \r\n isObjectOrArrayOrNullTest({}, true);\r\n isObjectOrArrayOrNullTest(null, true);\r\n isObjectOrArrayOrNullTest([], true);\r\n isObjectOrArrayOrNullTest([\"a\", \"b\"], true);\r\n isObjectOrArrayOrNullTest(new Array(), true);\r\n isObjectOrArrayOrNullTest(Array.from([1, 2]), true);\r\n isObjectOrArrayOrNullTest(Iterable.create(), true);\r\n isObjectOrArrayOrNullTest(List.create(), true);\r\n });\r\n\r\n runner.testFunction(\"isObject(unknown)\", () =>\r\n {\r\n function isObjectTest(value: unknown, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\r\n {\r\n test.assertSame(isObject(value), expected);\r\n });\r\n }\r\n\r\n isObjectTest(undefined, false);\r\n isObjectTest(50, false);\r\n isObjectTest(\"\", false);\r\n isObjectTest(\"hello\", false);\r\n isObjectTest(null, false);\r\n isObjectTest([], false);\r\n isObjectTest([\"a\", \"b\"], false);\r\n isObjectTest(new Array(), false);\r\n isObjectTest(Array.from([1, 2]), false);\r\n \r\n isObjectTest({}, true);\r\n isObjectTest(Iterable.create(), true);\r\n isObjectTest(List.create(), true);\r\n });\r\n\r\n runner.testFunction(\"hasProperty(TValue,TPropertyKey extends PropertyKey)\", () =>\r\n {\r\n function hasPropertyTest<TPropertyKey extends PropertyKey>(value: unknown, propertyKey: TPropertyKey, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.andList([value, propertyKey])}`, (test: Test) =>\r\n {\r\n const result: boolean = hasProperty(value, propertyKey);\r\n test.assertSame(result, expected);\r\n if (value !== undefined && value !== null)\r\n {\r\n if (result)\r\n {\r\n test.assertNotUndefined((value as any)[propertyKey]);\r\n }\r\n else\r\n {\r\n test.assertUndefined((value as any)[propertyKey]);\r\n }\r\n }\r\n });\r\n }\r\n\r\n hasPropertyTest(undefined, \"spam\", false);\r\n hasPropertyTest(null, \"spam\", false);\r\n hasPropertyTest([], \"spam\", false);\r\n hasPropertyTest([], \"length\", true);\r\n hasPropertyTest({}, \"spam\", false);\r\n hasPropertyTest(\"\", \"spam\", false);\r\n hasPropertyTest(\"\", \"length\", true);\r\n hasPropertyTest(5, \"spam\", false);\r\n hasPropertyTest(5, \"toString\", true);\r\n });\r\n\r\n runner.testFunction(\"hasFunction(TValue,TPropertyKey extends PropertyKey)\", () =>\r\n {\r\n function hasFunctionTest<TPropertyKey extends PropertyKey>(value: unknown, propertyKey: TPropertyKey, expected: boolean): void\r\n {\r\n runner.test(`with ${runner.andList([value, propertyKey])}`, (test: Test) =>\r\n {\r\n test.assertSame(hasFunction(value, propertyKey), expected);\r\n });\r\n }\r\n\r\n hasFunctionTest(undefined, \"spam\", false);\r\n hasFunctionTest(null, \"spam\", false);\r\n hasFunctionTest([], \"spam\", false);\r\n hasFunctionTest([], \"length\", false);\r\n hasFunctionTest([], Symbol.iterator, true);\r\n hasFunctionTest({}, \"spam\", false);\r\n hasFunctionTest(\"\", \"spam\", false);\r\n hasFunctionTest(\"\", \"length\", false);\r\n hasFunctionTest(\"\", \"at\", true);\r\n hasFunctionTest(\"\", Symbol.iterator, true);\r\n hasFunctionTest(5, \"spam\", false);\r\n hasFunctionTest(5, \"toString\", true);\r\n });\r\n });\r\n}","import { Iterator } from \"../sources/iterator\";\r\nimport { PreConditionError } from \"../sources/preConditionError\";\r\nimport { WhereIterator } from \"../sources/whereIterator\";\r\nimport { iteratorTests } from \"./iteratorTests\";\r\nimport { Test } from \"./test\";\r\nimport { TestRunner } from \"./testRunner\";\r\n\r\nexport function test(runner: TestRunner): void\r\n{\r\n runner.testFile(\"whereIterator.ts\", () =>\r\n {\r\n runner.testType(\"WhereIterator<T>\", () =>\r\n {\r\n iteratorTests(runner, () => WhereIterator.create(Iterator.create<number>([]), (_: number) => true));\r\n\r\n runner.testFunction(\"create(T[])\", () =>\r\n {\r\n function createErrorTest<T>(testName: string, innerIterator: Iterator<T>, condition: (value: T) => boolean, expected: Error): void\r\n {\r\n runner.test(testName, (test: Test) =>\r\n {\r\n test.assertThrows(() => WhereIterator.create(innerIterator, condition), expected);\r\n });\r\n }\r\n\r\n createErrorTest(\r\n `with undefined innerIterator`,\r\n undefined!,\r\n (_: number) => true,\r\n new PreConditionError(\r\n \"Expression: innerIterator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: undefined\",\r\n ),\r\n );\r\n createErrorTest(\r\n `with null innerIterator`,\r\n null!,\r\n (_: number) => true,\r\n new PreConditionError(\r\n \"Expression: innerIterator\",\r\n \"Expected: not undefined and not null\",\r\n \"Actual: null\",\r\n ),\r\n );\r\n\r\n function createTest<T>(testName: string, innerIterator: Iterator<T>, condition: (value: T) => boolean, expected: T[]): void\r\n {\r\n runner.test(testName, async (test: Test) =>\r\n {\r\n const iterator: WhereIterator<T> = WhereIterator.create(innerIterator, condition);\r\n test.assertEqual(await iterator.toArray(), expected);\r\n });\r\n }\r\n\r\n createTest(\r\n `with empty innerIterator`,\r\n Iterator.create<number>([]),\r\n (_: number) => true,\r\n [],\r\n );\r\n createTest(\r\n `with none of the iterator values match the condition`,\r\n Iterator.create([1, 2, 3]),\r\n (value: number) => value > 10,\r\n [],\r\n );\r\n createTest(\r\n `with some of the iterator values match the condition`,\r\n Iterator.create([1, 2, 3]),\r\n (value: number) => value % 2 == 1,\r\n [1, 3],\r\n );\r\n });\r\n });\r\n });\r\n}","import { PreConditionError } from \"../sources/preConditionError\";\nimport { isWonderlandTrailLocation, WonderlandTrailAvailability, WonderlandTrailAvailabilityType, WonderlandTrailClient, WonderlandTrailConnection, WonderlandTrailDirection, WonderlandTrailLocation, WonderlandTrailLocations, WonderlandTrailReservationType } from \"../sources/wonderlandTrailClient\";\nimport { Test } from \"./test\";\nimport { TestRunner } from \"./testRunner\";\nimport { Iterable } from \"../sources/iterable\";\nimport { DateTime } from \"../sources/dateTime\";\nimport { Map } from \"../sources/map\";\nimport { MutableMap } from \"../sources/mutableMap\";\nimport { NotFoundError } from \"../sources/notFoundError\";\nimport { HttpClient } from \"../sources/httpClient\";\n\nexport function test(runner: TestRunner): void\n{\n runner.testFile(\"wonderlandTrailClient.ts\", () =>\n {\n runner.testFunction(\"isWonderlandTrailLocation()\", () =>\n {\n function isWonderlandTrailLocationTest(value: unknown, expected: boolean): void\n {\n runner.test(`with ${runner.toString(value)}`, (test: Test) =>\n {\n test.assertEqual(isWonderlandTrailLocation(value), expected);\n });\n }\n\n isWonderlandTrailLocationTest(undefined, false);\n isWonderlandTrailLocationTest(null, false);\n isWonderlandTrailLocationTest(20, false);\n isWonderlandTrailLocationTest({}, false);\n isWonderlandTrailLocationTest(WonderlandTrailLocations.boxCanyon, true);\n });\n\n runner.testType(\"WonderlandTrailLocations\", () =>\n {\n runner.testFunction(\"getLocations()\", (test: Test) =>\n {\n const locations: Iterable<WonderlandTrailLocation> = WonderlandTrailLocations.getLocations();\n test.assertNotUndefinedAndNotNull(locations);\n test.assertEqual(locations.getCount().await(), 27);\n });\n\n runner.testFunction(\"getTrailheads()\", (test: Test) =>\n {\n const trailheads: Iterable<WonderlandTrailLocation> = WonderlandTrailLocations.getTrailheads();\n test.assertEqual(6, trailheads.getCount().await());\n test.assertEqual(\n [\n WonderlandTrailLocations.sunriseVisitorCenter.name,\n WonderlandTrailLocations.whiteRiver.name,\n WonderlandTrailLocations.fryingPanCreek.name,\n WonderlandTrailLocations.boxCanyon.name,\n WonderlandTrailLocations.reflectionLakes.name,\n WonderlandTrailLocations.longmire.name,\n ],\n trailheads.map(t => t.name).toArray().await(),\n );\n });\n });\n\n runner.testType(\"WonderlandTrailAvailability\", () =>\n {\n runner.testFunction(\"addAvailability()\", () =>\n {\n runner.test(\"with undefined location\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.addAvailability(undefined!, DateTime.now()), new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null location\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.addAvailability(null!, DateTime.now()), new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with undefined date\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.addAvailability(WonderlandTrailLocations.boxCanyon, undefined!), new PreConditionError(\n \"Expression: date\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null date\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.addAvailability(WonderlandTrailLocations.boxCanyon, null!), new PreConditionError(\n \"Expression: date\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with neither individual nor group site data\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n test.assertEqual(Map.create(), availability.getAvailability(location))\n\n availability.addAvailability(location, date);\n\n const expected: MutableMap<string, WonderlandTrailAvailabilityType> = Map.create();\n expected.set(date.toDateString(), { groupSite: undefined, individualSite: undefined });\n test.assertEqual(expected, availability.getAvailability(location));\n });\n\n runner.test(\"with individual site data\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n test.assertEqual(Map.create(), availability.getAvailability(location))\n\n availability.addAvailability(location, date, WonderlandTrailReservationType.Walkup);\n\n const expected: MutableMap<string, WonderlandTrailAvailabilityType> = Map.create();\n expected.set(date.toDateString(), { groupSite: undefined, individualSite: WonderlandTrailReservationType.Walkup });\n test.assertEqual(expected, availability.getAvailability(location));\n });\n\n runner.test(\"with group site data\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n test.assertEqual(Map.create(), availability.getAvailability(location))\n\n availability.addAvailability(location, date, undefined, WonderlandTrailReservationType.Reserved);\n\n const expected: MutableMap<string, WonderlandTrailAvailabilityType> = Map.create();\n expected.set(date.toDateString(), { groupSite: WonderlandTrailReservationType.Reserved, individualSite: undefined });\n test.assertEqual(expected, availability.getAvailability(location));\n });\n });\n\n runner.testFunction(\"getAvailability()\", () =>\n {\n function getAvailabilityErrorTest(location: WonderlandTrailLocation, expected: Error): void\n {\n runner.test(`with ${runner.toString(location)}`, (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.getAvailability(location), expected);\n });\n }\n\n getAvailabilityErrorTest(undefined!, new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n getAvailabilityErrorTest(null!, new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n runner.test(\"when location isn't found\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const locationAvailability: MutableMap<string, WonderlandTrailAvailabilityType> = availability.getAvailability(location);\n test.assertNotUndefinedAndNotNull(locationAvailability);\n test.assertFalse(locationAvailability.any().await());\n test.assertSame(locationAvailability, availability.getAvailability(location));\n });\n\n runner.test(\"when location is found\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n availability.addAvailability(location, date, WonderlandTrailReservationType.Reserved, WonderlandTrailReservationType.Walkup);\n\n const locationAvailability: MutableMap<string, WonderlandTrailAvailabilityType> = availability.getAvailability(location);\n const expected: MutableMap<string, WonderlandTrailAvailabilityType> = Map.create();\n expected.set(date.toDateString(), {\n groupSite: WonderlandTrailReservationType.Walkup,\n individualSite: WonderlandTrailReservationType.Reserved,\n });\n test.assertEqual(locationAvailability, expected);\n test.assertSame(locationAvailability, availability.getAvailability(location));\n });\n });\n\n runner.testFunction(\"getDayAvailability()\", () =>\n {\n function getDayAvailabilityErrorTest(location: WonderlandTrailLocation, date: DateTime, expected: Error): void\n {\n runner.test(`with ${runner.andList([location, date])}`, (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n test.assertThrows(() => availability.getDayAvailability(location, date).await(), expected);\n });\n }\n\n getDayAvailabilityErrorTest(undefined!, DateTime.parse(\"2025-07-04\"), new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n getDayAvailabilityErrorTest(null!, DateTime.parse(\"2025-07-04\"), new PreConditionError(\n \"Expression: location\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n getDayAvailabilityErrorTest(WonderlandTrailLocations.boxCanyon, undefined!, new PreConditionError(\n \"Expression: date\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n getDayAvailabilityErrorTest(WonderlandTrailLocations.boxCanyon, null!, new PreConditionError(\n \"Expression: date\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n\n runner.test(\"with not found location or date\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n\n test.assertThrows(() => availability.getDayAvailability(location, date).await(), new NotFoundError(\n \"No availability was found for Box Canyon on 2025-07-04.\",\n ));\n });\n\n runner.test(\"when location and date are found\", (test: Test) =>\n {\n const availability: WonderlandTrailAvailability = WonderlandTrailAvailability.create();\n\n const location: WonderlandTrailLocation = WonderlandTrailLocations.boxCanyon;\n const date: DateTime = DateTime.parse(\"2025-07-04\");\n availability.addAvailability(location, date, WonderlandTrailReservationType.Reserved, WonderlandTrailReservationType.Walkup);\n\n const dayAvailability: WonderlandTrailAvailabilityType = availability.getDayAvailability(location, date).await();\n const expected: WonderlandTrailAvailabilityType = {\n groupSite: WonderlandTrailReservationType.Walkup,\n individualSite: WonderlandTrailReservationType.Reserved,\n };\n test.assertEqual(dayAvailability, expected);\n test.assertSame(dayAvailability, availability.getDayAvailability(location, date).await());\n });\n });\n });\n\n runner.testType(\"WonderlandTrailDirection\", () =>\n {\n runner.testFunction(\"toString()\", (test: Test) =>\n {\n test.assertEqual(\"Clockwise\", WonderlandTrailDirection.clockwise.toString());\n test.assertEqual(\"CounterClockwise\", WonderlandTrailDirection.counterClockwise.toString());\n });\n\n runner.testFunction(\"reverse()\", (test: Test) =>\n {\n test.assertSame(WonderlandTrailDirection.counterClockwise, WonderlandTrailDirection.clockwise.reverse());\n test.assertSame(WonderlandTrailDirection.clockwise, WonderlandTrailDirection.counterClockwise.reverse());\n });\n });\n\n runner.testType(\"WonderlandTrailConnection\", () =>\n {\n runner.testFunction(\"create()\", (test: Test) =>\n {\n const connection: WonderlandTrailConnection = WonderlandTrailConnection.create(\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.carbonRiver,\n 5000,\n 2000,\n 10,\n WonderlandTrailDirection.clockwise,\n Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]),\n );\n test.assertNotUndefinedAndNotNull(connection);\n test.assertEqual(connection.startLocation, WonderlandTrailLocations.boxCanyon);\n test.assertEqual(connection.endLocation, WonderlandTrailLocations.carbonRiver);\n test.assertEqual(connection.distanceMiles, 5000);\n test.assertEqual(connection.ascentFeet, 2000);\n test.assertEqual(connection.descentFeet, 10);\n test.assertEqual(connection.direction, WonderlandTrailDirection.clockwise);\n test.assertEqual(connection.intermediateLocations, Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]));\n });\n\n runner.testFunction(\"getLocations()\", () =>\n {\n runner.test(\"when connection is not a loop\", (test: Test) =>\n {\n const connection: WonderlandTrailConnection = WonderlandTrailConnection.create(\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.carbonRiver,\n 5000,\n 2000,\n 10,\n WonderlandTrailDirection.clockwise,\n Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]),\n );\n test.assertEqual(connection.getLocations(), Iterable.create([\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n WonderlandTrailLocations.carbonRiver,\n ]));\n });\n\n runner.test(\"when connection is a loop\", (test: Test) =>\n {\n const connection: WonderlandTrailConnection = WonderlandTrailConnection.create(\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.boxCanyon,\n 5000,\n 2000,\n 10,\n WonderlandTrailDirection.clockwise,\n Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]),\n );\n test.assertEqual(connection.getLocations(), Iterable.create([\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]));\n });\n });\n\n runner.testFunction(\"reverseDirection()\", (test: Test) =>\n {\n const connection: WonderlandTrailConnection = WonderlandTrailConnection.create(\n WonderlandTrailLocations.boxCanyon,\n WonderlandTrailLocations.carbonRiver,\n 5000,\n 2000,\n 10,\n WonderlandTrailDirection.clockwise,\n Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]),\n );\n const reversedConnection: WonderlandTrailConnection = connection.reverseDirection();\n test.assertNotSame(connection, reversedConnection);\n test.assertEqual(reversedConnection.startLocation, WonderlandTrailLocations.carbonRiver);\n test.assertEqual(reversedConnection.endLocation, WonderlandTrailLocations.boxCanyon);\n test.assertEqual(reversedConnection.distanceMiles, 5000);\n test.assertEqual(reversedConnection.ascentFeet, 10);\n test.assertEqual(reversedConnection.descentFeet, 2000);\n test.assertEqual(reversedConnection.direction, WonderlandTrailDirection.counterClockwise);\n test.assertEqual(reversedConnection.intermediateLocations, Iterable.create([\n WonderlandTrailLocations.cataractValley,\n WonderlandTrailLocations.devilsDream,\n ]));\n });\n });\n\n runner.testType(\"WonderlandTrailClient\", () =>\n {\n runner.testFunction(\"create()\", () =>\n {\n runner.test(\"with undefined HttpClient\", (test: Test) =>\n {\n test.assertThrows(() => WonderlandTrailClient.create(undefined!), new PreConditionError(\n \"Expression: httpClient\",\n \"Expected: not undefined and not null\",\n \"Actual: undefined\",\n ));\n });\n\n runner.test(\"with null HttpClient\", (test: Test) =>\n {\n test.assertThrows(() => WonderlandTrailClient.create(null!), new PreConditionError(\n \"Expression: httpClient\",\n \"Expected: not undefined and not null\",\n \"Actual: null\",\n ));\n });\n\n runner.test(\"with defined HttpClient\", (test: Test) =>\n {\n const httpClient: HttpClient = HttpClient.create();\n const client: WonderlandTrailClient = WonderlandTrailClient.create(httpClient);\n test.assertNotUndefinedAndNotNull(client);\n });\n });\n\n runner.testFunction(\"getAvailability()\", runner.skip(true, \"Ignore slow running tests for now\"), () =>\n {\n runner.test(\"with year in the past\", async (test: Test) =>\n {\n const httpClient: HttpClient = HttpClient.create();\n const client: WonderlandTrailClient = WonderlandTrailClient.create(httpClient);\n\n const availability: WonderlandTrailAvailability = await client.getAvailability(4, 2023, true, true, true);\n test.assertNotUndefinedAndNotNull(availability);\n test.assertFalse(availability.any());\n });\n\n runner.test(\"with month in the past\", async (test: Test) =>\n {\n const httpClient: HttpClient = HttpClient.create();\n const client: WonderlandTrailClient = WonderlandTrailClient.create(httpClient);\n\n const availability: WonderlandTrailAvailability = await client.getAvailability(3, 2026, true, true, true);\n test.assertNotUndefinedAndNotNull(availability);\n test.assertFalse(availability.any());\n });\n\n runner.test(\"with a future month in the current year\", async (test: Test) =>\n {\n const httpClient: HttpClient = HttpClient.create();\n const client: WonderlandTrailClient = WonderlandTrailClient.create(httpClient);\n\n const availability: WonderlandTrailAvailability = await client.getAvailability({\n month: 7,\n year: 2026,\n allowGroupSites: true,\n allowIndividualSites: true,\n allowWalkupPermits: true,\n });\n test.assertNotUndefinedAndNotNull(availability);\n test.assertTrue(availability.any());\n });\n });\n });\n });\n}","import { ConsoleTestRunner } from \"./consoleTestRunner\";\r\nimport * as assertTestTests from \"./assertTestTests\";\r\nimport * as byteListStreamTests from \"./byteListStreamTests\";\r\nimport * as byteListTests from \"./byteListTests\";\r\nimport * as byteTests from \"./bytesTests\";\r\nimport * as characterListStreamTests from \"./characterListStreamTests\";\r\nimport * as characterListTests from \"./characterListTests\";\r\nimport * as comparerTests from \"./comparerTests\";\r\nimport * as conditionTests from \"./conditionTests\";\r\nimport * as consoleTestRunner2Tests from \"./consoleTestRunnerTests\";\r\nimport * as dateTimeTests from \"./dateTimeTests\";\r\nimport * as depthFirstSearchTests from \"./depthFirstSearchTests\";\r\nimport * as disposableTests from \"./disposableTests\";\r\nimport * as englishTests from \"./englishTests\";\r\nimport * as equalFunctionsTests from \"./equalFunctionsTests\";\r\nimport * as fetchHttpClientTests from \"./fetchHttpClientTests\";\r\nimport * as generatorTests from \"./generatorTests\";\r\nimport * as httpClientTests from \"./httpClientTests\";\r\nimport * as inMemoryCharacterWriteStreamTests from \"./inMemoryCharacterWriteStreamTests\";\r\nimport * as iterableTests from \"./iterableTests\";\r\nimport * as iteratorTests from \"./iteratorTests\";\r\nimport * as javascriptMapMapTests from \"./javascriptMapMapTests\";\r\nimport * as listTests from \"./listTests\";\r\nimport * as mapIteratorTests from \"./mapIteratorTests\";\r\nimport * as mapTests from \"./mapTests\";\r\nimport * as mutableConditionTests from \"./mutableConditionTests\";\r\nimport * as mutableMapTests from \"./mutableMapTests\";\r\nimport * as notFoundErrorTests from \"./notFoundErrorTests\";\r\nimport * as postConditionErrorTests from \"./postConditionErrorTests\";\r\nimport * as preConditionErrorTests from \"./preConditionErrorTests\";\r\nimport * as promiseAsyncResultTests from \"./promiseAsyncResultTests\";\r\nimport * as propertyTests from \"./propertyTests\";\r\nimport * as queueTests from \"./queueTests\";\r\nimport * as realHttpServerTests from \"./nodeJSHttpServerTests\";\r\nimport * as recreationDotGovClientTests from \"./recreationDotGovClientTests\";\r\nimport * as setTests from \"./setTests\";\r\nimport * as stackTests from \"./stackTests\";\r\nimport * as stringComparerTests from \"./stringComparerTests\";\r\nimport * as stringIteratorTests from \"./stringIteratorTests\";\r\nimport * as stringsTests from \"./stringsTests\";\r\nimport * as syncResultTests from \"./syncResultTests\";\r\nimport * as testActionTests from \"./testActionTests\";\r\nimport * as testRunnerTests from \"./testRunnerTests\";\r\nimport * as toStringFunctionsTests from \"./toStringFunctionsTests\";\r\nimport * as typesTests from \"./typesTests\";\r\nimport * as whereIteratorTests from \"./whereIteratorTests\";\r\nimport * as wonderlandTrailClientTests from \"./wonderlandTrailClientTests\";\r\n\r\nexport const hasNetworkAccess: boolean = true;\r\n\r\nasync function tests(): Promise<void>\r\n{\r\n await ConsoleTestRunner.run([\r\n assertTestTests,\r\n promiseAsyncResultTests.test,\r\n byteTests.test,\r\n comparerTests,\r\n conditionTests,\r\n consoleTestRunner2Tests,\r\n dateTimeTests,\r\n disposableTests,\r\n englishTests,\r\n equalFunctionsTests.test,\r\n fetchHttpClientTests,\r\n generatorTests,\r\n httpClientTests,\r\n inMemoryCharacterWriteStreamTests,\r\n iterableTests,\r\n iteratorTests,\r\n javascriptMapMapTests,\r\n listTests,\r\n mapIteratorTests,\r\n mapTests,\r\n mutableConditionTests,\r\n mutableMapTests,\r\n notFoundErrorTests,\r\n postConditionErrorTests,\r\n preConditionErrorTests,\r\n propertyTests,\r\n queueTests,\r\n realHttpServerTests,\r\n recreationDotGovClientTests,\r\n stackTests,\r\n stringComparerTests,\r\n stringIteratorTests,\r\n stringsTests,\r\n syncResultTests,\r\n testActionTests,\r\n testRunnerTests,\r\n toStringFunctionsTests,\r\n typesTests,\r\n whereIteratorTests,\r\n wonderlandTrailClientTests,\r\n setTests,\r\n depthFirstSearchTests,\r\n byteListTests,\r\n byteListStreamTests,\r\n characterListTests,\r\n characterListStreamTests,\r\n ]);\r\n}\r\n\r\ntests();"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,YAAY,YAAY;;;ACQjB,IAAe,OAAf,MAAe,MACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAWW,gBAAgB,OACvB;AACI,UAAK,gBAAgB,MAAM,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAc,gBAAgBA,QAAY,OAC1C;AACI,IAAAA,OAAK,WAAW,OAAO,MAAS;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,mBAAsB,OAC7B;AACI,UAAK,mBAAmB,MAAM,KAAK;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAc,mBAAsBA,QAAY,OAChD;AACI,IAAAA,OAAK,cAAc,OAAO,MAAS;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,WAAW,OAClB;AACI,UAAK,WAAW,MAAM,KAAK;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAc,WAAWA,QAAY,OACrC;AACI,IAAAA,OAAK,WAAW,OAAO,IAAI;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,cAAiB,OACxB;AACI,UAAK,WAAW,MAAM,KAAK;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAc,cAAiBA,QAAY,OAC3C;AACI,IAAAA,OAAK,cAAc,OAAO,IAAI;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,6BAAgC,OACvC;AACI,UAAK,6BAA6B,MAAM,KAAK;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAc,6BAAgCA,QAAY,OAC1D;AACI,IAAAA,OAAK,cAAc,OAAO,IAAI;AAC9B,IAAAA,OAAK,cAAc,OAAO,MAAS;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCO,YAAY,OACnB;AACI,UAAK,YAAY,MAAM,KAAK;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAc,YAAYA,QAAY,OACtC;AACI,iBAAa,6BAA6BA,QAAM,MAAM;AAEtD,IAAAA,OAAK,WAAW,OAAO,KAAK;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,WAAW,OAClB;AACI,UAAK,WAAW,MAAM,KAAK;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAc,WAAWA,QAAY,OACrC;AACI,iBAAa,6BAA6BA,QAAM,MAAM;AAEtD,IAAAA,OAAK,WAAW,OAAO,IAAI;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBO,iBAAoB,OAAgB,MAAe,WAC1D;AACI,WAAO,MAAK,iBAAiB,MAAM,OAAO,MAAM,SAAS;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAc,iBAAoBA,QAAY,OAAgB,MAAe,WAC7E;AACI,iBAAa,6BAA6B,MAAM,MAAM;AAEtD,QAAI,kBAAkB,SAAS,GAC/B;AACI,mBAAa,CAACC,WAAmBA,kBAAiB;AAAA,IACtD;AAEA,QAAI,CAAC,UAAU,KAAK,GACpB;AACI,MAAAD,OAAK,KAAK,gCAAgC,KAAK,IAAI,cAAc,KAAK,WAAW;AAAA,IACrF;AAAA,EACJ;AACJ;;;ADxNO,IAAM,aAAN,MAAM,YACb;AAAA,EACqB;AAAA,EAEP,YAAY,MACtB;AACI,SAAK,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,OAAO,MACrB;AACI,WAAO,IAAI,YAAW,IAAI;AAAA,EAC9B;AAAA,EAEO,KAAK,SACZ;AACI,iBAAa,eAAe,SAAS,SAAS;AAE9C,IAAO,YAAK,OAAO;AAAA,EACvB;AAAA,EAEO,gBAAgB,OACvB;AACI,SAAK,gBAAgB,MAAM,KAAK;AAAA,EACpC;AAAA,EAEO,mBAAsB,OAC7B;AACI,SAAK,mBAAmB,MAAM,KAAK;AAAA,EACvC;AAAA,EAEO,WAAW,OAClB;AACI,SAAK,WAAW,MAAM,KAAK;AAAA,EAC/B;AAAA,EAEO,cAAiB,OACxB;AACI,SAAK,cAAc,MAAM,KAAK;AAAA,EAClC;AAAA,EAEO,6BAAgC,OACvC;AACI,SAAK,6BAA6B,MAAM,KAAK;AAAA,EACjD;AAAA,EAEO,WAAc,MAAS,OAC9B;AACI,IAAO,mBAAY,MAAM,KAAK;AAAA,EAClC;AAAA,EAEO,cAAiB,MAAS,OACjC;AACI,IAAO,sBAAe,MAAM,KAAK;AAAA,EACrC;AAAA,EAEO,YAAe,MAAS,OAAU,SACzC;AACI,IAAO,uBAAgB,MAAM,OAAO,OAAO;AAAA,EAC/C;AAAA,EAEO,eAAkB,MAAS,OAClC;AACI,IAAO,0BAAmB,MAAM,KAAK;AAAA,EACzC;AAAA,EAEO,YAAY,OACnB;AACI,SAAK,YAAY,MAAM,KAAK;AAAA,EAChC;AAAA,EAEO,WAAW,OAClB;AACI,SAAK,WAAW,MAAM,KAAK;AAAA,EAC/B;AAAA,EAEO,aAAa,QAA4C,eAChE;AACI,QAAI,CAAC,WAAW,MAAM,GACtB;AACI,YAAM,aAAkC;AACxC,eAAS,MAAM;AAAE,mBAAW,MAAM;AAAA,MAAG;AAAA,IACzC;AACA,IAAO,cAAO,QAAQ,aAAa;AAAA,EACvC;AAAA,EAEO,kBAAkB,QAAqD,eAC9E;AACI,UAAM,uBAAuB,WAAW,MAAM,IACxC,YAAY,MAAM,OAAO,IACzB;AACN,WAAO,mBAAmB,OAAc,eAAQ,sBAAsB,aAAa,CAAC;AAAA,EACxF;AAAA,EAEO,iBAAoB,OAAgB,MAAe,WAC1D;AACI,SAAK,iBAAiB,MAAM,OAAO,MAAM,SAAS;AAAA,EACtD;AACJ;;;AE5GO,IAAM,aAAN,MAAM,YACb;AAAA,EACqB;AAAA,EACA;AAAA,EAET,YAAY,mBAA+C,OACnE;AACI,iBAAa,eAAe,mBAAmB,cAAc;AAC7D,iBAAa,6BAA6B,OAAO,OAAO;AAExD,SAAK,oBAAoB;AACzB,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,OAAc,OAAO,mBAA+C,OACpE;AACI,WAAO,IAAI,YAAW,mBAAmB,KAAK;AAAA,EAClD;AAAA,EAEO,uBACP;AACI,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,kBACP;AACI,WAAO,KAAK,KAAK,KAAK,iBAAiB;AAAA,EAC3C;AAAA,EAEO,WACP;AACI,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,kBACP;AACI,WAAO,KAAK,iBAAiB,SAAS,KAAK,MAAM,QAAQ,KAAK,MAAM,QAAQ,GAAG,KAAK,KAAK;AAAA,EAC7F;AACJ;;;ACrCO,IAAM,cAAN,MAAM,aACb;AAAA,EACqB;AAAA,EACA;AAAA,EAET,YAAY,MAAgB,mBACpC;AACI,iBAAa,6BAA6B,MAAM,MAAM;AACtD,iBAAa,eAAe,mBAAmB,mBAAmB;AAElE,SAAK,OAAO;AACZ,SAAK,oBAAoB;AAAA,EAC7B;AAAA,EAEA,OAAc,OAAO,MAAgB,mBACrC;AACI,WAAO,IAAI,aAAY,MAAM,iBAAiB;AAAA,EAClD;AAAA,EAEO,iBACP;AACI,WAAO,KAAK,KAAK,WAAW;AAAA,EAChC;AAAA,EAEO,uBACP;AACI,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,kBACP;AACI,WAAO,KAAK,KAAK,KAAK,iBAAiB;AAAA,EAC3C;AACJ;;;AChCO,IAAM,aAAN,MAAM,YACb;AAAA,EACqB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAgC,MAAc,MAA4B,QAC9F;AACI,iBAAa,6BAA6B,MAAM,MAAM;AACtD,iBAAa,6BAA6B,QAAQ,QAAQ;AAE1D,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,SAAS;AAAA,EAClB;AAAA,EAEA,OAAc,OAAO,QAAgC,MAAc,MAA4B,QAC/F;AACI,WAAO,IAAI,YAAW,QAAQ,MAAM,MAAM,MAAM;AAAA,EACpD;AAAA,EAEO,YACP;AACI,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,UACP;AACI,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,mBACP;AACI,UAAM,SAAuB,KAAK,OAAO;AACzC,QAAI,KAAK,QACT;AACI,aAAO,OAAO,KAAK,OAAO,iBAAiB,CAAC;AAAA,IAChD;AACA,WAAO,IAAI,KAAK,QAAQ,CAAC;AACzB,WAAO;AAAA,EACX;AAAA,EAEO,cACP;AACI,WAAO,KAAK,KAAK,KAAK,iBAAiB,CAAC;AAAA,EAC5C;AAAA,EAEO,UACP;AACI,WAAO,KAAK,QAAQ,KAAK,QAAQ,QAAQ;AAAA,EAC7C;AAAA,EAEO,aACP;AACI,WAAO,CAAC,CAAC,KAAK,QAAQ,GAAG,cAAc;AAAA,EAC3C;AAAA,EAEO,YACP;AACI,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,WACP;AACI,WAAO,KAAK,OAAO;AAAA,EACvB;AACJ;;;ACpEO,IAAM,gBAAN,MAAM,eACb;AAAA,EACqB;AAAA,EACA;AAAA,EAET,YAAY,YAAqB,SACzC;AACI,iBAAa,6BAA6B,SAAS,SAAS;AAE5D,SAAK,aAAa;AAClB,SAAK,UAAU;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAc,OAAO,YAAsB,SAC3C;AACI,QAAI,eAAe,UAAa,eAAe,MAC/C;AACI,mBAAa;AAAA,IACjB;AAEA,QAAI,YAAY,UAAa,YAAY,MACzC;AACI,gBAAU;AAAA,IACd;AAEA,WAAO,IAAI,eAAc,YAAY,OAAO;AAAA,EAChD;AAAA,EAEO,gBACP;AACI,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,aACP;AACI,WAAO,KAAK;AAAA,EAChB;AACJ;;;AC7CO,IAAe,WAAf,MACP;AAAA,EACc,cACV;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAc,OAAO,YAAsB,SAC3C;AACI,WAAO,cAAc,OAAO,YAAY,OAAO;AAAA,EACnD;AAYJ;;;ACpBO,IAAe,aAAf,MAAe,YACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMW,QAAQ,QACf;AACI,WAAO,YAAW,QAAQ,MAAM,MAAM;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAc,QAAQ,QAAoB,QAC1C;AACI,iBAAa,6BAA6B,QAAQ,QAAQ;AAC1D,iBAAa,6BAA6B,QAAQ,QAAQ;AAE1D,WAAO,QAAQ,OAAO,IAAI,CAAC,UAAmB,OAAO,SAAS,KAAK,CAAC,CAAC;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,SAAS,OAChB;AACI,WAAO,YAAW,SAAS,MAAM,KAAK;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAc,SAAS,SAAqB,OAC5C;AACI,UAAM,oBAAuC,kBAAkB,OAAO;AACtE,WAAO,kBAAkB,SAAS,KAAK;AAAA,EAC3C;AAAA,EASA,KAAK,qBAAoD,SACzD;AACI,QAAI;AACJ,QAAI,CAAC,UAAU,mBAAmB,GAClC;AACI,mBAAa;AACb,gBAAU;AAAA,IACd,OAEA;AACI,mBAAa;AAAA,IACjB;AACA,WAAO,YAAW,KAAK,MAAM,YAAY,OAAO;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAc,KAAK,SAAqB,YAAsB,SAC9D;AACI,WAAO,SAAS,OAAO,YAAY,OAAO;AAAA,EAC9C;AAAA,EAEA,OAAc,cAAc,QAAoB,MAAc,MAA4B,YAC1F;AACI,QAAI,kBAAkB,UAAU,MAAM,GACtC;AACI,aAAO,UAAU,MAAM,MAAkB,UAAU;AAAA,IACvD,OAEA;AACI,aAAO,KAAK,MAAM,MAA4B,UAAU;AAAA,IAC5D;AAAA,EACJ;AAAA,EAeA,SAAS,UAAkB,kBAAkF,YAC7G;AACI,gBAAW,SAAS,MAAM,UAAU,kBAAkB,UAAU;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAc,SAAS,QAAoB,UAAkB,kBAAkF,YAC/I;AACI,iBAAa,6BAA6B,QAAQ,QAAQ;AAC1D,iBAAa,6BAA6B,UAAU,UAAU;AAC9D,iBAAa,eAAe,UAAU,UAAU;AAChD,QAAI;AACJ,QAAI,WAAW,gBAAgB,GAC/B;AACI,mBAAa,gBAAgB,YAAY,YAAY;AAErD,aAAO;AACP,mBAAa;AAAA,IACjB,OAEA;AACI,aAAO;AAAA,IACX;AACA,iBAAa,6BAA6B,YAAY,YAAY;AAElE,gBAAW,cAAc,QAAQ,UAAU,MAAM,UAAU;AAAA,EAC/D;AAAA,EAeA,SAAS,gBAAwC,kBAAkF,YACnI;AACI,gBAAW,SAAS,MAAM,gBAAgB,kBAAkB,UAAU;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAc,SAAS,QAAoB,gBAAwC,kBAAkF,YACrK;AACI,iBAAa,6BAA6B,QAAQ,QAAQ;AAC1D,iBAAa,6BAA6B,gBAAgB,gBAAgB;AAC1E,QAAI;AACJ,QAAI,SAAS,cAAc,GAC3B;AACI,iBAAW;AAAA,IACf,OAEA;AACI,iBAAW,QAAQ,cAAc;AAAA,IACrC;AACA,iBAAa,eAAe,UAAU,UAAU;AAChD,QAAI;AACJ,QAAI,WAAW,gBAAgB,GAC/B;AACI,mBAAa,gBAAgB,YAAY,YAAY;AAErD,aAAO;AACP,mBAAa;AAAA,IACjB,OAEA;AACI,aAAO;AAAA,IACX;AACA,iBAAa,6BAA6B,YAAY,YAAY;AAElE,gBAAW,cAAc,QAAQ,UAAU,MAAM,UAAU;AAAA,EAC/D;AAAA,EASA,aAAa,mBAA2B,kBAAkF,YAC1H;AACI,gBAAW,aAAa,MAAM,mBAAmB,kBAAkB,UAAU;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAc,aAAa,QAAoB,mBAA2B,kBAAkF,YAC5J;AACI,iBAAa,6BAA6B,QAAQ,QAAQ;AAC1D,iBAAa,eAAe,mBAAmB,mBAAmB;AAClE,QAAI;AACJ,QAAI,WAAW,gBAAgB,GAC/B;AACI,mBAAa,gBAAgB,YAAY,YAAY;AAErD,aAAO;AACP,mBAAa;AAAA,IACjB,OAEA;AACI,aAAO;AAAA,IACX;AACA,iBAAa,6BAA6B,YAAY,YAAY;AAElE,gBAAW,cAAc,QAAQ,mBAAmB,MAAM,UAAU;AAAA,EACxE;AA2BJ;;;ACrPO,IAAM,oBAAN,MAAM,2BAA0B,WACvC;AAAA,EACY;AAAA,EAES;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACS;AAAA,EACA;AAAA,EAEV,cACP;AACI,UAAM;AAEN,SAAK,cAAc,2BAA2B,OAAO,QAAQ,MAAM;AAEnE,SAAK,iBAAiB,KAAK,OAAO;AAClC,SAAK,4BAA4B;AAEjC,SAAK,kBAAkB;AACvB,SAAK,eAAe,KAAK,OAAO;AAChC,SAAK,eAAe,KAAK,OAAO;AAAA,EACpC;AAAA,EAEA,OAAc,SACd;AACI,WAAO,IAAI,mBAAkB;AAAA,EACjC;AAAA,EAIA,OAAO,IAAI,6BACX;AACI,QAAI;AACJ,QAAI,WAAW,2BAA2B,GAC1C;AACI,qBAAe;AAAA,IACnB,WACS,CAAC,qBAAqB,2BAA2B,GAC1D;AACI,qBAAe,4BAA4B;AAAA,IAC/C,OAEA;AACI,YAAM,gBAAwF;AAC9F,qBAAe,OAAO,WACtB;AACI,mBAAWE,iBAAgB,eAC3B;AACI,cAAI,WAAWA,aAAY,GAC3B;AACI,kBAAMA,cAAa,MAAM;AAAA,UAC7B,OAEA;AACI,kBAAMA,cAAa,KAAK,MAAM;AAAA,UAClC;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO,eAAe,IAAI,OAAO,mBACjC;AACI,YAAM,SAA4B,mBAAkB,OAAO,EACtD,eAAe,eAAe,qBAAqB,CAAC;AAEzD,YAAM,aAAa,MAAM;AAEzB,YAAM,OAAO,SAAS;AAEtB,YAAM,OAAO,aAAa;AAAA,IAC9B,CAAC;AAAA,EACL;AAAA,EAEO,eAAe,aACtB;AACI,iBAAa,6BAA6B,aAAa,aAAa;AAEpE,SAAK,cAAc;AAEnB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKO,6BACP;AACI,WAAO,KAAK,eAAe,SAAS,EAAE,MAAM;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,mCACP;AACI,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKO,sBACP;AACI,WAAO,KAAK,aAAa,SAAS,EAAE,MAAM;AAAA,EAC9C;AAAA,EAEO,kBACP;AACI,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKO,qBACP;AACI,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,qBACP;AACI,WAAO,KAAK,aAAa,SAAS,EAAE,MAAM;AAAA,EAC9C;AAAA,EAEO,iBACP;AACI,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,uBACP;AACI,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,iBACP;AACI,WAAO,KAAK;AAAA,EAChB;AAAA,EAEQ,sBACR;AACI,QAAI,KAAK,gBAAgB,QACzB;AACI,WAAK,YAAY,KAAK,kEAAkE;AAAA,IAC5F;AAAA,EACJ;AAAA,EAEO,WAAW,mBAClB;AACI,WAAO,mBAAmB,OAAO,YACjC;AACI,YAAM,KAAK,YAAY,YAAY,KAAK,KAAK,iBAAiB,CAAC;AAAA,IACnE,CAAC;AAAA,EACL;AAAA,EAEO,kBACP;AACI,WAAO,mBAAmB,OAAO,YACjC;AACI,YAAM,KAAK,YAAY,UAAU,WAAW;AAC5C,WAAK;AAAA,IACT,CAAC;AAAA,EACL;AAAA,EAEO,iBAAiB,mBAA+C,MACvE;AACI,iBAAa,eAAe,mBAAmB,mBAAmB;AAClE,iBAAa,6BAA6B,MAAM,MAAM;AAEtD,WAAO,mBAAmB,OAAO,YACjC;AACI,WAAK,aAAa,IAAI,YAAY,OAAO,MAAM,iBAAiB,CAAC;AACjE,YAAM,KAAK,YAAY,UAAU,YAAY;AAAA,IACjD,CAAC;AAAA,EACL;AAAA,EAEO,gBAAgB,mBAA+C,OACtE;AACI,iBAAa,eAAe,mBAAmB,mBAAmB;AAClE,iBAAa,6BAA6B,OAAO,OAAO;AAExD,WAAO,mBAAmB,OAAO,YACjC;AACI,WAAK,aAAa,IAAI,WAAW,OAAO,mBAAmB,KAAK,CAAC;AACjE,YAAM,KAAK,YAAY,UAAU,WAAW;AAAA,IAChD,CAAC;AAAA,EACL;AAAA,EAIA,UAAU,eAAuB,kBAAyE,YAC1G;AACI,iBAAa,6BAA6B,eAAe,eAAe;AACxE,iBAAa,eAAe,eAAe,eAAe;AAC1D,QAAI;AACJ,QAAI,WAAW,gBAAgB,GAC/B;AACI,mBAAa,gBAAgB,YAAY,YAAY;AAErD,aAAO;AACP,mBAAa;AAAA,IACjB,OAEA;AACI,aAAO;AAAA,IACX;AACA,iBAAa,6BAA6B,YAAY,YAAY;AAElE,SAAK,oBAAoB;AAEzB,SAAK,eAAe;AAAA,MAChB,KAAK;AAAA,MACL,WAAW;AAAA,QACP,KAAK,qBAAqB;AAAA,QAC1B;AAAA,QACA;AAAA,QACA,YACA;AACI,gBAAM,gCAAwC,KAAK;AACnD,eAAK,4BAA4B,KAAK,eAAe,SAAS,EAAE,MAAM;AACtE,gBAAM,oBAAgC,KAAK,qBAAqB;AAChE,cACA;AACI,kBAAM,WAAW;AAAA,UACrB,SACO,OACP;AACI,kBAAM,KAAK,gBAAgB,kBAAkB,iBAAiB,GAAG,KAAK;AAAA,UAC1E,UACA;AAEI,iBAAK,4BAA4B;AAAA,UACrC;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAIA,KAAK,UAAkB,kBAAmF,YAC1G;AACI,iBAAa,6BAA6B,UAAU,UAAU;AAC9D,iBAAa,eAAe,UAAU,UAAU;AAChD,QAAI;AACJ,QAAI,WAAW,gBAAgB,GAC/B;AACI,mBAAa,gBAAgB,YAAY,YAAY;AAErD,aAAO;AACP,mBAAa;AAAA,IACjB,OAEA;AACI,aAAO;AAAA,IACX;AACA,iBAAa,6BAA6B,YAAY,YAAY;AAElE,SAAK,oBAAoB;AAEzB,SAAK,eAAe;AAAA,MAChB,KAAK;AAAA,MACL,WAAW;AAAA,QACP,KAAK,qBAAqB;AAAA,QAC1B;AAAA,QACA;AAAA,QACA,YACA;AACI,gBAAM,oBAAgC,KAAK,qBAAqB;AAChE,cACA;AACI,kBAAM,KAAK,WAAW,kBAAkB,iBAAiB,CAAC;AAC1D,gBAAI,kBAAkB,WAAW,GACjC;AACI,oBAAM,KAAK,iBAAiB,kBAAkB,iBAAiB,GAAG,kBAAkB,QAAQ,CAAC;AAAA,YACjG,OAEA;AACI,mBAAK,cAAc,WAAW,OAAO,QAAQ;AAC7C,kBACA;AACI,sBAAM,WAAW,KAAK,WAAW;AACjC,sBAAM,KAAK,gBAAgB;AAAA,cAC/B,UACA;AAEI,qBAAK,cAAc;AAAA,cACvB;AAAA,YACJ;AAAA,UACJ,SACO,OACP;AACI,kBAAM,KAAK,gBAAgB,kBAAkB,iBAAiB,GAAG,KAAK;AAAA,UAC1E;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAa,WACb;AACI,WAAO,KAAK,eAAe,IAAI,EAAE,MAAM,GACvC;AACI,WAAK,oBAAoB,KAAK,eAAe,WAAW,EAAE,MAAM;AAChE,UACA;AACI,cAAM,SAA+B,KAAK,kBAAkB,SAAS;AACrE,YAAI,UAAU,MAAM,GACpB;AACI,gBAAM;AAAA,QACV;AAAA,MACJ,UACA;AAEI,aAAK,oBAAoB;AAAA,MAC7B;AAAA,IACJ;AAAA,EACJ;AAAA,EAEO,eACP;AACI,WAAO,mBAAmB,OAAO,YACjC;AACI,YAAM,KAAK,YAAY,UAAU;AAEjC,YAAM,eAAsC,KAAK,gBAAgB;AACjE,UAAI,MAAM,aAAa,IAAI,GAC3B;AACI,cAAM,KAAK,YAAY,UAAU,gBAAgB;AACjD,YAAI,UAAkB;AACtB,mBAAW,eAAe,cAC1B;AACI,gBAAM,KAAK,YAAY,UAAU,GAAG,EAAE,OAAO,KAAK,YAAY,gBAAgB,CAAC,EAAE;AACjF,gBAAM,cAAsB,YAAY,eAAe;AACvD,cAAI,aACJ;AACI,kBAAM,KAAK,YAAY,UAAU,KAAK,WAAW,EAAE;AAAA,UACvD;AAAA,QACJ;AACA,cAAM,KAAK,YAAY,UAAU;AAAA,MACrC;AAEA,YAAM,cAAoC,KAAK,eAAe;AAC9D,UAAI,MAAM,YAAY,IAAI,GAC1B;AACI,cAAM,KAAK,YAAY,UAAU,eAAe;AAEhD,YAAI,UAAkB;AACtB,mBAAW,cAAc,aACzB;AACI,gBAAM,KAAK,YAAY,UAAU,GAAG,EAAE,OAAO,KAAK,WAAW,gBAAgB,CAAC,EAAE;AAChF,gBAAM,KAAK,YAAY,UAAU,KAAK,WAAW,gBAAgB,CAAC,EAAE;AACpE,gBAAM,KAAK,YAAY,UAAU;AAAA,QACrC;AAAA,MACJ;AAEA,YAAM,kBAA0B,KAAK,mBAAmB;AACxD,UAAI,kBAAkB,GACtB;AACI,cAAM,KAAK,YAAY,UAAU,YAAY,eAAe,EAAE;AAAA,MAClE;AAEA,UAAI,MAAM,aAAa,IAAI,GAC3B;AACI,cAAM,KAAK,YAAY,UAAU,YAAY,aAAa,SAAS,EAAE,MAAM,CAAC,EAAE;AAAA,MAClF;AAEA,UAAI,MAAM,YAAY,IAAI,GAC1B;AACI,cAAM,KAAK,YAAY,UAAU,YAAY,YAAY,SAAS,EAAE,MAAM,CAAC,EAAE;AAAA,MACjF;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;;;ACnZA;AAAA;AAAA;AAAA;AAAA,SAAS,sBAAsB;AAKxB,SAAS,KAAK,QACrB;AACI,SAAO,SAAS,iBAAiB,MACjC;AACI,WAAO,SAAS,cAAc,MAC9B;AACI,aAAO,aAAa,kBAAkB,MACtC;AACI,eAAO,KAAK,wBAAwB,CAACC,WACrC;AACI,gBAAM,KAAiB,WAAW,OAAO,gBAAgB;AACzD,aAAG,aAAa,MAAM;AAAE,kBAAM,IAAI,MAAM,KAAK;AAAA,UAAG,GAAG,IAAI,MAAM,KAAK,CAAC;AAAA,QACvE,CAAC;AAED,eAAO,KAAK,4BAA4B,CAACA,WACzC;AACI,gBAAM,KAAiB,WAAW,OAAO,gBAAgB;AACzD,UAAAA,OAAK;AAAA,YACD,MAAM,GAAG,aAAa,MAAM;AAAA,YAAC,GAAG,IAAI,MAAM,MAAM,CAAC;AAAA,YACjD,IAAI,eAAe;AAAA,cACf,SAAS;AAAA,cACT,UAAU;AAAA,cACV,UAAU,IAAI,MAAM,MAAM;AAAA,YAC9B,CAAC;AAAA,UACL;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,uBAAuB,MAC3C;AACI,eAAO,KAAK,6BAA6B,OAAOA,WAChD;AACI,gBAAM,KAAiB,WAAW,OAAO,gBAAgB;AACzD,gBAAM,GAAG,kBAAkB,MAAM;AAAE,kBAAM,IAAI,MAAM,KAAK;AAAA,UAAG,GAAG,IAAI,MAAM,KAAK,CAAC;AAAA,QAClF,CAAC;AAED,eAAO,KAAK,8BAA8B,OAAOA,WACjD;AACI,gBAAM,KAAiB,WAAW,OAAO,gBAAgB;AACzD,gBAAM,GAAG,kBAAkB,YAAY;AAAE,kBAAM,IAAI,MAAM,KAAK;AAAA,UAAG,GAAG,IAAI,MAAM,KAAK,CAAC;AAAA,QACxF,CAAC;AAED,eAAO,KAAK,yBAAyB,OAAOA,WAC5C;AACI,gBAAM,KAAiB,WAAW,OAAO,gBAAgB;AACzD,gBAAM,GAAG,kBAAkB,QAAQ,OAAO,IAAI,MAAM,KAAK,CAAC,GAAG,IAAI,MAAM,KAAK,CAAC;AAAA,QACjF,CAAC;AAED,eAAO,KAAK,wDAAwD,OAAOA,WAC3E;AACI,gBAAM,KAAiB,WAAW,OAAO,gBAAgB;AACzD,gBAAM,GAAG,kBAAkB,MAAM,QAAQ,OAAO,IAAI,MAAM,KAAK,CAAC,GAAG,IAAI,MAAM,KAAK,CAAC;AAAA,QACvF,CAAC;AAED,eAAO,KAAK,kCAAkC,OAAOA,WACrD;AACI,gBAAM,KAAiB,WAAW,OAAO,gBAAgB;AACzD,gBAAMA,OAAK;AAAA,YACP,YAAY,MAAM,GAAG,kBAAkB,YAAY;AAAA,YAAC,GAAG,IAAI,MAAM,MAAM,CAAC;AAAA,YACxE,IAAI,eAAe;AAAA,cACf,SAAS;AAAA,cACT,UAAU;AAAA,cACV,UAAU,IAAI,MAAM,MAAM;AAAA,YAC9B,CAAC;AAAA,UACL;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC1EA;AAAA;AAAA,cAAAC;AAAA;AAMO,SAASC,MAAK,QACrB;AACI,SAAO,SAAS,qBAAqB,MACrC;AACI,WAAO,SAAS,kBAAkB,MAClC;AACI,aAAO,aAAa,YAAY,MAChC;AACI,eAAO,KAAK,qBAAqB,CAACA,WAClC;AACI,gBAAM,SAAyB,eAAe,OAAO;AACrD,UAAAA,OAAK,6BAA6B,MAAM;AACxC,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,QACtD,CAAC;AAED,eAAO,KAAK,oBAAoB,CAACA,WACjC;AACI,gBAAM,SAAyB,eAAe,OAAO,CAAC,CAAC;AACvD,UAAAA,OAAK,6BAA6B,MAAM;AACxC,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,QACtD,CAAC;AAED,eAAO,KAAK,wBAAwB,CAACA,WACrC;AACI,gBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,UAAAA,OAAK,6BAA6B,MAAM;AACxC,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,QACtD,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,gBAAgB,MACpC;AACI,eAAO,KAAK,wBAAwB,CAACA,WACrC;AACI,gBAAM,SAAyB,eAAe,OAAO;AACrD,UAAAA,OAAK,aAAa,MAAM,OAAO,WAAW,MAAU,GAAG,IAAI;AAAA,YACvD;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,QACtD,CAAC;AAED,eAAO,KAAK,mBAAmB,CAACA,WAChC;AACI,gBAAM,SAAyB,eAAe,OAAO;AACrD,UAAAA,OAAK,aAAa,MAAM,OAAO,WAAW,IAAK,GAAG,IAAI;AAAA,YAClD;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,QACtD,CAAC;AAED,eAAO,KAAK,oBAAoB,CAACA,WACjC;AACI,gBAAM,SAAyB,eAAe,OAAO;AACrD,UAAAA,OAAK,YAAY,GAAG,OAAO,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC;AACjD,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,QACtD,CAAC;AAED,eAAO,KAAK,wBAAwB,CAACA,WACrC;AACI,gBAAM,SAAyB,eAAe,OAAO;AAErD,UAAAA,OAAK,YAAY,GAAG,OAAO,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;AAC3D,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAElD,gBAAM,QAAoB,OAAO,UAAU,EAAE,EAAE,MAAM;AACrD,UAAAA,OAAK,6BAA6B,KAAK;AACvC,UAAAA,OAAK,YAAY,GAAG,MAAM,MAAM;AAChC,UAAAA,OAAK,YAAY,IAAI,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK;AACpD,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,QACtD,CAAC;AAED,eAAO,KAAK,4BAA4B,CAACA,WACzC;AACI,gBAAM,SAAyB,eAAe,OAAO;AACrD,UAAAA,OAAK,aAAa,MAAM,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI;AAAA,YACvD;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,QACtD,CAAC;AAED,eAAO,KAAK,6BAA6B,CAACA,WAC1C;AACI,gBAAM,SAAyB,eAAe,OAAO;AACrD,UAAAA,OAAK,aAAa,MAAM,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;AAAA,YACtD;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,QACtD,CAAC;AAED,eAAO,KAAK,kCAAkC,CAACA,WAC/C;AACI,gBAAM,SAAyB,eAAe,OAAO;AACrD,gBAAM,mBAA2B,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM;AACpE,UAAAA,OAAK,YAAY,GAAG,gBAAgB;AACpC,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAElD,UAAAA,OAAK,YAAY,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,UAAU,CAAC,EAAE,MAAM,CAAC;AACjE,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,QACtD,CAAC;AAED,eAAO,KAAK,yCAAyC,CAACA,WACtD;AACI,gBAAM,SAAyB,eAAe,OAAO;AACrD,gBAAM,mBAA2B,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM;AACpE,UAAAA,OAAK,YAAY,GAAG,gBAAgB;AACpC,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,QACtD,CAAC;AAED,eAAO,KAAK,wBAAwB,CAACA,WACrC;AACI,gBAAM,SAAyB,eAAe,OAAO;AACrD,UAAAA,OAAK,aAAa,MAAM,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI;AAAA,YAC1D;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,QACtD,CAAC;AAED,eAAO,KAAK,yBAAyB,CAACA,WACtC;AACI,gBAAM,SAAyB,eAAe,OAAO;AACrD,UAAAA,OAAK,aAAa,MAAM,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI;AAAA,YACzD;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,QACtD,CAAC;AAED,eAAO,KAAK,2CAA2C,CAACA,WACxD;AACI,gBAAM,SAAyB,eAAe,OAAO;AACrD,gBAAM,mBAA2B,OAAO,WAAW,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,MAAM;AAChF,UAAAA,OAAK,YAAY,GAAG,gBAAgB;AACpC,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAElD,UAAAA,OAAK,YAAY,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,UAAU,EAAE,EAAE,MAAM,CAAC;AACrE,UAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,QACtD,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,eAAe,MACnC;AACI,eAAO,UAAU,qBAAqB,MACtC;AACI,iBAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,kBAAM,SAAyB,eAAe,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,OAAO,UAAU,EAAE,EAAE,MAAM,GAAG,IAAI;AAAA,cACtD;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,mBAAmB,CAACA,WAChC;AACI,kBAAM,SAAyB,eAAe,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,OAAO,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,WAAW,CAAC;AACrE,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,kBAAM,SAAyB,eAAe,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,OAAO,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,WAAW,CAAC;AACrE,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAAA,QACL,CAAC;AAED,eAAO,UAAU,yBAAyB,MAC1C;AACI,iBAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,YAAAA,OAAK,aAAa,MAAM,OAAO,UAAU,EAAE,EAAE,MAAM,GAAG,IAAI;AAAA,cACtD;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,mBAAmB,CAACA,WAChC;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,kBAA8B,OAAO,UAAU,CAAC,EAAE,MAAM;AAC9D,YAAAA,OAAK,YAAY,IAAI,WAAW,GAAG,eAAe;AAClD,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,iDAAiD,CAACA,WAC9D;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,kBAA8B,OAAO,UAAU,CAAC,EAAE,MAAM;AAC9D,YAAAA,OAAK,YAAY,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,eAAe;AACxD,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,gDAAgD,CAACA,WAC7D;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,kBAA8B,OAAO,UAAU,CAAC,EAAE,MAAM;AAC9D,YAAAA,OAAK,YAAY,IAAI,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,eAAe;AAC3D,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,oDAAoD,CAACA,WACjE;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,kBAA8B,OAAO,UAAU,CAAC,EAAE,MAAM;AAC9D,YAAAA,OAAK,YAAY,IAAI,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,eAAe;AAC3D,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,yBAAyB,CAACA,WACtC;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,YAAAA,OAAK,aAAa,MAAM,OAAO,UAAU,MAAU,GAAG,IAAI;AAAA,cACtD;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,oBAAoB,CAACA,WACjC;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,YAAAA,OAAK,aAAa,MAAM,OAAO,UAAU,IAAK,GAAG,IAAI;AAAA,cACjD;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,qBAAqB,CAACA,WAClC;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,SAAqB,IAAI,WAAW;AAC1C,kBAAM,kBAA0B,OAAO,UAAU,MAAM,EAAE,MAAM;AAC/D,YAAAA,OAAK,YAAY,GAAG,eAAe;AACnC,YAAAA,OAAK,YAAY,QAAQ,IAAI,WAAW,CAAC;AACzC,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,gDAAgD,CAACA,WAC7D;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,SAAqB,IAAI,WAAW,CAAC;AAC3C,kBAAM,kBAA0B,OAAO,UAAU,MAAM,EAAE,MAAM;AAC/D,YAAAA,OAAK,YAAY,GAAG,eAAe;AACnC,YAAAA,OAAK,YAAY,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;AAC5C,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,4CAA4C,CAACA,WACzD;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,SAAqB,IAAI,WAAW,CAAC;AAC3C,kBAAM,kBAA0B,OAAO,UAAU,MAAM,EAAE,MAAM;AAC/D,YAAAA,OAAK,YAAY,GAAG,eAAe;AACnC,YAAAA,OAAK,YAAY,QAAQ,IAAI,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAClD,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,2CAA2C,CAACA,WACxD;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,SAAqB,IAAI,WAAW,CAAC;AAC3C,kBAAM,kBAA0B,OAAO,UAAU,MAAM,EAAE,MAAM;AAC/D,YAAAA,OAAK,YAAY,GAAG,eAAe;AACnC,YAAAA,OAAK,YAAY,QAAQ,IAAI,WAAW,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AACxD,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,4BAA4B,CAACA,WACzC;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,SAAqB,IAAI,WAAW,CAAC;AAC3C,YAAAA,OAAK,aAAa,MAAM,OAAO,UAAU,QAAQ,EAAE,GAAG,IAAI;AAAA,cACtD;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,6BAA6B,CAACA,WAC1C;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,SAAqB,IAAI,WAAW,CAAC;AAC3C,YAAAA,OAAK,aAAa,MAAM,OAAO,UAAU,QAAQ,CAAC,GAAG,IAAI;AAAA,cACrD;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,+DAA+D,CAACA,WAC5E;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,SAAqB,IAAI,WAAW,CAAC;AAC3C,YAAAA,OAAK,YAAY,GAAG,OAAO,UAAU,QAAQ,CAAC,EAAE,MAAM,CAAC;AACvD,YAAAA,OAAK,YAAY,IAAI,WAAW,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM;AACxD,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,mEAAmE,CAACA,WAChF;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,SAAqB,IAAI,WAAW,CAAC;AAC3C,YAAAA,OAAK,YAAY,GAAG,OAAO,UAAU,QAAQ,CAAC,EAAE,MAAM,CAAC;AACvD,YAAAA,OAAK,YAAY,IAAI,WAAW,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM;AACxD,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,0CAA0C,CAACA,WACvD;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,SAAqB,IAAI,WAAW,CAAC;AAC3C,YAAAA,OAAK,YAAY,GAAG,OAAO,UAAU,QAAQ,CAAC,EAAE,MAAM,CAAC;AACvD,YAAAA,OAAK,YAAY,IAAI,WAAW,CAAC,GAAG,MAAM;AAC1C,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,SAAqB,IAAI,WAAW,CAAC;AAC3C,YAAAA,OAAK,aAAa,MAAM,OAAO,UAAU,QAAQ,GAAG,EAAE,GAAG,IAAI;AAAA,cACzD;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,qDAAqD,CAACA,WAClE;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,SAAqB,IAAI,WAAW,CAAC;AAC3C,YAAAA,OAAK,aAAa,MAAM,OAAO,UAAU,QAAQ,GAAG,CAAC,GAAG,IAAI;AAAA,cACxD;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,+DAA+D,CAACA,WAC5E;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,SAAqB,IAAI,WAAW,CAAC;AAC3C,YAAAA,OAAK,YAAY,GAAG,OAAO,UAAU,QAAQ,GAAG,CAAC,EAAE,MAAM,CAAC;AAC1D,YAAAA,OAAK,YAAY,IAAI,WAAW,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM;AACxD,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAED,iBAAO,KAAK,mEAAmE,CAACA,WAChF;AACI,kBAAM,SAAyB,eAAe,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,kBAAM,SAAqB,IAAI,WAAW,CAAC;AAC3C,YAAAA,OAAK,YAAY,GAAG,OAAO,UAAU,QAAQ,GAAG,CAAC,EAAE,MAAM,CAAC;AAC1D,YAAAA,OAAK,YAAY,IAAI,WAAW,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM;AACxD,YAAAA,OAAK,YAAY,GAAG,OAAO,sBAAsB,CAAC;AAAA,UACtD,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ACrYA;AAAA;AAAA,cAAAC;AAAA;AAQO,SAASA,MAAK,QACrB;AACI,SAAO,SAAS,eAAe,MAC/B;AAAA,EAcA,CAAC;AACL;;;ACtBO,SAASC,MAAK,QACrB;AACI,SAAO,SAAS,YAAY,MAC5B;AACI,WAAO,SAAS,SAAS,MACzB;AACI,aAAO,KAAK,gBAAgB,CAACA,WAC7B;AACI,QAAAA,OAAK,WAAW,MAAM,cAAc,CAAC;AAAA,MACzC,CAAC;AAED,aAAO,KAAK,gBAAgB,CAACA,WAC7B;AACI,QAAAA,OAAK,WAAW,MAAM,cAAc,GAAG;AAAA,MAC3C,CAAC;AAED,aAAO,aAAa,kBAAkB,MACtC;AACI,iBAAS,WAAW,OAAe,UACnC;AACI,iBAAO,KAAK,QAAQ,KAAK,IAAI,CAACA,WAC9B;AACI,YAAAA,OAAK,WAAW,MAAM,OAAO,KAAK,GAAG,QAAQ;AAAA,UACjD,CAAC;AAAA,QACL;AAEA,mBAAW,IAAI,KAAK;AACpB,mBAAW,IAAI,KAAK;AACpB,mBAAW,GAAG,IAAI;AAClB,mBAAW,GAAG,IAAI;AAClB,mBAAW,KAAK,IAAI;AACpB,mBAAW,KAAK,IAAI;AACpB,mBAAW,KAAK,IAAI;AACpB,mBAAW,KAAK,KAAK;AACrB,mBAAW,KAAK,KAAK;AAAA,MACzB,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC1CA;AAAA;AAAA,cAAAC;AAAA;AAOO,SAASC,MAAK,QACrB;AACI,SAAO,SAAS,0BAA0B,MAC1C;AACI,WAAO,SAAS,uBAAuB,MACvC;AACI,aAAO,aAAa,YAAY,MAChC;AACI,eAAO,KAAK,qBAAqB,CAACA,WAClC;AACI,gBAAM,SAA8B,oBAAoB,OAAO;AAC/D,UAAAA,OAAK,6BAA6B,MAAM;AACxC,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,QAC3D,CAAC;AAED,eAAO,KAAK,oBAAoB,CAACA,WACjC;AACI,gBAAM,SAA8B,oBAAoB,OAAO,CAAC,CAAC;AACjE,UAAAA,OAAK,6BAA6B,MAAM;AACxC,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,QAC3D,CAAC;AAED,eAAO,KAAK,wBAAwB,CAACA,WACrC;AACI,gBAAM,SAA8B,oBAAoB,OAAO,KAAK;AACpE,UAAAA,OAAK,6BAA6B,MAAM;AACxC,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,QAC3D,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,qBAAqB,MACzC;AACI,eAAO,KAAK,6BAA6B,CAACA,WAC1C;AACI,gBAAM,SAA8B,oBAAoB,OAAO;AAC/D,UAAAA,OAAK,aAAa,MAAM,OAAO,gBAAgB,MAAU,GAAG,IAAI;AAAA,YAC5D;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,QAC3D,CAAC;AAED,eAAO,KAAK,wBAAwB,CAACA,WACrC;AACI,gBAAM,SAA8B,oBAAoB,OAAO;AAC/D,UAAAA,OAAK,aAAa,MAAM,OAAO,gBAAgB,IAAK,GAAG,IAAI;AAAA,YACvD;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,QAC3D,CAAC;AAED,eAAO,KAAK,yBAAyB,CAACA,WACtC;AACI,gBAAM,SAA8B,oBAAoB,OAAO;AAC/D,UAAAA,OAAK,YAAY,GAAG,OAAO,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC;AACtD,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,QAC3D,CAAC;AAED,eAAO,KAAK,6BAA6B,CAACA,WAC1C;AACI,gBAAM,SAA8B,oBAAoB,OAAO;AAE/D,UAAAA,OAAK,YAAY,GAAG,OAAO,gBAAgB,MAAM,EAAE,MAAM,CAAC;AAC1D,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAEvD,gBAAM,aAAqB,OAAO,eAAe,EAAE,EAAE,MAAM;AAC3D,UAAAA,OAAK,6BAA6B,UAAU;AAC5C,UAAAA,OAAK,YAAY,GAAG,WAAW,MAAM;AACrC,UAAAA,OAAK,YAAY,QAAQ,UAAU;AACnC,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,QAC3D,CAAC;AAED,eAAO,KAAK,4BAA4B,CAACA,WACzC;AACI,gBAAM,SAA8B,oBAAoB,OAAO;AAC/D,UAAAA,OAAK,aAAa,MAAM,OAAO,gBAAgB,MAAM,EAAE,GAAG,IAAI;AAAA,YAC1D;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,QAC3D,CAAC;AAED,eAAO,KAAK,6BAA6B,CAACA,WAC1C;AACI,gBAAM,SAA8B,oBAAoB,OAAO;AAC/D,UAAAA,OAAK,aAAa,MAAM,OAAO,gBAAgB,MAAM,CAAC,GAAG,IAAI;AAAA,YACzD;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,QAC3D,CAAC;AAED,eAAO,KAAK,kCAAkC,CAACA,WAC/C;AACI,gBAAM,SAA8B,oBAAoB,OAAO;AAC/D,gBAAM,wBAAgC,OAAO,gBAAgB,MAAM,CAAC,EAAE,MAAM;AAC5E,UAAAA,OAAK,YAAY,GAAG,qBAAqB;AACzC,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAEvD,UAAAA,OAAK,YAAY,KAAK,OAAO,eAAe,CAAC,EAAE,MAAM,CAAC;AACtD,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,QAC3D,CAAC;AAED,eAAO,KAAK,8CAA8C,CAACA,WAC3D;AACI,gBAAM,SAA8B,oBAAoB,OAAO;AAC/D,gBAAM,wBAAgC,OAAO,gBAAgB,MAAM,CAAC,EAAE,MAAM;AAC5E,UAAAA,OAAK,YAAY,GAAG,qBAAqB;AACzC,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,QAC3D,CAAC;AAED,eAAO,KAAK,wBAAwB,CAACA,WACrC;AACI,gBAAM,SAA8B,oBAAoB,OAAO;AAC/D,UAAAA,OAAK,aAAa,MAAM,OAAO,gBAAgB,MAAM,GAAG,EAAE,GAAG,IAAI;AAAA,YAC7D;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,QAC3D,CAAC;AAED,eAAO,KAAK,yBAAyB,CAACA,WACtC;AACI,gBAAM,SAA8B,oBAAoB,OAAO;AAC/D,UAAAA,OAAK,aAAa,MAAM,OAAO,gBAAgB,MAAM,GAAG,CAAC,GAAG,IAAI;AAAA,YAC5D;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,QAC3D,CAAC;AAED,eAAO,KAAK,2CAA2C,CAACA,WACxD;AACI,gBAAM,SAA8B,oBAAoB,OAAO;AAC/D,gBAAM,wBAAgC,OAAO,gBAAgB,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,MAAM;AACpG,UAAAA,OAAK,YAAY,GAAG,qBAAqB;AACzC,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAEvD,UAAAA,OAAK,YAAY,MAAM,OAAO,eAAe,EAAE,EAAE,MAAM,CAAC;AACxD,UAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,QAC3D,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,oBAAoB,MACxC;AACI,eAAO,UAAU,qBAAqB,MACtC;AACI,iBAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,kBAAM,SAA8B,oBAAoB,OAAO;AAC/D,YAAAA,OAAK,aAAa,MAAM,OAAO,eAAe,EAAE,EAAE,MAAM,GAAG,IAAI;AAAA,cAC3D;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,mBAAmB,CAACA,WAChC;AACI,kBAAM,SAA8B,oBAAoB,OAAO;AAC/D,YAAAA,OAAK,aAAa,MAAM,OAAO,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,WAAW,CAAC;AAC1E,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,kBAAM,SAA8B,oBAAoB,OAAO;AAC/D,YAAAA,OAAK,aAAa,MAAM,OAAO,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,WAAW,CAAC;AAC1E,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAAA,QACL,CAAC;AAED,eAAO,UAAU,yBAAyB,MAC1C;AACI,iBAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,YAAAA,OAAK,aAAa,MAAM,OAAO,eAAe,EAAE,EAAE,MAAM,GAAG,IAAI;AAAA,cAC3D;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,mBAAmB,CAACA,WAChC;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,uBAA+B,OAAO,eAAe,CAAC,EAAE,MAAM;AACpE,YAAAA,OAAK,YAAY,IAAI,oBAAoB;AACzC,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,sDAAsD,CAACA,WACnE;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,uBAA+B,OAAO,eAAe,CAAC,EAAE,MAAM;AACpE,YAAAA,OAAK,YAAY,MAAM,oBAAoB;AAC3C,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,qDAAqD,CAACA,WAClE;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,uBAA+B,OAAO,eAAe,CAAC,EAAE,MAAM;AACpE,YAAAA,OAAK,YAAY,OAAO,oBAAoB;AAC5C,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,yDAAyD,CAACA,WACtE;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,uBAA+B,OAAO,eAAe,CAAC,EAAE,MAAM;AACpE,YAAAA,OAAK,YAAY,OAAO,oBAAoB;AAC5C,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,yBAAyB,CAACA,WACtC;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,YAAAA,OAAK,aAAa,MAAM,OAAO,eAAe,MAAU,GAAG,IAAI;AAAA,cAC3D;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,oBAAoB,CAACA,WACjC;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,YAAAA,OAAK,aAAa,MAAM,OAAO,eAAe,IAAK,GAAG,IAAI;AAAA,cACtD;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,qBAAqB,CAACA,WAClC;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,SAAmB,CAAC;AAC1B,kBAAM,uBAA+B,OAAO,eAAe,MAAM,EAAE,MAAM;AACzE,YAAAA,OAAK,YAAY,GAAG,oBAAoB;AACxC,YAAAA,OAAK,YAAY,QAAQ,CAAC,CAAC;AAC3B,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,qDAAqD,CAACA,WAClE;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,SAAmB,IAAI,MAAM,CAAC;AACpC,kBAAM,uBAA+B,OAAO,eAAe,MAAM,EAAE,MAAM;AACzE,YAAAA,OAAK,YAAY,GAAG,oBAAoB;AACxC,YAAAA,OAAK,YAAY,QAAQ,CAAC,GAAG,CAAC;AAC9B,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,iDAAiD,CAACA,WAC9D;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,SAAmB,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE;AAC7C,kBAAM,uBAA+B,OAAO,eAAe,MAAM,EAAE,MAAM;AACzE,YAAAA,OAAK,YAAY,GAAG,oBAAoB;AACxC,YAAAA,OAAK,YAAY,QAAQ,CAAC,KAAK,KAAK,KAAK,IAAI,EAAE,CAAC;AAChD,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,gDAAgD,CAACA,WAC7D;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,SAAmB,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE;AAC7C,kBAAM,uBAA+B,OAAO,eAAe,MAAM,EAAE,MAAM;AACzE,YAAAA,OAAK,YAAY,GAAG,oBAAoB;AACxC,YAAAA,OAAK,YAAY,QAAQ,CAAC,KAAK,KAAK,KAAK,IAAI,EAAE,CAAC;AAChD,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,4BAA4B,CAACA,WACzC;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,SAAmB,IAAI,MAAM,CAAC;AACpC,YAAAA,OAAK,aAAa,MAAM,OAAO,eAAe,QAAQ,EAAE,GAAG,IAAI;AAAA,cAC3D;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,6BAA6B,CAACA,WAC1C;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,SAAmB,IAAI,MAAM,CAAC;AACpC,YAAAA,OAAK,aAAa,MAAM,OAAO,eAAe,QAAQ,CAAC,GAAG,IAAI;AAAA,cAC1D;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,+DAA+D,CAACA,WAC5E;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,SAAmB,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE;AAC7C,YAAAA,OAAK,YAAY,GAAG,OAAO,eAAe,QAAQ,CAAC,EAAE,MAAM,CAAC;AAC5D,YAAAA,OAAK,YAAY,CAAC,IAAI,IAAI,KAAK,KAAK,GAAG,GAAG,MAAM;AAChD,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,mEAAmE,CAACA,WAChF;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,SAAmB,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE;AAC7C,YAAAA,OAAK,YAAY,GAAG,OAAO,eAAe,QAAQ,CAAC,EAAE,MAAM,CAAC;AAC5D,YAAAA,OAAK,YAAY,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,MAAM;AAC/C,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,0CAA0C,CAACA,WACvD;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,SAAmB,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE;AAC7C,YAAAA,OAAK,YAAY,GAAG,OAAO,eAAe,QAAQ,CAAC,EAAE,MAAM,CAAC;AAC5D,YAAAA,OAAK,YAAY,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,GAAG,MAAM;AAC7C,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,SAAmB,IAAI,MAAM,CAAC;AACpC,YAAAA,OAAK,aAAa,MAAM,OAAO,eAAe,QAAQ,GAAG,EAAE,GAAG,IAAI;AAAA,cAC9D;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,qDAAqD,CAACA,WAClE;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,SAAmB,IAAI,MAAM,CAAC;AACpC,YAAAA,OAAK,aAAa,MAAM,OAAO,eAAe,QAAQ,GAAG,CAAC,GAAG,IAAI;AAAA,cAC7D;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,+DAA+D,CAACA,WAC5E;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,SAAmB,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE;AAC7C,YAAAA,OAAK,YAAY,GAAG,OAAO,eAAe,QAAQ,GAAG,CAAC,EAAE,MAAM,CAAC;AAC/D,YAAAA,OAAK,YAAY,CAAC,IAAI,IAAI,KAAK,KAAK,GAAG,GAAG,MAAM;AAChD,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAED,iBAAO,KAAK,mEAAmE,CAACA,WAChF;AACI,kBAAM,SAA8B,oBAAoB,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAC9E,kBAAM,SAAmB,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE;AAC7C,YAAAA,OAAK,YAAY,GAAG,OAAO,eAAe,QAAQ,GAAG,CAAC,EAAE,MAAM,CAAC;AAC/D,YAAAA,OAAK,YAAY,CAAC,IAAI,IAAI,IAAI,KAAK,EAAE,GAAG,MAAM;AAC9C,YAAAA,OAAK,YAAY,GAAG,OAAO,2BAA2B,CAAC;AAAA,UAC3D,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ACtYA;AAAA;AAAA,cAAAC;AAAA;AASO,SAASC,MAAK,QACrB;AACI,SAAO,SAAS,oBAAoB,MACpC;AACI,WAAO,SAAS,iBAAiB,MACjC;AACI,aAAO,aAAa,YAAY,MAChC;AACI,eAAO,KAAK,qBAAqB,CAACA,WAClC;AACI,gBAAM,OAAsB,cAAc,OAAO;AACjD,UAAAA,OAAK,6BAA6B,IAAI;AACtC,UAAAA,OAAK,YAAY,GAAG,KAAK,SAAS,EAAE,MAAM,CAAC;AAC3C,UAAAA,OAAK,YAAY,KAAK,IAAI,EAAE,MAAM,CAAC;AACnC,UAAAA,OAAK,YAAY,CAAC,GAAG,KAAK,QAAQ,EAAE,MAAM,CAAC;AAAA,QAC/C,CAAC;AAED,eAAO,KAAK,kBAAkB,CAACA,WAC/B;AACI,gBAAM,OAAsB,cAAc,OAAO,MAAS;AAC1D,UAAAA,OAAK,6BAA6B,IAAI;AACtC,UAAAA,OAAK,YAAY,GAAG,KAAK,SAAS,EAAE,MAAM,CAAC;AAC3C,UAAAA,OAAK,YAAY,KAAK,IAAI,EAAE,MAAM,CAAC;AACnC,UAAAA,OAAK,YAAY,CAAC,GAAG,KAAK,QAAQ,EAAE,MAAM,CAAC;AAAA,QAC/C,CAAC;AAED,eAAO,KAAK,aAAa,CAACA,WAC1B;AACI,gBAAM,OAAsB,cAAc,OAAO,IAAK;AACtD,UAAAA,OAAK,6BAA6B,IAAI;AACtC,UAAAA,OAAK,YAAY,GAAG,KAAK,SAAS,EAAE,MAAM,CAAC;AAC3C,UAAAA,OAAK,YAAY,KAAK,IAAI,EAAE,MAAM,CAAC;AACnC,UAAAA,OAAK,YAAY,CAAC,GAAG,KAAK,QAAQ,EAAE,MAAM,CAAC;AAAA,QAC/C,CAAC;AAED,eAAO,KAAK,4BAA4B,CAACA,WACzC;AACI,gBAAM,OAAsB,cAAc,OAAO,CAAC,CAAC;AACnD,UAAAA,OAAK,6BAA6B,IAAI;AACtC,UAAAA,OAAK,YAAY,GAAG,KAAK,SAAS,EAAE,MAAM,CAAC;AAC3C,UAAAA,OAAK,YAAY,KAAK,IAAI,EAAE,MAAM,CAAC;AACnC,UAAAA,OAAK,YAAY,CAAC,GAAG,KAAK,QAAQ,EAAE,MAAM,CAAC;AAAA,QAC/C,CAAC;AAED,eAAO,KAAK,kBAAkB,CAACA,WAC/B;AACI,gBAAM,OAAsB,cAAc,OAAO,CAAC,GAAG,CAAC;AACtD,UAAAA,OAAK,6BAA6B,IAAI;AACtC,UAAAA,OAAK,YAAY,GAAG,KAAK,SAAS,EAAE,MAAM,CAAC;AAC3C,UAAAA,OAAK,WAAW,KAAK,IAAI,EAAE,MAAM,CAAC;AAClC,UAAAA,OAAK,YAAY,CAAC,GAAG,GAAG,KAAK,QAAQ,EAAE,MAAM,CAAC;AAAA,QAClD,CAAC;AAED,eAAO,KAAK,mBAAmB,CAACA,WAChC;AACI,gBAAM,OAAsB,cAAc,OAAO,CAAC,KAAK,GAAG,CAAC;AAC3D,UAAAA,OAAK,6BAA6B,IAAI;AACtC,UAAAA,OAAK,YAAY,GAAG,KAAK,SAAS,EAAE,MAAM,CAAC;AAC3C,UAAAA,OAAK,WAAW,KAAK,IAAI,EAAE,MAAM,CAAC;AAClC,UAAAA,OAAK,YAAY,CAAC,KAAK,GAAG,GAAG,KAAK,QAAQ,EAAE,MAAM,CAAC;AAAA,QACvD,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,SAAS,MAC7B;AACI,iBAAS,aAAa,OAAe,UACrC;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,kBAAM,OAAsB,cAAc,OAAO;AACjD,YAAAA,OAAK,aAAa,MAAM,KAAK,IAAI,KAAK,GAAG,QAAQ;AACjD,YAAAA,OAAK,YAAY,CAAC,GAAG,KAAK,QAAQ,EAAE,MAAM,CAAC;AAAA,UAC/C,CAAC;AAAA,QACL;AAEA,qBAAa,IAAI,IAAI;AAAA,UACjB;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,qBAAa,MAAM,IAAI;AAAA,UACnB;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,oBAAoB,CAACA,WACjC;AACI,gBAAM,OAAsB,cAAc,OAAO;AAEjD,gBAAM,aAA4B,KAAK,IAAI,GAAG;AAC9C,UAAAA,OAAK,WAAW,MAAM,UAAU;AAChC,UAAAA,OAAK,YAAY,CAAC,GAAG,GAAG,WAAW,QAAQ,EAAE,MAAM,CAAC;AAEpD,gBAAM,aAA4B,KAAK,IAAI,GAAG;AAC9C,UAAAA,OAAK,WAAW,MAAM,UAAU;AAChC,UAAAA,OAAK,YAAY,CAAC,KAAK,GAAG,GAAG,WAAW,QAAQ,EAAE,MAAM,CAAC;AAEzD,gBAAM,aAA4B,KAAK,IAAI,GAAG;AAC9C,UAAAA,OAAK,WAAW,MAAM,UAAU;AAChC,UAAAA,OAAK,YAAY,CAAC,KAAK,KAAK,GAAG,GAAG,WAAW,QAAQ,EAAE,MAAM,CAAC;AAE9D,gBAAM,aAA4B,KAAK,IAAI,GAAG;AAC9C,UAAAA,OAAK,WAAW,MAAM,UAAU;AAChC,UAAAA,OAAK,YAAY,CAAC,KAAK,KAAK,KAAK,GAAG,GAAG,WAAW,QAAQ,EAAE,MAAM,CAAC;AAAA,QACvE,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,YAAY,MAChC;AACI,eAAO,KAAK,qBAAqB,CAACA,WAClC;AACI,gBAAM,OAAsB,cAAc,OAAO;AAEjD,gBAAM,eAA8B,KAAK,OAAO,CAAC,CAAC;AAClD,UAAAA,OAAK,WAAW,MAAM,YAAY;AAClC,UAAAA,OAAK,YAAY,CAAC,GAAG,KAAK,QAAQ,EAAE,MAAM,CAAC;AAAA,QAC/C,CAAC;AAED,eAAO,KAAK,yBAAyB,CAACA,WACtC;AACI,gBAAM,OAAsB,cAAc,OAAO;AAEjD,gBAAM,eAA8B,KAAK,OAAO,OAAO;AACvD,UAAAA,OAAK,WAAW,MAAM,YAAY;AAClC,UAAAA,OAAK,YAAY,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG,GAAG,KAAK,QAAQ,EAAE,MAAM,CAAC;AAAA,QACtE,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,YAAY,MAChC;AACI,iBAAS,gBAAgB,eAAyB,OAAe,OAAe,UAChF;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,eAAe,OAAO,KAAK,CAAC,CAAC,IAAI,CAACA,WACtE;AACI,kBAAM,OAAsB,cAAc,OAAO,aAAa;AAC9D,YAAAA,OAAK,aAAa,MAAM,KAAK,OAAO,OAAO,KAAK,GAAG,QAAQ;AAC3D,YAAAA,OAAK,YAAY,eAAe,KAAK,QAAQ,EAAE,MAAM,CAAC;AAAA,UAC1D,CAAC;AAAA,QACL;AAEA,wBAAgB,CAAC,GAAG,IAAI,KAAK,IAAI;AAAA,UAC7B;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,wBAAgB,CAAC,GAAG,GAAG,KAAK,IAAI;AAAA,UAC5B;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,wBAAgB,CAAC,GAAG,GAAG,IAAI,KAAK,IAAI;AAAA,UAChC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,wBAAgB,CAAC,GAAG,GAAG,GAAG,KAAK,IAAI;AAAA,UAC/B;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,wBAAgB,CAAC,GAAG,GAAG,IAAI,IAAI;AAAA,UAC3B;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,wBAAgB,CAAC,GAAG,GAAG,MAAM,IAAI;AAAA,UAC7B;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,iBAAS,WAAW,eAA2C,OAAe,OAAe,UAC7F;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,eAAe,OAAO,KAAK,CAAC,CAAC,IAAI,CAACA,WACtE;AACI,kBAAM,OAAsB,cAAc,OAAO,aAAa;AAE9D,kBAAM,eAA8B,KAAK,OAAO,OAAO,KAAK;AAC5D,YAAAA,OAAK,WAAW,MAAM,YAAY;AAClC,YAAAA,OAAK,YAAY,UAAU,KAAK,QAAQ,EAAE,MAAM,CAAC;AAAA,UACrD,CAAC;AAAA,QACL;AAEA,mBAAW,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AAC5B,mBAAW,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;AACpC,mBAAW,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;AACpC,mBAAW,CAAC,KAAK,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;AACxD,mBAAW,CAAC,KAAK,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;AACxD,mBAAW,CAAC,KAAK,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;AACxD,mBAAW,CAAC,KAAK,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;AACxD,mBAAW,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAAA,MAChF,CAAC;AAED,aAAO,aAAa,YAAY,MAChC;AACI,eAAO,KAAK,wBAAwB,CAACA,WACrC;AACI,gBAAM,OAAsB,cAAc,OAAO;AAEjD,UAAAA,OAAK,aAAa,MAAM,KAAK,OAAO,GAAG,EAAE,MAAM,GAAG,IAAI,cAAc,yCAA2C,CAAC;AAChH,UAAAA,OAAK,YAAY,CAAC,GAAG,KAAK,QAAQ,EAAE,MAAM,CAAC;AAAA,QAC/C,CAAC;AAED,eAAO,KAAK,oBAAoB,CAACA,WACjC;AACI,gBAAM,OAAsB,cAAc,OAAO,CAAC,GAAG,CAAC;AAEtD,gBAAM,eAAuB,KAAK,OAAO,GAAG,EAAE,MAAM;AACpD,UAAAA,OAAK,YAAY,KAAK,YAAY;AAClC,UAAAA,OAAK,YAAY,CAAC,GAAG,KAAK,QAAQ,EAAE,MAAM,CAAC;AAAA,QAC/C,CAAC;AAED,eAAO,KAAK,8BAA8B,CAACA,WAC3C;AACI,gBAAM,OAAsB,cAAc,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;AAEhE,gBAAM,eAAuB,KAAK,OAAO,GAAG,EAAE,MAAM;AACpD,UAAAA,OAAK,YAAY,KAAK,YAAY;AAClC,UAAAA,OAAK,YAAY,CAAC,KAAK,GAAG,GAAG,KAAK,QAAQ,EAAE,MAAM,CAAC;AAAA,QACvD,CAAC;AAED,eAAO,KAAK,iDAAiD,CAACA,WAC9D;AACI,gBAAM,OAAsB,cAAc,OAAO,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAC1E,gBAAM,UAAU,CAAC,cAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG,EAAE,SAAS,SAAS;AACnF,gBAAM,iBAAiC,eAAe,OAAO,EACxD,IAAI,CAAC,MAAe,UACrB;AACI,mBAAO,SAAS,IAAI,KAAK,SAAS,KAAK,IACjC,QAAQ,IAAI,MAAM,QAAQ,KAAK,IAC/B;AAAA,UACV,CAAC;AACL,gBAAM,eAAuB,KAAK,OAAO,KAAK,cAAc,EAAE,MAAM;AACpE,UAAAA,OAAK,YAAY,KAAK,YAAY;AAClC,UAAAA,OAAK,YAAY,CAAC,KAAK,KAAK,KAAK,GAAG,GAAG,KAAK,QAAQ,EAAE,MAAM,CAAC;AAAA,QACjE,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ACzPA;AAAA;AAAA,cAAAC;AAAA;AAKO,SAASC,MAAK,QACrB;AACI,SAAO,SAAS,eAAe,MAC/B;AACI,WAAO,SAAS,0BAA0B,MAC1C;AACI,aAAO,aAAa,8BAA8B,MAClD;AACI,iBAAS,6BAA6B,MAAe,OAAgB,UACrE;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAACA,WACtD;AACI,YAAAA,OAAK,YAAY,SAAS,yBAAyB,MAAM,KAAK,GAAG,QAAQ;AAAA,UAC7E,CAAC;AAAA,QACL;AAEA,qCAA6B,QAAW,qBAA2B;AACnE,qCAA6B,QAAW,sBAAyB;AACjE,qCAA6B,QAAW,yBAA4B;AACpE,qCAA6B,QAAW,oBAAuB;AAE/D,qCAA6B,MAAM,2BAAiC;AACpE,qCAA6B,MAAM,mBAAsB;AACzD,qCAA6B,MAAM,yBAA4B;AAC/D,qCAA6B,MAAM,oBAAuB;AAE1D,qCAA6B,SAAS,2BAAiC;AACvE,qCAA6B,SAAS,yBAA4B;AAClE,qCAA6B,SAAS,sBAAyB;AAC/D,qCAA6B,SAAS,OAAO,MAAS;AACtD,qCAA6B,SAAS,IAAI,MAAS;AAAA,MACvD,CAAC;AAED,aAAO,aAAa,4BAA4B,MAChD;AACI,iBAAS,2BAA2B,MAAe,OAAgB,UACnE;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAACA,WACtD;AACI,YAAAA,OAAK,YAAY,SAAS,uBAAuB,MAAM,KAAK,GAAG,QAAQ;AAAA,UAC3E,CAAC;AAAA,QACL;AAEA,mCAA2B,QAAW,QAAW,IAAI;AACrD,mCAA2B,QAAW,MAAM,KAAK;AACjD,mCAA2B,QAAW,SAAS,KAAK;AACpD,mCAA2B,QAAW,IAAI,KAAK;AAE/C,mCAA2B,MAAM,QAAW,KAAK;AACjD,mCAA2B,MAAM,MAAM,IAAI;AAC3C,mCAA2B,MAAM,SAAS,KAAK;AAC/C,mCAA2B,MAAM,IAAI,KAAK;AAE1C,mCAA2B,SAAS,QAAW,KAAK;AACpD,mCAA2B,SAAS,MAAM,KAAK;AAC/C,mCAA2B,SAAS,SAAS,IAAI;AACjD,mCAA2B,SAAS,OAAO,MAAS;AACpD,mCAA2B,SAAS,IAAI,MAAS;AAAA,MACrD,CAAC;AAED,aAAO,aAAa,oBAAoB,MACxC;AACI,iBAAS,mBAAmB,MAAiC,OAAkC,UAC/F;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAACA,WACtD;AACI,YAAAA,OAAK,YAAY,SAAS,eAAe,MAAM,KAAK,GAAG,QAAQ;AAAA,UACnE,CAAC;AAAA,QACL;AAEA,2BAAmB,QAAW,qBAA2B;AACzD,2BAAmB,QAAW,sBAAyB;AACvD,2BAAmB,QAAW,oBAAuB;AAErD,2BAAmB,MAAM,2BAAiC;AAC1D,2BAAmB,MAAM,mBAAsB;AAC/C,2BAAmB,MAAM,oBAAuB;AAEhD,2BAAmB,IAAI,2BAAiC;AACxD,2BAAmB,IAAI,yBAA4B;AACnD,2BAAmB,IAAI,uBAA0B;AACjD,2BAAmB,IAAI,iBAAoB;AAC3C,2BAAmB,IAAI,oBAAuB;AAAA,MAClD,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC3FA;AAAA;AAAA,cAAAC;AAAA;AAQO,SAASC,MAAK,QACrB;AACI,SAAO,SAAS,gBAAgB,MAChC;AACI,WAAO,SAAS,aAAa,MAC7B;AACI,aAAO,aAAa,YAAY,CAACA,WACjC;AACI,cAAM,YAA8B,UAAU,OAAO;AACrD,QAAAA,OAAK,6BAA6B,SAAS;AAC3C,QAAAA,OAAK;AAAA,UAAa,MAAM,UAAU,YAAY,IAAI;AAAA,UAC9C,IAAI,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACJ,EAAE,KAAK,IAAI,CAAC;AAAA,QAAC;AAAA,MACrB,CAAC;AAED,aAAO,aAAa,4CAA4C,MAChE;AACI,eAAO,KAAK,kBAAkB,MAC9B;AACI,gBAAM,YAA8B,UAAU,OAAO;AACrD,oBAAU,gBAAgB,QAAW,mBAAmB,cAAc;AAAA,QAC1E,CAAC;AAED,iBAAS,yBAAyB,OAAgB,UAClD;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,UAAU,gBAAgB,KAAK,GAAG,QAAQ;AAAA,UACtE,CAAC;AAAA,QACL;AAEA;AAAA,UACI;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AACP;AAAA,UACI;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AACP;AAAA,UACI;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AAAA,MACX,CAAC;AAED,aAAO,aAAa,qEAAqE,MACzF;AACI,eAAO,KAAK,kBAAkB,CAACA,WAC/B;AACI,gBAAM,YAA8B,UAAU,OAAO;AACrD,UAAAA,OAAK;AAAA,YAAa,MAAM,UAAU,6BAA6B,MAAS;AAAA,YACpE,IAAI,MAAM;AAAA,cACN;AAAA,cACA;AAAA,YACJ,EAAE,KAAK,IAAI,CAAC;AAAA,UAAC;AAAA,QACrB,CAAC;AAED,eAAO,KAAK,aAAa,CAACA,WAC1B;AACI,gBAAM,YAA8B,UAAU,OAAO;AACrD,UAAAA,OAAK;AAAA,YAAa,MAAM,UAAU,6BAA6B,IAAI;AAAA,YAC/D,IAAI,MAAM;AAAA,cACN;AAAA,cACA;AAAA,YACJ,EAAE,KAAK,IAAI,CAAC;AAAA,UAAC;AAAA,QACrB,CAAC;AAED,eAAO,KAAK,mCAAmC,CAACA,WAChD;AACI,mBAAS,eACT;AACI,mBAAO;AAAA,UACX;AAEA,gBAAM,YAA8B,UAAU,OAAO;AACrD,gBAAM,QAA4B,aAAa;AAC/C,oBAAU,6BAA6B,KAAK;AAC5C,UAAAA,OAAK,YAAY,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI;AAAA,QAChD,CAAC;AAED,eAAO,KAAK,iCAAiC,CAACA,WAC9C;AACI,gBAAM,YAA8B,UAAU,OAAO;AACrD,UAAAA,OAAK;AAAA,YAAa,MAAM,UAAU,6BAA6B,QAAW,iBAAiB;AAAA,YACvF,IAAI,MAAM;AAAA,cACN;AAAA,cACA;AAAA,cACA;AAAA,YACJ,EAAE,KAAK,IAAI,CAAC;AAAA,UAAC;AAAA,QACrB,CAAC;AAED,eAAO,KAAK,sCAAsC,CAACA,WACnD;AACI,gBAAM,YAA8B,UAAU,OAAO;AACrD,UAAAA,OAAK;AAAA,YAAa,MAAM,UAAU,6BAA6B,MAAM,mBAAmB,cAAc;AAAA,YAClG,IAAI,MAAM;AAAA,cACN;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ,EAAE,KAAK,IAAI,CAAC;AAAA,UAAC;AAAA,QACrB,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,uBAAuB,MAC3C;AACI,eAAO,KAAK,cAAc,CAACA,WAC3B;AACI,gBAAM,YAA8B,UAAU,OAAO;AACrD,UAAAA,OAAK;AAAA,YAAa,MAAM,UAAU,WAAW,KAAK;AAAA,YAC9C,IAAI,MAAM;AAAA,cACN;AAAA,cACA;AAAA,YACJ,EAAE,KAAK,IAAI,CAAC;AAAA,UAAC;AAAA,QACrB,CAAC;AAED,eAAO,KAAK,aAAa,CAACA,WAC1B;AACI,mBAAS,eAAwB;AAAE,mBAAO;AAAA,UAAM;AAChD,gBAAM,YAA8B,UAAU,OAAO;AACrD,gBAAM,QAAiB,aAAa;AACpC,oBAAU,WAAW,KAAK;AAC1B,UAAAA,OAAK,WAAW,KAAK;AAAA,QACzB,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,wBAAwB,MAC5C;AACI,eAAO,KAAK,aAAa,CAACA,WAC1B;AACI,gBAAM,YAA8B,UAAU,OAAO;AACrD,UAAAA,OAAK;AAAA,YAAa,MAAM,UAAU,YAAY,IAAI;AAAA,YAC9C,IAAI,MAAM;AAAA,cACN;AAAA,cACA;AAAA,YACJ,EAAE,KAAK,IAAI,CAAC;AAAA,UAAC;AAAA,QACrB,CAAC;AAED,eAAO,KAAK,cAAc,CAACA,WAC3B;AACI,mBAAS,eAAwB;AAAE,mBAAO;AAAA,UAAO;AACjD,gBAAM,YAA8B,UAAU,OAAO;AACrD,gBAAM,QAAiB,aAAa;AACpC,oBAAU,YAAY,KAAK;AAC3B,UAAAA,OAAK,YAAY,KAAK;AAAA,QAC1B,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,sCAAsC,MAC1D;AACI,iBAAS,oBAAuB,UAAa,QAAW,YAAgC,SAA6B,eACrH;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,UAAU,QAAQ,YAAY,OAAO,CAAC,CAAC,IAAI,CAACA,WAChF;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,UAAU,WAAW,UAAU,QAAQ,YAAY,OAAO,GAAG,aAAa;AAAA,UACtG,CAAC;AAAA,QACL;AAEA;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AACP;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AACP;AAAA,UACI,CAAC;AAAA,UACD,CAAC;AAAA,UACD;AAAA,UACA;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AACP;AAAA,UACI,EAAE,KAAK,IAAI;AAAA,UACX,EAAE,KAAK,IAAI;AAAA,UACX;AAAA,UACA;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AACP;AAAA,UACI,CAAC;AAAA,UACD,CAAC;AAAA,UACD;AAAA,UACA;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AAEP,iBAAS,eAAkB,UAAa,QAAW,YAAgC,SACnF;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,UAAU,QAAQ,YAAY,OAAO,CAAC,CAAC,IAAI,CAAC,UAChF;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,sBAAU,WAAW,UAAU,QAAQ,YAAY,OAAO;AAAA,UAC9D,CAAC;AAAA,QACL;AAEA,uBAAe,QAAW,QAAW,mBAAmB,cAAc;AACtE,uBAAe,MAAM,MAAM,mBAAmB,cAAc;AAC5D,uBAAe,GAAG,GAAG,mBAAmB,cAAc;AACtD,uBAAe,IAAI,IAAI,mBAAmB,cAAc;AACxD,uBAAe,MAAM,MAAM,mBAAmB,cAAc;AAC5D,uBAAe,OAAO,OAAO,mBAAmB,cAAc;AAE9D,cAAM,IAAI,CAAC;AACX,uBAAe,GAAG,GAAG,mBAAmB,cAAc;AAAA,MAC1D,CAAC;AAED,aAAO,aAAa,yCAAyC,MAC7D;AACI,iBAAS,uBAA0B,UAAa,QAAW,YAAgC,SAA6B,eACxH;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,UAAU,QAAQ,YAAY,OAAO,CAAC,CAAC,IAAI,CAACA,WAChF;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,UAAU,cAAc,UAAU,QAAQ,YAAY,OAAO,GAAG,aAAa;AAAA,UACzG,CAAC;AAAA,QACL;AAEA;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AACP;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AACP;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AACP;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AACP;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AACP;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AAEP,cAAM,IAAI,CAAC;AACX;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AAEP,iBAAS,kBAAqB,UAAa,QAAW,YAAgC,SACtF;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,UAAU,QAAQ,YAAY,OAAO,CAAC,CAAC,IAAI,CAAC,UAChF;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,sBAAU,cAAc,UAAU,QAAQ,YAAY,OAAO;AAAA,UACjE,CAAC;AAAA,QACL;AAEA,0BAAkB,QAAW,MAAM,mBAAmB,cAAc;AACpE,0BAAkB,OAAO,MAAM,mBAAmB,cAAc;AAChE,0BAAkB,GAAG,GAAG,mBAAmB,cAAc;AACzD,0BAAkB,CAAC,GAAG,CAAC,GAAG,mBAAmB,cAAc;AAC3D,0BAAkB,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,mBAAmB,cAAc;AAC/E,0BAAkB,CAAC,GAAG,CAAC,GAAG,mBAAmB,cAAc;AAAA,MAC/D,CAAC;AAED,aAAO,aAAa,0CAA0C,MAC9D;AACI,iBAAS,wBAAwB,OAAe,YAAgC,SAA6B,eAC7G;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,YAAY,OAAO,CAAC,CAAC,IAAI,CAACA,WACrE;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,UAAU,eAAe,OAAO,YAAY,OAAO,GAAG,aAAa;AAAA,UAC/F,CAAC;AAAA,QACL;AAEA,gCAAwB,QAAY,mBAAmB,gBAAgB,IAAI,MAAM,KAAK,MAAM;AAAA,UACxF;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,gCAAwB,MAAO,mBAAmB,gBAAgB,IAAI,MAAM,KAAK,MAAM;AAAA,UACnF;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,gCAAwB,IAAI,mBAAmB,gBAAgB,IAAI,MAAM,KAAK,MAAM;AAAA,UAChF;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AAEH,iBAAS,mBAAmB,OAAe,YAAgC,SAC3E;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,YAAY,OAAO,CAAC,CAAC,IAAI,CAAC,UACrE;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,sBAAU,eAAe,OAAO,YAAY,OAAO;AAAA,UACvD,CAAC;AAAA,QACL;AAEA,2BAAmB,KAAK,mBAAmB,cAAc;AACzD,2BAAmB,KAAK,mBAAmB,cAAc;AAAA,MAC7D,CAAC;AAED,aAAO,aAAa,iDAAiD,MACrE;AACI,iBAAS,wBAAwB,OAAe,YAAoB,YAAgC,SAA6B,eACjI;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,CAACA,WAC5D;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,UAAU,eAAe,OAAO,YAAY,YAAY,OAAO,GAAG,aAAa;AAAA,UAC3G,CAAC;AAAA,QACL;AAEA,gCAAwB,IAAI,IAAI,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACvE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,gCAAwB,GAAG,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACrE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,gCAAwB,GAAG,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACrE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,gCAAwB,GAAG,GAAG,mBAAmB,gBAAgB,IAAI,MAAM,KAAK,MAAM;AAAA,UAClF;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AAEH,iBAAS,mBAAmB,OAAe,YAAoB,YAAqB,SACpF;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,MAC3D;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,sBAAU,eAAe,OAAO,YAAY,YAAY,OAAO;AAAA,UACnE,CAAC;AAAA,QACL;AAEA,2BAAmB,KAAK,EAAE;AAC1B,2BAAmB,IAAI,CAAC;AACxB,2BAAmB,GAAG,CAAC;AACvB,2BAAmB,GAAG,CAAC;AAAA,MAC3B,CAAC;AAED,aAAO,aAAa,0DAA0D,MAC9E;AACI,iBAAS,iCAAiC,OAAe,YAAoB,YAAgC,SAA6B,eAC1I;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,CAACA,WAC5D;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,UAAU,wBAAwB,OAAO,YAAY,YAAY,OAAO,GAAG,aAAa;AAAA,UACpH,CAAC;AAAA,QACL;AAEA,yCAAiC,GAAG,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UAC9E;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,yCAAiC,GAAG,GAAG,mBAAmB,gBAAgB,IAAI,MAAM,KAAK,MAAM;AAAA,UAC3F;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AAEH,iBAAS,4BAA4B,OAAe,YAAoB,YAAgC,SACxG;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,MAC3D;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,sBAAU,wBAAwB,OAAO,YAAY,YAAY,OAAO;AAAA,UAC5E,CAAC;AAAA,QACL;AAEA,oCAA4B,KAAK,IAAI,QAAW,MAAS;AACzD,oCAA4B,IAAI,GAAG,QAAW,MAAS;AACvD,oCAA4B,GAAG,GAAG,QAAW,MAAS;AACtD,oCAA4B,GAAG,GAAG,QAAW,MAAS;AACtD,oCAA4B,IAAI,IAAI,QAAW,MAAS;AACxD,oCAA4B,GAAG,GAAG,QAAW,MAAS;AACtD,oCAA4B,GAAG,GAAG,QAAW,MAAS;AAAA,MAC1D,CAAC;AAED,aAAO,aAAa,6DAA6D,MACjF;AACI,iBAAS,oCAAoC,OAAe,YAAoB,YAAgC,SAA6B,eAC7I;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,CAACA,WAC5D;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,UAAU,2BAA2B,OAAO,YAAY,YAAY,OAAO,GAAG,aAAa;AAAA,UACvH,CAAC;AAAA,QACL;AAEA,4CAAoC,GAAG,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACjF;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,4CAAoC,GAAG,GAAG,mBAAmB,gBAAgB,IAAI,MAAM,KAAK,MAAM;AAAA,UAC9F;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AAEH,iBAAS,+BAA+B,OAAe,YAAoB,YAAqB,SAChG;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,CAAC,UAC5D;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,sBAAU,2BAA2B,OAAO,YAAY,YAAY,OAAO;AAAA,UAC/E,CAAC;AAAA,QACL;AAEA,uCAA+B,IAAI,GAAG;AACtC,uCAA+B,GAAG,EAAE;AACpC,uCAA+B,GAAG,CAAC;AACnC,uCAA+B,GAAG,CAAC;AACnC,uCAA+B,IAAI,EAAE;AACrC,uCAA+B,GAAG,CAAC;AACnC,uCAA+B,GAAG,CAAC;AAAA,MACvC,CAAC;AAED,aAAO,aAAa,oDAAoD,MACxE;AACI,iBAAS,2BAA2B,OAAe,YAAoB,YAAgC,SAA6B,eACpI;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,CAACA,WAC5D;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,UAAU,kBAAkB,OAAO,YAAY,YAAY,OAAO,GAAG,aAAa;AAAA,UAC9G,CAAC;AAAA,QACL;AAEA,mCAA2B,IAAI,IAAI,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UAC1E;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,mCAA2B,GAAG,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACxE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,mCAA2B,GAAG,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACxE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,mCAA2B,GAAG,GAAG,mBAAmB,gBAAgB,IAAI,MAAM,KAAK,MAAM;AAAA,UACrF;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AAEH,iBAAS,sBAAsB,OAAe,YAAoB,YAAqB,SACvF;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,CAAC,UAC5D;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,sBAAU,kBAAkB,OAAO,YAAY,YAAY,OAAO;AAAA,UACtE,CAAC;AAAA,QACL;AAEA,8BAAsB,IAAI,GAAG;AAC7B,8BAAsB,GAAG,EAAE;AAC3B,8BAAsB,GAAG,CAAC;AAC1B,8BAAsB,GAAG,CAAC;AAAA,MAC9B,CAAC;AAED,aAAO,aAAa,uDAAuD,MAC3E;AACI,iBAAS,uBAAuB,YAAoB,OAAe,YAAoB,YAAgC,SAA6B,eACpJ;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,YAAY,OAAO,UAAU,CAAC,CAAC,IAAI,CAACA,WACxE;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,UAAU,cAAc,YAAY,OAAO,YAAY,YAAY,OAAO,GAAG,aAAa;AAAA,UACtH,CAAC;AAAA,QACL;AAEA,+BAAuB,GAAG,GAAG,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACvE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,+BAAuB,GAAG,IAAI,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACxE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,+BAAuB,GAAG,IAAI,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACxE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,+BAAuB,GAAG,GAAG,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACvE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,+BAAuB,GAAG,GAAG,GAAG,mBAAmB,gBAAgB,IAAI,MAAM,KAAK,MAAM;AAAA,UACpF;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AAEH,iBAAS,kBAAkB,YAAoB,OAAe,YAAoB,YAAqB,SACvG;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,YAAY,OAAO,UAAU,CAAC,CAAC,IAAI,MACvE;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,sBAAU,cAAc,YAAY,OAAO,YAAY,YAAY,OAAO;AAAA,UAC9E,CAAC;AAAA,QACL;AAEA,0BAAkB,KAAK,KAAK,GAAG;AAC/B,0BAAkB,IAAI,GAAG,CAAC;AAC1B,0BAAkB,GAAG,GAAG,CAAC;AACzB,0BAAkB,GAAG,GAAG,CAAC;AACzB,0BAAkB,GAAG,GAAG,CAAC;AACzB,0BAAkB,GAAG,GAAG,CAAC;AAAA,MAC7B,CAAC;AAED,aAAO,aAAa,oDAAoD,MACxE;AACI,iBAAS,sBAAsB,OAAe,OAAe,YAAqB,SAClF;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,UACvD;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,sBAAU,kBAAkB,OAAO,OAAO,YAAY,OAAO;AAAA,UACjE,CAAC;AAAA,QACL;AAEA,8BAAsB,GAAG,CAAC;AAC1B,8BAAsB,GAAG,CAAC;AAC1B,8BAAsB,GAAG,CAAC;AAE1B,iBAAS,2BAA2B,OAAe,OAAe,YAAgC,SAA6B,eAC/H;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI,CAACA,WACvD;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,UAAU,kBAAkB,OAAO,OAAO,YAAY,OAAO,GAAG,aAAa;AAAA,UACzG,CAAC;AAAA,QACL;AAEA,mCAA2B,IAAI,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACzE;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,mCAA2B,GAAG,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACxE;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,mCAA2B,GAAG,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACxE;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,mCAA2B,IAAI,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACzE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,mCAA2B,GAAG,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACxE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,mCAA2B,IAAI,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACzE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,mCAA2B,GAAG,GAAG,mBAAmB,gBAAgB,IAAI,MAAM,KAAK,MAAM;AAAA,UACrF;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,mCAA2B,GAAG,GAAG,mBAAmB,gBAAgB,IAAI,MAAM,KAAK,MAAM;AAAA,UACrF;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AAAA,MACP,CAAC;AAED,aAAO,aAAa,oDAAoD,MACxE;AACI,iBAAS,2BAA2B,OAAe,OAAe,YAAgC,SAA6B,eAC/H;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI,CAACA,WACvD;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,UAAU,kBAAkB,OAAO,OAAO,YAAY,OAAO,GAAG,aAAa;AAAA,UACzG,CAAC;AAAA,QACL;AAEA,mCAA2B,IAAI,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACzE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,mCAA2B,GAAG,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACxE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,mCAA2B,IAAI,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACzE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,mCAA2B,GAAG,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACxE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,mCAA2B,IAAI,GAAG,QAAW,QAAW,IAAI,MAAM,KAAK,MAAM;AAAA,UACzE;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,mCAA2B,GAAG,GAAG,mBAAmB,gBAAgB,IAAI,MAAM,KAAK,MAAM;AAAA,UACrF;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,mCAA2B,GAAG,GAAG,mBAAmB,gBAAgB,IAAI,MAAM,KAAK,MAAM;AAAA,UACrF;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AAEH,iBAAS,sBAAsB,OAAe,OAAe,YAAqB,SAClF;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,UACvD;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,sBAAU,kBAAkB,OAAO,OAAO,YAAY,OAAO;AAAA,UACjE,CAAC;AAAA,QACL;AAEA,8BAAsB,GAAG,CAAC;AAC1B,8BAAsB,GAAG,CAAC;AAC1B,8BAAsB,GAAG,CAAC;AAC1B,8BAAsB,GAAG,CAAC;AAC1B,8BAAsB,GAAG,CAAC;AAC1B,8BAAsB,GAAG,CAAC;AAAA,MAC9B,CAAC;AAED,aAAO,aAAa,2DAA2D,MAC/E;AACI,iBAAS,qBAAwB,eAAsC,OAAU,YAAgC,SAA6B,eAC9I;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,eAAe,OAAO,YAAY,OAAO,CAAC,CAAC,IAAI,CAACA,WACpF;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,UAAU,YAAY,eAAe,OAAO,YAAY,OAAO,GAAG,aAAa;AAAA,UAC3G,CAAC;AAAA,QACL;AAEA;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QAAC;AACL;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QAAC;AACL;AAAA,UACI,CAAC;AAAA,UACD;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QAAC;AACL;AAAA,UACI,CAAC;AAAA,UACD;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QAAC;AACL;AAAA,UACI,CAAC,GAAG,GAAG,CAAC;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QAAC;AAEL,iBAAS,gBAAmB,eAAsC,OAAU,YAAqB,SACjG;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,eAAe,OAAO,YAAY,OAAO,CAAC,CAAC,IAAI,CAAC,UACpF;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,sBAAU,YAAY,eAAe,OAAO,YAAY,OAAO;AAAA,UACnE,CAAC;AAAA,QACL;AAEA,wBAAgB,CAAC,CAAC,GAAG,CAAC;AACtB,wBAAgB,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AAAA,MACnC,CAAC;AAED,aAAO,aAAa,yCAAyC,MAC7D;AACI,iBAAS,uBAAuB,OAAe,UAC/C;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,UAAU,cAAc,KAAK,GAAG,QAAQ;AAAA,UACpE,CAAC;AAAA,QACL;AAEA;AAAA,UACI;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AACP;AAAA,UACI;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AACP;AAAA,UACI;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AACP;AAAA,UACI;AAAA,UACA,IAAI,MAAM,KAAK,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QAAC;AAEP,iBAAS,kBAAkB,OAC3B;AACI,iBAAO,KAAK,QAAQ,KAAK,IAAI,CAAC,UAC9B;AACI,kBAAM,YAA8B,UAAU,OAAO;AACrD,sBAAU,cAAc,KAAK;AAAA,UACjC,CAAC;AAAA,QACL;AAEA,0BAAkB,EAAE;AACpB,0BAAkB,CAAC;AACnB,0BAAkB,CAAC;AAAA,MACvB,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC52BA;AAAA;AAAA,cAAAC;AAAA;AAAA,SAAS,kBAAAC,uBAAsB;;;ACA/B;AAAA;AAAA,cAAAC;AAAA,EAAA,aAAAC;AAAA;AAQO,SAASC,MAAK,QACrB;AACI,SAAO,SAAS,iBAAiB,MACjC;AACI,WAAO,SAAS,cAAc,MAC9B;AAAA,IACA,CAAC;AAAA,EACL,CAAC;AACL;AAEO,SAASC,OAAM,QAAoB,SAC1C;AACI,SAAO,SAAS,iBAAiB,MACjC;AACI,WAAO,SAAS,cAAc,MAC9B;AACI,aAAO,aAAa,aAAa,MACjC;AACI,iBAAS,iBAAiB,QAAuC,UACjE;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,MAAM,CAAC,IAAI,CAACD,WAChD;AACI,kBAAM,UAAsB,QAAQ;AACpC,YAAAA,OAAK,aAAa,MAAM,QAAQ,QAAQ,MAAM,GAAG,QAAQ;AAAA,UAC7D,CAAC;AAAA,QACL;AAEA,yBAAiB,QAAY,IAAI,kBAAkB,KAAK,MAAM;AAAA,UAC1D;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,yBAAiB,MAAO,IAAI,kBAAkB,KAAK,MAAM;AAAA,UACrD;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AAEH,iBAAS,YAAY,QAAuC,UAC5D;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,MAAM,CAAC,IAAI,CAACA,WAChD;AACI,kBAAM,UAAsB,QAAQ;AACpC,YAAAA,OAAK,YAAY,UAAU,QAAQ,QAAQ,MAAM,CAAC;AAAA,UACtD,CAAC;AAAA,QACL;AAEA,oBAAY,CAAC,GAAG,EAAE;AAClB,oBAAY,CAAC,GAAG,GAAG,KAAK;AACxB,oBAAY,CAAC,GAAG,GAAG,GAAG,WAAW;AACjC,oBAAY,CAAC,GAAG,KAAK,EAAC,GAAE,EAAC,CAAC,GAAG,qBAAqB;AAAA,MACtD,CAAC;AAED,aAAO,aAAa,cAAc,MAClC;AACI,iBAAS,aAAa,OAAgB,UACtC;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,kBAAM,UAAsB,QAAQ;AACpC,YAAAA,OAAK,YAAY,UAAU,QAAQ,SAAS,KAAK,CAAC;AAAA,UACtD,CAAC;AAAA,QACL;AAEA,qBAAa,QAAW,WAAW;AACnC,qBAAa,MAAM,MAAM;AACzB,qBAAa,OAAO,OAAO;AAC3B,qBAAa,MAAM,MAAM;AACzB,qBAAa,GAAG,GAAG;AACnB,qBAAa,KAAK,KAAK;AACvB,qBAAa,IAAI,IAAI;AACrB,qBAAa,eAAe,eAAe;AAC3C,qBAAa,CAAC,GAAG,IAAI;AACrB,qBAAa,EAAC,GAAE,EAAC,GAAE,IAAG,EAAC,GAAG,iBAAiB;AAC3C,qBAAa,CAAC,GAAG,IAAI;AACrB,qBAAa,CAAC,OAAO,GAAG,GAAG,GAAG,eAAe;AAAA,MACjD,CAAC;AAED,aAAO,aAAa,UAAU,MAC9B;AACI,eAAO,KAAK,qBAAqB,CAACA,WAClC;AACI,gBAAM,UAAsB,QAAQ;AACpC,gBAAM,WAAqB,QAAQ,KAAK;AACxC,UAAAA,OAAK,6BAA6B,QAAQ;AAC1C,UAAAA,OAAK,WAAW,SAAS,cAAc,CAAC;AACxC,UAAAA,OAAK,YAAY,IAAI,SAAS,WAAW,CAAC;AAAA,QAC9C,CAAC;AAED,eAAO,KAAK,cAAc,CAACA,WAC3B;AACI,gBAAM,UAAsB,QAAQ;AACpC,gBAAM,WAAqB,QAAQ,KAAK,KAAK;AAC7C,UAAAA,OAAK,6BAA6B,QAAQ;AAC1C,UAAAA,OAAK,YAAY,SAAS,cAAc,CAAC;AACzC,UAAAA,OAAK,YAAY,IAAI,SAAS,WAAW,CAAC;AAAA,QAC9C,CAAC;AAED,eAAO,KAAK,aAAa,CAACA,WAC1B;AACI,gBAAM,UAAsB,QAAQ;AACpC,gBAAM,WAAqB,QAAQ,KAAK,IAAI;AAC5C,UAAAA,OAAK,6BAA6B,QAAQ;AAC1C,UAAAA,OAAK,WAAW,SAAS,cAAc,CAAC;AACxC,UAAAA,OAAK,YAAY,IAAI,SAAS,WAAW,CAAC;AAAA,QAC9C,CAAC;AAED,eAAO,KAAK,gBAAgB,CAACA,WAC7B;AACI,gBAAM,UAAsB,QAAQ;AACpC,gBAAM,WAAqB,QAAQ,KAAK,MAAM,cAAc;AAC5D,UAAAA,OAAK,6BAA6B,QAAQ;AAC1C,UAAAA,OAAK,WAAW,SAAS,cAAc,CAAC;AACxC,UAAAA,OAAK,YAAY,gBAAgB,SAAS,WAAW,CAAC;AAAA,QAC1D,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,cAAc,MAClC;AACI,eAAO,UAAU,gBAAgB,MACjC;AACI,mBAAS,kBAAkB,UAAkB,UAAkB,YAAwB,UACvF;AACI,mBAAO,KAAK,UAAU,CAACA,WACvB;AACI,oBAAM,UAAsB,QAAQ;AACpC,cAAAA,OAAK,aAAa,MAAM,QAAQ,SAAS,UAAU,UAAU,GAAG,QAAQ;AAAA,YAC5E,CAAC;AAAA,UACL;AAEA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,CAAC;AAED,eAAO,UAAU,uBAAuB,MACxC;AACI,mBAAS,kBAAkB,UAAkB,UAAkB,YAAwB,UACvF;AACI,mBAAO,KAAK,UAAU,CAACA,WACvB;AACI,oBAAM,UAAsB,QAAQ;AACpC,cAAAA,OAAK,aAAa,MAAM,QAAQ,SAAS,UAAU,QAAW,UAAU,GAAG,QAAQ;AAAA,YACvF,CAAC;AAAA,UACL;AAEA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,CAAC;AAED,eAAO,UAAU,kBAAkB,MACnC;AACI,mBAAS,kBAAkB,UAAkB,UAAkB,YAAwB,UACvF;AACI,mBAAO,KAAK,UAAU,CAACA,WACvB;AACI,oBAAM,UAAsB,QAAQ;AACpC,cAAAA,OAAK,aAAa,MAAM,QAAQ,SAAS,UAAU,MAAO,UAAU,GAAG,QAAQ;AAAA,YACnF,CAAC;AAAA,UACL;AAEA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,CAAC;AAED,eAAO,UAAU,aAAa,MAC9B;AACI,mBAAS,kBAAkB,UAAkB,UAAkB,YAAwB,UACvF;AACI,mBAAO,KAAK,UAAU,CAACA,WACvB;AACI,oBAAM,UAAsB,QAAQ;AACpC,oBAAM,OAAiB,QAAQ,KAAK;AACpC,cAAAA,OAAK,aAAa,MAAM,QAAQ,SAAS,UAAU,MAAM,UAAU,GAAG,QAAQ;AAAA,YAClF,CAAC;AAAA,UACL;AAEA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,cAAc,MAClC;AACI,eAAO,UAAU,gBAAgB,MACjC;AACI,mBAAS,kBAAkB,UAAkB,gBAAwC,YAAwB,UAC7G;AACI,mBAAO,KAAK,UAAU,CAACA,WACvB;AACI,oBAAM,UAAsB,QAAQ;AACpC,cAAAA,OAAK,aAAa,MAAM,QAAQ,SAAS,gBAAgB,UAAU,GAAG,QAAQ;AAAA,YAClF,CAAC;AAAA,UACL;AAEA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,CAAC;AAED,eAAO,UAAU,uBAAuB,MACxC;AACI,mBAAS,kBAAkB,UAAkB,gBAAwC,YAAwB,UAC7G;AACI,mBAAO,KAAK,UAAU,CAACA,WACvB;AACI,oBAAM,UAAsB,QAAQ;AACpC,cAAAA,OAAK,aAAa,MAAM,QAAQ,SAAS,gBAAgB,QAAW,UAAU,GAAG,QAAQ;AAAA,YAC7F,CAAC;AAAA,UACL;AAEA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,CAAC;AAED,eAAO,UAAU,kBAAkB,MACnC;AACI,mBAAS,kBAAkB,UAAkB,gBAAwC,YAAwB,UAC7G;AACI,mBAAO,KAAK,UAAU,CAACA,WACvB;AACI,oBAAM,UAAsB,QAAQ;AACpC,cAAAA,OAAK,aAAa,MAAM,QAAQ,SAAS,gBAAgB,MAAO,UAAU,GAAG,QAAQ;AAAA,YACzF,CAAC;AAAA,UACL;AAEA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,CAAC;AAED,eAAO,UAAU,aAAa,MAC9B;AACI,mBAAS,kBAAkB,UAAkB,gBAAwC,YAAwB,UAC7G;AACI,mBAAO,KAAK,UAAU,CAACA,WACvB;AACI,oBAAM,UAAsB,QAAQ;AACpC,oBAAM,OAAiB,QAAQ,KAAK;AACpC,cAAAA,OAAK,aAAa,MAAM,QAAQ,SAAS,gBAAgB,MAAM,UAAU,GAAG,QAAQ;AAAA,YACxF,CAAC;AAAA,UACL;AAEA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,kBAAkB,MACtC;AACI,eAAO,UAAU,gBAAgB,MACjC;AACI,mBAAS,sBAAsB,UAAkB,mBAA2B,YAAwB,UACpG;AACI,mBAAO,KAAK,UAAU,CAACA,WACvB;AACI,oBAAM,UAAsB,QAAQ;AACpC,cAAAA,OAAK,aAAa,MAAM,QAAQ,aAAa,mBAAmB,UAAU,GAAG,QAAQ;AAAA,YACzF,CAAC;AAAA,UACL;AAEA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,CAAC;AAED,eAAO,UAAU,uBAAuB,MACxC;AACI,mBAAS,sBAAsB,UAAkB,mBAA2B,YAAwB,UACpG;AACI,mBAAO,KAAK,UAAU,CAACA,WACvB;AACI,oBAAM,UAAsB,QAAQ;AACpC,cAAAA,OAAK,aAAa,MAAM,QAAQ,aAAa,mBAAmB,QAAW,UAAU,GAAG,QAAQ;AAAA,YACpG,CAAC;AAAA,UACL;AAEA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,CAAC;AAED,eAAO,UAAU,kBAAkB,MACnC;AACI,mBAAS,sBAAsB,UAAkB,mBAA2B,YAAwB,UACpG;AACI,mBAAO,KAAK,UAAU,CAACA,WACvB;AACI,oBAAM,UAAsB,QAAQ;AACpC,cAAAA,OAAK,aAAa,MAAM,QAAQ,aAAa,mBAAmB,MAAO,UAAU,GAAG,QAAQ;AAAA,YAChG,CAAC;AAAA,UACL;AAEA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,CAAC;AAED,eAAO,UAAU,aAAa,MAC9B;AACI,mBAAS,sBAAsB,UAAkB,mBAA2B,YAAwB,UACpG;AACI,mBAAO,KAAK,UAAU,CAACA,WACvB;AACI,oBAAM,UAAsB,QAAQ;AACpC,oBAAM,OAAiB,QAAQ,KAAK;AACpC,cAAAA,OAAK,aAAa,MAAM,QAAQ,aAAa,mBAAmB,MAAM,UAAU,GAAG,QAAQ;AAAA,YAC/F,CAAC;AAAA,UACL;AAEA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YAAC;AAAA,YACP,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ADt2BA,SAAS,kBAAkBE,QAAY,QAA2B,OAClE;AACI,EAAAA,OAAK,YAAY,MAAM,yBAAyB,OAAO,2BAA2B,GAAG,iCAAiC;AACtH,EAAAA,OAAK,YAAY,MAAM,8BAA8B,OAAO,iCAAiC,GAAG,wCAAwC;AACxI,EAAAA,OAAK,YAAY,MAAM,QAAQ,OAAO,mBAAmB,GAAG,yBAAyB;AACrF,EAAAA,OAAK,YAAY,MAAM,SAAS,OAAO,oBAAoB,GAAG,0BAA0B;AACxF,EAAAA,OAAK,YAAY,MAAM,QAAQ,OAAO,mBAAmB,GAAG,yBAAyB;AACzF;AAEO,SAASA,OAAK,QACrB;AACI,SAAO,SAAS,wBAAwB,MACxC;AACI,WAAO,SAAS,qBAAqB,MACrC;AACI,MAAgBC,OAAM,QAAQ,kBAAkB,MAAM;AAEtD,aAAO,aAAa,YAAY,CAACD,WACjC;AACI,cAAM,UAA6B,kBAAkB,OAAO;AAC5D,QAAAA,OAAK,6BAA6B,OAAO;AACzC,QAAAA,OAAK,YAAY,GAAG,QAAQ,2BAA2B,CAAC;AACxD,QAAAA,OAAK,YAAY,GAAG,QAAQ,iCAAiC,CAAC;AAC9D,QAAAA,OAAK,gBAAgB,QAAQ,qBAAqB,CAAC;AAAA,MACvD,CAAC;AAED,aAAO,aAAa,cAAc,MAClC;AACI,eAAO,KAAK,uCAAuC,OAAOA,WAC1D;AACI,cAAI,UAAkB;AACtB,gBAAM,cAAc,6BAA6B,OAAO;AACxD,gBAAM,UAA6B,kBAAkB,OAAO,EAAE,eAAe,WAAW;AACxF,kBAAQ,SAAS,eAAe,MAChC;AACI;AACA,kBAAM,oBAA4C,QAAQ,qBAAqB;AAC/E,YAAAA,OAAK,6BAA6B,iBAAiB;AACnD,YAAAA,OAAK,gBAAgB,kBAAkB,UAAU,CAAC;AAClD,YAAAA,OAAK,YAAY,eAAe,kBAAkB,QAAQ,CAAC;AAAA,UAC/D,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO;AAC3B,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AACD,UAAAA,OAAK,gBAAgB,QAAQ,qBAAqB,CAAC;AAEnD,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAM,QAAQ,SAAS;AAEvB,YAAAA,OAAK,YAAY,GAAG,OAAO;AAC3B,YAAAA,OAAK,gBAAgB,QAAQ,qBAAqB,CAAC;AACnD,8BAAkBA,QAAM,SAAS;AAAA,cAC7B,yBAAyB;AAAA,cACzB,8BAA8B;AAAA,cAC9B,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,QAAQ;AAAA,YACZ,CAAC;AACD,YAAAA,OAAK,YAAY,IAAI,YAAY,eAAe,CAAC;AAAA,UACrD;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,kEAAkE,OAAOA,WACrF;AACI,cAAI,UAAkB;AACtB,gBAAM,cAAc,6BAA6B,OAAO;AACxD,gBAAM,UAA6B,kBAAkB,OAAO,EAAE,eAAe,WAAW;AACxF,kBAAQ,SAAS,eAAe,QAAQ,KAAK,GAAG,MAChD;AACI;AAAA,UACJ,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO;AAC3B,UAAAA,OAAK,gBAAgB,QAAQ,qBAAqB,CAAC;AACnD,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AACD,UAAAA,OAAK,YAAY,IAAI,YAAY,eAAe,CAAC;AAEjD,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAM,QAAQ,SAAS;AAEvB,YAAAA,OAAK,YAAY,GAAG,OAAO;AAC3B,YAAAA,OAAK,gBAAgB,QAAQ,qBAAqB,CAAC;AACnD,8BAAkBA,QAAM,SAAS;AAAA,cAC7B,yBAAyB;AAAA,cACzB,8BAA8B;AAAA,cAC9B,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,QAAQ;AAAA,YACZ,CAAC;AACD,YAAAA,OAAK,YAAY,IAAI,YAAY,eAAe,CAAC;AAAA,UACrD;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,oCAAoC,OAAOA,WACvD;AACI,cAAI,UAAkB;AACtB,gBAAM,UAA6B,kBAAkB,OAAO;AAC5D,kBAAQ,SAAS,eAAe,CAACC,YACjC;AACI;AAEA,kBAAM,oBAA4C,QAAQ,qBAAqB;AAC/E,YAAAD,OAAK,6BAA6B,iBAAiB;AACnD,YAAAA,OAAK,gBAAgB,kBAAkB,UAAU,CAAC;AAClD,YAAAA,OAAK,YAAY,eAAe,kBAAkB,QAAQ,CAAC;AAE3D,YAAAA,OAAK,6BAA6BC,OAAK;AACvC,YAAAD,OAAK,cAAcA,QAAMC,OAAK;AAC9B,YAAAD,OAAK,WAAWC,SAAO,QAAQ,eAAe,CAAC;AAAA,UACnD,CAAC;AACD,UAAAD,OAAK,YAAY,GAAG,OAAO;AAC3B,UAAAA,OAAK,gBAAgB,QAAQ,qBAAqB,CAAC;AACnD,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAED,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAM,QAAQ,SAAS;AAEvB,YAAAA,OAAK,YAAY,GAAG,OAAO;AAC3B,YAAAA,OAAK,gBAAgB,QAAQ,qBAAqB,CAAC;AACnD,8BAAkBA,QAAM,SAAS;AAAA,cAC7B,yBAAyB;AAAA,cACzB,8BAA8B;AAAA,cAC9B,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,QAAQ;AAAA,YACZ,CAAC;AAAA,UACL;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,cAAc,MAClC;AACI,eAAO,KAAK,kCAAkC,OAAOA,WACrD;AACI,gBAAM,UAA6B,kBAAkB,OAAO;AAC5D,kBAAQ,SAAS,eAAe,MAChC;AACI,kBAAM,oBAA4C,QAAQ,qBAAqB;AAC/E,YAAAA,OAAK,6BAA6B,iBAAiB;AACnD,YAAAA,OAAK,YAAY,kBAAkB,kBAAkB,QAAQ,CAAC;AAAA,UAClE,CAAC;AACD,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAED,gBAAM,QAAQ,SAAS;AACvB,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,kBAAkB,OAAOA,WAC7C;AACI,cAAM,UAA6B,kBAAkB,OAAO;AAC5D,gBAAQ,aAAa,kBAAkB,MACvC;AACI,gBAAM,oBAA4C,QAAQ,qBAAqB;AAC/E,UAAAA,OAAK,6BAA6B,iBAAiB;AACnD,UAAAA,OAAK,YAAY,kBAAkB,kBAAkB,QAAQ,CAAC;AAAA,QAClE,CAAC;AACD,0BAAkBA,QAAM,SAAS;AAAA,UAC7B,yBAAyB;AAAA,UACzB,8BAA8B;AAAA,UAC9B,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,QAAQ;AAAA,QACZ,CAAC;AAED,cAAM,QAAQ,SAAS;AACvB,0BAAkBA,QAAM,SAAS;AAAA,UAC7B,yBAAyB;AAAA,UACzB,8BAA8B;AAAA,UAC9B,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,QAAQ;AAAA,QACZ,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,eAAe,MACnC;AACI,eAAO,KAAK,mBAAmB,OAAOA,WACtC;AACI,gBAAM,UAA6B,kBAAkB,OAAO;AAC5D,kBAAQ,UAAU,cAAc,MAChC;AACI,kBAAM,oBAA4C,QAAQ,qBAAqB;AAC/E,YAAAA,OAAK,6BAA6B,iBAAiB;AACnD,YAAAA,OAAK,YAAY,cAAc,kBAAkB,QAAQ,CAAC;AAAA,UAC9D,CAAC;AACD,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAED,gBAAM,QAAQ,SAAS;AACvB,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,KAAK,0BAA0B,OAAOA,WAC7C;AACI,gBAAM,UAA6B,kBAAkB,OAAO;AAC5D,cAAI,UAAkB;AACtB,kBAAQ,UAAU,cAAc,QAAQ,KAAK,GAAG,MAChD;AACI;AAAA,UACJ,CAAC;AACD,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO;AAE3B,gBAAM,QAAQ,SAAS;AACvB,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO;AAAA,QAC/B,CAAC;AAED,eAAO,KAAK,0BAA0B,OAAOA,WAC7C;AACI,gBAAM,UAA6B,kBAAkB,OAAO;AAC5D,kBAAQ,UAAU,cAAc,QAAQ,KAAK,yBAAyB,GAAG,MACzE;AACI,oBAAQ,KAAK,aAAa,CAACA,WAC3B;AACI,cAAAA,OAAK,KAAK,qBAAqB;AAAA,YACnC,CAAC;AAAA,UACL,CAAC;AACD,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAED,gBAAM,QAAQ,SAAS;AACvB,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAED,gBAAM,eAAsC,QAAQ,gBAAgB;AACpE,UAAAA,OAAK,6BAA6B,YAAY;AAC9C,gBAAM,cAA2B,MAAM,aAAa,MAAM;AAC1D,UAAAA,OAAK,6BAA6B,WAAW;AAC7C,UAAAA,OAAK;AAAA,YACD,KAAK,OAAO,CAAC,cAAc,WAAW,CAAC;AAAA,YACvC,YAAY,qBAAqB;AAAA,UACrC;AACA,UAAAA,OAAK,YAAY,2BAA2B,YAAY,eAAe,CAAC;AAAA,QAC5E,CAAC;AAED,eAAO,KAAK,4BAA4B,OAAOA,WAC/C;AACI,gBAAM,UAA6B,kBAAkB,OAAO;AAC5D,kBAAQ,UAAU,cAAc,MAChC;AACI,kBAAM,MAAM,OAAO;AAAA,UACvB,CAAC;AACD,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAED,gBAAM,QAAQ,SAAS;AACvB,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,UAAU,MAC9B;AACI,eAAO,KAAK,kBAAkB,OAAOA,WACrC;AACI,gBAAM,UAA6B,kBAAkB,OAAO;AAC5D,kBAAQ,KAAK,aAAa,CAACC,YAC3B;AACI,kBAAM,oBAA4C,QAAQ,qBAAqB;AAC/E,YAAAD,OAAK,6BAA6B,iBAAiB;AACnD,YAAAA,OAAK,YAAY,aAAa,kBAAkB,QAAQ,CAAC;AAEzD,YAAAA,OAAK,WAAWC,SAAO,QAAQ,eAAe,CAAC;AAAA,UACnD,CAAC;AACD,4BAAkBD,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAED,gBAAM,QAAQ,SAAS;AACvB,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,KAAK,yBAAyB,OAAOA,WAC5C;AACI,cAAI,UAAkB;AACtB,gBAAM,UAA6B,kBAAkB,OAAO;AAC5D,kBAAQ,UAAU,mBAAmB,MACrC;AACI;AACA,YAAAA,OAAK,YAAY,GAAG,OAAO;AAE3B,kBAAM,kBAA0C,QAAQ,qBAAqB;AAC7E,YAAAA,OAAK,6BAA6B,eAAe;AACjD,YAAAA,OAAK,YAAY,mBAAmB,gBAAgB,QAAQ,CAAC;AAE7D,oBAAQ,KAAK,aAAa,CAACC,YAC3B;AACI;AACA,cAAAD,OAAK,YAAY,GAAG,OAAO;AAE3B,oBAAM,aAAqC,QAAQ,qBAAqB;AACxE,cAAAA,OAAK,6BAA6B,UAAU;AAC5C,cAAAA,OAAK,YAAY,6BAA6B,WAAW,YAAY,CAAC;AACtE,cAAAA,OAAK,YAAY,aAAa,WAAW,QAAQ,CAAC;AAClD,cAAAA,OAAK,WAAW,iBAAiB,WAAW,UAAU,CAAC;AAEvD,cAAAA,OAAK,WAAWC,SAAO,QAAQ,eAAe,CAAC;AAAA,YACnD,CAAC;AAED,YAAAD,OAAK,YAAY,GAAG,OAAO;AAAA,UAC/B,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO;AAC3B,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAED,gBAAM,QAAQ,SAAS;AACvB,UAAAA,OAAK,YAAY,GAAG,OAAO;AAC3B,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,KAAK,8BAA8B,OAAOA,WACjD;AACI,cAAI,UAAkB;AACtB,gBAAM,UAA6B,kBAAkB,OAAO;AAC5D,kBAAQ,UAAU,qBAAqB,MACvC;AACI;AACA,YAAAA,OAAK,YAAY,GAAG,OAAO;AAE3B,kBAAM,kBAA0C,QAAQ,qBAAqB;AAC7E,YAAAA,OAAK,6BAA6B,eAAe;AACjD,YAAAA,OAAK,YAAY,qBAAqB,gBAAgB,YAAY,CAAC;AACnE,YAAAA,OAAK,YAAY,qBAAqB,gBAAgB,QAAQ,CAAC;AAE/D,oBAAQ,UAAU,qBAAqB,MACvC;AACI;AACA,cAAAA,OAAK,YAAY,GAAG,OAAO;AAE3B,oBAAME,mBAA0C,QAAQ,qBAAqB;AAC7E,cAAAF,OAAK,6BAA6BE,gBAAe;AACjD,cAAAF,OAAK,YAAY,uCAAuCE,iBAAgB,YAAY,CAAC;AACrF,cAAAF,OAAK,YAAY,qBAAqBE,iBAAgB,QAAQ,CAAC;AAE/D,sBAAQ,KAAK,aAAa,CAACD,YAC3B;AACI;AACA,gBAAAD,OAAK,YAAY,GAAG,OAAO;AAE3B,sBAAM,aAAqC,QAAQ,qBAAqB;AACxE,gBAAAA,OAAK,6BAA6B,UAAU;AAC5C,gBAAAA,OAAK,YAAY,iDAAiD,WAAW,YAAY,CAAC;AAC1F,gBAAAA,OAAK,YAAY,aAAa,WAAW,QAAQ,CAAC;AAClD,gBAAAA,OAAK,WAAWE,kBAAiB,WAAW,UAAU,CAAC;AAEvD,gBAAAF,OAAK,WAAWC,SAAO,QAAQ,eAAe,CAAC;AAAA,cACnD,CAAC;AAED,cAAAD,OAAK,YAAY,GAAG,OAAO;AAAA,YAC/B,CAAC;AAED,YAAAA,OAAK,YAAY,GAAG,OAAO;AAAA,UAC/B,CAAC;AACD,UAAAA,OAAK,YAAY,GAAG,OAAO;AAC3B,UAAAA,OAAK,YAAY,GAAG,QAAQ,2BAA2B,CAAC;AACxD,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAED,gBAAM,QAAQ,SAAS;AACvB,UAAAA,OAAK,YAAY,GAAG,OAAO;AAC3B,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,KAAK,oBAAoB,OAAOA,WACvC;AACI,gBAAM,UAA6B,kBAAkB,OAAO;AAC5D,kBAAQ,KAAK,eAAe,MAC5B;AACI,8BAAkBA,QAAM,SAAS;AAAA,cAC7B,yBAAyB;AAAA,cACzB,8BAA8B;AAAA,cAC9B,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,QAAQ;AAAA,YACZ,CAAC;AAED,YAAAA,OAAK;AAAA,cACD,MAAM,QAAQ,KAAK,eAAe,MAClC;AACI,gBAAAA,OAAK,KAAK,8DAA8D;AAAA,cAC5E,CAAC;AAAA,cACD,IAAIG,gBAAe;AAAA,gBACf,SAAS;AAAA,gBACT,UAAU;AAAA,cACd,CAAC;AAAA,YACL;AAEA,8BAAkBH,QAAM,SAAS;AAAA,cAC7B,yBAAyB;AAAA,cACzB,8BAA8B;AAAA,cAC9B,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,QAAQ;AAAA,YACZ,CAAC;AAAA,UACL,CAAC;AACD,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAED,gBAAM,QAAQ,SAAS;AACvB,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,KAAK,aAAa,OAAOA,WAChC;AACI,gBAAM,UAA6B,kBAAkB,OAAO;AAC5D,kBAAQ,KAAK,eAAe,QAAQ,KAAK,MAAM,mBAAmB,GAAG,MACrE;AACI,YAAAA,OAAK,KAAK,4BAA4B;AAAA,UAC1C,CAAC;AACD,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAED,gBAAM,QAAQ,SAAS;AACvB,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAED,gBAAM,eAAsC,QAAQ,gBAAgB;AACpE,UAAAA,OAAK,6BAA6B,YAAY;AAC9C,UAAAA,OAAK,YAAY,GAAG,MAAM,aAAa,SAAS,CAAC;AACjD,gBAAM,cAA2B,MAAM,aAAa,MAAM;AAC1D,UAAAA,OAAK,6BAA6B,WAAW;AAC7C,UAAAA,OAAK,YAAY,SAAS,OAAO,CAAC,aAAa,CAAC,GAAG,YAAY,qBAAqB,CAAC;AACrF,UAAAA,OAAK,YAAY,qBAAqB,YAAY,eAAe,CAAC;AAAA,QACtE,CAAC;AAED,eAAO,KAAK,uBAAuB,OAAOA,WAC1C;AACI,gBAAM,UAA6B,kBAAkB,OAAO;AAC5D,kBAAQ,KAAK,eAAe,MAC5B;AACI,YAAAA,OAAK,YAAY,GAAG,CAAC;AAAA,UACzB,CAAC;AACD,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAED,gBAAM,QAAQ,SAAS;AACvB,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAED,gBAAM,cAAoC,QAAQ,eAAe;AACjE,UAAAA,OAAK,6BAA6B,WAAW;AAC7C,UAAAA,OAAK,YAAY,GAAG,MAAM,YAAY,SAAS,CAAC;AAChD,gBAAM,aAAyB,MAAM,YAAY,MAAM;AACvD,UAAAA,OAAK,6BAA6B,UAAU;AAC5C,UAAAA,OAAK,YAAY,SAAS,OAAO,CAAC,aAAa,CAAC,GAAG,WAAW,qBAAqB,CAAC;AACpF,gBAAM,eAAuB,WAAW,gBAAgB;AACxD,UAAAA,OAAK,WAAW,aAAa,SAAS,4EAA4E,CAAC;AACnH,UAAAA,OAAK,WAAW,aAAa,SAAS,SAAS,CAAC;AAAA,QACpD,CAAC;AAED,eAAO,KAAK,2BAA2B,OAAOA,WAC9C;AACI,gBAAM,UAA6B,kBAAkB,OAAO;AAC5D,kBAAQ,KAAK,eAAe,MAC5B;AACI,kBAAM,IAAI,kBAAkB,OAAO;AAAA,UACvC,CAAC;AACD,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAED,gBAAM,QAAQ,SAAS;AACvB,4BAAkBA,QAAM,SAAS;AAAA,YAC7B,yBAAyB;AAAA,YACzB,8BAA8B;AAAA,YAC9B,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ,CAAC;AAED,gBAAM,cAAoC,QAAQ,eAAe;AACjE,UAAAA,OAAK,6BAA6B,WAAW;AAC7C,UAAAA,OAAK,YAAY,GAAG,MAAM,YAAY,SAAS,CAAC;AAChD,gBAAM,aAAyB,MAAM,YAAY,MAAM;AACvD,UAAAA,OAAK,6BAA6B,UAAU;AAC5C,UAAAA,OAAK,YAAY,SAAS,OAAO,CAAC,aAAa,CAAC,GAAG,WAAW,qBAAqB,CAAC;AACpF,gBAAM,eAAuB,WAAW,gBAAgB;AACxD,UAAAA,OAAK,WAAW,aAAa,SAAS,cAAc,CAAC;AACrD,UAAAA,OAAK,YAAY,WAAW,SAAS,GAAG,IAAI,kBAAkB,OAAO,CAAC;AAAA,QAC1E,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AE1oBA;AAAA;AAAA,cAAAI;AAAA;AAIO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,eAAe,MAC/B;AACI,WAAO,SAAS,YAAY,MAC5B;AACI,aAAO,aAAa,WAAW,MAC/B;AACI,eAAO,KAAK,8BAA8B,CAACA,WAC3C;AACI,gBAAM,WAAqB,SAAS,MAAM,qBAAqB;AAC/D,UAAAA,OAAK,6BAA6B,QAAQ;AAC1C,UAAAA,OAAK,YAAY,MAAM,SAAS,QAAQ,CAAC;AACzC,UAAAA,OAAK,YAAY,GAAG,SAAS,SAAS,CAAC;AACvC,UAAAA,OAAK,YAAY,IAAI,SAAS,OAAO,CAAC;AACtC,UAAAA,OAAK,YAAY,IAAI,SAAS,QAAQ,CAAC;AACvC,UAAAA,OAAK,YAAY,IAAI,SAAS,UAAU,CAAC;AACzC,UAAAA,OAAK,YAAY,IAAI,SAAS,UAAU,CAAC;AACzC,UAAAA,OAAK,YAAY,cAAc,SAAS,aAAa,CAAC;AACtD,UAAAA,OAAK,YAAY,iCAAiC,SAAS,SAAS,CAAC;AACrE,UAAAA,OAAK,YAAY,iCAAiC,SAAS,KAAK;AAAA,QACpE,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC7BA;AAAA;AAAA,cAAAC;AAAA;AASO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,uBAAuB,MACvC;AACI,WAAO,aAAa,sBAAsB,MAC1C;AACI,aAAO,KAAK,iCAAiC,CAACA,WAC9C;AACI,QAAAA,OAAK,aAAa,MAAM,iBAAiB,QAAY,MAAM;AAAA,QAAC,CAAC,GAAG,IAAI;AAAA,UAChE;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAED,aAAO,KAAK,4BAA4B,CAACA,WACzC;AACI,QAAAA,OAAK,aAAa,MAAM,iBAAiB,MAAO,MAAM;AAAA,QAAC,CAAC,GAAG,IAAI;AAAA,UAC3D;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAED,aAAO,KAAK,+BAA+B,CAACA,WAC5C;AACI,QAAAA,OAAK,aAAa,MAAM,iBAAiB,CAAC,GAAG,MAAU,GAAG,IAAI;AAAA,UAC1D;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAED,aAAO,KAAK,0BAA0B,CAACA,WACvC;AACI,QAAAA,OAAK,aAAa,MAAM,iBAAiB,CAAC,GAAG,IAAK,GAAG,IAAI;AAAA,UACrD;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAED,aAAO,KAAK,6BAA6B,CAACA,WAC1C;AACI,cAAM,WAA6B,iBAAiB,CAAC,GAAG,CAAC,eAAmD,YAC5G;AACI,wBAAc,cAAc,QAAQ,sBAAsB,CAAC;AAE3D,gBAAM,eAAuB,QAAQ,SAAS;AAC9C,cAAI,gBAAgB,GACpB;AACI,0BAAc,UAAU,YAAY;AAAA,UACxC;AAAA,QACJ,CAAC;AACD,QAAAA,OAAK,YAAY,CAAC,GAAG,SAAS,QAAQ,EAAE,MAAM,CAAC;AAAA,MACnD,CAAC;AAED,aAAO,KAAK,oDAAoD,CAACA,WACjE;AACI,cAAM,QAA4B,KAAK,OAAO;AAC9C,iBAAS,IAAI,GAAG,IAAI,IAAI,KACxB;AACI,gBAAM,IAAI,KAAK,OAAO,CAAC,CAAC;AAAA,QAC5B;AAEA,iBAAS,aAAa,QAAgB,QACtC;AACI,gBAAM,IAAI,MAAM,EAAE,MAAM,EAAE,iBAAiB,MAAM,IAAI,MAAM,EAAE,MAAM,CAAC;AAAA,QACxE;AACA,qBAAa,GAAG,CAAC;AACjB,qBAAa,GAAG,CAAC;AACjB,qBAAa,GAAG,CAAC;AACjB,qBAAa,GAAG,CAAC;AACjB,qBAAa,GAAG,CAAC;AACjB,qBAAa,GAAG,CAAC;AACjB,qBAAa,GAAG,CAAC;AACjB,qBAAa,GAAG,CAAC;AACjB,qBAAa,GAAG,CAAC;AACjB,qBAAa,GAAG,CAAC;AACjB,qBAAa,GAAG,CAAC;AAEjB,cAAM,WAA6B,iBAAiB,CAAC,MAAM,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,eAAmD,YAChI;AACI,wBAAc,cAAc,QAAQ,sBAAsB,CAAC;AAE3D,gBAAM,eAAuB,QAAQ,SAAS;AAC9C,cAAI,gBAAgB,GACpB;AACI,0BAAc,UAAU,YAAY;AAAA,UACxC;AAAA,QACJ,CAAC;AAED,QAAAA,OAAK,YAAY,CAAC,GAAG,CAAC,GAAG,SAAS,QAAQ,EAAE,MAAM,CAAC;AAAA,MACvD,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ACzGA;AAAA;AAAA,cAAAC;AAAA;AAOO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,iBAAiB,MACjC;AACI,WAAO,SAAS,cAAc,MAC9B;AACI,aAAO,aAAa,YAAY,MAChC;AACI,iBAAS,gBAAgB,UAAkB,kBAA8B,eACzE;AACI,iBAAO,KAAK,UAAU,CAACA,WACvB;AACI,YAAAA,OAAK,aAAa,MAAM,WAAW,OAAO,gBAAgB,GAAG,aAAa;AAAA,UAC9E,CAAC;AAAA,QACL;AAEA,wBAAgB,kBAAkB,QAAY,IAAI;AAAA,UAC9C;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,wBAAgB,aAAa,MAAO,IAAI;AAAA,UACpC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,iBAAiB,CAACA,WAC9B;AACI,cAAI,QAAgB;AACpB,gBAAM,aAAyB,WAAW,OAAO,MAAM,SAAS,CAAC;AACjE,UAAAA,OAAK,6BAA6B,UAAU;AAC5C,UAAAA,OAAK,YAAY,WAAW,WAAW,CAAC;AACxC,UAAAA,OAAK,YAAY,OAAO,CAAC;AAAA,QAC7B,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,aAAa,MACjC;AACI,eAAO,KAAK,oCAAoC,CAACA,WACjD;AACI,cAAI,QAAgB;AACpB,gBAAM,aAA6B,WAAW,OAAO,MACrD;AACI,YAAAA,OAAK,YAAY,WAAW,WAAW,GAAG,UAAU,CAAC;AACrD,qBAAS;AAAA,UACb,CAAC;AAED,gBAAM,UAA+B,WAAW,QAAQ;AACxD,UAAAA,OAAK,6BAA6B,OAAO;AACzC,UAAAA,OAAK,WAAW,WAAW,WAAW,CAAC;AACvC,UAAAA,OAAK,YAAY,OAAO,CAAC;AAEzB,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAM,cAAuB,QAAQ,MAAM;AAC3C,YAAAA,OAAK,WAAW,WAAW;AAC3B,YAAAA,OAAK,WAAW,WAAW,WAAW,CAAC;AACvC,YAAAA,OAAK,YAAY,OAAO,CAAC;AAAA,UAC7B;AAEA,gBAAM,UAA+B,WAAW,QAAQ;AACxD,UAAAA,OAAK,6BAA6B,OAAO;AACzC,UAAAA,OAAK,WAAW,WAAW,WAAW,CAAC;AACvC,UAAAA,OAAK,YAAY,OAAO,CAAC;AAEzB,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAM,cAAuB,QAAQ,MAAM;AAC3C,YAAAA,OAAK,YAAY,WAAW;AAC5B,YAAAA,OAAK,WAAW,WAAW,WAAW,CAAC;AACvC,YAAAA,OAAK,YAAY,OAAO,CAAC;AAAA,UAC7B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,6BAA6B,CAACA,WAC1C;AACI,cAAI,QAAgB;AACpB,gBAAM,aAA6B,WAAW,OAAO,MACrD;AACI,YAAAA,OAAK,YAAY,WAAW,WAAW,GAAG,UAAU,CAAC;AACrD,qBAAS;AACT,kBAAM,IAAI,MAAM,OAAO;AAAA,UAC3B,CAAC;AAED,gBAAM,UAA+B,WAAW,QAAQ;AACxD,UAAAA,OAAK,6BAA6B,OAAO;AACzC,UAAAA,OAAK,WAAW,WAAW,WAAW,CAAC;AACvC,UAAAA,OAAK,YAAY,OAAO,CAAC;AAEzB,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK,aAAa,MAAM,QAAQ,MAAM,GAAG,IAAI,MAAM,OAAO,CAAC;AAC3D,YAAAA,OAAK,WAAW,WAAW,WAAW,CAAC;AACvC,YAAAA,OAAK,YAAY,OAAO,CAAC;AAAA,UAC7B;AAEA,gBAAM,UAA+B,WAAW,QAAQ;AACxD,UAAAA,OAAK,6BAA6B,OAAO;AACzC,UAAAA,OAAK,WAAW,WAAW,WAAW,CAAC;AACvC,UAAAA,OAAK,YAAY,OAAO,CAAC;AAEzB,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAM,cAAuB,QAAQ,MAAM;AAC3C,YAAAA,OAAK,YAAY,WAAW;AAC5B,YAAAA,OAAK,WAAW,WAAW,WAAW,CAAC;AACvC,YAAAA,OAAK,YAAY,OAAO,CAAC;AAAA,UAC7B;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ACxHA;AAAA;AAAA,cAAAC;AAAA;AAMO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,cAAc,MAC9B;AACI,WAAO,aAAa,qBAAqB,MACzC;AACI,eAAS,iBAAiB,QAAqC,eAC/D;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,MAAM,CAAC,IAAI,CAACA,WAChD;AACI,UAAAA,OAAK,aAAa,MAAM,QAAQ,MAAO,GAAG,aAAa;AAAA,QAC3D,CAAC;AAAA,MACL;AAEA;AAAA,QACI;AAAA,QACA,IAAI;AAAA,UACA,KAAK,MAAM;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QAAC;AAAA,MAAC;AACH;AAAA,QACJ;AAAA,QACA,IAAI;AAAA,UACA,KAAK,MAAM;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QAAC;AAAA,MAAC;AAEX,eAAS,YAAY,QAAkB,UACvC;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,MAAM,CAAC,IAAI,CAACA,WAChD;AACI,UAAAA,OAAK,YAAY,QAAQ,MAAM,GAAG,QAAQ;AAAA,QAC9C,CAAC;AAAA,MACL;AAEA,kBAAY,CAAC,GAAG,EAAE;AAClB,kBAAY,CAAC,EAAE,GAAG,EAAE;AACpB,kBAAY,CAAC,IAAI,EAAE,GAAG,OAAO;AAC7B,kBAAY,CAAC,IAAI,IAAI,EAAE,GAAG,UAAU;AAEpC,kBAAY,CAAC,GAAG,GAAG,GAAG;AACtB,kBAAY,CAAC,KAAK,GAAG,GAAG,SAAS;AACjC,kBAAY,CAAC,KAAK,KAAK,GAAG,GAAG,aAAa;AAC1C,kBAAY,CAAC,KAAK,KAAK,KAAK,GAAG,GAAG,gBAAgB;AAAA,IACtD,CAAC;AAED,WAAO,aAAa,oBAAoB,MACxC;AACI,eAAS,gBAAgB,QAAqC,eAC9D;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,MAAM,CAAC,IAAI,CAACA,WAChD;AACI,UAAAA,OAAK,aAAa,MAAM,OAAO,MAAO,GAAG,aAAa;AAAA,QAC1D,CAAC;AAAA,MACL;AAEA;AAAA,QACI;AAAA,QACA,IAAI;AAAA,UACA,KAAK,MAAM;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QAAC;AAAA,MAAC;AACH;AAAA,QACJ;AAAA,QACA,IAAI;AAAA,UACA,KAAK,MAAM;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QAAC;AAAA,MAAC;AAEX,eAAS,WAAW,QAAkB,UACtC;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,MAAM,CAAC,IAAI,CAACA,WAChD;AACI,UAAAA,OAAK,YAAY,OAAO,MAAM,GAAG,QAAQ;AAAA,QAC7C,CAAC;AAAA,MACL;AAEA,iBAAW,CAAC,GAAG,EAAE;AACjB,iBAAW,CAAC,EAAE,GAAG,EAAE;AACnB,iBAAW,CAAC,IAAI,EAAE,GAAG,MAAM;AAC3B,iBAAW,CAAC,IAAI,IAAI,EAAE,GAAG,SAAS;AAElC,iBAAW,CAAC,GAAG,GAAG,GAAG;AACrB,iBAAW,CAAC,KAAK,GAAG,GAAG,QAAQ;AAC/B,iBAAW,CAAC,KAAK,KAAK,GAAG,GAAG,YAAY;AACxC,iBAAW,CAAC,KAAK,KAAK,KAAK,GAAG,GAAG,eAAe;AAAA,IACpD,CAAC;AAAA,EACL,CAAC;AACL;;;AC7FO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,qBAAqB,MACrC;AACI,WAAO,SAAS,kBAAkB,MAClC;AACI,aAAO,KAAK,YAAY,CAACA,WACzB;AACI,cAAM,YAA4B,eAAe,OAAO;AACxD,QAAAA,OAAK,6BAA6B,SAAS;AAAA,MAC/C,CAAC;AAED,aAAO,aAAa,cAAc,MAClC;AACI,iBAAS,aAAa,MAAe,OAAgB,UACrD;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAACA,WACtD;AACI,kBAAM,YAA4B,eAAe,OAAO;AACxD,YAAAA,OAAK,YAAY,UAAU,SAAS,MAAM,KAAK,EAAE,MAAM,GAAG,QAAQ;AAAA,UACtE,CAAC;AAAA,QACL;AAEA,qBAAa,QAAW,QAAW,IAAI;AACvC,qBAAa,QAAW,MAAM,KAAK;AACnC,qBAAa,QAAW,OAAO,KAAK;AACpC,qBAAa,QAAW,MAAM,KAAK;AACnC,qBAAa,QAAW,SAAS,KAAK;AACtC,qBAAa,QAAW,IAAI,KAAK;AACjC,qBAAa,QAAW,CAAC,GAAG,KAAK;AACjC,qBAAa,QAAW,CAAC,GAAG,KAAK;AACjC,qBAAa,QAAW,IAAI,OAAO,GAAG,KAAK;AAE3C,qBAAa,MAAM,QAAW,KAAK;AACnC,qBAAa,MAAM,MAAM,IAAI;AAC7B,qBAAa,MAAM,OAAO,KAAK;AAC/B,qBAAa,MAAM,MAAM,KAAK;AAC9B,qBAAa,MAAM,SAAS,KAAK;AACjC,qBAAa,MAAM,IAAI,KAAK;AAC5B,qBAAa,MAAM,CAAC,GAAG,KAAK;AAC5B,qBAAa,MAAM,CAAC,GAAG,KAAK;AAC5B,qBAAa,MAAM,IAAI,OAAO,GAAG,KAAK;AAEtC,qBAAa,OAAO,QAAW,KAAK;AACpC,qBAAa,OAAO,MAAM,KAAK;AAC/B,qBAAa,OAAO,OAAO,IAAI;AAC/B,qBAAa,OAAO,MAAM,KAAK;AAC/B,qBAAa,OAAO,SAAS,KAAK;AAClC,qBAAa,OAAO,IAAI,KAAK;AAC7B,qBAAa,OAAO,CAAC,GAAG,KAAK;AAC7B,qBAAa,OAAO,CAAC,GAAG,KAAK;AAC7B,qBAAa,OAAO,IAAI,OAAO,GAAG,KAAK;AAEvC,qBAAa,MAAM,QAAW,KAAK;AACnC,qBAAa,MAAM,MAAM,KAAK;AAC9B,qBAAa,MAAM,OAAO,KAAK;AAC/B,qBAAa,MAAM,MAAM,IAAI;AAC7B,qBAAa,MAAM,SAAS,KAAK;AACjC,qBAAa,MAAM,IAAI,KAAK;AAC5B,qBAAa,MAAM,CAAC,GAAG,KAAK;AAC5B,qBAAa,MAAM,CAAC,GAAG,KAAK;AAC5B,qBAAa,MAAM,IAAI,OAAO,GAAG,KAAK;AAEtC,qBAAa,SAAS,QAAW,KAAK;AACtC,qBAAa,SAAS,MAAM,KAAK;AACjC,qBAAa,SAAS,OAAO,KAAK;AAClC,qBAAa,SAAS,MAAM,KAAK;AACjC,qBAAa,SAAS,SAAS,IAAI;AACnC,qBAAa,SAAS,eAAe,KAAK;AAC1C,qBAAa,SAAS,SAAS,KAAK;AACpC,qBAAa,SAAS,IAAI,KAAK;AAC/B,qBAAa,SAAS,CAAC,GAAG,KAAK;AAC/B,qBAAa,SAAS,CAAC,GAAG,KAAK;AAC/B,qBAAa,IAAI,CAAC,GAAG,KAAK;AAC1B,qBAAa,OAAO,CAAC,KAAK,KAAK,GAAG,GAAG,KAAK;AAC1C,qBAAa,SAAS,IAAI,OAAO,GAAG,KAAK;AAEzC,qBAAa,IAAI,QAAW,KAAK;AACjC,qBAAa,IAAI,MAAM,KAAK;AAC5B,qBAAa,IAAI,OAAO,KAAK;AAC7B,qBAAa,IAAI,MAAM,KAAK;AAC5B,qBAAa,IAAI,SAAS,KAAK;AAC/B,qBAAa,IAAI,IAAI,IAAI;AACzB,qBAAa,IAAI,IAAM,IAAI;AAC3B,qBAAa,IAAI,KAAK,KAAK;AAC3B,qBAAa,IAAI,YAAY,KAAK;AAClC,qBAAa,IAAI,IAAI,KAAK;AAC1B,qBAAa,IAAI,CAAC,GAAG,KAAK;AAC1B,qBAAa,IAAI,CAAC,GAAG,KAAK;AAC1B,qBAAa,IAAI,IAAI,OAAO,GAAG,KAAK;AAEpC,qBAAa,CAAC,GAAG,QAAW,KAAK;AACjC,qBAAa,CAAC,GAAG,MAAM,KAAK;AAC5B,qBAAa,CAAC,GAAG,OAAO,KAAK;AAC7B,qBAAa,CAAC,GAAG,MAAM,KAAK;AAC5B,qBAAa,CAAC,GAAG,SAAS,KAAK;AAC/B,qBAAa,CAAC,GAAG,IAAI,KAAK;AAC1B,qBAAa,CAAC,GAAG,CAAC,GAAG,IAAI;AACzB,qBAAa,CAAC,GAAG,EAAC,GAAE,EAAC,GAAG,KAAK;AAC7B,qBAAa,EAAC,GAAE,EAAC,GAAG,EAAC,GAAE,EAAC,GAAG,IAAI;AAC/B,qBAAa,EAAC,GAAE,EAAC,GAAE,EAAC,EAAC,GAAG,EAAC,GAAE,EAAC,GAAE,EAAC,EAAC,GAAG,IAAI;AACvC,qBAAa,EAAC,GAAE,EAAC,GAAG,EAAC,GAAE,EAAC,GAAG,KAAK;AAChC,qBAAa,EAAC,GAAE,EAAC,GAAG,EAAC,GAAE,EAAC,GAAG,KAAK;AAChC,qBAAa,CAAC,GAAG,CAAC,GAAG,KAAK;AAC1B,qBAAa,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK;AACpC,qBAAa,EAAC,GAAE,EAAC,GAAG,IAAI,OAAsB,EAAE,IAAI,KAAK,CAAC,GAAG,KAAK;AAElE,qBAAa,CAAC,GAAG,QAAW,KAAK;AACjC,qBAAa,CAAC,GAAG,MAAM,KAAK;AAC5B,qBAAa,CAAC,GAAG,OAAO,KAAK;AAC7B,qBAAa,CAAC,GAAG,MAAM,KAAK;AAC5B,qBAAa,CAAC,GAAG,SAAS,KAAK;AAC/B,qBAAa,CAAC,KAAK,KAAK,GAAG,GAAG,OAAO,KAAK;AAC1C,qBAAa,CAAC,GAAG,IAAI,KAAK;AAC1B,qBAAa,CAAC,GAAG,CAAC,GAAG,KAAK;AAC1B,qBAAa,CAAC,GAAG,KAAK,OAAO,GAAG,IAAI;AACpC,qBAAa,CAAC,GAAG,CAAC,GAAG,IAAI;AACzB,qBAAa,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;AAC3B,qBAAa,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;AAC3B,qBAAa,CAAC,GAAE,GAAE,CAAC,GAAG,CAAC,GAAE,GAAE,CAAC,GAAG,IAAI;AACnC,qBAAa,CAAC,GAAE,CAAC,GAAG,CAAC,GAAE,GAAE,CAAC,GAAG,KAAK;AAClC,qBAAa,CAAC,GAAE,CAAC,GAAG,CAAC,GAAE,CAAC,GAAG,KAAK;AAChC,qBAAa,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK;AAEpC,qBAAa,KAAK,OAAO,GAAG,QAAW,KAAK;AAC5C,qBAAa,KAAK,OAAO,GAAG,MAAM,KAAK;AACvC,qBAAa,KAAK,OAAO,GAAG,OAAO,KAAK;AACxC,qBAAa,KAAK,OAAO,GAAG,MAAM,KAAK;AACvC,qBAAa,KAAK,OAAO,GAAG,SAAS,KAAK;AAC1C,qBAAa,KAAK,OAAO,GAAG,IAAI,KAAK;AACrC,qBAAa,KAAK,OAAO,GAAG,CAAC,GAAG,KAAK;AACrC,qBAAa,KAAK,OAAO,GAAG,CAAC,GAAG,IAAI;AACpC,qBAAa,KAAK,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK;AACtC,qBAAa,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;AACxC,qBAAa,KAAK,OAAO,CAAC,GAAE,GAAE,CAAC,CAAC,GAAG,CAAC,GAAE,GAAE,CAAC,GAAG,IAAI;AAChD,qBAAa,KAAK,OAAO,CAAC,GAAE,CAAC,CAAC,GAAG,CAAC,GAAE,GAAE,CAAC,GAAG,KAAK;AAC/C,qBAAa,KAAK,OAAO,CAAC,GAAE,CAAC,CAAC,GAAG,CAAC,GAAE,CAAC,GAAG,KAAK;AAC7C,qBAAa,KAAK,OAAO,GAAG,IAAI,OAAO,GAAG,KAAK;AAE/C,qBAAa,IAAI,OAAO,GAAG,QAAW,KAAK;AAC3C,qBAAa,IAAI,OAAO,GAAG,MAAM,KAAK;AACtC,qBAAa,IAAI,OAAO,GAAG,OAAO,KAAK;AACvC,qBAAa,IAAI,OAAO,GAAG,MAAM,KAAK;AACtC,qBAAa,IAAI,OAAO,GAAG,SAAS,KAAK;AACzC,qBAAa,IAAI,OAAO,GAAG,IAAI,KAAK;AACpC,qBAAa,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK;AACpC,qBAAa,IAAI,OAAO,EAAE,IAAI,KAAK,CAAC,GAAG,EAAC,GAAE,EAAC,GAAG,KAAK;AACnD,qBAAa,IAAI,OAAO,EAAE,IAAI,KAAK,CAAC,GAAG,EAAC,GAAE,EAAC,GAAG,KAAK;AACnD,qBAAa,IAAI,OAAO,EAAE,IAAI,KAAK,CAAC,GAAG,EAAC,GAAE,EAAC,GAAG,KAAK;AACnD,qBAAa,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK;AACpC,qBAAa,IAAI,OAAO,GAAG,IAAI,OAAO,GAAG,IAAI;AAC7C,qBAAa,IAAI,OAAO,GAAG,IAAI,OAAO,EAAE,IAAI,KAAK,CAAC,GAAG,KAAK;AAC1D,qBAAa,IAAI,OAAO,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI,OAAO,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI;AACrE,qBAAa,IAAI,OAAO,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI,OAAO,EAAE,IAAI,KAAK,CAAC,GAAG,KAAK;AACtE,qBAAa,IAAI,OAAO,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI,OAAO,EAAE,IAAI,KAAK,CAAC,GAAG,KAAK;AACtE,qBAAa,IAAI,OAAO,EAAE,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI,OAAO,EAAE,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI;AAAA,MACjG,CAAC;AAED,aAAO,aAAa,SAAS,MAC7B;AACI,eAAO,KAAK,gCAAgC,CAACA,WAC7C;AACI,gBAAM,YAA4B,eAAe,OAAO;AACxD,UAAAA,OAAK;AAAA,YACD,MAAM,UAAU,IAAI,MAAU;AAAA,YAC9B,IAAI,kBAAkB;AAAA,cAClB;AAAA,cACA;AAAA,cACA;AAAA,YACJ,EAAE,KAAK,IAAI,CAAC;AAAA,UAChB;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,2BAA2B,CAACA,WACxC;AACI,gBAAM,YAA4B,eAAe,OAAO;AACxD,UAAAA,OAAK;AAAA,YACD,MAAM,UAAU,IAAI,IAAK;AAAA,YACzB,IAAI,kBAAkB;AAAA,cAClB;AAAA,cACA;AAAA,cACA;AAAA,YACJ,EAAE,KAAK,IAAI,CAAC;AAAA,UAChB;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,wEAAwE,CAACA,WACrF;AACI,gBAAM,YAA4B,eAAe,OAAO;AACxD,gBAAM,SAAyB,UAAU,IAAI,CAAC,MAAe,UAC7D;AACI,gBAAIC;AACJ,gBAAI,SAAS,IAAI,KAAK,SAAS,KAAK,GACpC;AACI,oBAAM,WAAmB,OAAO;AAChC,oBAAM,YAAoB,QAAQ;AAClC,cAAAA,UAAS,aAAa;AAAA,YAC1B;AACA,mBAAOA;AAAA,UACX,CAAC;AACD,UAAAD,OAAK,WAAW,WAAW,MAAM;AACjC,UAAAA,OAAK,WAAW,UAAU,SAAS,GAAG,CAAC,EAAE,MAAM,CAAC;AAChD,UAAAA,OAAK,WAAW,UAAU,SAAS,GAAG,CAAC,EAAE,MAAM,CAAC;AAChD,UAAAA,OAAK,WAAW,UAAU,SAAS,GAAG,CAAC,EAAE,MAAM,CAAC;AAChD,UAAAA,OAAK,WAAW,UAAU,SAAS,GAAG,CAAC,EAAE,MAAM,CAAC;AAChD,UAAAA,OAAK,YAAY,UAAU,SAAS,IAAI,CAAC,EAAE,MAAM,CAAC;AAClD,UAAAA,OAAK,YAAY,UAAU,SAAS,GAAG,CAAC,EAAE,MAAM,CAAC;AACjD,UAAAA,OAAK,WAAW,UAAU,SAAS,OAAO,KAAK,EAAE,MAAM,CAAC;AACxD,UAAAA,OAAK,YAAY,UAAU,SAAS,OAAO,IAAI,EAAE,MAAM,CAAC;AAAA,QAC5D,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC9NA;AAAA;AAAA,cAAAE;AAAA;AAOO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,sBAAsB,MACtC;AACI,WAAO,SAAS,mBAAmB,MACnC;AACI,aAAO,KAAK,YAAY,CAACA,WACzB;AACI,cAAM,SAA0B,gBAAgB,OAAO;AACvD,QAAAA,OAAK,6BAA6B,MAAM;AAAA,MAC5C,CAAC;AAED,aAAO,aAAa,iBAAiB,MACrC;AACI,eAAO,KAAK,sBAAsB,OAAO,KAAK,CAAC,gBAAgB,GAAG,OAAOA,WACzE;AACI,gBAAM,SAA0B,gBAAgB,OAAO;AAEvD,gBAAM,WAAsC,MAAM,OAAO,YAAY,oBAAoB,IAAI,yBAAyB,CAAC;AACvH,UAAAA,OAAK,6BAA6B,QAAQ;AAC1C,UAAAA,OAAK,YAAY,KAAK,SAAS,cAAc,CAAC;AAAA,QAClD,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AChCA;AAAA;AAAA,cAAAC;AAAA;;;ACAA;AAAA;AAAA;AAAA,cAAAC;AAAA;AAWO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,eAAe,MAC/B;AACI,WAAO,SAAS,eAAe,MAC/B;AACI,aAAO,aAAa,eAAe,MACnC;AACI,iBAAS,gBAAmB,QAAa,UACzC;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,MAAM,CAAC,IAAI,CAACA,WAChD;AACI,YAAAA,OAAK,aAAa,MAAM,SAAS,OAAO,MAAM,GAAG,QAAQ;AAAA,UAC7D,CAAC;AAAA,QACL;AAEA,wBAAgB,QAAY,IAAI;AAAA,UAC5B;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,wBAAgB,MAAO,IAAI;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,iBAAS,WAAc,QACvB;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,MAAM,CAAC,IAAI,CAACA,WAChD;AACI,kBAAM,WAAwB,SAAS,OAAO,MAAM;AACpD,YAAAA,OAAK,YAAY,SAAS,QAAQ,EAAE,MAAM,GAAG,MAAM;AAAA,UACvD,CAAC;AAAA,QACL;AAEA,mBAAW,CAAC,CAAC;AACb,mBAAW,CAAC,GAAG,GAAG,CAAC,CAAC;AACpB,mBAAW,CAAC,OAAO,IAAI,CAAC;AAAA,MAC5B,CAAC;AAED,aAAO,aAAa,UAAU,MAC9B;AACI,eAAO,UAAU,aAAa,MAC9B;AACI,iBAAO,KAAK,eAAe,CAACA,WAC5B;AACI,kBAAM,SAAmB,CAAC,GAAG,GAAG,CAAC;AACjC,kBAAM,WAA6B,SAAS,OAAO,MAAM;AACzD,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,uBAAW,SAAS,QACpB;AACI,cAAAA,OAAK,WAAW,SAAS,KAAK,EAAE,MAAM,CAAC;AACvC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,OAAO,SAAS,WAAW,CAAC;AAAA,YACjD;AAEA,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,YAAY,SAAS,KAAK,EAAE,MAAM,CAAC;AACxC,cAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK;AAAA,gBACD,MAAM,SAAS,WAAW;AAAA,gBAC1B,IAAI;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,WAAW,CAACA,WACxB;AACI,kBAAM,SAAmB,CAAC,GAAG,GAAG,CAAC;AACjC,kBAAM,WAA6B,SAAS,OAAO,MAAM,EAAE,MAAM,EAAE,MAAM;AACzE,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,YAAY,GAAG,SAAS,WAAW,CAAC;AAEzC,uBAAW,SAAS,OAAO,MAAM,CAAC,GAClC;AACI,cAAAA,OAAK,WAAW,SAAS,KAAK,EAAE,MAAM,CAAC;AACvC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,OAAO,SAAS,WAAW,CAAC;AAAA,YACjD;AAEA,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,YAAY,SAAS,KAAK,EAAE,MAAM,CAAC;AACxC,cAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK;AAAA,gBACD,MAAM,SAAS,WAAW;AAAA,gBAC1B,IAAI;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,WAAW,CAACA,WAChC;AACI,cAAM,WAA6B,SAAS,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC5D,iBAAS,IAAY,GAAG,IAAI,GAAG,KAC/B;AACI,gBAAM,cAAgC,SAAS,MAAM,EAAE,MAAM;AAC7D,UAAAA,OAAK,WAAW,aAAa,QAAQ;AACrC,UAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,UAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,UAAAA,OAAK,YAAY,GAAG,SAAS,WAAW,CAAC;AAAA,QAC7C;AAAA,MACJ,CAAC;AAED,aAAO,aAAa,iBAAiB,MACrC;AACI,eAAO,UAAU,kBAAkB,MACnC;AACI,iBAAO,KAAK,eAAe,CAACA,WAC5B;AACI,kBAAM,WAA6B,SAAS,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC5D,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK;AAAA,gBAAa,MAAM,SAAS,YAAY;AAAA,gBACzC,IAAI;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBACJ;AAAA,cAAC;AACL,cAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,cAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,YAC1C;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,WAAW,CAACA,WACxB;AACI,kBAAM,SAAmB,CAAC,GAAG,GAAG,CAAC;AACjC,kBAAM,WAA6B,SAAS,OAAO,MAAM,EAAE,MAAM,EAAE,MAAM;AACzE,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,YAAY,GAAG,SAAS,WAAW,CAAC;AAEzC,qBAAS,IAAI,GAAG,IAAI,OAAO,SAAS,GAAG,KACvC;AACI,cAAAA,OAAK,YAAY,OAAO,CAAC,GAAG,SAAS,YAAY,EAAE,MAAM,CAAC;AAC1D,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,OAAO,IAAI,CAAC,GAAG,SAAS,WAAW,CAAC;AAAA,YACzD;AAEA,YAAAA,OAAK,YAAY,OAAO,OAAO,SAAS,CAAC,GAAG,SAAS,YAAY,EAAE,MAAM,CAAC;AAC1E,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,UAC1C,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,SAAS,MAC7B;AACI,eAAO,UAAU,kBAAkB,MACnC;AACI,iBAAO,KAAK,eAAe,CAACA,WAC5B;AACI,kBAAM,SAAmB,CAAC,GAAG,GAAG,CAAC;AACjC,kBAAM,WAA6B,SAAS,OAAO,MAAM;AACzD,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,SAAS,IAAI,EAAE,MAAM,CAAC;AACtC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,OAAO,CAAC,GAAG,SAAS,WAAW,CAAC;AAAA,YACrD;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,WAAW,CAACA,WACxB;AACI,kBAAM,SAAmB,CAAC,GAAG,GAAG,CAAC;AACjC,kBAAM,WAA6B,SAAS,OAAO,MAAM,EAAE,MAAM,EAAE,MAAM;AACzE,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,YAAY,OAAO,CAAC,GAAG,SAAS,WAAW,CAAC;AAEjD,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,SAAS,IAAI,EAAE,MAAM,CAAC;AACtC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,OAAO,CAAC,GAAG,SAAS,WAAW,CAAC;AAAA,YACrD;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,cAAc,MAClC;AACI,eAAO,UAAU,kBAAkB,MACnC;AACI,iBAAO,KAAK,eAAe,CAACA,WAC5B;AACI,kBAAM,SAAmB,CAAC,GAAG,GAAG,CAAC;AACjC,kBAAM,WAA6B,SAAS,OAAO,MAAM;AACzD,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,YAAAA,OAAK,YAAY,OAAO,QAAQ,SAAS,SAAS,EAAE,MAAM,CAAC;AAC3D,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,YAAY,SAAS,SAAS,EAAE,MAAM,GAAG,CAAC;AAC/C,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,YAC1C;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,WAAW,CAACA,WACxB;AACI,kBAAM,SAAmB,CAAC,GAAG,GAAG,CAAC;AACjC,kBAAM,WAA6B,SAAS,OAAO,MAAM,EAAE,MAAM,EAAE,MAAM;AACzE,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,YAAY,OAAO,CAAC,GAAG,SAAS,WAAW,CAAC;AAEjD,YAAAA,OAAK,YAAY,OAAO,QAAQ,SAAS,SAAS,EAAE,MAAM,CAAC;AAC3D,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,YAAY,SAAS,SAAS,EAAE,MAAM,GAAG,CAAC;AAC/C,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,YAC1C;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,aAAa,MACjC;AACI,eAAO,UAAU,aAAa,MAC9B;AACI,iBAAO,KAAK,eAAe,CAACA,WAC5B;AACI,kBAAM,SAAmB,CAAC,GAAG,GAAG,CAAC;AACjC,kBAAM,WAA6B,SAAS,OAAO,MAAM;AAEzD,YAAAA,OAAK,YAAY,QAAQ,SAAS,QAAQ,EAAE,MAAM,CAAC;AACnD,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,YAAAA,OAAK,YAAY,CAAC,GAAG,SAAS,QAAQ,EAAE,MAAM,CAAC;AAC/C,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,UAC1C,CAAC;AAED,iBAAO,KAAK,WAAW,CAACA,WACxB;AACI,kBAAM,SAAmB,CAAC,GAAG,GAAG,CAAC;AACjC,kBAAM,WAA6B,SAAS,OAAO,MAAM,EAAE,MAAM,EAAE,MAAM;AAEzE,YAAAA,OAAK,YAAY,QAAQ,SAAS,QAAQ,EAAE,MAAM,CAAC;AACnD,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,YAAAA,OAAK,YAAY,CAAC,GAAG,SAAS,QAAQ,EAAE,MAAM,CAAC;AAC/C,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,UAC1C,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAED,aAAO,UAAU,iBAAiB,MAClC;AACI,eAAO,UAAU,oBAAoB,MACrC;AACI,iBAAO,UAAU,aAAa,MAC9B;AACI,mBAAO,KAAK,SAAS,CAACA,WACtB;AACI,oBAAM,WAA6B,SAAS,OAAO,CAAC,CAAC;AACrD,oBAAM,sBAAwC,SAAS,YAAY,CAAC,CAAC;AACrE,cAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,YAC9D,CAAC;AAED,mBAAO,KAAK,aAAa,CAACA,WAC1B;AACI,oBAAM,WAA6B,SAAS,OAAO,CAAC,CAAC;AACrD,oBAAM,sBAAwC,SAAS,YAAY,CAAC,CAAC,CAAC;AACtE,cAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AAAA,YAC/D,CAAC;AAED,mBAAO,KAAK,kBAAkB,CAACA,WAC/B;AACI,oBAAM,WAA6B,SAAS,OAAO,CAAC,CAAC;AACrD,oBAAM,sBAAwC,SAAS,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9E,cAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,YACrE,CAAC;AAAA,UACL,CAAC;AAED,iBAAO,UAAU,iBAAiB,MAClC;AACI,mBAAO,KAAK,SAAS,CAACA,WACtB;AACI,oBAAM,WAA6B,SAAS,OAAO,CAAC,GAAG,CAAC,CAAC;AACzD,oBAAM,sBAAwC,SAAS,YAAY,CAAC,CAAC;AACrE,cAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,YAClE,CAAC;AAED,mBAAO,KAAK,aAAa,CAACA,WAC1B;AACI,oBAAM,WAA6B,SAAS,OAAO,CAAC,CAAC,CAAC;AACtD,oBAAM,sBAAwC,SAAS,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;AAC5E,cAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,YACxE,CAAC;AAED,mBAAO,KAAK,kBAAkB,CAACA,WAC/B;AACI,oBAAM,WAA6B,SAAS,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC5D,oBAAM,sBAAwC,SAAS,YAAY,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;AACrF,cAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,YACrF,CAAC;AAAA,UACL,CAAC;AAAA,QACL,CAAC;AAED,eAAO,UAAU,gBAAgB,MACjC;AACI,iBAAO,UAAU,aAAa,MAC9B;AACI,mBAAO,KAAK,SAAS,CAACA,WACtB;AACI,oBAAM,WAA6B,SAAS,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM;AACrE,oBAAM,sBAAwC,SAAS,YAAY,CAAC,CAAC;AACrE,cAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,YAC9D,CAAC;AAED,mBAAO,KAAK,aAAa,CAACA,WAC1B;AACI,oBAAM,WAA6B,SAAS,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM;AACrE,oBAAM,sBAAwC,SAAS,YAAY,CAAC,CAAC,CAAC;AACtE,cAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AAAA,YAC/D,CAAC;AAED,mBAAO,KAAK,kBAAkB,CAACA,WAC/B;AACI,oBAAM,WAA6B,SAAS,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM;AACrE,oBAAM,sBAAwC,SAAS,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9E,cAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,YACrE,CAAC;AAAA,UACL,CAAC;AAED,iBAAO,UAAU,iBAAiB,MAClC;AACI,mBAAO,KAAK,SAAS,CAACA,WACtB;AACI,oBAAM,WAA6B,SAAS,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM;AACzE,oBAAM,sBAAwC,SAAS,YAAY,CAAC,CAAC;AACrE,cAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,YAClE,CAAC;AAED,mBAAO,KAAK,aAAa,CAACA,WAC1B;AACI,oBAAM,WAA6B,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM;AACtE,oBAAM,sBAAwC,SAAS,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;AAC5E,cAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,YACxE,CAAC;AAED,mBAAO,KAAK,kBAAkB,CAACA,WAC/B;AACI,oBAAM,WAA6B,SAAS,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM;AAC5E,oBAAM,sBAAwC,SAAS,YAAY,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;AACrF,cAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,YACrF,CAAC;AAAA,UACL,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,WAAW,MAC/B;AACI,eAAO,UAAU,kBAAkB,MACnC;AACI,iBAAO,KAAK,eAAe,CAACA,WAC5B;AACI,kBAAM,SAAmB,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AACvC,kBAAM,WAA6B,SAAS,OAAO,MAAM;AACzD,kBAAM,SAA2B,SAAS,MAAM,OAAK,IAAI,MAAM,CAAC;AAChE,YAAAA,OAAK,6BAA6B,MAAM;AACxC,YAAAA,OAAK,cAAc,QAAQ,QAAQ;AACnC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,YAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AACpC,YAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AAEpC,uBAAW,iBAAiB,CAAC,GAAG,GAAG,CAAC,GACpC;AACI,cAAAA,OAAK,WAAW,OAAO,KAAK,EAAE,MAAM,CAAC;AACrC,cAAAA,OAAK,WAAW,OAAO,WAAW,CAAC;AACnC,cAAAA,OAAK,WAAW,OAAO,WAAW,CAAC;AACnC,cAAAA,OAAK,YAAY,eAAe,OAAO,WAAW,CAAC;AACnD,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,eAAe,SAAS,WAAW,CAAC;AAAA,YACzD;AAEA,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,YAAY,OAAO,KAAK,EAAE,MAAM,CAAC;AACtC,cAAAA,OAAK,WAAW,OAAO,WAAW,CAAC;AACnC,cAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AACpC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,YAC1C;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,WAAW,CAACA,WACxB;AACI,kBAAM,SAAmB,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AACvC,kBAAM,WAA6B,SAAS,OAAO,MAAM,EAAE,MAAM,EAAE,MAAM;AACzE,kBAAM,SAA2B,SAAS,MAAM,OAAK,IAAI,MAAM,CAAC;AAChE,YAAAA,OAAK,6BAA6B,MAAM;AACxC,YAAAA,OAAK,cAAc,QAAQ,QAAQ;AACnC,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,YAAY,OAAO,CAAC,GAAG,SAAS,WAAW,CAAC;AACjD,YAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AACpC,YAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AAEpC,uBAAW,iBAAiB,CAAC,GAAG,GAAG,CAAC,GACpC;AACI,cAAAA,OAAK,WAAW,OAAO,KAAK,EAAE,MAAM,CAAC;AACrC,cAAAA,OAAK,WAAW,OAAO,WAAW,CAAC;AACnC,cAAAA,OAAK,WAAW,OAAO,WAAW,CAAC;AACnC,cAAAA,OAAK,YAAY,eAAe,OAAO,WAAW,CAAC;AACnD,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,eAAe,SAAS,WAAW,CAAC;AAAA,YACzD;AAEA,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,YAAY,OAAO,KAAK,EAAE,MAAM,CAAC;AACtC,cAAAA,OAAK,WAAW,OAAO,WAAW,CAAC;AACnC,cAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AACpC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,YAC1C;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,SAAS,MAC7B;AACI,eAAO,UAAU,kBAAkB,MACnC;AACI,iBAAO,KAAK,eAAe,CAACA,WAC5B;AACI,kBAAM,SAAmB,CAAC,GAAG,GAAG,CAAC;AACjC,kBAAM,WAA6B,SAAS,OAAO,MAAM;AACzD,kBAAM,SAA2B,SAAS,IAAI,OAAK,IAAI,EAAE;AACzD,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,YAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AACpC,YAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AAEpC,uBAAW,SAAS,QACpB;AACI,cAAAA,OAAK,WAAW,OAAO,KAAK,EAAE,MAAM,CAAC;AACrC,cAAAA,OAAK,WAAW,OAAO,WAAW,CAAC;AACnC,cAAAA,OAAK,WAAW,OAAO,WAAW,CAAC;AACnC,cAAAA,OAAK,YAAY,QAAQ,IAAI,OAAO,WAAW,CAAC;AAChD,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,OAAO,SAAS,WAAW,CAAC;AAAA,YACjD;AAEA,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,YAAY,OAAO,KAAK,EAAE,MAAM,CAAC;AACtC,cAAAA,OAAK,WAAW,OAAO,WAAW,CAAC;AACnC,cAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AACpC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,YAC1C;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,WAAW,CAACA,WACxB;AACI,kBAAM,SAAmB,CAAC,GAAG,GAAG,CAAC;AACjC,kBAAM,WAA6B,SAAS,OAAO,MAAM,EAAE,MAAM,EAAE,MAAM;AACzE,kBAAM,SAA2B,SAAS,IAAI,OAAK,IAAI,EAAE;AACzD,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,YAAY,OAAO,CAAC,GAAG,SAAS,WAAW,CAAC;AACjD,YAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AACpC,YAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AAEpC,uBAAW,SAAS,QACpB;AACI,cAAAA,OAAK,WAAW,OAAO,KAAK,EAAE,MAAM,CAAC;AACrC,cAAAA,OAAK,WAAW,OAAO,WAAW,CAAC;AACnC,cAAAA,OAAK,WAAW,OAAO,WAAW,CAAC;AACnC,cAAAA,OAAK,YAAY,QAAQ,IAAI,OAAO,WAAW,CAAC;AAChD,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,OAAO,SAAS,WAAW,CAAC;AAAA,YACjD;AAEA,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,YAAY,OAAO,KAAK,EAAE,MAAM,CAAC;AACtC,cAAAA,OAAK,WAAW,OAAO,WAAW,CAAC;AACnC,cAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AACpC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,YAC1C;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,aAAa,MACjC;AACI,eAAO,KAAK,mCAAmC,CAACA,WAChD;AACI,gBAAM,WAA6B,SAAS,OAAO,CAAC,CAAC;AACrD,gBAAM,kBAAoC,SAAS,QAAQ,CAAC,UAC5D;AACI,kBAAM,SAAmB,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,OAAO,KAC3B;AACI,qBAAO,KAAK,MAAM,SAAS,CAAC;AAAA,YAChC;AACA,mBAAO;AAAA,UACX,CAAC;AACD,UAAAA,OAAK,YAAY,gBAAgB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,QAC1D,CAAC;AAED,eAAO,KAAK,+BAA+B,CAACA,WAC5C;AACI,gBAAM,WAA6B,SAAS,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM;AACrE,gBAAM,kBAAoC,SAAS,QAAQ,CAAC,UAC5D;AACI,kBAAM,SAAmB,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,OAAO,KAC3B;AACI,qBAAO,KAAK,MAAM,SAAS,CAAC;AAAA,YAChC;AACA,mBAAO;AAAA,UACX,CAAC;AACD,UAAAA,OAAK,YAAY,gBAAgB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,QAC1D,CAAC;AAED,eAAO,KAAK,uCAAuC,CAACA,WACpD;AACI,gBAAM,WAA6B,SAAS,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC5D,gBAAM,kBAAoC,SAAS,QAAQ,CAAC,UAC5D;AACI,kBAAM,SAAmB,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,OAAO,KAC3B;AACI,qBAAO,KAAK,MAAM,SAAS,CAAC;AAAA,YAChC;AACA,mBAAO;AAAA,UACX,CAAC;AACD,UAAAA,OAAK,YAAY,gBAAgB,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAAA,QACtF,CAAC;AAED,eAAO,KAAK,mCAAmC,CAACA,WAChD;AACI,gBAAM,WAA6B,SAAS,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM;AAC5E,gBAAM,kBAAoC,SAAS,QAAQ,CAAC,UAC5D;AACI,kBAAM,SAAmB,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,OAAO,KAC3B;AACI,qBAAO,KAAK,MAAM,SAAS,CAAC;AAAA,YAChC;AACA,mBAAO;AAAA,UACX,CAAC;AACD,UAAAA,OAAK,YAAY,gBAAgB,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAAA,QACtF,CAAC;AAED,eAAO,KAAK,yDAAyD,CAACA,WACtE;AACI,gBAAM,WAA6B,SAAS,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM;AAC/E,gBAAM,kBAAoC,SAAS,QAAQ,CAAC,UAC5D;AACI,kBAAM,SAAmB,CAAC;AAC1B,gBAAI,QAAQ,MAAM,GAClB;AACI,uBAAS,IAAI,GAAG,IAAI,OAAO,KAC3B;AACI,uBAAO,KAAK,MAAM,SAAS,CAAC;AAAA,cAChC;AAAA,YACJ;AACA,mBAAO;AAAA,UACX,CAAC;AACD,UAAAA,OAAK,YAAY,gBAAgB,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;AAAA,QAC5E,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,WAAW,MAC/B;AACI,eAAO,UAAU,qBAAqB,MACtC;AACI,mBAAS,eAAe,UAAsC,UAC9D;AACI,mBAAO,KAAK,QAAQ,OAAO,SAAS,QAAQ,CAAC,IAAI,CAACA,WAClD;AACI,oBAAM,WAA6B,SAAS,OAAO,QAAQ;AAC3D,uBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,gBAAAA,OAAK,aAAa,MAAM;AAAE,2BAAS,MAAM,EAAE,MAAM;AAAA,gBAAG,GAAG,QAAQ;AAAA,cACnE;AAAA,YACJ,CAAC;AAAA,UACL;AAEA;AAAA,YACI,CAAC;AAAA,YACD,IAAI,WAAW;AAAA,UACnB;AAEA,mBAAS,UAAa,UAAiC,UACvD;AACI,mBAAO,KAAK,QAAQ,OAAO,SAAS,QAAQ,CAAC,IAAI,CAACA,WAClD;AACI,oBAAM,WAAwB,SAAS,OAAO,QAAQ;AACtD,uBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,gBAAAA,OAAK,YAAY,SAAS,MAAM,EAAE,MAAM,GAAG,QAAQ;AAAA,cACvD;AAAA,YACJ,CAAC;AAAA,UACL;AAEA,oBAAU,CAAC,CAAC,GAAG,CAAC;AAChB,oBAAU,CAAC,GAAG,CAAC,GAAG,CAAC;AACnB,oBAAU,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AAAA,QAChC,CAAC;AAED,eAAO,UAAU,2BAA2B,MAC5C;AACI,mBAAS,eAAkB,UAAiC,WAAkC,UAC9F;AACI,mBAAO,KAAK,QAAQ,OAAO,SAAS,QAAQ,CAAC,QAAQ,WAAW,IAAI,cAAc,CAACA,WACnF;AACI,oBAAM,WAAwB,SAAS,OAAO,QAAQ;AACtD,uBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,gBAAAA,OAAK,aAAa,MAClB;AACI,2BAAS,MAAM,SAAS,EAAE,MAAM;AAAA,gBACpC,GAAG,QAAQ;AAAA,cACf;AAAA,YACJ,CAAC;AAAA,UACL;AAEA,mBAAS,MAAM,OACf;AACI,mBAAO,QAAQ,MAAM;AAAA,UACzB;AAEA,mBAAS,OAAO,OAChB;AACI,mBAAO,QAAQ,MAAM;AAAA,UACzB;AAEA;AAAA,YACI,CAAC;AAAA,YACD;AAAA,YACA,IAAI,WAAW;AAAA,UACnB;AACA;AAAA,YACI,CAAC;AAAA,YACD;AAAA,YACA,IAAI,WAAW;AAAA,UACnB;AACA;AAAA,YACI,CAAC,CAAC;AAAA,YACF;AAAA,YACA,IAAI,cAAc,yEAAyE;AAAA,UAC/F;AACA;AAAA,YACI,CAAC,GAAG,CAAC;AAAA,YACL;AAAA,YACA,IAAI,cAAc,yEAAyE;AAAA,UAC/F;AAEA,mBAAS,UAAa,UAAiC,WAAkC,UACzF;AACI,mBAAO,KAAK,QAAQ,OAAO,SAAS,QAAQ,CAAC,QAAQ,WAAW,IAAI,cAAc,CAACA,WACnF;AACI,oBAAM,WAAwB,SAAS,OAAO,QAAQ;AACtD,uBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,gBAAAA,OAAK,YAAY,SAAS,MAAM,SAAS,EAAE,MAAM,GAAG,QAAQ;AAAA,cAChE;AAAA,YACJ,CAAC;AAAA,UACL;AAEA,oBAAU,CAAC,CAAC,GAAG,OAAO,CAAC;AACvB,oBAAU,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;AAC3B,oBAAU,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;AAC1B,oBAAU,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC;AACjC,oBAAU,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC;AAAA,QACpC,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,gBAAgB,MACpC;AACI,iBAAS,cAAc,UAAsC,eAAuB,UACpF;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,UAAU,aAAa,CAAC,CAAC,IAAI,CAACA,WAClE;AACI,kBAAM,WAA6B,SAAS,OAAO,QAAQ;AAC3D,YAAAA,OAAK,aAAa,MAAM,SAAS,KAAK,aAAa,GAAG,QAAQ;AAAA,UAClE,CAAC;AAAA,QACL;AAEA,sBAAc,CAAC,GAAG,QAAY,IAAI;AAAA,UAC9B;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,sBAAc,CAAC,GAAG,MAAO,IAAI;AAAA,UACzB;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,sBAAc,CAAC,GAAG,KAAK,IAAI;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,sBAAc,CAAC,GAAG,IAAI,IAAI;AAAA,UACtB;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,iBAAS,SAAS,UAAsC,eAAuB,UAC/E;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,UAAU,aAAa,CAAC,CAAC,IAAI,CAACA,WAClE;AACI,kBAAM,WAA6B,SAAS,OAAO,QAAQ;AAC3D,kBAAM,eAAiC,SAAS,KAAK,aAAa;AAClE,YAAAA,OAAK,YAAY,UAAU,aAAa,QAAQ,EAAE,MAAM,CAAC;AAAA,UAC7D,CAAC;AAAA,QACL;AAEA,iBAAS,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,iBAAS,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,iBAAS,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,iBAAS,CAAC,KAAK,KAAK,GAAG,GAAG,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC;AAC5C,iBAAS,CAAC,KAAK,KAAK,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AACvC,iBAAS,CAAC,KAAK,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AAClC,iBAAS,CAAC,KAAK,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;AAC/B,iBAAS,CAAC,KAAK,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,MACnC,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;AAEO,SAAS,cAAiB,QAAoB,SACrD;AACI,SAAO,SAAS,eAAe,MAC/B;AACI,WAAO,aAAa,aAAa,CAACA,WAClC;AACI,YAAM,WAAwB,QAAQ;AACtC,MAAAA,OAAK,6BAA6B,QAAQ;AAC1C,MAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,MAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,MAAAA,OAAK,aAAa,MAAM,SAAS,WAAW,GAAG,IAAI;AAAA,QAC/C;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AAED,WAAO,aAAa,WAAW,CAACA,WAChC;AACI,YAAM,WAAwB,QAAQ;AACtC,eAAS,IAAY,GAAG,IAAI,GAAG,KAC/B;AACI,cAAM,cAA2B,SAAS,MAAM,EAAE,MAAM;AACxD,QAAAA,OAAK,WAAW,aAAa,QAAQ;AACrC,QAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,QAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,MAC1C;AAAA,IACJ,CAAC;AAED,WAAO,aAAa,iBAAiB,MACrC;AACI,aAAO,UAAU,cAAc,MAC/B;AACI,eAAO,KAAK,eAAe,CAACA,WAC5B;AACI,gBAAM,WAAwB,QAAQ;AACtC,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK;AAAA,cAAa,MAAM,SAAS,YAAY;AAAA,cACzC,IAAI;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACJ;AAAA,YAAC;AACL,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,UAC1C;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,WAAW,CAACA,WACxB;AACI,gBAAM,WAAwB,QAAQ,EAAE,MAAM,EAAE,MAAM;AACtD,UAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK;AAAA,cAAa,MAAM,SAAS,YAAY;AAAA,cACzC,IAAI;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACJ;AAAA,YAAC;AACL,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,UAC1C;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAED,WAAO,aAAa,UAAU,MAC9B;AACI,aAAO,UAAU,cAAc,MAC/B;AACI,eAAO,KAAK,eAAe,CAACA,WAC5B;AACI,gBAAM,WAAwB,QAAQ;AACtC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK,YAAY,SAAS,KAAK,EAAE,MAAM,CAAC;AACxC,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,UAC1C;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,WAAW,CAACA,WACxB;AACI,gBAAM,WAAwB,QAAQ,EAAE,MAAM,EAAE,MAAM;AACtD,UAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK,YAAY,SAAS,KAAK,EAAE,MAAM,CAAC;AACxC,YAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,UAC1C;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAAA,IAEL,CAAC;AAED,WAAO,aAAa,uBAAuB,CAACA,WAC5C;AACI,YAAM,WAAwB,QAAQ;AACtC,MAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,MAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,YAAM,aAAoC,SAAS,OAAO,QAAQ,EAAE;AACpE,MAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,MAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,eAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAM,SAAsC,WAAW,KAAK;AAC5D,QAAAA,OAAK,YAAY,OAAO,MAAM,IAAI;AAClC,QAAAA,OAAK,gBAAgB,OAAO,KAAK;AACjC,QAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,QAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,MAC1C;AAAA,IACJ,CAAC;AAED,WAAO,aAAa,SAAS,CAACA,WAC9B;AACI,YAAM,WAAwB,QAAQ;AACtC,MAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,MAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,MAAAA,OAAK,YAAY,SAAS,IAAI,EAAE,MAAM,CAAC;AAEvC,MAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,MAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,IAC1C,CAAC;AAED,WAAO,aAAa,cAAc,CAACA,WACnC;AACI,YAAM,WAAwB,QAAQ;AACtC,MAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,MAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,eAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,QAAAA,OAAK,YAAY,SAAS,SAAS,EAAE,MAAM,GAAG,CAAC;AAC/C,QAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,QAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,MAC1C;AAAA,IACJ,CAAC;AAED,WAAO,aAAa,aAAa,CAACA,WAClC;AACI,YAAM,WAAwB,QAAQ;AACtC,MAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,MAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,eAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAM,QAAa,SAAS,QAAQ,EAAE,MAAM;AAC5C,QAAAA,OAAK,YAAY,OAAO,CAAC,CAAC;AAC1B,QAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,QAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,MAC1C;AAAA,IACJ,CAAC;AAED,WAAO,aAAa,WAAW,MAC/B;AACI,aAAO,KAAK,4BAA4B,CAACA,WACzC;AACI,cAAM,WAAwB,QAAQ;AACtC,QAAAA,OAAK,aAAa,MAAM,SAAS,MAAM,MAAU,GAAG,IAAI;AAAA,UACpD;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,QAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,QAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,MAC1C,CAAC;AAED,aAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,cAAM,WAAwB,QAAQ;AACtC,QAAAA,OAAK,aAAa,MAAM,SAAS,MAAM,IAAK,GAAG,IAAI;AAAA,UAC/C;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,QAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,QAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,MAC1C,CAAC;AAED,aAAO,UAAU,cAAc,MAC/B;AACI,eAAO,KAAK,eAAe,CAACA,WAC5B;AACI,gBAAM,WAAwB,QAAQ;AAEtC,gBAAM,SAAsB,SAAS,MAAM,CAAC,UAAa,UAAU,MAAS;AAC5E,UAAAA,OAAK,6BAA6B,MAAM;AACxC,UAAAA,OAAK,cAAc,QAAQ,QAAQ;AACnC,UAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AACpC,UAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AACpC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,UAAAA,OAAK,YAAY,OAAO,KAAK,EAAE,MAAM,CAAC;AACtC,UAAAA,OAAK,WAAW,OAAO,WAAW,CAAC;AACnC,UAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AACpC,UAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,QAC1C,CAAC;AAED,eAAO,KAAK,WAAW,CAACA,WACxB;AACI,gBAAM,WAAwB,QAAQ,EAAE,MAAM,EAAE,MAAM;AACtD,UAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,gBAAM,SAAsB,SAAS,MAAM,CAAC,UAAa,UAAU,MAAS;AAC5E,UAAAA,OAAK,6BAA6B,MAAM;AACxC,UAAAA,OAAK,cAAc,QAAQ,QAAQ;AACnC,UAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AACpC,UAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AACpC,UAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,UAAAA,OAAK,YAAY,OAAO,KAAK,EAAE,MAAM,CAAC;AACtC,UAAAA,OAAK,WAAW,OAAO,WAAW,CAAC;AACnC,UAAAA,OAAK,YAAY,OAAO,WAAW,CAAC;AACpC,UAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,QAC1C,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAED,WAAO,aAAa,SAAS,MAC7B;AACI,aAAO,KAAK,kBAAkB,CAACA,WAC/B;AACI,cAAM,WAAwB,QAAQ;AACtC,QAAAA,OAAK,aAAa,MAAM,SAAS,IAAI,MAAU,GAAG,IAAI;AAAA,UAClD;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,QAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,QAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,MAC1C,CAAC;AAED,aAAO,KAAK,aAAa,CAACA,WAC1B;AACI,cAAM,WAAwB,QAAQ;AACtC,QAAAA,OAAK,aAAa,MAAM,SAAS,IAAI,IAAK,GAAG,IAAI;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,QAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,QAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,MAC1C,CAAC;AAED,aAAO,UAAU,cAAc,MAC/B;AACI,eAAO,KAAK,eAAe,CAACA,WAC5B;AACI,gBAAM,WAAwB,QAAQ;AACtC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,gBAAM,cAAgC,SAAS,IAAI,OAAK,CAAC;AACzD,UAAAA,OAAK,YAAY,YAAY,WAAW,CAAC;AACzC,UAAAA,OAAK,YAAY,YAAY,WAAW,CAAC;AACzC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,QAC1C,CAAC;AAED,eAAO,KAAK,WAAW,CAACA,WACxB;AACI,gBAAM,WAAwB,QAAQ,EAAE,MAAM,EAAE,MAAM;AACtD,UAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,gBAAM,cAAgC,SAAS,IAAI,OAAK,CAAC;AACzD,UAAAA,OAAK,YAAY,YAAY,WAAW,CAAC;AACzC,UAAAA,OAAK,YAAY,YAAY,WAAW,CAAC;AACzC,UAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAEtC,UAAAA,OAAK,YAAY,YAAY,KAAK,EAAE,MAAM,CAAC;AAC3C,UAAAA,OAAK,WAAW,YAAY,WAAW,CAAC;AACxC,UAAAA,OAAK,YAAY,YAAY,WAAW,CAAC;AACzC,UAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,QAC1C,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ADvjCO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,gBAAgB,MAChC;AACI,WAAO,SAAS,gBAAgB,MAChC;AACI,oBAAc,QAAQ,MAAM,UAAU,OAAO,MAAM;AAAA,MAAC,CAAC,CAAC;AAEtD,aAAO,aAAa,YAAY,MAChC;AACI,eAAO,KAAK,kBAAkB,CAACA,WAC/B;AACI,UAAAA,OAAK,aAAa,MAAM,UAAU,OAAO,MAAU,GAAG,IAAI;AAAA,YACtD;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,KAAK,aAAa,CAACA,WAC1B;AACI,UAAAA,OAAK,aAAa,MAAM,UAAU,OAAO,IAAK,GAAG,IAAI;AAAA,YACjD;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,KAAK,sEAAsE,CAACA,WACnF;AACI,gBAAM,YAA6B,UAAU,OAAO,MAAM;AAAA,UAAC,CAAC;AAC5D,UAAAA,OAAK,6BAA6B,SAAS;AAC3C,UAAAA,OAAK,YAAY,CAAC,GAAG,UAAU,QAAQ,EAAE,MAAM,CAAC;AAAA,QACpD,CAAC;AAED,eAAO,KAAK,+CAA+C,CAACA,WAC5D;AACI,gBAAM,YAA+B,UAAU,OAAO,MAAM,EAAE;AAC9D,UAAAA,OAAK,6BAA6B,SAAS;AAC3C,UAAAA,OAAK,YAAY,CAAC,IAAI,IAAI,IAAI,EAAE,GAAG,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC;AAAA,QAC1E,CAAC;AAED,eAAO,KAAK,oDAAoD,CAACA,WACjE;AACI,cAAI,QAAgB;AACpB,gBAAM,YAA+B,UAAU,OAAO,MAAM,OAAO;AACnE,UAAAA,OAAK,6BAA6B,SAAS;AAC3C,UAAAA,OAAK,YAAY,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,GAAG,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC;AAAA,QAC9E,CAAC;AAED,eAAO,KAAK,iDAAiD,CAACA,WAC9D;AACI,gBAAM,YAA+B,UAAU,OAAO,aAAW,QAAQ,SAAS,EAAE,CAAC;AACrF,UAAAA,OAAK,6BAA6B,SAAS;AAC3C,UAAAA,OAAK,YAAY,CAAC,IAAI,IAAI,IAAI,EAAE,GAAG,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC;AAAA,QAC1E,CAAC;AAED,eAAO,KAAK,yDAAyD,CAACA,WACtE;AACI,gBAAM,YAA+B,UAAU,OAAO,aAAW;AAAE,oBAAQ,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;AAAA,UAAG,CAAC;AACrG,UAAAA,OAAK,6BAA6B,SAAS;AAC3C,UAAAA,OAAK,YAAY,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,GAAG,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC;AAAA,QAC9E,CAAC;AAED,eAAO,KAAK,qEAAqE,CAACA,WAClF;AACI,gBAAM,YAA+B,UAAU,OAAO,aACtD;AACI,oBAAQ,SAAS,EAAE;AACnB,YAAAA,OAAK,WAAW,QAAQ,WAAW,CAAC;AACpC,YAAAA,OAAK,YAAY,IAAI,QAAQ,WAAW,CAAC;AACzC,mBAAO;AAAA,UACX,CAAC;AACD,UAAAA,OAAK,6BAA6B,SAAS;AAC3C,UAAAA,OAAK,YAAY,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,GAAG,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC;AAAA,QAC9E,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AErFA;AAAA;AAAA,cAAAC;AAAA;AAIO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,iBAAiB,MACjC;AACI,WAAO,SAAS,cAAc,MAC9B;AACI,aAAO,KAAK,YAAY,CAACA,WACzB;AACI,cAAM,SAAqB,WAAW,OAAO;AAC7C,QAAAA,OAAK,6BAA6B,MAAM;AAAA,MAC5C,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ACjBA;AAAA;AAAA,cAAAC;AAAA;;;ACGO,SAASC,OAAK,QAAoB,SACzC;AACI,SAAO,SAAS,2BAA2B,MAC3C;AACI,WAAO,SAAS,wBAAwB,MACxC;AAAA,IACA,CAAC;AAAA,EACL,CAAC;AACL;;;ADJO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,mCAAmC,MACnD;AACI,WAAO,SAAS,gCAAgC,MAChD;AACI,MAA0BA,OAAK,QAAQ,6BAA6B,MAAM;AAE1E,aAAO,aAAa,YAAY,CAACA,WACjC;AACI,cAAM,cAA4C,6BAA6B,OAAO;AACtF,QAAAA,OAAK,6BAA6B,WAAW;AAC7C,QAAAA,OAAK,YAAY,IAAI,YAAY,eAAe,CAAC;AACjD,QAAAA,OAAK,YAAY,MAAM,YAAY,mBAAmB,CAAC;AAAA,MAC3D,CAAC;AAED,aAAO,aAAa,sBAAsB,CAACA,WAC3C;AACI,cAAM,cAAc,6BAA6B,OAAO;AAExD,cAAM,UAAwC,YAAY,iBAAiB;AAC3E,QAAAA,OAAK,WAAW,aAAa,OAAO;AACpC,QAAAA,OAAK,YAAY,IAAI,YAAY,eAAe,CAAC;AAEjD,oBAAY,YAAY,cAAc,EAAE,MAAM;AAC9C,QAAAA,OAAK,YAAY,gBAAgB,YAAY,eAAe,CAAC;AAE7D,cAAM,UAAwC,YAAY,iBAAiB;AAC3E,QAAAA,OAAK,WAAW,aAAa,OAAO;AACpC,QAAAA,OAAK,YAAY,IAAI,YAAY,eAAe,CAAC;AAAA,MACrD,CAAC;AAED,aAAO,aAAa,wBAAwB,CAACA,WAC7C;AACI,cAAM,cAAc,6BAA6B,OAAO;AAExD,cAAM,UAAwC,YAAY,mBAAmB,GAAG;AAChF,QAAAA,OAAK,WAAW,aAAa,OAAO;AACpC,QAAAA,OAAK,YAAY,KAAK,YAAY,mBAAmB,CAAC;AACtD,QAAAA,OAAK,YAAY,IAAI,YAAY,eAAe,CAAC;AAEjD,cAAM,UAA8B,YAAY,YAAY,IAAI;AAChE,QAAAA,OAAK,YAAY,MAAM,YAAY,eAAe,CAAC;AACnD,iBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,UAAAA,OAAK,YAAY,GAAG,QAAQ,MAAM,CAAC;AACnC,UAAAA,OAAK,YAAY,MAAM,YAAY,eAAe,CAAC;AAAA,QACvD;AAEA,cAAM,UAA8B,YAAY,UAAU,IAAI;AAC9D,QAAAA,OAAK,YAAY,SAAS,YAAY,eAAe,CAAC;AACtD,iBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,UAAAA,OAAK,YAAY,GAAG,QAAQ,MAAM,CAAC;AACnC,UAAAA,OAAK,YAAY,SAAS,YAAY,eAAe,CAAC;AAAA,QAC1D;AAAA,MACJ,CAAC;AAED,aAAO,aAAa,iBAAiB,MACrC;AACI,iBAAS,gBAAgB,MACzB;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,IAAI,CAAC,IAAI,CAACA,WAC9C;AACI,kBAAM,sBAA8B,QAAQ;AAC5C,kBAAM,cAAc,6BAA6B,OAAO;AACxD,kBAAM,SAAiB,YAAY,YAAY,IAAI,EAAE,MAAM;AAC3D,YAAAA,OAAK,YAAY,oBAAoB,QAAQ,MAAM;AACnD,YAAAA,OAAK,YAAY,qBAAqB,YAAY,eAAe,CAAC;AAAA,UACtE,CAAC;AAAA,QACL;AAEA,wBAAgB,MAAU;AAC1B,wBAAgB,IAAK;AACrB,wBAAgB,EAAE;AAClB,wBAAgB,GAAG;AACnB,wBAAgB,KAAK;AAAA,MACzB,CAAC;AAED,aAAO,aAAa,eAAe,MACnC;AACI,iBAAS,cAAc,MAAc,iBACrC;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,IAAI,CAAC,GAAG,YAAY,eAAe,IAAI,KAAK,QAAQ,OAAO,SAAS,eAAe,CAAC,EAAE,IAAI,CAACA,WAC/H;AAEI,kBAAM,cAAc,6BAA6B,OAAO;AACxD,gBAAI,CAAC,YAAY,eAAe,GAChC;AACI,0BAAY,mBAAmB,eAAe;AAAA,YAClD;AACA,kBAAM,uBAA+B,QAAQ,MAAM,YAAY,mBAAmB;AAElF,kBAAM,SAAiB,YAAY,UAAU,IAAI,EAAE,MAAM;AACzD,YAAAA,OAAK,YAAY,oBAAoB,QAAQ,MAAM;AACnD,YAAAA,OAAK,YAAY,qBAAqB,YAAY,eAAe,CAAC;AAAA,UACtE,CAAC;AAAA,QACL;AAEA,sBAAc,MAAU;AACxB,sBAAc,IAAK;AACnB,sBAAc,EAAE;AAChB,sBAAc,GAAG;AACjB,sBAAc,KAAK;AACnB,sBAAc,OAAO,MAAM;AAC3B,sBAAc,OAAO,EAAE;AAAA,MAC3B,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AEpHA;AAAA;AAAA,cAAAC;AAAA;AAIO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,eAAe,MAC/B;AACI,WAAO,SAAS,eAAe,MAC/B;AACI,aAAO,aAAa,2CAA2C,MAC/D;AACI,eAAO,KAAK,qBAAqB,OAAOA,WACxC;AACI,gBAAM,WAA6B,SAAS,OAAO;AACnD,UAAAA,OAAK,6BAA6B,QAAQ;AAC1C,UAAAA,OAAK,YAAY,MAAM,SAAS,QAAQ,GAAG,CAAC,CAAC;AAC7C,UAAAA,OAAK,YAAY,MAAM,SAAS,SAAS,GAAG,CAAC;AAAA,QACjD,CAAC;AAED,eAAO,KAAK,oBAAoB,OAAOA,WACvC;AACI,gBAAM,WAA6B,SAAS,OAAe,CAAC,CAAC;AAC7D,UAAAA,OAAK,6BAA6B,QAAQ;AAC1C,UAAAA,OAAK,YAAY,MAAM,SAAS,QAAQ,GAAG,CAAC,CAAC;AAC7C,UAAAA,OAAK,YAAY,MAAM,SAAS,SAAS,GAAG,CAAC;AAAA,QACjD,CAAC;AAED,eAAO,KAAK,wBAAwB,OAAOA,WAC3C;AACI,gBAAM,WAA6B,SAAS,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC5D,UAAAA,OAAK,6BAA6B,QAAQ;AAC1C,UAAAA,OAAK,YAAY,MAAM,SAAS,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACpD,UAAAA,OAAK,YAAY,MAAM,SAAS,SAAS,GAAG,CAAC;AAAA,QACjD,CAAC;AAAA,MACL,CAAC;AAED,aAAO,UAAU,iBAAiB,MAClC;AACI,eAAO,UAAU,aAAa,MAC9B;AACI,iBAAO,KAAK,SAAS,CAACA,WACtB;AACI,kBAAM,WAA6B,SAAS,OAAO,CAAC,CAAC;AACrD,kBAAM,sBAAwC,SAAS,YAAY,CAAC,CAAC;AACrE,YAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,UAC9D,CAAC;AAED,iBAAO,KAAK,aAAa,CAACA,WAC1B;AACI,kBAAM,WAA6B,SAAS,OAAO,CAAC,CAAC;AACrD,kBAAM,sBAAwC,SAAS,YAAY,CAAC,CAAC,CAAC;AACtE,YAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AAAA,UAC/D,CAAC;AAED,iBAAO,KAAK,kBAAkB,CAACA,WAC/B;AACI,kBAAM,WAA6B,SAAS,OAAO,CAAC,CAAC;AACrD,kBAAM,sBAAwC,SAAS,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9E,YAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,UACrE,CAAC;AAAA,QACL,CAAC;AAED,eAAO,UAAU,iBAAiB,MAClC;AACI,iBAAO,KAAK,SAAS,CAACA,WACtB;AACI,kBAAM,WAA6B,SAAS,OAAO,CAAC,GAAG,CAAC,CAAC;AACzD,kBAAM,sBAAwC,SAAS,YAAY,CAAC,CAAC;AACrE,YAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,UAClE,CAAC;AAED,iBAAO,KAAK,aAAa,CAACA,WAC1B;AACI,kBAAM,WAA6B,SAAS,OAAO,CAAC,CAAC,CAAC;AACtD,kBAAM,sBAAwC,SAAS,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;AAC5E,YAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UACxE,CAAC;AAED,iBAAO,KAAK,kBAAkB,CAACA,WAC/B;AACI,kBAAM,WAA6B,SAAS,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC5D,kBAAM,sBAAwC,SAAS,YAAY,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;AACrF,YAAAA,OAAK,YAAY,oBAAoB,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UACrF,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,aAAa,MACjC;AACI,eAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,gBAAM,WAA6B,SAAS,OAAO,CAAC,CAAC;AACrD,gBAAM,kBAAoC,SAAS,QAAQ,CAAC,UAC5D;AACI,kBAAM,SAAmB,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,OAAO,KAC3B;AACI,qBAAO,KAAK,MAAM,SAAS,CAAC;AAAA,YAChC;AACA,mBAAO;AAAA,UACX,CAAC;AACD,UAAAA,OAAK,YAAY,gBAAgB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,QAC1D,CAAC;AAED,eAAO,KAAK,2BAA2B,CAACA,WACxC;AACI,gBAAM,WAA6B,SAAS,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAC5D,gBAAM,kBAAoC,SAAS,QAAQ,CAAC,UAC5D;AACI,kBAAM,SAAmB,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,OAAO,KAC3B;AACI,qBAAO,KAAK,MAAM,SAAS,CAAC;AAAA,YAChC;AACA,mBAAO;AAAA,UACX,CAAC;AACD,UAAAA,OAAK,YAAY,gBAAgB,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAAA,QACtF,CAAC;AAED,eAAO,KAAK,yDAAyD,CAACA,WACtE;AACI,gBAAM,WAA6B,SAAS,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAC/D,gBAAM,kBAAoC,SAAS,QAAQ,CAAC,UAC5D;AACI,kBAAM,SAAmB,CAAC;AAC1B,gBAAI,QAAQ,MAAM,GAClB;AACI,uBAAS,IAAI,GAAG,IAAI,OAAO,KAC3B;AACI,uBAAO,KAAK,MAAM,SAAS,CAAC;AAAA,cAChC;AAAA,YACJ;AACA,mBAAO;AAAA,UACX,CAAC;AACD,UAAAA,OAAK,YAAY,gBAAgB,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;AAAA,QAC5E,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC5IA;AAAA;AAAA,cAAAC;AAAA;;;ACAA;AAAA;AAAA;AAAA,cAAAC;AAAA;AAQO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,UAAU,MAC1B;AACI,WAAO,SAAS,oBAAoB,MACpC;AACI,aAAO,aAAa,YAAY,CAACA,WACjC;AACI,cAAM,MAAiC,IAAI,OAAO;AAClD,QAAAA,OAAK,WAAW,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC;AAAA,MAC7C,CAAC;AAED,eAAS,QAAQ,IAAI,MAAM;AAAA,IAC/B,CAAC;AAAA,EACL,CAAC;AACL;AAEO,SAAS,SAAS,QAAoB,SAC7C;AACI,SAAO,SAAS,oBAAoB,MACpC;AACI,WAAO,aAAa,aAAa,CAACA,WAClC;AACI,MAAAA,OAAK,6BAA6B,OAAO;AAEzC,YAAM,MAA0B,QAAQ;AACxC,MAAAA,OAAK,6BAA6B,GAAG;AACrC,MAAAA,OAAK,YAAY,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC;AAC1C,MAAAA,OAAK,WAAW,MAAM,GAAG,CAAC;AAAA,IAC9B,CAAC;AAED,WAAO,aAAa,qBAAqB,MACzC;AACI,aAAO,KAAK,mCAAmC,CAACA,WAChD;AACI,cAAM,MAA0B,QAAQ;AAExC,QAAAA,OAAK,YAAY,IAAI,YAAY,EAAE,EAAE,MAAM,CAAC;AAAA,MAChD,CAAC;AAAA,IACL,CAAC;AAED,WAAO,aAAa,aAAa,MACjC;AACI,aAAO,KAAK,mCAAmC,CAACA,WAChD;AACI,cAAM,MAA0B,QAAQ;AAExC,QAAAA,OAAK;AAAA,UAAa,MAAM,IAAI,IAAI,CAAC,EAAE,MAAM;AAAA,UACrC,IAAI;AAAA,YACA;AAAA,UAAqC;AAAA,QAAC;AAC9C,QAAAA,OAAK,YAAY,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC;AAAA,MAC9C,CAAC;AAAA,IACL,CAAC;AAED,WAAO,aAAa,cAAc,MAClC;AACI,eAAS,aAAa,KAAyB,UAC/C;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,GAAG,CAAC,IAAI,CAACA,WAC7C;AACI,UAAAA,OAAK,YAAY,IAAI,SAAS,GAAG,QAAQ;AAAA,QAC7C,CAAC;AAAA,MACL;AAEA,mBAAa,QAAQ,GAAG,IAAI;AAAA,IAChC,CAAC;AAED,WAAO,aAAa,iBAAiB,MACrC;AACI,eAAS,iBAAiB,KAAyB,UACnD;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,GAAG,CAAC,IAAI,OAAOA,WACnD;AACI,gBAAM,cAAgC,IAAI,YAAY;AACtD,UAAAA,OAAK,YAAY,MAAM,YAAY,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC;AAAA,QAC/D,CAAC;AAAA,MACL;AAEA,uBAAiB,QAAQ,GAAG,CAAC,CAAC;AAAA,IAClC,CAAC;AAED,WAAO,aAAa,mBAAmB,MACvC;AACI,eAAS,mBAAmB,KAAyB,UACrD;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,GAAG,CAAC,IAAI,OAAOA,WACnD;AACI,gBAAM,gBAAkC,IAAI,cAAc;AAC1D,UAAAA,OAAK,YAAY,MAAM,cAAc,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC;AAAA,QACjE,CAAC;AAAA,MACL;AAEA,yBAAmB,QAAQ,GAAG,CAAC,CAAC;AAAA,IACpC,CAAC;AAAA,EACL,CAAC;AACL;;;ADlGO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,uBAAuB,MACvC;AACI,WAAO,SAAS,iCAAiC,MACjD;AACI,aAAO,aAAa,YAAY,CAACA,WACjC;AACI,cAAM,MAAuC,iBAAiB,OAAO;AACrE,QAAAA,OAAK,YAAY,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC;AAAA,MAC9C,CAAC;AAED,eAAS,QAAQ,iBAAiB,MAAM;AAAA,IAC5C,CAAC;AAAA,EACL,CAAC;AACL;;;AEpBA;AAAA;AAAA,cAAAC;AAAA;AAOO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,WAAW,MAC3B;AACI,WAAO,SAAS,WAAW,MAC3B;AACI,aAAO,aAAa,qCAAqC,MACzD;AACI,eAAO,KAAK,qBAAqB,CAACA,WAClC;AACI,gBAAM,OAAqB,KAAK,OAAO;AACvC,UAAAA,OAAK,6BAA6B,IAAI;AACtC,UAAAA,OAAK,YAAY,KAAK,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;AAC3C,UAAAA,OAAK,YAAY,KAAK,SAAS,GAAG,IAAI;AACtC,UAAAA,OAAK,YAAY,KAAK,SAAS,EAAE,MAAM,GAAG,CAAC;AAAA,QAC/C,CAAC;AAED,eAAO,KAAK,kBAAkB,CAACA,WAC/B;AACI,gBAAM,OAAqB,KAAK,OAAO,MAAS;AAChD,UAAAA,OAAK,6BAA6B,IAAI;AACtC,UAAAA,OAAK,YAAY,KAAK,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;AAC3C,UAAAA,OAAK,YAAY,KAAK,SAAS,GAAG,IAAI;AACtC,UAAAA,OAAK,YAAY,KAAK,SAAS,EAAE,MAAM,GAAG,CAAC;AAAA,QAC/C,CAAC;AAED,eAAO,KAAK,oBAAoB,CAACA,WACjC;AACI,gBAAM,OAAqB,KAAK,OAAe,CAAC,CAAC;AACjD,UAAAA,OAAK,6BAA6B,IAAI;AACtC,UAAAA,OAAK,YAAY,KAAK,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;AAC3C,UAAAA,OAAK,WAAW,KAAK,SAAS,GAAG,IAAI;AACrC,UAAAA,OAAK,WAAW,KAAK,SAAS,EAAE,MAAM,GAAG,CAAC;AAAA,QAC9C,CAAC;AAED,eAAO,KAAK,wBAAwB,CAACA,WACrC;AACI,gBAAM,OAAqB,KAAK,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAChD,UAAAA,OAAK,6BAA6B,IAAI;AACtC,UAAAA,OAAK,YAAY,KAAK,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAClD,UAAAA,OAAK,WAAW,KAAK,SAAS,GAAG,SAAS;AAC1C,UAAAA,OAAK,WAAW,KAAK,SAAS,EAAE,MAAM,GAAG,CAAC;AAAA,QAC9C,CAAC;AAED,eAAO,KAAK,0BAA0B,CAACA,WACvC;AACI,gBAAM,OAAqB,KAAK,OAAO,KAAK,OAAO,CAAC;AACpD,UAAAA,OAAK,6BAA6B,IAAI;AACtC,UAAAA,OAAK,YAAY,KAAK,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;AAC3C,UAAAA,OAAK,WAAW,KAAK,SAAS,GAAG,IAAI;AACrC,UAAAA,OAAK,WAAW,KAAK,SAAS,EAAE,MAAM,GAAG,CAAC;AAAA,QAC9C,CAAC;AAED,eAAO,KAAK,8BAA8B,CAACA,WAC3C;AACI,gBAAM,OAAqB,KAAK,OAAO,KAAK,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC7D,UAAAA,OAAK,6BAA6B,IAAI;AACtC,UAAAA,OAAK,YAAY,KAAK,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAClD,UAAAA,OAAK,WAAW,WAAW,IAAI,CAAC;AAChC,UAAAA,OAAK,WAAW,KAAK,SAAS,GAAG,SAAS;AAC1C,UAAAA,OAAK,WAAW,KAAK,SAAS,EAAE,MAAM,GAAG,CAAC;AAAA,QAC9C,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,iBAAiB,MACrC;AACI,iBAAS,aAAa,MAAoB,OAAe,OAAe,eACxE;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,MAAM,OAAO,KAAK,CAAC,CAAC,IAAI,CAACA,WAC7D;AACI,kBAAM,aAA2B,KAAK,OAAO,IAAI;AACjD,YAAAA,OAAK,aAAa,MAAM,KAAK,IAAI,OAAO,KAAK,GAAG,aAAa;AAC7D,YAAAA,OAAK,YAAY,MAAM,UAAU;AAAA,UACrC,CAAC;AAAA,QACL;AAEA,qBAAa,KAAK,OAAO,GAAG,IAAI,GAAG,IAAI;AAAA,UACnC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,qBAAa,KAAK,OAAO,GAAG,GAAG,GAAG,IAAI;AAAA,UAClC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,qBAAa,KAAK,OAAO,GAAG,GAAG,GAAG,IAAI;AAAA,UAClC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,qBAAa,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;AAAA,UACtC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,qBAAa,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI;AAAA,UACrC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,iBAAS,QAAQ,MAAoB,OAAe,OAAe,UACnE;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,MAAM,OAAO,KAAK,CAAC,CAAC,IAAI,CAACA,WAC7D;AACI,kBAAM,YAA0B,KAAK,IAAI,OAAO,KAAK;AACrD,YAAAA,OAAK,WAAW,MAAM,SAAS;AAC/B,YAAAA,OAAK,YAAY,KAAK,QAAQ,EAAE,MAAM,GAAG,QAAQ;AAAA,UACrD,CAAC;AAAA,QACL;AAEA,gBAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AACnC,gBAAQ,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AACzC,gBAAQ,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,MAC7C,CAAC;AAED,aAAO,aAAa,eAAe,MACnC;AACI,iBAAS,aAAa,MAAoB,OAAe,eACzD;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAACA,WACtD;AACI,kBAAM,aAA2B,KAAK,OAAO,IAAI;AACjD,YAAAA,OAAK,aAAa,MAAM,KAAK,IAAI,KAAK,GAAG,aAAa;AACtD,YAAAA,OAAK,YAAY,MAAM,UAAU;AAAA,UACrC,CAAC;AAAA,QACL;AAEA,qBAAa,KAAK,OAAO,GAAG,IAAI,IAAI;AAAA,UAChC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,qBAAa,KAAK,OAAO,GAAG,GAAG,IAAI;AAAA,UAC/B;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,qBAAa,KAAK,OAAO,GAAG,GAAG,IAAI;AAAA,UAC/B;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,qBAAa,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI;AAAA,UACnC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,qBAAa,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI;AAAA,UAClC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,iBAAS,QAAQ,MAAoB,OAAe,UACpD;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAACA,WACtD;AACI,YAAAA,OAAK,WAAW,KAAK,IAAI,KAAK,EAAE,MAAM,GAAG,QAAQ;AAAA,UACrD,CAAC;AAAA,QACL;AAEA,gBAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC9B,gBAAQ,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACjC,gBAAQ,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAAA,MACrC,CAAC;AAED,aAAO,aAAa,UAAU,MAC9B;AACI,iBAAS,QAAQ,MAAoB,OAAe,UACpD;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAACA,WACtD;AACI,kBAAM,YAA0B,KAAK,IAAI,KAAK;AAC9C,YAAAA,OAAK,WAAW,WAAW,IAAI;AAC/B,YAAAA,OAAK,YAAY,KAAK,QAAQ,EAAE,MAAM,GAAG,QAAQ;AAAA,UACrD,CAAC;AAAA,QACL;AAEA,gBAAQ,KAAK,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;AAC7B,gBAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AACnC,gBAAQ,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,MAC7C,CAAC;AAED,aAAO,aAAa,aAAa,MACjC;AACI,iBAAS,WAAW,MAAoB,QAAoC,UAC5E;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,MAAM,MAAM,CAAC,CAAC,IAAI,CAACA,WACvD;AACI,kBAAM,YAA0B,KAAK,OAAO,MAAM;AAClD,YAAAA,OAAK,WAAW,WAAW,IAAI;AAC/B,YAAAA,OAAK,YAAY,KAAK,QAAQ,EAAE,MAAM,GAAG,QAAQ;AAAA,UACrD,CAAC;AAAA,QACL;AAEA,mBAAW,KAAK,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAClC,mBAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxC,mBAAW,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9C,mBAAW,KAAK,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxC,mBAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9C,mBAAW,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAEpD,mBAAW,KAAK,OAAO,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,mBAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,mBAAW,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC3D,mBAAW,KAAK,OAAO,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,mBAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC3D,mBAAW,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,MACrE,CAAC;AAED,aAAO,aAAa,oBAAoB,MACxC;AACI,iBAAS,gBAAgB,MAAoB,OAAe,OAAe,UAC3E;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,MAAM,OAAO,KAAK,CAAC,CAAC,IAAI,CAACA,WAC7D;AACI,kBAAM,aAA2B,KAAK,OAAO,IAAI;AACjD,YAAAA,OAAK,aAAa,MAAM,KAAK,OAAO,OAAO,KAAK,GAAG,QAAQ;AAC3D,YAAAA,OAAK,YAAY,MAAM,UAAU;AAAA,UACrC,CAAC;AAAA,QACL;AAEA,wBAAgB,KAAK,OAAO,GAAG,IAAI,GAAG,IAAI;AAAA,UACtC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,wBAAgB,KAAK,OAAO,GAAG,GAAG,GAAG,IAAI;AAAA,UACrC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,wBAAgB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;AAAA,UACzC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,wBAAgB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI;AAAA,UACxC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,iBAAS,WAAW,MAAoB,OAAe,OAAe,UACtE;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,MAAM,OAAO,KAAK,CAAC,CAAC,IAAI,CAACA,WAC7D;AACI,kBAAM,eAA6B,KAAK,OAAO,OAAO,KAAK;AAC3D,YAAAA,OAAK,WAAW,cAAc,IAAI;AAClC,YAAAA,OAAK,YAAY,KAAK,QAAQ,EAAE,MAAM,GAAG,QAAQ;AAAA,UACrD,CAAC;AAAA,QACL;AAEA,mBAAW,KAAK,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AACnC,mBAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AACzC,mBAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AACzC,mBAAW,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/C,mBAAW,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/C,mBAAW,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,MACnD,CAAC;AAED,aAAO,aAAa,uBAAuB,MAC3C;AACI,iBAAS,mBAAmB,MAAoB,OAAe,QAAqC,UACpG;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,MAAM,OAAO,MAAM,CAAC,CAAC,IAAI,CAACA,WAC9D;AACI,kBAAM,aAA2B,KAAK,OAAO,IAAI;AACjD,YAAAA,OAAK,aAAa,MAAM,KAAK,UAAU,OAAO,MAAM,GAAG,QAAQ;AAC/D,YAAAA,OAAK,YAAY,MAAM,UAAU;AAAA,UACrC,CAAC;AAAA,QACL;AAEA,2BAAmB,KAAK,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI;AAAA,UAC3C;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,2BAAmB,KAAK,OAAO,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI;AAAA,UAC1C;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,2BAAmB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI;AAAA,UAC9C;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,2BAAmB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,iBAAS,cAAc,MAAoB,OAAe,QAAoC,UAC9F;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,MAAM,OAAO,MAAM,CAAC,CAAC,IAAI,CAACA,WAC9D;AACI,kBAAM,eAA6B,KAAK,UAAU,OAAO,MAAM;AAC/D,YAAAA,OAAK,WAAW,cAAc,IAAI;AAClC,YAAAA,OAAK,YAAY,KAAK,QAAQ,EAAE,MAAM,GAAG,QAAQ;AAAA,UACrD,CAAC;AAAA,QACL;AAEA,sBAAc,KAAK,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AACtC,sBAAc,KAAK,OAAO,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,sBAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9C,sBAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9C,sBAAc,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACpD,sBAAc,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACpD,sBAAc,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACpD,sBAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACpD,sBAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACpD,sBAAc,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAE1D,sBAAc,KAAK,OAAO,GAAG,GAAG,KAAK,OAAO,GAAG,CAAC,CAAC;AACjD,sBAAc,KAAK,OAAO,GAAG,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,sBAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3D,sBAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3D,sBAAc,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACjE,sBAAc,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACjE,sBAAc,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACjE,sBAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACjE,sBAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACjE,sBAAc,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,MAC3E,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ACjVA;AAAA;AAAA,cAAAC;AAAA;AAMO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,kBAAkB,MAClC;AACI,WAAO,SAAS,+BAA+B,MAC/C;AACI,aAAO,aAAa,8CAA8C,MAClE;AACI,iBAAS,gBAAgC,UAAkB,eAAiC,SAAqC,UACjI;AACI,iBAAO,KAAK,UAAU,CAACA,WACvB;AACI,YAAAA,OAAK,aAAa,MAAM,YAAY,OAAO,eAAe,OAAO,GAAG,QAAQ;AAAA,UAChF,CAAC;AAAA,QACL;AAEA;AAAA,UACI;AAAA,UACA;AAAA,UACA,CAAC,UAAkB,MAAM,SAAS;AAAA,UAClC,IAAI;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QAAC;AACL;AAAA,UACI;AAAA,UACA;AAAA,UACA,CAAC,UAAkB,MAAM,SAAS;AAAA,UAClC,IAAI;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QAAC;AAEL,eAAO,KAAK,qBAAqB,CAACA,WAClC;AACI,gBAAM,gBAAkC,SAAS,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AACjE,UAAAA,OAAK,YAAY,cAAc,WAAW,CAAC;AAC3C,UAAAA,OAAK,YAAY,cAAc,WAAW,CAAC;AAE3C,gBAAM,WAAuC,YAAY,OAAO,eAAe,CAAC,UAAkB,MAAM,SAAS,CAAC;AAClH,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,UAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AAAA,QAC1C,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ACtDA;AAAA;AAAA,cAAAC;AAAA;AAWO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,uBAAuB,MACvC;AACI,WAAO,SAAS,oBAAoB,MACpC;AACI,aAAO,aAAa,YAAY,CAACA,WACjC;AACI,cAAM,KAAuB,iBAAiB,OAAO;AACrD,QAAAA,OAAK,6BAA6B,EAAE;AAAA,MACxC,CAAC;AAED,aAAO,aAAa,0BAA0B,MAC9C;AACI,iBAAS,8BAA8B,UAAkB,mBAAsC,UAC/F;AACI,iBAAO,KAAK,UAAU,CAACA,WACvB;AACI,kBAAM,KAAuB,iBAAiB,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,GAAG,qBAAqB,iBAAiB,GAAG,QAAQ;AAAA,UAChF,CAAC;AAAA,QACL;AAEA,sCAA8B,kBAAkB,QAAY,IAAI;AAAA,UAC5D;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,sCAA8B,aAAa,MAAO,IAAI;AAAA,UAClD;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,oBAAoB,CAACA,WACjC;AACI,gBAAM,KAAuB,iBAAiB,OAAO;AACrD,UAAAA,OAAK,YAAY,WAAW,GAAG,cAAc,OAAO,CAAC;AAErD,aAAG;AAAA,YACC,kBAAkB,OAAO,EACpB,IAAI,UAAU,CAAC,UAAkB,MAAM,KAAK,KAAK;AAAA,UAC1D;AACA,UAAAA,OAAK,YAAY,eAAe,GAAG,cAAc,OAAO,CAAC;AAAA,QAC7D,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,uBAAuB,MAC3C;AACI,iBAAS,2BAA2B,UAAkB,gBAAgC,UACtF;AACI,iBAAO,KAAK,UAAU,CAACA,WACvB;AACI,kBAAM,KAAuB,iBAAiB,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,GAAG,kBAAkB,cAAc,GAAG,QAAQ;AAAA,UAC1E,CAAC;AAAA,QACL;AAEA,mCAA2B,kBAAkB,QAAY,IAAI;AAAA,UACzD;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,mCAA2B,aAAa,MAAO,IAAI;AAAA,UAC/C;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,oBAAoB,CAACA,WACjC;AACI,gBAAM,KAAuB,iBAAiB,OAAO;AACrD,UAAAA,OAAK,YAAY,GAAG,SAAS,GAAG,CAAC,CAAC;AAClC,UAAAA,OAAK,YAAY,GAAG,SAAS,GAAG,CAAC,CAAC;AAClC,UAAAA,OAAK,WAAW,GAAG,SAAS,GAAG,CAAC,CAAC;AAEjC,aAAG;AAAA,YACC,eAAe,OAAO,EACjB,IAAI,CAAC,MAAe,UACrB;AACI,qBAAO,SAAS,IAAI,KAAK,SAAS,KAAK,IACjC,OAAO,MAAM,QAAQ,IACrB;AAAA,YACV,CAAC;AAAA,UACT;AAEA,UAAAA,OAAK,WAAW,GAAG,SAAS,GAAG,CAAC,CAAC;AACjC,UAAAA,OAAK,YAAY,GAAG,SAAS,GAAG,CAAC,CAAC;AAClC,UAAAA,OAAK,WAAW,GAAG,SAAS,GAAG,CAAC,CAAC;AAAA,QACrC,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,4BAA4B,MAChD;AACI,iBAAS,gCAAgC,UAAkB,qBAAmD,UAC9G;AACI,iBAAO,KAAK,UAAU,CAACA,WACvB;AACI,kBAAM,KAAuB,iBAAiB,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,GAAG,uBAAuB,mBAAmB,GAAG,QAAQ;AAAA,UACpF,CAAC;AAAA,QACL;AAEA,wCAAgC,kBAAkB,QAAY,IAAI;AAAA,UAC9D;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,wCAAgC,aAAa,MAAO,IAAI;AAAA,UACpD;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,gBAAM,KAAuB,iBAAiB,OAAO;AACrD,UAAAA,OAAK,aAAa,MAAM,GAAG,YAAY,GAAG,CAAC,CAAC;AAE5C,aAAG,uBAAuB,CAAC,YAC3B;AACI,mBAAO,MAAM,SAAS,OAAO,QAAQ;AAAA,UACzC,CAAC;AAED,aAAG;AAAA,YACC,eAAe,OAAO,EACjB,IAAI,CAAC,MAAe,UACrB;AACI,qBAAO,SAAS,IAAI,KAAK,SAAS,KAAK,IACjC,OAAO,MAAM,QAAQ,IACrB;AAAA,YACV,CAAC;AAAA,UACT;AAEA,UAAAA,OAAK,WAAW,GAAG,SAAS,GAAG,CAAC,CAAC;AACjC,UAAAA,OAAK,YAAY,GAAG,SAAS,GAAG,CAAC,CAAC;AAClC,UAAAA,OAAK,WAAW,GAAG,SAAS,GAAG,CAAC,CAAC;AAAA,QACrC,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,qBAAqB,MACzC;AACI,eAAO,KAAK,kBAAkB,CAACA,WAC/B;AACI,gBAAM,KAAuB,iBAAiB,OAAO;AACrD,aAAG,gBAAgB,MAAS;AAAA,QAChC,CAAC;AAED,iBAAS,yBAAyB,OAAgB,UAClD;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,kBAAM,KAAuB,iBAAiB,OAAO;AACrD,YAAAA,OAAK,aAAa,MAAM,GAAG,gBAAgB,KAAK,GAAG,QAAQ;AAAA,UAC/D,CAAC;AAAA,QACL;AAEA,iCAAyB,MAAM,IAAI,MAAM,KAAK,MAAM;AAAA,UAChD;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,iCAAyB,OAAO,IAAI,MAAM,KAAK,MAAM;AAAA,UACjD;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AACH,iCAAyB,OAAO,IAAI,MAAM,KAAK,MAAM;AAAA,UACjD;AAAA,UACA;AAAA,QACJ,CAAC,CAAC,CAAC;AAAA,MACP,CAAC;AAED,aAAO,aAAa,wBAAwB,MAC5C;AACI,eAAO,KAAK,kBAAkB,CAACA,WAC/B;AACI,gBAAM,KAAuB,iBAAiB,OAAO;AACrD,UAAAA,OAAK;AAAA,YACD,MAAM,GAAG,mBAAmB,MAAS;AAAA,YACrC,IAAI,MAAM,KAAK,MAAM;AAAA,cACjB;AAAA,cACA;AAAA,YACJ,CAAC,CAAC;AAAA,UACN;AAAA,QACJ,CAAC;AAED,iBAAS,uBAAuB,OAChC;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,kBAAM,KAAuB,iBAAiB,OAAO;AACrD,eAAG,mBAAmB,KAAK;AAAA,UAC/B,CAAC;AAAA,QACL;AAEA,+BAAuB,IAAI;AAC3B,+BAAuB,EAAE;AACzB,+BAAuB,KAAK;AAAA,MAChC,CAAC;AAED,aAAO,aAAa,cAAc,MAClC;AACI,iBAAS,aAAa,MAAe,OAAgB,UACrD;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAACA,WACtD;AACI,kBAAM,KAAuB,iBAAiB,OAAO;AACrD,YAAAA,OAAK,YAAY,GAAG,SAAS,MAAM,KAAK,GAAG,QAAQ;AAAA,UACvD,CAAC;AAAA,QACL;AAEA,qBAAa,QAAW,QAAW,IAAI;AACvC,qBAAa,GAAG,GAAG,IAAI;AACvB,qBAAa,MAAM,MAAM,IAAI;AAC7B,qBAAa,CAAC,GAAG,CAAC,GAAG,IAAI;AAEzB,qBAAa,QAAW,IAAI,KAAK;AACjC,qBAAa,GAAG,GAAG,KAAK;AACxB,qBAAa,OAAO,MAAM,KAAK;AAC/B,qBAAa,EAAC,GAAE,EAAC,GAAG,EAAC,GAAE,EAAC,GAAG,KAAK;AAAA,MACpC,CAAC;AAED,aAAO,aAAa,mBAAmB,MACvC;AACI,iBAAS,kBAAkB,OAAgB,UAC3C;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,kBAAM,KAAuB,iBAAiB,OAAO;AACrD,YAAAA,OAAK,YAAY,UAAU,GAAG,cAAc,KAAK,CAAC;AAAA,UACtD,CAAC;AAAA,QACL;AAEA,0BAAkB,QAAW,WAAW;AACxC,0BAAkB,MAAM,MAAM;AAC9B,0BAAkB,GAAG,GAAG;AACxB,0BAAkB,OAAO,OAAO;AAChC,0BAAkB,CAAC,GAAG,IAAI;AAC1B,0BAAkB,EAAC,GAAE,IAAG,GAAG,WAAW;AAAA,MAC1C,CAAC;AAED,aAAO,aAAa,iBAAiB,MACrC;AACI,eAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,gBAAM,KAAuB,iBAAiB,OAAO;AACrD,gBAAM,QAAe,GAAG,YAAY;AAAA,YAChC,QAAQ;AAAA,YACR,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,SAAS;AAAA,UACb,CAAC;AACD,UAAAA,OAAK,YAAY,OAAO,IAAI,MAAM,KAAK,MAAM;AAAA,YACzC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC,CAAC;AAAA,QACP,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AChRA;AAAA;AAAA;AAAA,cAAAC;AAAA;AASO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,iBAAiB,MACjC;AACI,WAAO,SAAS,2BAA2B,MAC3C;AACI,aAAO,aAAa,YAAY,CAACA,WACjC;AACI,cAAM,MAAiC,WAAW,OAAO;AACzD,QAAAA,OAAK,WAAW,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC;AAAA,MAC7C,CAAC;AAED,sBAAgB,QAAQ,WAAW,MAAM;AAAA,IAC7C,CAAC;AAAA,EACL,CAAC;AACL;AAEO,SAAS,gBAAgB,QAAoB,SACpD;AACI,SAAO,SAAS,2BAA2B,MAC3C;AACI,aAAS,QAAQ,OAAO;AAExB,WAAO,aAAa,aAAa,CAACA,WAClC;AACI,MAAAA,OAAK,6BAA6B,OAAO;AAEzC,YAAM,MAAiC,QAAQ;AAC/C,MAAAA,OAAK,6BAA6B,GAAG;AACrC,MAAAA,OAAK,YAAY,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC;AAC1C,MAAAA,OAAK,WAAW,MAAM,GAAG,CAAC;AAAA,IAC9B,CAAC;AAED,WAAO,aAAa,qBAAqB,MACzC;AACI,aAAO,KAAK,mCAAmC,CAACA,WAChD;AACI,cAAM,MAAiC,QAAQ;AAE/C,QAAAA,OAAK,YAAY,IAAI,YAAY,EAAE,EAAE,MAAM,CAAC;AAAA,MAChD,CAAC;AAED,aAAO,KAAK,4BAA4B,CAACA,WACzC;AACI,cAAM,MAAiC,QAAQ,EAAE,IAAI,IAAI,OAAO;AAEhE,QAAAA,OAAK,WAAW,IAAI,YAAY,EAAE,EAAE,MAAM,CAAC;AAAA,MAC/C,CAAC;AAAA,IACL,CAAC;AAED,WAAO,aAAa,aAAa,MACjC;AACI,aAAO,KAAK,4BAA4B,CAACA,WACzC;AACI,cAAM,MAAiC,QAAQ,EAAE,IAAI,GAAG,KAAK;AAC7D,QAAAA,OAAK,YAAY,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC;AAC1C,QAAAA,OAAK,YAAY,IAAI,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK;AAC1C,QAAAA,OAAK,YAAY,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC;AAAA,MAC9C,CAAC;AAED,aAAO,KAAK,mCAAmC,CAACA,WAChD;AACI,cAAM,MAAiC,QAAQ;AAE/C,QAAAA,OAAK;AAAA,UAAa,MAAM,IAAI,IAAI,CAAC,EAAE,MAAM;AAAA,UACrC,IAAI;AAAA,YACA;AAAA,UAAqC;AAAA,QAAC;AAC9C,QAAAA,OAAK,YAAY,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC;AAAA,MAC9C,CAAC;AAAA,IACL,CAAC;AAED,WAAO,aAAa,oBAAoB,MACxC;AACI,eAAS,QAAQ,KAAgC,KAAa,OAC9D;AACI,eAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,IAAI,CAACA,WAC1D;AACI,gBAAM,YAAuC,IAAI,IAAI,KAAK,KAAK;AAC/D,UAAAA,OAAK,WAAW,WAAW,GAAG;AAC9B,UAAAA,OAAK,WAAW,IAAI,IAAI,GAAG,EAAE,MAAM,GAAG,KAAK;AAAA,QAC/C,CAAC;AAAA,MACL;AAEA,cAAQ,QAAQ,GAAG,GAAG,MAAM;AAC5B,cAAQ,QAAQ,GAAG,GAAG,GAAG;AACzB,cAAQ,QAAQ,GAAG,IAAI,cAAc;AAErC,cAAQ,QAAQ,GAAG,QAAY,OAAO;AACtC,cAAQ,QAAQ,GAAG,MAAO,MAAM;AAChC,cAAQ,QAAQ,GAAG,IAAI,MAAU;AACjC,cAAQ,QAAQ,GAAG,IAAI,IAAK;AAE5B,cAAQ,QAAQ,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,KAAK;AAAA,IAC3C,CAAC;AAED,WAAO,aAAa,cAAc,MAClC;AACI,eAAS,aAAa,KAAgC,UACtD;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,GAAG,CAAC,IAAI,CAACA,WAC7C;AACI,UAAAA,OAAK,YAAY,IAAI,SAAS,GAAG,QAAQ;AAAA,QAC7C,CAAC;AAAA,MACL;AAEA,mBAAa,QAAQ,GAAG,IAAI;AAC5B,mBAAa,QAAQ,EAAE,IAAI,GAAG,KAAK,GAAG,WAAW;AACjD,mBAAa,QAAQ,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,KAAK,GAAG,iBAAiB;AAAA,IACvE,CAAC;AAED,WAAO,aAAa,iBAAiB,MACrC;AACI,eAAS,iBAAiB,KAAgC,UAC1D;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,GAAG,CAAC,IAAI,OAAOA,WACnD;AACI,gBAAM,cAAgC,IAAI,YAAY;AACtD,UAAAA,OAAK,YAAY,MAAM,YAAY,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC;AAAA,QAC/D,CAAC;AAAA,MACL;AAEA,uBAAiB,QAAQ,GAAG,CAAC,CAAC;AAC9B,uBAAiB,QAAQ,EAAE,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,uBAAiB,QAAQ,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/D,uBAAiB,QAAQ,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,IAC7E,CAAC;AAED,WAAO,aAAa,mBAAmB,MACvC;AACI,eAAS,mBAAmB,KAAgC,UAC5D;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,GAAG,CAAC,IAAI,OAAOA,WACnD;AACI,gBAAM,gBAAkC,IAAI,cAAc;AAC1D,UAAAA,OAAK,YAAY,MAAM,cAAc,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC;AAAA,QACjE,CAAC;AAAA,MACL;AAEA,yBAAmB,QAAQ,GAAG,CAAC,CAAC;AAChC,yBAAmB,QAAQ,EAAE,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC;AACrD,yBAAmB,QAAQ,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,GAAG,KAAK,GAAG,CAAC,QAAQ,KAAK,CAAC;AAC1E,yBAAmB,QAAQ,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC;AAAA,IACrF,CAAC;AAAA,EACL,CAAC;AACL;;;ACzJA;AAAA;AAAA,cAAAC;AAAA;AAIO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,oBAAoB,MACpC;AACI,WAAO,SAAS,iBAAiB,MACjC;AACI,aAAO,aAAa,4BAA4B,MAChD;AACI,eAAO,KAAK,qBAAqB,CAACA,WAClC;AACI,gBAAM,QAAuB,IAAI,cAAc;AAC/C,UAAAA,OAAK,6BAA6B,KAAK;AACvC,UAAAA,OAAK,YAAY,MAAM,MAAM,OAAO;AACpC,UAAAA,OAAK,YAAY,MAAM,SAAS,EAAE;AAClC,UAAAA,OAAK,6BAA6B,MAAM,KAAK;AAAA,QACjD,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ACvBA;AAAA;AAAA,cAAAC;AAAA;AAIO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,yBAAyB,MACzC;AACI,WAAO,SAAS,mBAAmB,MAAM,MACzC;AACI,aAAO,aAAa,iCAAiC,MACrD;AACI,eAAO,KAAK,qBAAqB,CAACA,WAClC;AACI,gBAAM,QAA4B,IAAI,mBAAmB;AACzD,UAAAA,OAAK,6BAA6B,KAAK;AACvC,UAAAA,OAAK,YAAY,MAAM,MAAM,OAAO;AACpC,UAAAA,OAAK,YAAY,MAAM,SAAS,EAAE;AAClC,UAAAA,OAAK,6BAA6B,MAAM,KAAK;AAAA,QACjD,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ACvBA;AAAA;AAAA,cAAAC;AAAA;AAIO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,wBAAwB,MACxC;AACI,WAAO,SAAS,qBAAqB,MACrC;AACI,aAAO,aAAa,iCAAiC,MACrD;AACI,eAAO,KAAK,qBAAqB,CAACA,WAClC;AACI,gBAAM,QAA2B,IAAI,kBAAkB;AACvD,UAAAA,OAAK,6BAA6B,KAAK;AACvC,UAAAA,OAAK,YAAY,MAAM,MAAM,OAAO;AACpC,UAAAA,OAAK,YAAY,MAAM,SAAS,EAAE;AAClC,UAAAA,OAAK,6BAA6B,MAAM,KAAK;AAAA,QACjD,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ACjBO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,yBAAyB,MACzC;AACI,WAAO,SAAS,yBAAyB,MACzC;AACI,aAAO,aAAa,YAAY,MAChC;AACI,iBAAS,gBAAmB,UAAkB,SAAqB,UACnE;AACI,iBAAO,KAAK,UAAU,CAACA,WACvB;AACI,YAAAA,OAAK,aAAa,MAAM,mBAAmB,OAAO,OAAO,GAAG,QAAQ;AAAA,UACxE,CAAC;AAAA,QACL;AAEA,wBAAgB,kBAAkB,QAAY,IAAI;AAAA,UAC9C;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,wBAAgB,aAAa,MAAO,IAAI;AAAA,UACpC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,gBAAgB,OAAOA,WACnC;AACI,gBAAM,SAAqC,mBAAmB,OAAO,QAAQ,QAAQ,CAAC,CAAC;AACvF,UAAAA,OAAK,6BAA6B,MAAM;AAExC,gBAAM,QAAgB,MAAM;AAC5B,UAAAA,OAAK,YAAY,GAAG,KAAK;AAAA,QAC7B,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,UAAU,MAC9B;AACI,eAAO,KAAK,qBAAqB,OAAOA,WACxC;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,gBAAM,aAAyC,aAAa,KAAK,MAAM,OAAO;AAC9E,gBAAMA,OAAK,kBAAkB,YAAY,IAAI,MAAM,KAAK,CAAC;AAAA,QAC7D,CAAC;AAED,eAAO,KAAK,wDAAwD,OAAOA,WAC3E;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,cAAI,UAAkB;AACtB,gBAAM,aAAyC,aAAa,KAAK,MAAM;AAAE;AAAW,mBAAO;AAAA,UAAS,CAAC;AACrG,UAAAA,OAAK,YAAY,GAAG,OAAO;AAC3B,gBAAMA,OAAK,kBAAkB,YAAY,IAAI,MAAM,KAAK,CAAC;AACzD,UAAAA,OAAK,YAAY,GAAG,SAAS,0EAA0E;AAAA,QAC3G,CAAC;AAED,eAAO,KAAK,sFAAsF,OAAOA,WACzG;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,gBAAM,aAAyC,aAAa,KAAK,MAAM,OAAO;AAC9E,UAAAA,OAAK,YAAY,SAAS,MAAM,UAAU;AAAA,QAC9C,CAAC;AAED,eAAO,KAAK,mFAAmF,OAAOA,WACtG;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,gBAAM,aAAyC,aAAa,KAAK,CAAC,cAAsB,WAAW,GAAG,SAAS,CAAC;AAChH,UAAAA,OAAK,YAAY,KAAK,MAAM,UAAU;AAAA,QAC1C,CAAC;AAED,eAAO,KAAK,qGAAqG,OAAOA,WACxH;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,cAAI,UAAkB;AACtB,gBAAM,aAAyC,aAAa,KAAK,CAAC,aAAqB;AAAE;AAAW,oBAAQ,WAAW,GAAG,SAAS;AAAA,UAAG,CAAC;AACvI,UAAAA,OAAK,YAAY,GAAG,OAAO;AAE3B,gBAAM,mBAAmB,MAAM;AAC/B,UAAAA,OAAK,YAAY,GAAG,OAAO;AAE3B,UAAAA,OAAK,YAAY,KAAK,MAAM,UAAU;AACtC,UAAAA,OAAK,YAAY,GAAG,OAAO;AAAA,QAC/B,CAAC;AAED,eAAO,KAAK,uDAAuD,OAAOA,WAC1E;AACI,gBAAM,eAA2C,mBAAmB,MAAM,EAAE;AAC5E,cAAI,UAAkB;AACtB,gBAAM,aAAyC,aAAa,KAAK,CAAC,aAClE;AACI;AACA,kBAAM,IAAI,MAAM,QAAQ,QAAQ,KAAK,OAAO,EAAE;AAAA,UAClD,CAAC;AACD,UAAAA,OAAK,YAAY,SAAS,CAAC;AAE3B,gBAAM,mBAAmB,MAAM;AAC/B,UAAAA,OAAK,YAAY,SAAS,CAAC;AAE3B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,YAAY,IAAI,MAAM,YAAY,CAAC;AAChE,YAAAA,OAAK,YAAY,SAAS,CAAC;AAAA,UAC/B;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,aAAa,MACjC;AACI,eAAO,KAAK,qBAAqB,OAAOA,WACxC;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,cAAI,UAAkB;AACtB,gBAAM,gBAA4C,aAAa,QAAQ,MAAM;AAAE;AAAA,UAAW,CAAC;AAC3F,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,eAAe,IAAI,MAAM,KAAK,CAAC;AAC5D,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,sFAAsF,OAAOA,WACzG;AACI,gBAAM,eAA2C,mBAAmB,MAAM,EAAE;AAC5E,cAAI,UAAkB;AACtB,gBAAM,gBAA4C,aAAa,QAAQ,MAAM;AAAE;AAAA,UAAW,CAAC;AAC3F,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK,WAAW,IAAI,MAAM,aAAa;AACvC,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,mFAAmF,OAAOA,WACtG;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,cAAI,UAAkB;AACtB,gBAAM,gBAA4C,aAAa,QAAQ,CAAC,aAAqB;AAAE,uBAAW;AAAA,UAAU,CAAC;AACrH,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK,WAAW,MAAM,eAAe,CAAC;AACtC,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,0DAA0D,OAAOA,WAC7E;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,cAAI,UAAkB;AACtB,gBAAM,gBAA4C,aAAa,QAAQ,CAAC,aACxE;AACI,uBAAW;AACX,kBAAM,IAAI,MAAM,aAAa,QAAQ,EAAE;AAAA,UAC3C,CAAC;AACD,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,eAAe,IAAI,MAAM,aAAa,CAAC;AACpE,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,WAAW,MAC/B;AACI,eAAO,KAAK,4BAA4B,CAACA,WACzC;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,UAAAA,OAAK;AAAA,YAAa,MAAM,aAAa,MAAM,QAAY,MAAM,CAAC;AAAA,YAC1D,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAmB;AAAA,UAAC;AAAA,QAChC,CAAC;AAED,eAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,UAAAA,OAAK;AAAA,YAAa,MAAM,aAAa,MAAM,MAAO,MAAM,CAAC;AAAA,YACrD,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAc;AAAA,UAAC;AAAA,QAC3B,CAAC;AAED,eAAO,KAAK,qBAAqB,OAAOA,WACxC;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,gBAAM,cAA0C,aAAa,MAAM,OAAO,MAAM,EAAE;AAClF,UAAAA,OAAK,WAAW,MAAM,aAAa,EAAE;AAAA,QACzC,CAAC;AAED,eAAO,KAAK,2DAA2D,OAAOA,WAC9E;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,cAAI,UAAkB;AACtB,gBAAM,cAA0C,aAAa,MAAM,MAAM;AAAE;AAAW,mBAAO;AAAA,UAAI,CAAC;AAClG,UAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK,WAAW,MAAM,aAAa,EAAE;AACrC,YAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,gEAAgE,OAAOA,WACnF;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,cAAI,UAAkB;AACtB,gBAAM,cAA0C,aAAa,MAAM,CAAC,UACpE;AACI,gBAAI,iBAAiB,OACrB;AACI,yBAAW,MAAM,QAAQ;AAAA,YAC7B,OAEA;AACI,yBAAW;AAAA,YACf;AACA,mBAAO;AAAA,UACX,CAAC;AACD,UAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK,WAAW,MAAM,aAAa,EAAE;AACrC,YAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,yDAAyD,OAAOA,WAC5E;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,cAAI,UAAkB;AACtB,gBAAM,cAA0C,aAAa,MAAM,OAAO,MAAM;AAAE;AAAW,mBAAO;AAAA,UAAI,CAAC;AACzG,UAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK,WAAW,MAAM,aAAa,EAAE;AACrC,YAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,mFAAmF,OAAOA,WACtG;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtG,gBAAM,cAA0C,aAAa,MAAM,OAAO,MAAM,CAAC;AACjF,UAAAA,OAAK,WAAW,MAAM,aAAa,CAAC;AAAA,QACxC,CAAC;AAED,eAAO,KAAK,gFAAgF,OAAOA,WACnG;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtG,gBAAM,cAA0C,aAAa,MAAM,OAAO,CAAC,UAAiB,MAAM,QAAQ,MAAM;AAChH,UAAAA,OAAK,WAAW,MAAM,aAAa,CAAC;AAAA,QACxC,CAAC;AAED,eAAO,KAAK,yDAAyD,OAAOA,WAC5E;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,gBAAM,cAA0C,aAAa,MAAM,mBAAmB,MAAM,EAAE;AAC9F,gBAAMA,OAAK,kBAAkB,aAAa,IAAI,MAAM,KAAK,CAAC;AAAA,QAC9D,CAAC;AAED,eAAO,KAAK,wDAAwD,OAAOA,WAC3E;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtG,gBAAM,cAA0C,aAAa,MAAM,YAAY,MAAM,EAAE;AACvF,gBAAMA,OAAK,kBAAkB,aAAa,IAAI,kBAAkB,KAAK,CAAC;AAAA,QAC1E,CAAC;AAED,eAAO,KAAK,kCAAkC,OAAOA,WACrD;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtG,gBAAM,cAA0C,aAAa,MAAM,OAAO,MAAM;AAAE,kBAAM,IAAI,UAAU,KAAK;AAAA,UAAG,CAAC;AAC/G,gBAAMA,OAAK,kBAAkB,aAAa,IAAI,UAAU,KAAK,CAAC;AAAA,QAClE,CAAC;AAED,eAAO,KAAK,0BAA0B,OAAOA,WAC7C;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,gBAAM,cAA0C,aAAa,MAAM,OAAO,MAAM,CAAC;AACjF,UAAAA,OAAK,WAAW,MAAM,aAAa,CAAC;AAAA,QACxC,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,aAAa,MACjC;AACI,eAAO,KAAK,4BAA4B,CAACA,WACzC;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,UAAAA,OAAK;AAAA,YAAa,MAAM,aAAa,QAAQ,QAAY,MAAM;AAAA,YAAE,CAAC;AAAA,YAC9D,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAmB;AAAA,UAAC;AAAA,QAChC,CAAC;AAED,eAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,UAAAA,OAAK;AAAA,YAAa,MAAM,aAAa,QAAQ,MAAO,MAAM;AAAA,YAAE,CAAC;AAAA,YACzD,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAc;AAAA,UAAC;AAAA,QAC3B,CAAC;AAED,eAAO,KAAK,2DAA2D,OAAOA,WAC9E;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,cAAI,UAAkB;AACtB,gBAAM,cAA0C,aAAa,QAAQ,MAAM;AAAE;AAAA,UAAW,CAAC;AACzF,UAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,aAAa,IAAI,MAAM,KAAK,CAAC;AAC1D,YAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,gEAAgE,OAAOA,WACnF;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,cAAI,UAAkB;AACtB,gBAAM,cAA0C,aAAa,QAAQ,CAAC,UACtE;AACI,gBAAI,iBAAiB,OACrB;AACI,yBAAW,MAAM,QAAQ;AAAA,YAC7B,OAEA;AACI,yBAAW;AAAA,YACf;AAAA,UACJ,CAAC;AACD,UAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,aAAa,IAAI,MAAM,KAAK,CAAC;AAC1D,YAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,mFAAmF,OAAOA,WACtG;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtG,cAAI,UAAkB;AACtB,gBAAM,cAA0C,aAAa,QAAQ,OAAO,MAAM;AAAE;AAAA,UAAW,CAAC;AAChG,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,aAAa,IAAI,kBAAkB,KAAK,CAAC;AACtE,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,gFAAgF,OAAOA,WACnG;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtG,cAAI,UAAkB;AACtB,gBAAM,cAA0C,aAAa,QAAQ,OAAO,CAAC,UAAiB;AAAE,uBAAW,MAAM,QAAQ;AAAA,UAAQ,CAAC;AAClI,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,aAAa,IAAI,kBAAkB,KAAK,CAAC;AACtE,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,yDAAyD,OAAOA,WAC5E;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,cAAI,UAAkB;AACtB,gBAAM,cAA0C,aAAa,QAAQ,mBAAmB,MAAM;AAAE;AAAA,UAAW,CAAC;AAC5G,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,aAAa,IAAI,MAAM,KAAK,CAAC;AAC1D,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,wDAAwD,OAAOA,WAC3E;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtG,cAAI,UAAkB;AACtB,gBAAM,cAA0C,aAAa,QAAQ,YAAY,MAAM;AAAE;AAAA,UAAW,CAAC;AACrG,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,aAAa,IAAI,kBAAkB,KAAK,CAAC;AACtE,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,oCAAoC,OAAOA,WACvD;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtG,cAAI,UAAkB;AACtB,gBAAM,cAA0C,aAAa,QAAQ,OAAO,MAAM;AAAE;AAAW,kBAAM,IAAI,MAAM,KAAK;AAAA,UAAG,CAAC;AACxH,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,aAAa,IAAI,MAAM,KAAK,CAAC;AAC1D,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,0BAA0B,OAAOA,WAC7C;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,cAAI,UAAkB;AACtB,gBAAM,cAA0C,aAAa,QAAQ,OAAO,MAAM;AAAE;AAAA,UAAW,CAAC;AAChG,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK,WAAW,MAAM,aAAa,CAAC;AACpC,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,kBAAkB,MACtC;AACI,eAAO,KAAK,uCAAuC,CAACA,WACpD;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,UAAAA,OAAK;AAAA,YAAa,MAAM,aAAa,aAAa,MAAU;AAAA,YACxD,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAmB;AAAA,UAAC;AAAA,QAChC,CAAC;AAED,eAAO,KAAK,kCAAkC,CAACA,WAC/C;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,UAAAA,OAAK;AAAA,YAAa,MAAM,aAAa,aAAa,IAAK;AAAA,YACnD,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAc;AAAA,UAAC;AAAA,QAC3B,CAAC;AAED,eAAO,KAAK,0BAA0B,OAAOA,WAC7C;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,cAAI,UAAkB;AACtB,gBAAM,qBAAiD,aAAa,aAAa,CAAC,UAClF;AACI;AACA,mBAAO,IAAI,MAAM,GAAG,KAAK,QAAQ;AAAA,UACrC,CAAC;AACD,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK,WAAW,MAAM,oBAAoB,CAAC;AAC3C,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,2DAA2D,OAAOA,WAC9E;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,cAAI,UAAkB;AACtB,gBAAM,qBAAiD,aAAa,aAAa,CAAC,UAClF;AACI;AACA,mBAAO,IAAI,MAAM,GAAI,MAAgB,OAAO,QAAQ;AAAA,UACxD,CAAC;AACD,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,MAAM,WAAW,CAAC;AACvE,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,uDAAuD,OAAOA,WAC1E;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,cAAI,UAAkB;AACtB,gBAAM,qBAAiD,aAAa,aAAa,CAAC,UAClF;AACI;AACA,kBAAM,IAAI,MAAM,GAAI,MAAgB,OAAO,QAAQ;AAAA,UACvD,CAAC;AACD,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,MAAM,WAAW,CAAC;AACvE,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,0BAA0B,OAAOA,WAC7C;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,cAAI,UAAkB;AACtB,gBAAM,qBAAiD,aAAa,aAAa,OAAO,CAAC,UACzF;AACI;AACA,mBAAO,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ;AAAA,UAC7C,CAAC;AACD,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK,WAAW,MAAM,oBAAoB,CAAC;AAC3C,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,+EAA+E,OAAOA,WAClG;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,cAAI,UAAkB;AACtB,gBAAM,qBAAiD,aAAa,aAAa,OAAO,CAAC,UACzF;AACI;AACA,mBAAO,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ;AAAA,UAC7C,CAAC;AACD,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,MAAM,WAAW,CAAC;AACvE,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,+EAA+E,OAAOA,WAClG;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtG,cAAI,UAAkB;AACtB,gBAAM,qBAAiD,aAAa,aAAa,OAAO,CAAC,UACzF;AACI;AACA,mBAAO,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ;AAAA,UAC7C,CAAC;AACD,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,MAAM,WAAW,CAAC;AACvE,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,4EAA4E,OAAOA,WAC/F;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtG,cAAI,UAAkB;AACtB,gBAAM,qBAAiD,aAAa,aAAa,WAAW,CAAC,UAC7F;AACI;AACA,mBAAO,IAAI,MAAM,GAAG,KAAK,QAAQ;AAAA,UACrC,CAAC;AACD,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,kBAAkB,KAAK,CAAC;AAC7E,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,2EAA2E,OAAOA,WAC9F;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,cAAI,UAAkB;AACtB,gBAAM,qBAAiD,aAAa,aAAa,OAAO,CAAC,UACzF;AACI;AACA,kBAAM,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ;AAAA,UAC5C,CAAC;AACD,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,MAAM,WAAW,CAAC;AACvE,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,2EAA2E,OAAOA,WAC9F;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,UAAU,KAAK,CAAC;AAC9F,cAAI,UAAkB;AACtB,gBAAM,qBAAiD,aAAa,aAAa,OAAO,CAAC,UACzF;AACI;AACA,kBAAM,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ;AAAA,UAC5C,CAAC;AACD,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,MAAM,WAAW,CAAC;AACvE,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,wEAAwE,OAAOA,WAC3F;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,UAAU,KAAK,CAAC;AAC9F,cAAI,UAAkB;AACtB,gBAAM,qBAAiD,aAAa,aAAa,mBAAmB,MACpG;AACI;AACA,kBAAM,IAAI,MAAM,KAAK;AAAA,UACzB,CAAC;AACD,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,UAAU,KAAK,CAAC;AACrE,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,aAAa,MACjC;AACI,eAAO,KAAK,8DAA8D,OAAOA,WACjF;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,cAAI,UAAkB;AACtB,gBAAM,gBAA4C,aAAa,QAAQ,MAAM;AAAE;AAAA,UAAW,CAAC;AAC3F,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK,WAAW,MAAM,eAAe,CAAC;AACtC,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,0DAA0D,OAAOA,WAC7E;AACI,gBAAM,eAA2C,mBAAmB,MAAM,CAAC;AAC3E,cAAI,UAAkB;AACtB,gBAAM,gBAA4C,aAAa,QAAQ,MACvE;AACI;AACA,kBAAM,IAAI,WAAW,OAAO;AAAA,UAChC,CAAC;AACD,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,eAAe,IAAI,WAAW,OAAO,CAAC;AACnE,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,yDAAyD,OAAOA,WAC5E;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,cAAI,UAAkB;AACtB,gBAAM,gBAA4C,aAAa,QAAQ,MAAM;AAAE;AAAA,UAAW,CAAC;AAC3F,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,eAAe,IAAI,MAAM,KAAK,CAAC;AAC5D,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,qDAAqD,OAAOA,WACxE;AACI,gBAAM,eAA2C,mBAAmB,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1F,cAAI,UAAkB;AACtB,gBAAM,qBAAiD,aAAa,QAAQ,MAC5E;AACI;AACA,kBAAM,IAAI,WAAW,KAAK;AAAA,UAC9B,CAAC;AACD,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,WAAW,KAAK,CAAC;AACtE,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC/qBA;AAAA;AAAA,cAAAC;AAAA;AAIO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,eAAe,MAC/B;AACI,WAAO,SAAS,eAAe,MAC/B;AACI,aAAO,aAAa,YAAY,MAChC;AACI,eAAO,KAAK,qBAAqB,CAACA,WAClC;AACI,gBAAM,WAA6B,SAAS,OAAO,CAAC;AACpD,UAAAA,OAAK,YAAY,GAAG,SAAS,SAAS,CAAC;AAEvC,gBAAM,YAA8B,SAAS,SAAS,EAAE;AACxD,UAAAA,OAAK,WAAW,UAAU,SAAS;AACnC,UAAAA,OAAK,YAAY,IAAI,SAAS,SAAS,CAAC;AAExC,UAAAA,OAAK,YAAY,MAAM,SAAS,SAAS,CAAC;AAAA,QAC9C,CAAC;AAED,eAAO,KAAK,oCAAoC,CAACA,WACjD;AACI,cAAI,gBAAwB;AAE5B,gBAAM,WAA6B,SAAS;AAAA,YACxC,MAAM;AAAA,YACN,CAAC,UAAkB;AAAE,8BAAgB;AAAA,YAAO;AAAA,UAChD;AACA,UAAAA,OAAK,YAAY,SAAS,SAAS,SAAS,CAAC;AAE7C,gBAAM,YAA8B,SAAS,SAAS,OAAO;AAC7D,UAAAA,OAAK,WAAW,UAAU,SAAS;AACnC,UAAAA,OAAK,YAAY,SAAS,SAAS,SAAS,CAAC;AAC7C,UAAAA,OAAK,YAAY,SAAS,aAAa;AAEvC,UAAAA,OAAK,YAAY,SAAS,SAAS,SAAS,CAAC;AAAA,QACjD,CAAC;AAED,eAAO,KAAK,gBAAgB,CAACA,WAC7B;AACI,cAAI,gBAAwB;AAE5B,gBAAM,WAA6B,SAAS,OAAO;AAAA,YAC/C,QAAQ,MAAM;AAAA,YACd,QAAQ,CAAC,UAAkB;AAAE,8BAAgB;AAAA,YAAO;AAAA,UACxD,CAAC;AACD,UAAAA,OAAK,YAAY,SAAS,SAAS,SAAS,CAAC;AAE7C,gBAAM,YAA8B,SAAS,SAAS,OAAO;AAC7D,UAAAA,OAAK,WAAW,UAAU,SAAS;AACnC,UAAAA,OAAK,YAAY,SAAS,SAAS,SAAS,CAAC;AAC7C,UAAAA,OAAK,YAAY,SAAS,aAAa;AAEvC,UAAAA,OAAK,YAAY,SAAS,SAAS,SAAS,CAAC;AAAA,QACjD,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC9DA;AAAA;AAAA,cAAAC;AAAA;AAMO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,YAAY,MAC5B;AACI,WAAO,SAAS,YAAY,MAC5B;AACI,aAAO,aAAa,YAAY,CAACA,WACjC;AACI,cAAM,QAA2B,MAAM,OAAO;AAC9C,QAAAA,OAAK,6BAA6B,KAAK;AACvC,QAAAA,OAAK,YAAY,MAAM,IAAI,EAAE,MAAM,CAAC;AACpC,QAAAA,OAAK,aAAa,MAAM,MAAM,OAAO,EAAE,MAAM,GAAG,IAAI,WAAW,CAAC;AAAA,MACpE,CAAC;AAED,aAAO,aAAa,SAAS,CAACA,WAC9B;AACI,cAAM,QAA2B,MAAM,OAAO;AAC9C,cAAM,IAAI,EAAE,EAAE,MAAM;AACpB,QAAAA,OAAK,YAAY,IAAI,MAAM,OAAO,EAAE,MAAM,CAAC;AAAA,MAC/C,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC5BA;AAAA;AAAA,cAAAC;AAAA;AAOO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,uBAAuB,MACvC;AACI,WAAO,SAAS,oBAAoB,MACpC;AACI,aAAO,aAAa,YAAY,CAACA,WACjC;AACI,cAAM,aAA+B,iBAAiB,OAAO;AAC7D,QAAAA,OAAK,6BAA6B,UAAU;AAC5C,QAAAA,OAAK,YAAY,WAAW,WAAW,CAAC;AACxC,QAAAA,OAAK,YAAY,WAAW,UAAU,CAAC;AAAA,MAC3C,CAAC;AAED,aAAO,aAAa,aAAa,OAAOA,WACxC;AACI,cAAM,aAA+B,iBAAiB,OAAO;AAE7D,QAAAA,OAAK,WAAW,MAAM,WAAW,QAAQ,CAAC;AAC1C,QAAAA,OAAK,WAAW,WAAW,WAAW,CAAC;AACvC,QAAAA,OAAK,YAAY,WAAW,UAAU,CAAC;AAEvC,iBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,UAAAA,OAAK,YAAY,MAAM,WAAW,QAAQ,CAAC;AAC3C,UAAAA,OAAK,WAAW,WAAW,WAAW,CAAC;AACvC,UAAAA,OAAK,YAAY,WAAW,UAAU,CAAC;AAAA,QAC3C;AAAA,MACJ,CAAC;AAED,aAAO,aAAa,WAAW,MAC/B;AACI,eAAO,KAAK,iBAAiB,OAAOA,WACpC;AACI,gBAAM,aAA+B,iBAAiB,OAAO;AAC7D,UAAAA,OAAK,WAAW,MAAM,WAAW,QAAQ,CAAC;AAE1C,UAAAA,OAAK,aAAa,MAAM,WAAW,MAAM,GAAI,GAAG,IAAI;AAAA,YAChD;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AACD,UAAAA,OAAK,WAAW,WAAW,WAAW,CAAC;AACvC,UAAAA,OAAK,YAAY,WAAW,UAAU,CAAC;AAAA,QAC3C,CAAC;AAED,eAAO,KAAK,mBAAmB,OAAOA,WACtC;AACI,gBAAM,aAA+B,iBAAiB,OAAO;AAE7D,qBAAW,MAAM,GAAI;AACrB,cACA;AACI,kBAAM,aAA8B,gBAAgB,OAAO;AAC3D,kBAAM,WAAsC,MAAM,WAAW,eAAe,uBAAuB;AAEnG,YAAAA,OAAK,6BAA6B,QAAQ;AAC1C,YAAAA,OAAK,YAAY,KAAK,SAAS,cAAc,CAAC;AAAA,UAClD,UACA;AAEI,kBAAM,WAAW,QAAQ;AAAA,UAC7B;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC1EA;AAAA;AAAA,cAAAC;AAAA;AAQO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,6BAA6B,MAC7C;AACI,WAAO,SAAS,0BAA0B,MAC1C;AACI,aAAO,aAAa,YAAY,MAChC;AACI,iBAAS,gBAAgB,YAAwB,UACjD;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,UAAU,CAAC,IAAI,CAACA,WACpD;AACI,YAAAA,OAAK,aAAa,MAAM,uBAAuB,OAAO,UAAU,GAAG,QAAQ;AAAA,UAC/E,CAAC;AAAA,QACL;AAEA,wBAAgB,QAAY,IAAI;AAAA,UAC5B;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,wBAAgB,MAAO,IAAI;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,2BAA2B,CAACA,WACxC;AACI,gBAAM,aAAyB,WAAW,OAAO;AACjD,gBAAM,yBAAiD,uBAAuB,OAAO,UAAU;AAC/F,UAAAA,OAAK,6BAA6B,sBAAsB;AAAA,QAC5D,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,wBAAwB,MAC5C;AACI,iBAAS,4BAA4B,aAAqB,UAC1D;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,WAAW,CAAC,IAAI,OAAOA,WAC3D;AACI,kBAAM,SAAiC,uBAAuB,OAAO,WAAW,OAAO,CAAC;AACxF,kBAAMA,OAAK,kBAAkB,YAAY,MAAM,OAAO,mBAAmB,WAAW,GAAG,QAAQ;AAAA,UACnG,CAAC;AAAA,QACL;AAEA,oCAA4B,QAAY,IAAI;AAAA,UACxC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,oCAA4B,MAAO,IAAI;AAAA,UACnC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,oCAA4B,IAAI,IAAI;AAAA,UAChC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,oCAAoC,OAAO,KAAK,CAAC,gBAAgB,GAAG,OAAOA,WACvF;AACI,gBAAM,SAAiC,uBAAuB,OAAO,WAAW,OAAO,CAAC;AACxF,gBAAMA,OAAK;AAAA,YACP,YAAY,MAAM,OAAO,mBAAmB,SAAS;AAAA,YACrD,IAAI;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,kCAAkC,OAAO,KAAK,CAAC,gBAAgB,GAAG,OAAOA,WACrF;AACI,gBAAM,SAAiC,uBAAuB,OAAO,WAAW,OAAO,CAAC;AACxF,gBAAM,SAA8C,MAAM,OAAO,mBAAmB,sBAAsB,iBAAiB;AAC3H,UAAAA,OAAK,6BAA6B,MAAM;AACxC,UAAAA,OAAK,YAAY,OAAO,IAAI,sBAAsB,iBAAiB;AACnE,UAAAA,OAAK,YAAY,OAAO,MAAM,6DAA6D;AAC3F,UAAAA,OAAK,6BAA6B,OAAO,SAAS;AAClD,UAAAA,OAAK,WAAW,OAAO,KAAK,OAAO,SAAS,EAAE,SAAS,CAAC;AACxD,qBAAW,YAAY,OAAO,OAAO,OAAO,SAAS,GACrD;AACI,YAAAA,OAAK,6BAA6B,SAAS,EAAE;AAC7C,YAAAA,OAAK,6BAA6B,SAAS,QAAQ;AACnD,YAAAA,OAAK,6BAA6B,SAAS,IAAI;AAC/C,YAAAA,OAAK,6BAA6B,SAAS,IAAI;AAAA,UACnD;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,6BAA6B,MACjD;AACI,iBAAS,iCAAiC,aAAqB,YAAoB,OAAe,MAAc,UAChH;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,aAAa,YAAY,OAAO,IAAI,CAAC,CAAC,IAAI,OAAOA,WACrF;AAAA,UAEA,CAAC;AAAA,QACL;AAEA,yCAAiC,QAAY,oBAAoB,GAAG,MAAM,IAAI;AAAA,UAC1E;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,yCAAiC,MAAO,oBAAoB,GAAG,MAAM,IAAI;AAAA,UACrE;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,yCAAiC,IAAI,oBAAoB,GAAG,MAAM,IAAI;AAAA,UAClE;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,yCAAiC,WAAW,oBAAoB,GAAG,MAAM,IAAI;AAAA,UACzE;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,4BAA4B,OAAO,KAAK,CAAC,gBAAgB,GAAG,OAAOA,WAC/E;AACI,gBAAM,SAAiC,uBAAuB,OAAO,WAAW,OAAO,CAAC;AACxF,gBAAM,cAAsB,sBAAsB;AAClD,gBAAM,aAAqB;AAC3B,gBAAM,QAAgB;AACtB,gBAAM,OAAe;AACrB,gBAAM,6BAAqC;AAE3C,gBAAM,WAAiD,MAAM,OAAO,wBAAwB,aAAa,YAAY,OAAO,MAAM,0BAA0B;AAE5J,UAAAA,OAAK,6BAA6B,QAAQ;AAC1C,UAAAA,OAAK,6BAA6B,SAAS,IAAI;AAC/C,UAAAA,OAAK,6BAA6B,SAAS,iBAAiB;AAC5D,UAAAA,OAAK,YAAY,GAAG,SAAS,kBAAkB,SAAS,EAAE,MAAM,CAAC;AACjE,UAAAA,OAAK,gBAAgB,SAAS,gBAAgB;AAC9C,UAAAA,OAAK,gBAAgB,SAAS,gBAAgB;AAAA,QAClD,CAAC;AAED,eAAO,KAAK,iCAAiC,OAAO,KAAK,CAAC,gBAAgB,GAAG,OAAOA,WACpF;AACI,gBAAM,SAAiC,uBAAuB,OAAO,WAAW,OAAO,CAAC;AAExF,gBAAM,cAAsB,sBAAsB;AAClD,gBAAM,aAAqB,yBAAyB,YAAY;AAChE,gBAAM,QAAgB;AACtB,gBAAM,OAAe;AACrB,gBAAM,6BAAqC;AAE3C,gBAAM,WAAiD,MAAM,OAAO,wBAAwB,aAAa,YAAY,OAAO,MAAM,0BAA0B;AAE5J,UAAAA,OAAK,6BAA6B,QAAQ;AAC1C,UAAAA,OAAK,6BAA6B,SAAS,IAAI;AAC/C,UAAAA,OAAK,6BAA6B,SAAS,iBAAiB;AAC5D,UAAAA,OAAK,YAAY,IAAI,SAAS,kBAAkB,SAAS,EAAE,MAAM,CAAC;AAClE,UAAAA,OAAK,6BAA6B,SAAS,gBAAgB;AAC3D,UAAAA,OAAK,6BAA6B,SAAS,gBAAgB;AAAA,QAC/D,CAAC;AAED,eAAO,KAAK,+BAA+B,OAAO,KAAK,CAAC,gBAAgB,GAAG,OAAOA,WAClF;AACI,gBAAM,SAAiC,uBAAuB,OAAO,WAAW,OAAO,CAAC;AAExF,gBAAM,cAAsB,sBAAsB;AAClD,gBAAM,aAAqB,yBAAyB,UAAU;AAC9D,gBAAM,QAAgB;AACtB,gBAAM,OAAe;AACrB,gBAAM,6BAAqC;AAE3C,gBAAM,WAAiD,MAAM,OAAO,wBAAwB,aAAa,YAAY,OAAO,MAAM,0BAA0B;AAE5J,UAAAA,OAAK,6BAA6B,QAAQ;AAC1C,UAAAA,OAAK,6BAA6B,SAAS,IAAI;AAC/C,UAAAA,OAAK,6BAA6B,SAAS,iBAAiB;AAC5D,UAAAA,OAAK,YAAY,IAAI,SAAS,kBAAkB,SAAS,EAAE,MAAM,CAAC;AAClE,UAAAA,OAAK,6BAA6B,SAAS,gBAAgB;AAC3D,UAAAA,OAAK,6BAA6B,SAAS,gBAAgB;AAAA,QAC/D,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC9LA;AAAA;AAAA,cAAAC;AAAA;AAUO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,UAAU,MAC1B;AACI,WAAO,SAAS,UAAU,MAC1B;AACI,aAAO,aAAa,YAAY,CAACA,WACjC;AACI,cAAM,MAAgC,IAAI,OAAO;AACjD,QAAAA,OAAK,6BAA6B,GAAG;AACrC,QAAAA,OAAK,YAAY,GAAG,IAAI,SAAS,EAAE,MAAM,CAAC;AAC1C,QAAAA,OAAK,YAAY,CAAC,GAAG,IAAI,QAAQ,EAAE,MAAM,CAAC;AAAA,MAC9C,CAAC;AAED,aAAO,aAAa,SAAS,CAACA,WAC9B;AACI,cAAM,MAAmB,IAAI,OAAO;AACpC,iBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,gBAAM,YAAyB,IAAI,IAAI,EAAE;AACzC,UAAAA,OAAK,WAAW,KAAK,SAAS;AAC9B,UAAAA,OAAK,WAAW,IAAI,SAAS,EAAE,EAAE,MAAM,CAAC;AACxC,UAAAA,OAAK,YAAY,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC;AAC1C,UAAAA,OAAK,YAAY,CAAC,EAAE,GAAG,IAAI,QAAQ,EAAE,MAAM,CAAC;AAAA,QAChD;AAAA,MACJ,CAAC;AAED,aAAO,aAAa,YAAY,CAACA,WACjC;AACI,cAAM,MAAmB,IAAI,OAAO;AACpC,iBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,gBAAM,YAAyB,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;AAC1D,UAAAA,OAAK,WAAW,KAAK,SAAS;AAC9B,UAAAA,OAAK,WAAW,IAAI,SAAS,EAAE,EAAE,MAAM,CAAC;AACxC,UAAAA,OAAK,WAAW,IAAI,SAAS,EAAE,EAAE,MAAM,CAAC;AACxC,UAAAA,OAAK,WAAW,IAAI,SAAS,EAAE,EAAE,MAAM,CAAC;AACxC,UAAAA,OAAK,YAAY,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC;AAC1C,UAAAA,OAAK,YAAY,CAAC,IAAI,IAAI,EAAE,GAAG,IAAI,QAAQ,EAAE,MAAM,CAAC;AAAA,QACxD;AAAA,MACJ,CAAC;AAED,aAAO,aAAa,YAAY,CAACA,WACjC;AACI,cAAM,MAAmB,IAAI,OAAO;AAEpC,QAAAA,OAAK,aAAa,IAAI,OAAO,EAAE,GAAG,IAAI,cAAc,oBAAoB,CAAC;AAEzE,YAAI,IAAI,EAAE;AACV,cAAM,eAAiC,IAAI,OAAO,EAAE;AACpD,QAAAA,OAAK,6BAA6B,YAAY;AAC9C,QAAAA,OAAK,YAAY,IAAI,SAAS,EAAE,EAAE,MAAM,CAAC;AACzC,QAAAA,OAAK,gBAAgB,aAAa,MAAM,CAAC;AAEzC,QAAAA,OAAK,aAAa,IAAI,OAAO,EAAE,GAAG,IAAI,cAAc,oBAAoB,CAAC;AAAA,MAC7E,CAAC;AAED,aAAO,aAAa,cAAc,MAClC;AACI,iBAAS,aAAgB,KAAa,UACtC;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,GAAG,CAAC,IAAI,CAACA,WAC7C;AACI,YAAAA,OAAK,YAAY,IAAI,SAAS,GAAG,QAAQ;AAAA,UAC7C,CAAC;AAAA,QACL;AAEA,qBAAa,IAAI,OAAO,GAAG,IAAI;AAC/B,qBAAa,IAAI,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK;AAC5C,qBAAa,IAAI,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO;AACjD,qBAAa,IAAI,OAAO,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,SAAS;AAAA,MAC1D,CAAC;AAED,aAAO,aAAa,YAAY,MAChC;AACI,iBAAS,WAAc,KAAa,OAA8B,UAClE;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,CAACA,WACrD;AACI,YAAAA,OAAK,YAAY,IAAI,OAAO,KAAK,EAAE,MAAM,GAAG,QAAQ;AAAA,UACxD,CAAC;AAAA,QACL;AAEA,mBAAW,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI;AACjC,mBAAW,IAAI,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK;AACnC,mBAAW,IAAI,OAAe,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;AACtD,mBAAW,IAAI,OAAe,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;AACtD,mBAAW,IAAI,OAAe,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK;AAC1D,mBAAW,IAAI,OAAe,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;AAC5D,mBAAW,IAAI,OAAe,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK;AAC7D,mBAAW,IAAI,OAAe,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,OAAe,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;AAAA,MAC7F,CAAC;AAED,aAAO,aAAa,WAAW,MAC/B;AACI,iBAAS,eAAkB,KAAa,QAA+B,UACvE;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,CAACA,WACtD;AACI,YAAAA,OAAK,aAAa,MAAM,IAAI,MAAM,MAAM,GAAG,QAAQ;AAAA,UACvD,CAAC;AAAA,QACL;AAEA,uBAAe,IAAI,OAAe,GAAG,QAAY,IAAI;AAAA,UACjD;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,uBAAe,IAAI,OAAe,GAAG,MAAO,IAAI;AAAA,UAC5C;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,iBAAS,UAAa,KAAa,QAA+B,UAClE;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,CAACA,WACtD;AACI,YAAAA,OAAK,YAAY,IAAI,MAAM,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ;AAAA,UAClE,CAAC;AAAA,QACL;AAEA,kBAAU,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9B,kBAAU,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtC,kBAAU,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtC,kBAAU,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,MAC7C,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC3IA;AAAA;AAAA,cAAAC;AAAA;AAMO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,YAAY,MAC5B;AACI,WAAO,SAAS,YAAY,MAC5B;AACI,aAAO,aAAa,YAAY,CAACA,WACjC;AACI,cAAM,QAA2B,MAAM,OAAO;AAC9C,QAAAA,OAAK,6BAA6B,KAAK;AACvC,QAAAA,OAAK,YAAY,MAAM,IAAI,EAAE,MAAM,CAAC;AAAA,MACxC,CAAC;AAED,aAAO,aAAa,SAAS,CAACA,WAC9B;AACI,cAAM,QAA2B,MAAM,OAAO;AAE9C,cAAM,IAAI,EAAE,EAAE,MAAM;AACpB,QAAAA,OAAK,WAAW,MAAM,IAAI,EAAE,MAAM,CAAC;AAEnC,cAAM,IAAI,EAAE,EAAE,MAAM;AACpB,QAAAA,OAAK,WAAW,MAAM,IAAI,EAAE,MAAM,CAAC;AAEnC,QAAAA,OAAK,YAAY,IAAI,MAAM,OAAO,EAAE,MAAM,CAAC;AAC3C,QAAAA,OAAK,YAAY,IAAI,MAAM,OAAO,EAAE,MAAM,CAAC;AAC3C,QAAAA,OAAK,YAAY,MAAM,IAAI,EAAE,MAAM,CAAC;AAAA,MACxC,CAAC;AAED,aAAO,aAAa,YAAY,MAChC;AACI,iBAAS,WAAW,QACpB;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,MAAM,CAAC,IAAI,CAACA,WAChD;AACI,kBAAM,QAA2B,MAAM,OAAO;AAC9C,kBAAM,OAAO,MAAM,EAAE,MAAM;AAE3B,uBAAW,SAAS,OAAO,QAAQ,GACnC;AACI,cAAAA,OAAK,WAAW,MAAM,IAAI,EAAE,MAAM,CAAC;AACnC,cAAAA,OAAK,YAAY,OAAO,MAAM,OAAO,EAAE,MAAM,CAAC;AAAA,YAClD;AACA,YAAAA,OAAK,YAAY,MAAM,IAAI,EAAE,MAAM,CAAC;AAAA,UACxC,CAAC;AAAA,QACL;AAEA,mBAAW,CAAC,CAAC;AACb,mBAAW,CAAC,CAAC,CAAC;AACd,mBAAW,CAAC,GAAG,CAAC,CAAC;AACjB,mBAAW,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,MACxB,CAAC;AAED,aAAO,aAAa,YAAY,CAACA,WACjC;AACI,cAAM,QAA2B,MAAM,OAAO;AAC9C,QAAAA,OAAK,aAAa,MAAM,MAAM,OAAO,EAAE,MAAM,GAAG,IAAI,WAAW,CAAC;AAAA,MACpE,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ACjEA;AAAA;AAAA,cAAAC;AAAA;AAKO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,qBAAqB,MACrC;AACI,WAAO,SAAS,kBAAkB,MAClC;AACI,aAAO,aAAa,2BAA2B,MAC/C;AACI,iBAAS,YAAY,MAAc,OAAe,UAClD;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAACA,WACtD;AACI,kBAAM,WAA2B,eAAe,OAAO;AACvD,YAAAA,OAAK,YAAY,SAAS,QAAQ,MAAM,KAAK,GAAG,QAAQ;AACxD,YAAAA,OAAK,YAAY,SAAS,SAAS,MAAM,KAAK,GAAG,6BAAgC;AACjF,YAAAA,OAAK,YAAY,SAAS,gBAAgB,MAAM,KAAK,GAAG,gCAAmC;AAC3F,YAAAA,OAAK,YAAY,SAAS,MAAM,MAAM,KAAK,GAAG,0BAA6B;AAC3E,YAAAA,OAAK,YAAY,SAAS,qBAAqB,MAAM,KAAK,GAAG,6BAAgC;AAC7F,YAAAA,OAAK,YAAY,SAAS,YAAY,MAAM,KAAK,GAAG,gCAAmC;AAAA,UAC3F,CAAC;AAAA,QACL;AAEA,oBAAY,QAAY,qBAA4B;AACpD,oBAAY,QAAY,sBAA0B;AAClD,oBAAY,QAAY,oBAAuB;AAC/C,oBAAY,QAAY,qBAAwB;AAChD,oBAAY,QAAY,uBAA0B;AAElD,oBAAY,MAAO,2BAAkC;AACrD,oBAAY,MAAO,mBAAuB;AAC1C,oBAAY,MAAO,oBAAuB;AAC1C,oBAAY,MAAO,qBAAwB;AAC3C,oBAAY,MAAO,uBAA0B;AAE7C,oBAAY,IAAI,2BAAkC;AAClD,oBAAY,IAAI,yBAA6B;AAC7C,oBAAY,IAAI,iBAAoB;AACpC,oBAAY,IAAI,qBAAwB;AACxC,oBAAY,IAAI,uBAA0B;AAE1C,oBAAY,KAAK,2BAAkC;AACnD,oBAAY,KAAK,yBAA6B;AAC9C,oBAAY,KAAK,uBAA0B;AAC3C,oBAAY,KAAK,kBAAqB;AACtC,oBAAY,KAAK,uBAA0B;AAE3C,oBAAY,OAAO,2BAAkC;AACrD,oBAAY,OAAO,yBAA6B;AAChD,oBAAY,OAAO,uBAA0B;AAC7C,oBAAY,OAAO,wBAA2B;AAC9C,oBAAY,OAAO,oBAAuB;AAAA,MAC9C,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC3DA;AAAA;AAAA,cAAAC;AAAA;AAMO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,qBAAqB,MACrC;AACI,WAAO,SAAS,kBAAkB,MAClC;AACI,oBAAc,QAAQ,MAAM,eAAe,OAAO,EAAE,CAAC;AAErD,aAAO,aAAa,kBAAkB,MACtC;AACI,iBAAS,gBAAgB,OAAkC,eAC3D;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,YAAAA,OAAK;AAAA,cAAa,MAAM,eAAe,OAAO,KAAM;AAAA,cAChD;AAAA,YAAa;AAAA,UACrB,CAAC;AAAA,QACL;AAEA;AAAA,UACI;AAAA,UACA,IAAI;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QAAC;AACL;AAAA,UACI;AAAA,UACA,IAAI;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QAAC;AAEL,iBAAS,WAAW,OACpB;AACI,iBAAO,KAAK,SAAS,OAAO,SAAS,KAAK,CAAC,KAAK,CAACA,WACjD;AACI,kBAAM,WAA2B,eAAe,OAAO,KAAK;AAC5D,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,YAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,YAAAA,OAAK;AAAA,cAAa,MAAM,SAAS,gBAAgB;AAAA,cAC7C,IAAI;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACJ;AAAA,YAAC;AACL,YAAAA,OAAK;AAAA,cAAa,MAAM,SAAS,WAAW;AAAA,cACxC,IAAI;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACJ;AAAA,YAAC;AAAA,UACT,CAAC;AAAA,QACL;AAEA,mBAAW,EAAE;AACb,mBAAW,KAAK;AAAA,MACpB,CAAC;AAED,aAAO,aAAa,UAAU,MAC9B;AACI,iBAAS,SAAS,OAClB;AACI,iBAAO,KAAK,SAAS,OAAO,SAAS,KAAK,CAAC,KAAK,OAAOA,WACvD;AACI,kBAAM,WAA2B,eAAe,OAAO,KAAK;AAE5D,qBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAClC;AACI,cAAAA,OAAK,WAAW,MAAM,SAAS,KAAK,CAAC;AACrC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,WAAW,SAAS,gBAAgB,GAAG,CAAC;AAC7C,cAAAA,OAAK,WAAW,SAAS,WAAW,GAAG,MAAM,CAAC,CAAC;AAAA,YACnD;AAEA,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,YAAY,MAAM,SAAS,KAAK,CAAC;AACtC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,cAAAA,OAAK;AAAA,gBAAa,MAAM,SAAS,gBAAgB;AAAA,gBAC7C,IAAI;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBACJ;AAAA,cAAC;AACL,cAAAA,OAAK;AAAA,gBAAa,MAAM,SAAS,WAAW;AAAA,gBACxC,IAAI;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBACJ;AAAA,cAAC;AAAA,YACT;AAAA,UACJ,CAAC;AAAA,QACL;AAEA,iBAAS,EAAE;AACX,iBAAS,GAAG;AACZ,iBAAS,KAAK;AAAA,MAClB,CAAC;AAED,aAAO,UAAU,YAAY,MAC7B;AACI,iBAAS,UAAU,OACnB;AACI,iBAAO,KAAK,SAAS,OAAO,SAAS,KAAK,CAAC,KAAK,OAAOA,WACvD;AACI,kBAAM,WAA2B,eAAe,OAAO,KAAK;AAE5D,gBAAI,gBAAwB;AAC5B,uBAAW,KAAK,UAChB;AACI,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,WAAW,SAAS,gBAAgB,GAAG,aAAa;AACzD,cAAAA,OAAK,WAAW,SAAS,WAAW,GAAG,MAAM,aAAa,CAAC;AAC3D,cAAAA,OAAK,WAAW,GAAG,MAAM,aAAa,CAAC;AACvC;AAAA,YACJ;AAEA,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,YAAY,MAAM,SAAS,KAAK,CAAC;AACtC,cAAAA,OAAK,WAAW,SAAS,WAAW,CAAC;AACrC,cAAAA,OAAK,YAAY,SAAS,WAAW,CAAC;AACtC,cAAAA,OAAK;AAAA,gBAAa,MAAM,SAAS,gBAAgB;AAAA,gBAC7C,IAAI;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBACJ;AAAA,cAAC;AACL,cAAAA,OAAK;AAAA,gBAAa,MAAM,SAAS,WAAW;AAAA,gBACxC,IAAI;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBACJ;AAAA,cAAC;AAAA,YACT;AAAA,UACJ,CAAC;AAAA,QACL;AAEA,kBAAU,EAAE;AACZ,kBAAU,GAAG;AACb,kBAAU,KAAK;AAAA,MACnB,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC3JA;AAAA;AAAA,cAAAC;AAAA;AAQO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,cAAc,MAC9B;AACI,WAAO,aAAa,wCAAwC,MAC5D;AACI,eAAS,cAAc,OAAkC,UACzD;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,WAAW,UAAU,KAAK,GAAG,QAAQ;AAAA,QAC9C,CAAC;AAAA,MACL;AAEA,oBAAc,QAAW,CAAC;AAC1B,oBAAc,MAAM,CAAC;AACrB,oBAAc,IAAI,CAAC;AACnB,oBAAc,KAAK,CAAC;AACpB,oBAAc,OAAO,CAAC;AAAA,IAC1B,CAAC;AAED,WAAO,aAAa,0BAA0B,MAC9C;AACI,eAAS,cAAc,WAAmB,QAAkB,UAC5D;AACI,eAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,WAAW,OAAO,IAAI,OAAK,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAACA,WACzF;AACI,UAAAA,OAAK,aAAa,MAAM,KAAK,WAAW,MAAM,GAAG,QAAQ;AAAA,QAC7D,CAAC;AAAA,MACL;AAEA;AAAA,QAAc;AAAA,QAAY,CAAC;AAAA,QACvB,IAAI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAmB;AAAA,MAAC;AAC5B;AAAA,QAAc;AAAA,QAAY,CAAC,GAAG;AAAA,QAC1B,IAAI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAmB;AAAA,MAAC;AAC5B;AAAA,QAAc;AAAA,QAAY,CAAC,KAAK,GAAG;AAAA,QAC/B,IAAI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAmB;AAAA,MAAC;AAC5B;AAAA,QAAc;AAAA,QAAY,CAAC,KAAK,KAAK,GAAG;AAAA,QACpC,IAAI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAmB;AAAA,MAAC;AAE5B;AAAA,QAAc;AAAA,QAAO,CAAC;AAAA,QAClB,IAAI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAc;AAAA,MAAC;AACvB;AAAA,QAAc;AAAA,QAAO,CAAC,GAAG;AAAA,QACrB,IAAI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAc;AAAA,MAAC;AACvB;AAAA,QAAc;AAAA,QAAO,CAAC,KAAK,GAAG;AAAA,QAC1B,IAAI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAc;AAAA,MAAC;AACvB;AAAA,QAAc;AAAA,QAAO,CAAC,KAAK,KAAK,GAAG;AAAA,QAC/B,IAAI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAc;AAAA,MAAC;AAEvB,eAAS,SAAS,WAAmB,QAAkB,UACvD;AACI,eAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,WAAW,OAAO,IAAI,OAAK,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAACA,WACzF;AACI,UAAAA,OAAK,WAAW,KAAK,WAAW,MAAM,GAAG,QAAQ;AAAA,QACrD,CAAC;AAAA,MACL;AAIA,eAAS,IAAI,CAAC,GAAG,EAAE;AACnB,eAAS,IAAI,CAAC,GAAG,GAAG,GAAG;AACvB,eAAS,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI;AAC7B,eAAS,IAAI,CAAC,KAAK,KAAK,GAAG,GAAG,KAAK;AAEnC,eAAS,KAAK,CAAC,GAAG,EAAE;AACpB,eAAS,KAAK,CAAC,GAAG,GAAG,GAAG;AACxB,eAAS,KAAK,CAAC,KAAK,GAAG,GAAG,KAAK;AAC/B,eAAS,KAAK,CAAC,KAAK,KAAK,GAAG,GAAG,OAAO;AAEtC,eAAS,OAAO,CAAC,GAAG,EAAE;AACtB,eAAS,OAAO,CAAC,GAAG,GAAG,GAAG;AAC1B,eAAS,OAAO,CAAC,KAAK,GAAG,GAAG,OAAO;AACnC,eAAS,OAAO,CAAC,KAAK,KAAK,GAAG,GAAG,WAAW;AAAA,IAChD,CAAC;AAED,WAAO,aAAa,oDAAoD,MACxE;AACI,eAAS,WAAW,OAAkC,YAAkC,UACxF;AACI,eAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,YAAY,IAAI,CAACC,WAAkB,OAAO,SAASA,MAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAACD,WAC5G;AACI,gBAAM,SAAiB,OAAO,OAAO,UAAU;AAC/C,UAAAA,OAAK,WAAW,QAAQ,QAAQ;AAAA,QACpC,CAAC;AAAA,MACL;AAEA,iBAAW,QAAW,QAAW,WAAW;AAC5C,iBAAW,MAAM,QAAW,MAAM;AAClC,iBAAW,IAAI,QAAW,EAAE;AAC5B,iBAAW,KAAK,QAAW,GAAG;AAC9B,iBAAW,KAAK,QAAW,GAAG;AAC9B,iBAAW,OAAO,QAAW,KAAK;AAClC,iBAAW,KAAM,QAAW,KAAK;AACjC,iBAAW,MAAM,QAAW,KAAK;AACjC,iBAAW,MAAM,QAAW,KAAK;AACjC,iBAAW,KAAK,QAAW,KAAK;AAChC,iBAAW,KAAM,QAAW,KAAM;AAClC,iBAAW,KAAK,QAAW,GAAG;AAC9B,iBAAW,YAAa,QAAW,cAAc;AACjD,iBAAW,KAAM,CAAC,GAAG,KAAK;AAC1B,iBAAW,KAAM,CAAC,IAAI,GAAG,KAAK;AAC9B,iBAAW,KAAM,CAAC,GAAI,GAAG,GAAI;AAAA,IACjC,CAAC;AAED,WAAO,aAAa,gCAAgC,MACpD;AACI,eAAS,UAAU,OAAkC,aAAiC,UACtF;AACI,eAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC,IAAI,CAACA,WAC7D;AACI,gBAAM,SAAiB,MAAM,OAAO,WAAW;AAC/C,UAAAA,OAAK,WAAW,QAAQ,QAAQ;AAAA,QACpC,CAAC;AAAA,MACL;AAEA,gBAAU,QAAW,QAAW,WAAW;AAC3C,gBAAU,MAAM,QAAW,MAAM;AACjC,gBAAU,IAAI,QAAW,IAAI;AAC7B,gBAAU,KAAK,QAAW,KAAK;AAC/B,gBAAU,KAAK,QAAW,KAAK;AAC/B,gBAAU,OAAO,QAAW,OAAO;AACnC,gBAAU,OAAO,KAAK,OAAO;AAAA,IACjC,CAAC;AAED,WAAO,aAAa,6EAA6E,MACjG;AACI,eAAS,mBAAmB,OAAkCE,QAA2B,YAAkC,UAC3H;AACI,eAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAOA,QAAO,YAAY,IAAI,OAAK,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAACF,WACjG;AACI,gBAAM,SAAiB,eAAe,OAAOE,QAAO,UAAU;AAC9D,UAAAF,OAAK,WAAW,QAAQ,QAAQ;AAAA,QACpC,CAAC;AAAA,MACL;AAEA,yBAAmB,QAAW,QAAW,QAAW,WAAW;AAC/D,yBAAmB,MAAM,QAAW,QAAW,MAAM;AACrD,yBAAmB,IAAI,QAAW,QAAW,IAAI;AACjD,yBAAmB,KAAK,QAAW,QAAW,KAAK;AACnD,yBAAmB,KAAK,QAAW,QAAW,KAAK;AACnD,yBAAmB,OAAO,QAAW,QAAW,OAAO;AACvD,yBAAmB,KAAM,QAAW,QAAW,OAAO;AACtD,yBAAmB,MAAM,QAAW,QAAW,OAAO;AACtD,yBAAmB,MAAM,QAAW,QAAW,OAAO;AACtD,yBAAmB,KAAK,QAAW,QAAW,OAAO;AACrD,yBAAmB,KAAM,QAAW,QAAW,OAAQ;AACvD,yBAAmB,KAAK,QAAW,QAAW,KAAK;AACnD,yBAAmB,YAAa,QAAW,QAAW,gBAAgB;AACtE,yBAAmB,KAAM,QAAW,CAAC,GAAG,OAAO;AAC/C,yBAAmB,KAAM,QAAW,CAAC,IAAI,GAAG,OAAO;AACnD,yBAAmB,KAAM,QAAW,CAAC,GAAI,GAAG,KAAM;AAAA,IACtD,CAAC;AAED,WAAO,aAAa,wBAAwB,MAC5C;AACI,eAAS,sBAAsB,OAAkC,eACjE;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,aAAa,MAAM,aAAa,KAAM,GAAG,aAAa;AAAA,QAC/D,CAAC;AAAA,MACL;AAEA,4BAAsB,QAAW,IAAI,kBAAkB,KAAK,MAAM;AAAA,QAC9D;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,4BAAsB,MAAM,IAAI,kBAAkB,KAAK,MAAM;AAAA,QACzD;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,4BAAsB,IAAI,IAAI,kBAAkB,KAAK,MAAM;AAAA,QACvD;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,4BAAsB,MAAM,IAAI,kBAAkB,KAAK,MAAM;AAAA,QACzD;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AAEH,eAAS,iBAAiB,OAAe,UACzC;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,WAAW,aAAa,KAAK,GAAG,QAAQ;AAAA,QACjD,CAAC;AAAA,MACL;AAEA,uBAAiB,KAAK,IAAI;AAC1B,uBAAiB,MAAM,IAAI;AAC3B,uBAAiB,MAAM,IAAI;AAC3B,uBAAiB,KAAM,IAAI;AAE3B,uBAAiB,KAAK,KAAK;AAC3B,uBAAiB,KAAK,KAAK;AAC3B,uBAAiB,KAAK,KAAK;AAAA,IAC/B,CAAC;AAED,WAAO,aAAa,oBAAoB,MACxC;AACI,eAAS,kBAAkB,OAAkC,eAC7D;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,aAAa,MAAM,SAAS,KAAM,GAAG,aAAa;AAAA,QAC3D,CAAC;AAAA,MACL;AAEA,wBAAkB,QAAW,IAAI,kBAAkB,KAAK,MAAM;AAAA,QAC1D;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,wBAAkB,MAAM,IAAI,kBAAkB,KAAK,MAAM;AAAA,QACrD;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,wBAAkB,IAAI,IAAI,kBAAkB,KAAK,MAAM;AAAA,QACnD;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,wBAAkB,MAAM,IAAI,kBAAkB,KAAK,MAAM;AAAA,QACrD;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AAEH,eAAS,aAAa,OAAe,UACrC;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,WAAW,SAAS,KAAK,GAAG,QAAQ;AAAA,QAC7C,CAAC;AAAA,MACL;AAEA,mBAAa,KAAK,IAAI;AACtB,mBAAa,KAAK,IAAI;AACtB,mBAAa,KAAK,IAAI;AACtB,mBAAa,KAAK,IAAI;AACtB,mBAAa,KAAK,IAAI;AACtB,mBAAa,KAAK,IAAI;AAEtB,mBAAa,KAAK,KAAK;AACvB,mBAAa,MAAM,KAAK;AACxB,mBAAa,MAAM,KAAK;AACxB,mBAAa,KAAM,KAAK;AACxB,mBAAa,KAAK,KAAK;AACvB,mBAAa,KAAK,KAAK;AACvB,mBAAa,KAAK,KAAK;AAAA,IAC3B,CAAC;AAED,WAAO,aAAa,8BAA8B,MAClD;AACI,eAAS,4BAA4B,OAAkC,eACvE;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,aAAa,MAAM,mBAAmB,KAAM,GAAG,aAAa;AAAA,QACrE,CAAC;AAAA,MACL;AAEA,kCAA4B,QAAW,IAAI,kBAAkB,KAAK,MAAM;AAAA,QACpE;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,kCAA4B,MAAM,IAAI,kBAAkB,KAAK,MAAM;AAAA,QAC/D;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,kCAA4B,IAAI,IAAI,kBAAkB,KAAK,MAAM;AAAA,QAC7D;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,kCAA4B,MAAM,IAAI,kBAAkB,KAAK,MAAM;AAAA,QAC/D;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AAEH,eAAS,uBAAuB,OAAe,UAC/C;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,WAAW,mBAAmB,KAAK,GAAG,QAAQ;AAAA,QACvD,CAAC;AAAA,MACL;AAEA,6BAAuB,KAAK,IAAI;AAChC,6BAAuB,KAAK,IAAI;AAChC,6BAAuB,KAAK,IAAI;AAEhC,6BAAuB,KAAK,KAAK;AACjC,6BAAuB,KAAK,KAAK;AACjC,6BAAuB,KAAK,KAAK;AACjC,6BAAuB,KAAK,KAAK;AACjC,6BAAuB,MAAM,KAAK;AAClC,6BAAuB,MAAM,KAAK;AAClC,6BAAuB,KAAM,KAAK;AAClC,6BAAuB,KAAK,KAAK;AACjC,6BAAuB,KAAK,KAAK;AACjC,6BAAuB,KAAK,KAAK;AAAA,IACrC,CAAC;AAED,WAAO,aAAa,8BAA8B,MAClD;AACI,eAAS,4BAA4B,OAAkC,eACvE;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,aAAa,MAAM,mBAAmB,KAAM,GAAG,aAAa;AAAA,QACrE,CAAC;AAAA,MACL;AAEA,kCAA4B,QAAW,IAAI,kBAAkB,KAAK,MAAM;AAAA,QACpE;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,kCAA4B,MAAM,IAAI,kBAAkB,KAAK,MAAM;AAAA,QAC/D;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,kCAA4B,IAAI,IAAI,kBAAkB,KAAK,MAAM;AAAA,QAC7D;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,kCAA4B,MAAM,IAAI,kBAAkB,KAAK,MAAM;AAAA,QAC/D;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AAEH,eAAS,uBAAuB,OAAe,UAC/C;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,WAAW,mBAAmB,KAAK,GAAG,QAAQ;AAAA,QACvD,CAAC;AAAA,MACL;AAEA,6BAAuB,KAAK,IAAI;AAChC,6BAAuB,KAAK,IAAI;AAChC,6BAAuB,KAAK,IAAI;AAEhC,6BAAuB,KAAK,KAAK;AACjC,6BAAuB,KAAK,KAAK;AACjC,6BAAuB,KAAK,KAAK;AACjC,6BAAuB,KAAK,KAAK;AACjC,6BAAuB,MAAM,KAAK;AAClC,6BAAuB,MAAM,KAAK;AAClC,6BAAuB,KAAM,KAAK;AAClC,6BAAuB,KAAK,KAAK;AACjC,6BAAuB,KAAK,KAAK;AACjC,6BAAuB,KAAK,KAAK;AAAA,IACrC,CAAC;AAED,WAAO,aAAa,mBAAmB,MACvC;AACI,eAAS,iBAAiB,OAAkC,eAC5D;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,aAAa,MAAM,QAAQ,KAAM,GAAG,aAAa;AAAA,QAC1D,CAAC;AAAA,MACL;AAEA,uBAAiB,QAAW,IAAI,kBAAkB,KAAK,MAAM;AAAA,QACzD;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,uBAAiB,MAAM,IAAI,kBAAkB,KAAK,MAAM;AAAA,QACpD;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,uBAAiB,IAAI,IAAI,kBAAkB,KAAK,MAAM;AAAA,QAClD;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,uBAAiB,MAAM,IAAI,kBAAkB,KAAK,MAAM;AAAA,QACpD;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AAEH,eAAS,YAAY,OAAe,UACpC;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,WAAW,QAAQ,KAAK,GAAG,QAAQ;AAAA,QAC5C,CAAC;AAAA,MACL;AAEA,kBAAY,KAAK,IAAI;AACrB,kBAAY,KAAK,IAAI;AACrB,kBAAY,KAAK,IAAI;AAErB,kBAAY,KAAK,KAAK;AACtB,kBAAY,KAAK,KAAK;AACtB,kBAAY,KAAK,KAAK;AACtB,kBAAY,KAAK,KAAK;AACtB,kBAAY,KAAK,KAAK;AACtB,kBAAY,KAAK,KAAK;AACtB,kBAAY,KAAK,KAAK;AACtB,kBAAY,KAAK,KAAK;AACtB,kBAAY,MAAM,KAAK;AACvB,kBAAY,MAAM,KAAK;AACvB,kBAAY,KAAM,KAAK;AACvB,kBAAY,KAAK,KAAK;AACtB,kBAAY,KAAK,KAAK;AAAA,IAC1B,CAAC;AAED,WAAO,aAAa,2BAA2B,MAC/C;AACI,eAAS,yBAAyB,OAAkC,eACpE;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,aAAa,MAAM,gBAAgB,KAAM,GAAG,aAAa;AAAA,QAClE,CAAC;AAAA,MACL;AAEA,+BAAyB,QAAW,IAAI,kBAAkB,KAAK,MAAM;AAAA,QACjE;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,+BAAyB,MAAM,IAAI,kBAAkB,KAAK,MAAM;AAAA,QAC5D;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,+BAAyB,IAAI,IAAI,kBAAkB,KAAK,MAAM;AAAA,QAC1D;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AACH,+BAAyB,MAAM,IAAI,kBAAkB,KAAK,MAAM;AAAA,QAC5D;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC,CAAC,CAAC;AAEH,eAAS,oBAAoB,OAAe,UAC5C;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,WAAW,gBAAgB,KAAK,GAAG,QAAQ;AAAA,QACpD,CAAC;AAAA,MACL;AAEA,0BAAoB,KAAK,IAAI;AAC7B,0BAAoB,KAAK,IAAI;AAC7B,0BAAoB,KAAK,IAAI;AAC7B,0BAAoB,KAAK,IAAI;AAC7B,0BAAoB,KAAK,IAAI;AAC7B,0BAAoB,KAAK,IAAI;AAC7B,0BAAoB,KAAK,IAAI;AAC7B,0BAAoB,KAAK,IAAI;AAC7B,0BAAoB,KAAK,IAAI;AAE7B,0BAAoB,KAAK,KAAK;AAC9B,0BAAoB,KAAK,KAAK;AAC9B,0BAAoB,MAAM,KAAK;AAC/B,0BAAoB,MAAM,KAAK;AAC/B,0BAAoB,KAAM,KAAK;AAC/B,0BAAoB,KAAK,KAAK;AAC9B,0BAAoB,KAAK,KAAK;AAAA,IAClC,CAAC;AAAA,EACL,CAAC;AACL;;;ACngBA;AAAA;AAAA,cAAAG;AAAA;AAMO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,iBAAiB,MACjC;AACI,WAAO,SAAS,iBAAiB,MACjC;AACI,aAAO,aAAa,YAAY,MAChC;AACI,iBAAS,gBAAmB,UAAkB,QAAiB,UAC/D;AACI,iBAAO,KAAK,UAAU,CAACA,WACvB;AACI,YAAAA,OAAK,aAAa,MAAM,WAAW,OAAO,MAAM,GAAG,QAAQ;AAAA,UAC/D,CAAC;AAAA,QACL;AAEA,wBAAgB,kBAAkB,QAAY,IAAI;AAAA,UAC9C;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,wBAAgB,aAAa,MAAO,IAAI;AAAA,UACpC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,eAAe,CAACA,WAC5B;AACI,gBAAM,SAA6B,WAAW,OAAO,MAAM,CAAC;AAC5D,UAAAA,OAAK,6BAA6B,MAAM;AAExC,gBAAM,QAAgB,OAAO,MAAM;AACnC,UAAAA,OAAK,YAAY,GAAG,KAAK;AAAA,QAC7B,CAAC;AAED,eAAO,KAAK,iCAAiC,CAACA,WAC9C;AACI,cAAI,UAAU;AACd,gBAAM,SAA6B,WAAW,OAAO,MAAM;AAAE,mBAAO,EAAE;AAAA,UAAS,CAAC;AAChF,UAAAA,OAAK,YAAY,SAAS,CAAC;AAE3B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK,YAAY,GAAG,OAAO,MAAM,CAAC;AAClC,YAAAA,OAAK,YAAY,GAAG,OAAO;AAAA,UAC/B;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,WAAW,MAC/B;AACI,iBAAS,UAAa,OACtB;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,kBAAM,SAAwB,WAAW,MAAM,KAAK;AACpD,YAAAA,OAAK,6BAA6B,MAAM;AAExC,kBAAM,cAAiB,OAAO,MAAM;AACpC,YAAAA,OAAK,WAAW,aAAa,KAAK;AAAA,UACtC,CAAC;AAAA,QACL;AAEA,kBAAU,MAAS;AACnB,kBAAU,IAAI;AACd,kBAAU,EAAE;AACZ,kBAAU,CAAC,CAAC;AAAA,MAChB,CAAC;AAED,aAAO,aAAa,WAAW,MAC/B;AACI,iBAAS,UAAa,OACtB;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,kBAAM,SAAwB,WAAW,MAAM,KAAK;AACpD,YAAAA,OAAK,6BAA6B,MAAM;AAExC,YAAAA,OAAK,aAAa,QAAQ,KAAK;AAAA,UACnC,CAAC;AAAA,QACL;AAEA,kBAAU,IAAI,MAAM,MAAM,CAAC;AAC3B,kBAAU,IAAI,cAAc,UAAU,CAAC;AAAA,MAC3C,CAAC;AAED,aAAO,UAAU,eAAe,MAChC;AACI,eAAO,KAAK,cAAc,OAAOA,WACjC;AACI,gBAAM,SAA6B,WAAW,MAAM,CAAC;AACrD,UAAAA,OAAK,YAAY,MAAM,QAAQ,CAAC;AAAA,QACpC,CAAC;AAED,eAAO,KAAK,cAAc,OAAOA,WACjC;AACI,gBAAM,SAA6B,WAAW,MAAM,IAAI,cAAc,KAAK,CAAC;AAC5E,gBAAMA,OAAK,kBAAkB,QAAQ,IAAI,cAAc,KAAK,CAAC;AAAA,QACjE,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,UAAU,MAC9B;AACI,eAAO,UAAU,oCAAoC,MACrD;AACI,iBAAO,KAAK,qBAAqB,CAACA,WAClC;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,kBAAM,aAAiC,aAAa,KAAK,MAAM,OAAO;AACtE,YAAAA,OAAK,aAAa,MAAM,WAAW,MAAM,GAAG,IAAI,MAAM,KAAK,CAAC;AAAA,UAChE,CAAC;AAED,iBAAO,KAAK,wDAAwD,CAACA,WACrE;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,aAAiC,aAAa,KAAK,MAAM;AAAE;AAAW,qBAAO;AAAA,YAAS,CAAC;AAC7F,YAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,YAAAA,OAAK,aAAa,MAAM,WAAW,MAAM,GAAG,IAAI,MAAM,KAAK,CAAC;AAC5D,YAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,UAC9B,CAAC;AAED,iBAAO,KAAK,sFAAsF,CAACA,WACnG;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,kBAAM,aAAiC,aAAa,KAAK,MAAM,OAAO;AACtE,YAAAA,OAAK,WAAW,SAAS,WAAW,MAAM,CAAC;AAAA,UAC/C,CAAC;AAED,iBAAO,KAAK,mFAAmF,CAACA,WAChG;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,kBAAM,aAAiC,aAAa,KAAK,CAAC,cAAsB,WAAW,GAAG,SAAS,CAAC;AACxG,YAAAA,OAAK,WAAW,KAAK,WAAW,MAAM,CAAC;AAAA,UAC3C,CAAC;AAED,iBAAO,KAAK,qGAAqG,CAACA,WAClH;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,gBAAI,UAAkB;AACtB,kBAAM,aAAiC,aAAa,KAAK,CAAC,aAAqB;AAAE;AAAW,sBAAQ,WAAW,GAAG,SAAS;AAAA,YAAG,CAAC;AAC/H,YAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,KAAK,WAAW,MAAM,CAAC;AACvC,cAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,uDAAuD,OAAOA,WAC1E;AACI,kBAAM,eAAmC,WAAW,MAAM,EAAE;AAC5D,gBAAI,UAAkB;AACtB,kBAAM,aAAiC,aAAa,KAAK,CAAC,aAC1D;AACI;AACA,oBAAM,IAAI,MAAM,QAAQ,QAAQ,EAAE;AAAA,YACtC,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAE1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,YAAY,IAAI,MAAM,SAAS,CAAC;AAClD,cAAAA,OAAK,WAAW,SAAS,CAAC;AAE1B,oBAAMA,OAAK,kBAAkB,YAAY,IAAI,MAAM,SAAS,CAAC;AAC7D,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,aAAa,MACjC;AACI,eAAO,KAAK,qBAAqB,OAAOA,WACxC;AACI,gBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,cAAI,UAAkB;AACtB,gBAAM,gBAAoC,aAAa,QAAQ,MAAM,SAAS;AAC9E,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,kBAAMA,OAAK,kBAAkB,eAAe,IAAI,MAAM,KAAK,CAAC;AAC5D,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,sFAAsF,OAAOA,WACzG;AACI,gBAAM,eAAmC,WAAW,MAAM,EAAE;AAC5D,cAAI,UAAkB;AACtB,gBAAM,gBAAoC,aAAa,QAAQ,MAAM,SAAS;AAC9E,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK,WAAW,IAAI,cAAc,MAAM,CAAC;AACzC,YAAAA,OAAK,WAAW,SAAS,CAAC;AAE1B,YAAAA,OAAK,WAAW,IAAI,MAAM,aAAa;AACvC,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,mFAAmF,OAAOA,WACtG;AACI,gBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,cAAI,UAAkB;AACtB,gBAAM,gBAAoC,aAAa,QAAQ,CAAC,aAAqB,WAAW,QAAQ;AACxG,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK,WAAW,cAAc,MAAM,GAAG,CAAC;AACxC,YAAAA,OAAK,WAAW,SAAS,CAAC;AAE1B,YAAAA,OAAK,WAAW,MAAM,eAAe,CAAC;AACtC,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,0DAA0D,OAAOA,WAC7E;AACI,gBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,cAAI,UAAkB;AACtB,gBAAM,gBAAoC,aAAa,QAAQ,CAAC,aAChE;AACI,uBAAW;AACX,kBAAM,IAAI,MAAM,aAAa,QAAQ,EAAE;AAAA,UAC3C,CAAC;AACD,UAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,mBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,YAAAA,OAAK,aAAa,eAAe,IAAI,MAAM,aAAa,CAAC;AACzD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAE1B,kBAAMA,OAAK,kBAAkB,eAAe,IAAI,MAAM,aAAa,CAAC;AACpE,YAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,WAAW,MAC/B;AACI,eAAO,KAAK,4BAA4B,CAACA,WACzC;AACI,gBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,UAAAA,OAAK;AAAA,YAAa,MAAM,aAAa,MAAM,QAAY,MAAM,CAAC;AAAA,YAC1D,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAmB;AAAA,UAAC;AAAA,QAChC,CAAC;AAED,eAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,gBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,UAAAA,OAAK;AAAA,YAAa,MAAM,aAAa,MAAM,MAAO,MAAM,CAAC;AAAA,YACrD,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAc;AAAA,UAAC;AAAA,QAC3B,CAAC;AAED,eAAO,UAAU,QAAQ,MACzB;AACI,iBAAO,KAAK,qBAAqB,CAACA,WAClC;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,kBAAM,cAAkC,aAAa,MAAM,OAAO,MAAM,EAAE;AAC1E,YAAAA,OAAK,WAAW,YAAY,MAAM,GAAG,EAAE;AAAA,UAC3C,CAAC;AAED,iBAAO,KAAK,2DAA2D,CAACA,WACxE;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,MAAM,MAAM;AAAE;AAAW,qBAAO;AAAA,YAAI,CAAC;AAC1F,YAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,YAAY,MAAM,GAAG,EAAE;AACvC,cAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,gEAAgE,CAACA,WAC7E;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,MAAM,CAAC,UAC5D;AACI,kBAAI,iBAAiB,OACrB;AACI,2BAAW,MAAM,QAAQ;AAAA,cAC7B,OAEA;AACI,2BAAW;AAAA,cACf;AACA,qBAAO;AAAA,YACX,CAAC;AACD,YAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,YAAY,MAAM,GAAG,EAAE;AACvC,cAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,yDAAyD,CAACA,WACtE;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,MAAM,OAAO,MAAM;AAAE;AAAW,qBAAO;AAAA,YAAI,CAAC;AACjG,YAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,YAAY,MAAM,GAAG,EAAE;AACvC,cAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,mFAAmF,CAACA,WAChG;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,kBAAM,cAAkC,aAAa,MAAM,OAAO,MAAM,CAAC;AACzE,YAAAA,OAAK,WAAW,YAAY,MAAM,GAAG,CAAC;AAAA,UAC1C,CAAC;AAED,iBAAO,KAAK,gFAAgF,CAACA,WAC7F;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,kBAAM,cAAkC,aAAa,MAAM,OAAO,CAAC,UAAiB,MAAM,QAAQ,MAAM;AACxG,YAAAA,OAAK,WAAW,YAAY,MAAM,GAAG,CAAC;AAAA,UAC1C,CAAC;AAED,iBAAO,KAAK,yDAAyD,CAACA,WACtE;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,kBAAM,cAAkC,aAAa,MAAM,mBAAmB,MAAM,EAAE;AACtF,YAAAA,OAAK,aAAa,aAAa,IAAI,MAAM,KAAK,CAAC;AAAA,UACnD,CAAC;AAED,iBAAO,KAAK,wDAAwD,CAACA,WACrE;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,kBAAM,cAAkC,aAAa,MAAM,YAAY,MAAM,EAAE;AAC/E,YAAAA,OAAK,aAAa,aAAa,IAAI,kBAAkB,KAAK,CAAC;AAAA,UAC/D,CAAC;AAED,iBAAO,KAAK,kCAAkC,CAACA,WAC/C;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,kBAAM,cAAkC,aAAa,MAAM,OAAO,MAAM;AAAE,oBAAM,IAAI,UAAU,KAAK;AAAA,YAAG,CAAC;AACvG,YAAAA,OAAK,aAAa,aAAa,IAAI,UAAU,KAAK,CAAC;AAAA,UACvD,CAAC;AAED,iBAAO,KAAK,0BAA0B,CAACA,WACvC;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,kBAAM,cAAkC,aAAa,MAAM,OAAO,MAAM,CAAC;AACzE,YAAAA,OAAK,WAAW,YAAY,MAAM,GAAG,CAAC;AAAA,UAC1C,CAAC;AAAA,QACL,CAAC;AAED,eAAO,UAAU,SAAS,MAC1B;AACI,iBAAO,KAAK,qBAAqB,OAAOA,WACxC;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,kBAAM,cAAkC,aAAa,MAAM,OAAO,MAAM,EAAE;AAC1E,YAAAA,OAAK,WAAW,MAAM,aAAa,EAAE;AAAA,UACzC,CAAC;AAED,iBAAO,KAAK,2DAA2D,OAAOA,WAC9E;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,MAAM,MAAM;AAAE;AAAW,qBAAO;AAAA,YAAI,CAAC;AAC1F,YAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,MAAM,aAAa,EAAE;AACrC,cAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,gEAAgE,OAAOA,WACnF;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,MAAM,CAAC,UAC5D;AACI,kBAAI,iBAAiB,OACrB;AACI,2BAAW,MAAM,QAAQ;AAAA,cAC7B,OAEA;AACI,2BAAW;AAAA,cACf;AACA,qBAAO;AAAA,YACX,CAAC;AACD,YAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,MAAM,aAAa,EAAE;AACrC,cAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,yDAAyD,OAAOA,WAC5E;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,MAAM,OAAO,MAAM;AAAE;AAAW,qBAAO;AAAA,YAAI,CAAC;AACjG,YAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,MAAM,aAAa,EAAE;AACrC,cAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,mFAAmF,OAAOA,WACtG;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,kBAAM,cAAkC,aAAa,MAAM,OAAO,MAAM,CAAC;AACzE,YAAAA,OAAK,WAAW,MAAM,aAAa,CAAC;AAAA,UACxC,CAAC;AAED,iBAAO,KAAK,gFAAgF,OAAOA,WACnG;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,kBAAM,cAAkC,aAAa,MAAM,OAAO,CAAC,UAAiB,MAAM,QAAQ,MAAM;AACxG,YAAAA,OAAK,WAAW,MAAM,aAAa,CAAC;AAAA,UACxC,CAAC;AAED,iBAAO,KAAK,yDAAyD,OAAOA,WAC5E;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,kBAAM,cAAkC,aAAa,MAAM,mBAAmB,MAAM,EAAE;AACtF,kBAAMA,OAAK,kBAAkB,aAAa,IAAI,MAAM,KAAK,CAAC;AAAA,UAC9D,CAAC;AAED,iBAAO,KAAK,wDAAwD,OAAOA,WAC3E;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,kBAAM,cAAkC,aAAa,MAAM,YAAY,MAAM,EAAE;AAC/E,kBAAMA,OAAK,kBAAkB,aAAa,IAAI,kBAAkB,KAAK,CAAC;AAAA,UAC1E,CAAC;AAED,iBAAO,KAAK,kCAAkC,OAAOA,WACrD;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,kBAAM,cAAkC,aAAa,MAAM,OAAO,MAAM;AAAE,oBAAM,IAAI,UAAU,KAAK;AAAA,YAAG,CAAC;AACvG,kBAAMA,OAAK,kBAAkB,aAAa,IAAI,UAAU,KAAK,CAAC;AAAA,UAClE,CAAC;AAED,iBAAO,KAAK,0BAA0B,OAAOA,WAC7C;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,kBAAM,cAAkC,aAAa,MAAM,OAAO,MAAM,CAAC;AACzE,YAAAA,OAAK,WAAW,MAAM,aAAa,CAAC;AAAA,UACxC,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,aAAa,MACjC;AACI,eAAO,KAAK,4BAA4B,CAACA,WACzC;AACI,gBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,UAAAA,OAAK;AAAA,YAAa,MAAM,aAAa,QAAQ,QAAY,MAAM;AAAA,YAAE,CAAC;AAAA,YAC9D,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAmB;AAAA,UAAC;AAAA,QAChC,CAAC;AAED,eAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,gBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,UAAAA,OAAK;AAAA,YAAa,MAAM,aAAa,QAAQ,MAAO,MAAM;AAAA,YAAE,CAAC;AAAA,YACzD,IAAI;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAc;AAAA,UAAC;AAAA,QAC3B,CAAC;AAED,eAAO,UAAU,QAAQ,MACzB;AACI,iBAAO,KAAK,2DAA2D,CAACA,WACxE;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,QAAQ,MAAM;AAAE;AAAA,YAAW,CAAC;AACjF,YAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,aAAa,IAAI,MAAM,KAAK,CAAC;AAC/C,cAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,gEAAgE,CAACA,WAC7E;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,QAAQ,CAAC,UAC9D;AACI,kBAAI,iBAAiB,OACrB;AACI,2BAAW,MAAM,QAAQ;AAAA,cAC7B,OAEA;AACI,2BAAW;AAAA,cACf;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,aAAa,IAAI,MAAM,KAAK,CAAC;AAC/C,cAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,mFAAmF,CAACA,WAChG;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,QAAQ,OAAO,MAAM;AAAE;AAAA,YAAW,CAAC;AACxF,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,aAAa,IAAI,kBAAkB,KAAK,CAAC;AAC3D,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,gFAAgF,CAACA,WAC7F;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,QAAQ,OAAO,CAAC,UAAiB;AAAE,yBAAW,MAAM,QAAQ;AAAA,YAAQ,CAAC;AAC1H,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,aAAa,IAAI,kBAAkB,KAAK,CAAC;AAC3D,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,yDAAyD,CAACA,WACtE;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,QAAQ,mBAAmB,MAAM;AAAE;AAAA,YAAW,CAAC;AACpG,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,aAAa,IAAI,MAAM,KAAK,CAAC;AAC/C,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,wDAAwD,CAACA,WACrE;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,QAAQ,YAAY,MAAM;AAAE;AAAA,YAAW,CAAC;AAC7F,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,aAAa,IAAI,kBAAkB,KAAK,CAAC;AAC3D,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,oCAAoC,CAACA,WACjD;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,QAAQ,OAAO,MAAM;AAAE;AAAW,oBAAM,IAAI,MAAM,KAAK;AAAA,YAAG,CAAC;AAChH,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,aAAa,IAAI,MAAM,KAAK,CAAC;AAC/C,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,0BAA0B,CAACA,WACvC;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,QAAQ,OAAO,MAAM;AAAE;AAAA,YAAW,CAAC;AACxF,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,YAAY,MAAM,GAAG,CAAC;AACtC,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,UAAU,SAAS,MAC1B;AACI,iBAAO,KAAK,2DAA2D,OAAOA,WAC9E;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,QAAQ,MAAM;AAAE;AAAA,YAAW,CAAC;AACjF,YAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,aAAa,IAAI,MAAM,KAAK,CAAC;AAC1D,cAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,gEAAgE,OAAOA,WACnF;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,QAAQ,CAAC,UAC9D;AACI,kBAAI,iBAAiB,OACrB;AACI,2BAAW,MAAM,QAAQ;AAAA,cAC7B,OAEA;AACI,2BAAW;AAAA,cACf;AAAA,YACJ,CAAC;AACD,YAAAA,OAAK,WAAW,GAAG,OAAO;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,aAAa,IAAI,MAAM,KAAK,CAAC;AAC1D,cAAAA,OAAK,WAAW,GAAG,OAAO;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,mFAAmF,OAAOA,WACtG;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,QAAQ,OAAO,MAAM;AAAE;AAAA,YAAW,CAAC;AACxF,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,aAAa,IAAI,kBAAkB,KAAK,CAAC;AACtE,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,gFAAgF,OAAOA,WACnG;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,QAAQ,OAAO,CAAC,UAAiB;AAAE,yBAAW,MAAM,QAAQ;AAAA,YAAQ,CAAC;AAC1H,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,aAAa,IAAI,kBAAkB,KAAK,CAAC;AACtE,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,yDAAyD,OAAOA,WAC5E;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,QAAQ,mBAAmB,MAAM;AAAE;AAAA,YAAW,CAAC;AACpG,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,aAAa,IAAI,MAAM,KAAK,CAAC;AAC1D,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,wDAAwD,OAAOA,WAC3E;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,QAAQ,YAAY,MAAM;AAAE;AAAA,YAAW,CAAC;AAC7F,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,aAAa,IAAI,kBAAkB,KAAK,CAAC;AACtE,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,oCAAoC,OAAOA,WACvD;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,QAAQ,OAAO,MAAM;AAAE;AAAW,oBAAM,IAAI,MAAM,KAAK;AAAA,YAAG,CAAC;AAChH,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,aAAa,IAAI,MAAM,KAAK,CAAC;AAC1D,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,0BAA0B,OAAOA,WAC7C;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,gBAAI,UAAkB;AACtB,kBAAM,cAAkC,aAAa,QAAQ,OAAO,MAAM;AAAE;AAAA,YAAW,CAAC;AACxF,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,MAAM,aAAa,CAAC;AACpC,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,kBAAkB,MACtC;AACI,eAAO,UAAU,SAAS,MAC1B;AACI,iBAAO,KAAK,uCAAuC,CAACA,WACpD;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,YAAAA,OAAK;AAAA,cAAa,MAAM,aAAa,aAAa,MAAU;AAAA,cACxD,IAAI;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cAAmB;AAAA,YAAC;AAAA,UAChC,CAAC;AAED,iBAAO,KAAK,kCAAkC,CAACA,WAC/C;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,YAAAA,OAAK;AAAA,cAAa,MAAM,aAAa,aAAa,IAAK;AAAA,cACnD,IAAI;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cAAc;AAAA,YAAC;AAAA,UAC3B,CAAC;AAED,iBAAO,KAAK,0BAA0B,OAAOA,WAC7C;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,CAAC,UAC1E;AACI;AACA,qBAAO,IAAI,MAAM,GAAG,KAAK,QAAQ;AAAA,YACrC,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,MAAM,oBAAoB,CAAC;AAC3C,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,2DAA2D,OAAOA,WAC9E;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,CAAC,UAC1E;AACI;AACA,qBAAO,IAAI,MAAM,GAAI,MAAgB,OAAO,QAAQ;AAAA,YACxD,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,MAAM,WAAW,CAAC;AACvE,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,uDAAuD,OAAOA,WAC1E;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,CAAC,UAC1E;AACI;AACA,oBAAM,IAAI,MAAM,GAAI,MAAgB,OAAO,QAAQ;AAAA,YACvD,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,MAAM,WAAW,CAAC;AACvE,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,0BAA0B,OAAOA,WAC7C;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,OAAO,CAAC,UACjF;AACI;AACA,qBAAO,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ;AAAA,YAC7C,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,MAAM,oBAAoB,CAAC;AAC3C,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,+EAA+E,OAAOA,WAClG;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,OAAO,CAAC,UACjF;AACI;AACA,qBAAO,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ;AAAA,YAC7C,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,MAAM,WAAW,CAAC;AACvE,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,+EAA+E,OAAOA,WAClG;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,OAAO,CAAC,UACjF;AACI;AACA,qBAAO,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ;AAAA,YAC7C,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,MAAM,WAAW,CAAC;AACvE,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,4EAA4E,OAAOA,WAC/F;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,WAAW,CAAC,UACrF;AACI;AACA,qBAAO,IAAI,MAAM,GAAG,KAAK,QAAQ;AAAA,YACrC,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,kBAAkB,KAAK,CAAC;AAC7E,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,2EAA2E,OAAOA,WAC9F;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,OAAO,CAAC,UACjF;AACI;AACA,oBAAM,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ;AAAA,YAC5C,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,MAAM,WAAW,CAAC;AACvE,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,2EAA2E,OAAOA,WAC9F;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,UAAU,KAAK,CAAC;AAC9E,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,OAAO,CAAC,UACjF;AACI;AACA,oBAAM,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ;AAAA,YAC5C,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,MAAM,WAAW,CAAC;AACvE,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,wEAAwE,OAAOA,WAC3F;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,UAAU,KAAK,CAAC;AAC9E,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,mBAAmB,MAC5F;AACI;AACA,oBAAM,IAAI,MAAM,KAAK;AAAA,YACzB,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,UAAU,KAAK,CAAC;AACrE,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,UAAU,QAAQ,MACzB;AACI,iBAAO,KAAK,uCAAuC,CAACA,WACpD;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,YAAAA,OAAK;AAAA,cAAa,MAAM,aAAa,aAAa,MAAU;AAAA,cACxD,IAAI;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cAAmB;AAAA,YAAC;AAAA,UAChC,CAAC;AAED,iBAAO,KAAK,kCAAkC,CAACA,WAC/C;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,YAAAA,OAAK;AAAA,cAAa,MAAM,aAAa,aAAa,IAAK;AAAA,cACnD,IAAI;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cAAc;AAAA,YAAC;AAAA,UAC3B,CAAC;AAED,iBAAO,KAAK,0BAA0B,CAACA,WACvC;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,CAAC,UAC1E;AACI;AACA,qBAAO,IAAI,MAAM,GAAG,KAAK,QAAQ;AAAA,YACrC,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,mBAAmB,MAAM,GAAG,CAAC;AAC7C,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,2DAA2D,CAACA,WACxE;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,CAAC,UAC1E;AACI;AACA,qBAAO,IAAI,MAAM,GAAI,MAAgB,OAAO,QAAQ;AAAA,YACxD,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,oBAAoB,IAAI,MAAM,WAAW,CAAC;AAC5D,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,uDAAuD,CAACA,WACpE;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,CAAC,UAC1E;AACI;AACA,oBAAM,IAAI,MAAM,GAAI,MAAgB,OAAO,QAAQ;AAAA,YACvD,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,oBAAoB,IAAI,MAAM,WAAW,CAAC;AAC5D,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,0BAA0B,CAACA,WACvC;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,OAAO,CAAC,UACjF;AACI;AACA,qBAAO,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ;AAAA,YAC7C,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,mBAAmB,MAAM,GAAG,CAAC;AAC7C,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,+EAA+E,CAACA,WAC5F;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,OAAO,CAAC,UACjF;AACI;AACA,qBAAO,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ;AAAA,YAC7C,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,oBAAoB,IAAI,MAAM,WAAW,CAAC;AAC5D,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,+EAA+E,CAACA,WAC5F;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,OAAO,CAAC,UACjF;AACI;AACA,qBAAO,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ;AAAA,YAC7C,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,oBAAoB,IAAI,MAAM,WAAW,CAAC;AAC5D,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,4EAA4E,CAACA,WACzF;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,kBAAkB,KAAK,CAAC;AACtF,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,WAAW,CAAC,UACrF;AACI;AACA,qBAAO,IAAI,MAAM,GAAG,KAAK,QAAQ;AAAA,YACrC,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,oBAAoB,IAAI,kBAAkB,KAAK,CAAC;AAClE,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,2EAA2E,CAACA,WACxF;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,OAAO,CAAC,UACjF;AACI;AACA,oBAAM,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ;AAAA,YAC5C,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,oBAAoB,IAAI,MAAM,WAAW,CAAC;AAC5D,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,2EAA2E,CAACA,WACxF;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,UAAU,KAAK,CAAC;AAC9E,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,OAAO,CAAC,UACjF;AACI;AACA,oBAAM,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ;AAAA,YAC5C,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,oBAAoB,IAAI,MAAM,WAAW,CAAC;AAC5D,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,wEAAwE,CAACA,WACrF;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,UAAU,KAAK,CAAC;AAC9E,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,aAAa,mBAAmB,MAC5F;AACI;AACA,oBAAM,IAAI,MAAM,KAAK;AAAA,YACzB,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,oBAAoB,IAAI,UAAU,KAAK,CAAC;AAC1D,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,aAAa,MACjC;AACI,eAAO,UAAU,SAAS,MAC1B;AACI,iBAAO,KAAK,8DAA8D,OAAOA,WACjF;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,gBAAI,UAAkB;AACtB,kBAAM,gBAAoC,aAAa,QAAQ,MAAM;AAAE;AAAA,YAAW,CAAC;AACnF,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,MAAM,eAAe,CAAC;AACtC,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,0DAA0D,OAAOA,WAC7E;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,gBAAI,UAAkB;AACtB,kBAAM,gBAAoC,aAAa,QAAQ,MAC/D;AACI;AACA,oBAAM,IAAI,WAAW,OAAO;AAAA,YAChC,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,eAAe,IAAI,WAAW,OAAO,CAAC;AACnE,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,yDAAyD,OAAOA,WAC5E;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,gBAAoC,aAAa,QAAQ,MAAM;AAAE;AAAA,YAAW,CAAC;AACnF,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,eAAe,IAAI,MAAM,KAAK,CAAC;AAC5D,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,qDAAqD,OAAOA,WACxE;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,QAAQ,MACpE;AACI;AACA,oBAAM,IAAI,WAAW,KAAK;AAAA,YAC9B,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,oBAAMA,OAAK,kBAAkB,oBAAoB,IAAI,WAAW,KAAK,CAAC;AACtE,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,UAAU,QAAQ,MACzB;AACI,iBAAO,KAAK,8DAA8D,CAACA,WAC3E;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,gBAAI,UAAkB;AACtB,kBAAM,gBAAoC,aAAa,QAAQ,MAAM;AAAE;AAAA,YAAW,CAAC;AACnF,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,WAAW,cAAc,MAAM,GAAG,CAAC;AACxC,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,0DAA0D,CAACA,WACvE;AACI,kBAAM,eAAmC,WAAW,MAAM,CAAC;AAC3D,gBAAI,UAAkB;AACtB,kBAAM,gBAAoC,aAAa,QAAQ,MAC/D;AACI;AACA,oBAAM,IAAI,WAAW,OAAO;AAAA,YAChC,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,eAAe,IAAI,WAAW,OAAO,CAAC;AACxD,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,yDAAyD,CAACA,WACtE;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,gBAAoC,aAAa,QAAQ,MAAM;AAAE;AAAA,YAAW,CAAC;AACnF,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,eAAe,IAAI,MAAM,KAAK,CAAC;AACjD,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAED,iBAAO,KAAK,qDAAqD,CAACA,WAClE;AACI,kBAAM,eAAmC,WAAW,MAAM,IAAI,MAAM,KAAK,CAAC;AAC1E,gBAAI,UAAkB;AACtB,kBAAM,qBAAyC,aAAa,QAAQ,MACpE;AACI;AACA,oBAAM,IAAI,WAAW,KAAK;AAAA,YAC9B,CAAC;AACD,YAAAA,OAAK,WAAW,SAAS,CAAC;AAC1B,qBAAS,IAAI,GAAG,IAAI,GAAG,KACvB;AACI,cAAAA,OAAK,aAAa,oBAAoB,IAAI,WAAW,KAAK,CAAC;AAC3D,cAAAA,OAAK,WAAW,SAAS,CAAC;AAAA,YAC9B;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ACluCA;AAAA;AAAA,cAAAC;AAAA;AAMO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,iBAAiB,MACjC;AACI,WAAO,SAAS,cAAc,MAC9B;AACI,aAAO,aAAa,YAAY,MAChC;AACI,iBAAS,gBAAgB,QAAgC,MAAc,QAAsC,UAC7G;AACI,iBAAO,KAAK,QAAQ,CAAC,SAAS,OAAO,SAAS,MAAM,IAAI,gBAAgB,KAAK,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,OAAO,SAAS,MAAM,IAAI,gBAAgB,IAAI,CAACA,WACpK;AACI,YAAAA,OAAK,aAAa,MAAM,WAAW,OAAO,QAAQ,MAAM,QAAW,MAAM,GAAG,QAAQ;AAAA,UACxF,CAAC;AAAA,QACL;AAEA;AAAA,UACI;AAAA,UACA;AAAA,UACA,MAAM;AAAA,UAAC;AAAA,UACP,IAAI,kBAAkB,KAAK,MAAM;AAAA,YAC7B;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QACN;AACA;AAAA,UACI;AAAA,UACA;AAAA,UACA,MAAM;AAAA,UAAC;AAAA,UACP,IAAI,kBAAkB,KAAK,MAAM;AAAA,YAC7B;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QACN;AACA;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI,kBAAkB,KAAK,MAAM;AAAA,YAC7B;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QACN;AACA;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI,kBAAkB,KAAK,MAAM;AAAA,YAC7B;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC,CAAC;AAAA,QACN;AAEA,iBAAS,WAAW,QAAgC,MAAc,QAClE;AACI,iBAAO,KAAK,QAAQ,CAAC,SAAS,OAAO,SAAS,MAAM,IAAI,gBAAgB,KAAK,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,OAAO,SAAS,MAAM,IAAI,gBAAgB,IAAI,CAACA,WACpK;AACI,kBAAM,aAAyB,WAAW,OAAO,QAAQ,MAAM,QAAW,MAAM;AAChF,YAAAA,OAAK,6BAA6B,UAAU;AAC5C,YAAAA,OAAK,WAAW,QAAQ,WAAW,UAAU,CAAC;AAC9C,YAAAA,OAAK,WAAW,MAAM,WAAW,QAAQ,CAAC;AAC1C,YAAAA,OAAK,WAAW,QAAQ,WAAW,UAAU,CAAC;AAAA,UAClD,CAAC;AAAA,QACL;AAEA,mBAAW,QAAW,KAAK,MAAM;AAAA,QAAC,CAAC;AAAA,MACvC,CAAC;AAED,aAAO,aAAa,SAAS,CAACA,WAC9B;AACI,YAAI,UAAkB;AACtB,cAAM,SAAqB,WAAW,OAAO,QAAW,KAAK,QAAW,MAAM;AAAE;AAAA,QAAW,CAAC;AAC5F,QAAAA,OAAK,YAAY,GAAG,OAAO;AAE3B,iBAAS,IAAI,GAAG,KAAK,GAAG,KACxB;AACI,iBAAO,SAAS;AAChB,UAAAA,OAAK,YAAY,GAAG,OAAO;AAAA,QAC/B;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC5FA;AAAA;AAAA,cAAAC;AAAA;AAQO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,wBAAwB,MACxC;AACI,WAAO,SAAS,qBAAqB,MACrC;AACI,aAAO,aAAa,qBAAqB,MACzC;AACI,iBAAS,aAAa,OAAgB,UACtC;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,kBAAM,YAA+B,kBAAkB,OAAO;AAC9D,YAAAA,OAAK,WAAW,UAAU,SAAS,KAAK,GAAG,QAAQ;AAAA,UACvD,CAAC;AAAA,QACL;AAwBA,qBAAa,IAAI,OAAO,GAAG,IAAI;AAAA,MAInC,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ACtDA;AAAA;AAAA,cAAAC;AAAA;AASO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,YAAY,MAC5B;AACI,WAAO,aAAa,sBAAsB,MAC1C;AACI,eAAS,cAAc,OAAgB,UACvC;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,WAAW,UAAU,KAAK,GAAG,QAAQ;AAAA,QAC9C,CAAC;AAAA,MACL;AAEA,oBAAc,QAAW,KAAK;AAC9B,oBAAc,MAAM,KAAK;AACzB,oBAAc,IAAI,KAAK;AACvB,oBAAc,QAAQ,KAAK;AAC3B,oBAAc,KAAK,KAAK;AACxB,oBAAc,CAAC,GAAG,KAAK;AACvB,oBAAc,CAAC,GAAG,KAAK;AACvB,oBAAc,MAAM,IAAI;AACxB,oBAAc,OAAO,IAAI;AAAA,IAC7B,CAAC;AAED,WAAO,aAAa,sBAAsB,MAC1C;AACI,eAAS,cAAc,OAAgB,UACvC;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,YAAY,UAAU,KAAK,GAAG,QAAQ;AAAA,QAC/C,CAAC;AAAA,MACL;AAEA,oBAAc,QAAW,MAAS;AAClC,oBAAc,MAAM,MAAS;AAC7B,oBAAc,IAAI,MAAS;AAC3B,oBAAc,QAAQ,MAAS;AAC/B,oBAAc,KAAK,MAAS;AAC5B,oBAAc,CAAC,GAAG,MAAS;AAC3B,oBAAc,CAAC,GAAG,MAAS;AAC3B,oBAAc,MAAM,IAAI;AACxB,oBAAc,OAAO,KAAK;AAC1B,oBAAc,MAAM,OAAO,MAAS;AACpC,oBAAc,MAAM,MAAM,MAAS;AAAA,IACvC,CAAC;AAED,WAAO,aAAa,qBAAqB,MACzC;AACI,eAAS,aAAa,OAAgB,UACtC;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,WAAW,SAAS,KAAK,GAAG,QAAQ;AAAA,QAC7C,CAAC;AAAA,MACL;AAEA,mBAAa,QAAW,KAAK;AAC7B,mBAAa,MAAM,KAAK;AACxB,mBAAa,IAAI,KAAK;AACtB,mBAAa,OAAO,KAAK;AACzB,mBAAa,CAAC,GAAG,KAAK;AACtB,mBAAa,CAAC,GAAG,KAAK;AACtB,mBAAa,MAAM,KAAK;AACxB,mBAAa,OAAO,KAAK;AACzB,mBAAa,KAAK,IAAI;AACtB,mBAAa,UAAU,IAAI;AAC3B,mBAAa,WAAW,IAAI;AAC5B,mBAAa,KAAK,IAAI;AAAA,IAC1B,CAAC;AAED,WAAO,aAAa,qBAAqB,MACzC;AACI,eAAS,aAAa,OAAgB,UACtC;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,WAAW,SAAS,KAAK,GAAG,QAAQ;AAAA,QAC7C,CAAC;AAAA,MACL;AAEA,mBAAa,QAAW,KAAK;AAC7B,mBAAa,MAAM,KAAK;AACxB,mBAAa,IAAI,KAAK;AACtB,mBAAa,CAAC,GAAG,KAAK;AACtB,mBAAa,IAAI,IAAI;AACrB,mBAAa,SAAS,IAAI;AAAA,IAC9B,CAAC;AAED,WAAO,aAAa,uBAAuB,MAC3C;AACI,eAAS,eAAe,OAAgB,UACxC;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,WAAW,WAAW,KAAK,GAAG,QAAQ;AAAA,QAC/C,CAAC;AAAA,MACL;AAEA,qBAAe,QAAW,KAAK;AAC/B,qBAAe,MAAM,KAAK;AAC1B,qBAAe,OAAO,KAAK;AAC3B,qBAAe,MAAM,KAAK;AAC1B,qBAAe,KAAK,KAAK;AACzB,qBAAe,OAAO,KAAK;AAC3B,qBAAe,CAAC,GAAG,KAAK;AACxB,qBAAe,CAAC,GAAG,KAAK;AAExB,qBAAe,SAAS,IAAI;AAC5B,qBAAe,YAAY,IAAI;AAC/B,qBAAe,MAAM,KAAK,IAAI;AAAA,IAClC,CAAC;AAED,WAAO,aAAa,oBAAoB,MACxC;AACI,eAAS,YAAY,OAAgB,UACrC;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,WAAW,QAAQ,KAAK,GAAG,QAAQ;AAAA,QAC5C,CAAC;AAAA,MACL;AAEA,kBAAY,QAAW,KAAK;AAC5B,kBAAY,MAAM,KAAK;AACvB,kBAAY,IAAI,KAAK;AACrB,kBAAY,CAAC,GAAG,KAAK;AACrB,kBAAY,IAAI,KAAK;AACrB,kBAAY,SAAS,KAAK;AAC1B,kBAAY,SAAS,OAAO,GAAG,KAAK;AACpC,kBAAY,KAAK,OAAO,GAAG,KAAK;AAChC,kBAAY,IAAI,WAAW,GAAG,KAAK;AAEnC,kBAAY,CAAC,GAAG,IAAI;AACpB,kBAAY,CAAC,KAAK,GAAG,GAAG,IAAI;AAC5B,kBAAY,IAAI,MAAM,GAAG,IAAI;AAC7B,kBAAY,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;AAAA,IACxC,CAAC;AAED,WAAO,aAAa,kCAAkC,MACtD;AACI,eAAS,0BAA0B,OAAgB,UACnD;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,WAAW,sBAAsB,KAAK,GAAG,QAAQ;AAAA,QAC1D,CAAC;AAAA,MACL;AAEA,gCAA0B,QAAW,KAAK;AAC1C,gCAA0B,IAAI,KAAK;AACnC,gCAA0B,IAAI,KAAK;AACnC,gCAA0B,SAAS,KAAK;AAExC,gCAA0B,CAAC,GAAG,IAAI;AAClC,gCAA0B,MAAM,IAAI;AACpC,gCAA0B,CAAC,GAAG,IAAI;AAClC,gCAA0B,CAAC,KAAK,GAAG,GAAG,IAAI;AAC1C,gCAA0B,IAAI,MAAM,GAAG,IAAI;AAC3C,gCAA0B,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;AAClD,gCAA0B,SAAS,OAAO,GAAG,IAAI;AACjD,gCAA0B,KAAK,OAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAED,WAAO,aAAa,qBAAqB,MACzC;AACI,eAAS,aAAa,OAAgB,UACtC;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,WAAW,SAAS,KAAK,GAAG,QAAQ;AAAA,QAC7C,CAAC;AAAA,MACL;AAEA,mBAAa,QAAW,KAAK;AAC7B,mBAAa,IAAI,KAAK;AACtB,mBAAa,IAAI,KAAK;AACtB,mBAAa,SAAS,KAAK;AAC3B,mBAAa,MAAM,KAAK;AACxB,mBAAa,CAAC,GAAG,KAAK;AACtB,mBAAa,CAAC,KAAK,GAAG,GAAG,KAAK;AAC9B,mBAAa,IAAI,MAAM,GAAG,KAAK;AAC/B,mBAAa,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;AAEtC,mBAAa,CAAC,GAAG,IAAI;AACrB,mBAAa,SAAS,OAAO,GAAG,IAAI;AACpC,mBAAa,KAAK,OAAO,GAAG,IAAI;AAAA,IACpC,CAAC;AAED,WAAO,aAAa,wDAAwD,MAC5E;AACI,eAAS,gBAAkD,OAAgB,aAA2B,UACtG;AACI,eAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC,IAAI,CAACA,WAC7D;AACI,gBAAM,SAAkB,YAAY,OAAO,WAAW;AACtD,UAAAA,OAAK,WAAW,QAAQ,QAAQ;AAChC,cAAI,UAAU,UAAa,UAAU,MACrC;AACI,gBAAI,QACJ;AACI,cAAAA,OAAK,mBAAoB,MAAc,WAAW,CAAC;AAAA,YACvD,OAEA;AACI,cAAAA,OAAK,gBAAiB,MAAc,WAAW,CAAC;AAAA,YACpD;AAAA,UACJ;AAAA,QACJ,CAAC;AAAA,MACL;AAEA,sBAAgB,QAAW,QAAQ,KAAK;AACxC,sBAAgB,MAAM,QAAQ,KAAK;AACnC,sBAAgB,CAAC,GAAG,QAAQ,KAAK;AACjC,sBAAgB,CAAC,GAAG,UAAU,IAAI;AAClC,sBAAgB,CAAC,GAAG,QAAQ,KAAK;AACjC,sBAAgB,IAAI,QAAQ,KAAK;AACjC,sBAAgB,IAAI,UAAU,IAAI;AAClC,sBAAgB,GAAG,QAAQ,KAAK;AAChC,sBAAgB,GAAG,YAAY,IAAI;AAAA,IACvC,CAAC;AAED,WAAO,aAAa,wDAAwD,MAC5E;AACI,eAAS,gBAAkD,OAAgB,aAA2B,UACtG;AACI,eAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC,IAAI,CAACA,WAC7D;AACI,UAAAA,OAAK,WAAW,YAAY,OAAO,WAAW,GAAG,QAAQ;AAAA,QAC7D,CAAC;AAAA,MACL;AAEA,sBAAgB,QAAW,QAAQ,KAAK;AACxC,sBAAgB,MAAM,QAAQ,KAAK;AACnC,sBAAgB,CAAC,GAAG,QAAQ,KAAK;AACjC,sBAAgB,CAAC,GAAG,UAAU,KAAK;AACnC,sBAAgB,CAAC,GAAG,OAAO,UAAU,IAAI;AACzC,sBAAgB,CAAC,GAAG,QAAQ,KAAK;AACjC,sBAAgB,IAAI,QAAQ,KAAK;AACjC,sBAAgB,IAAI,UAAU,KAAK;AACnC,sBAAgB,IAAI,MAAM,IAAI;AAC9B,sBAAgB,IAAI,OAAO,UAAU,IAAI;AACzC,sBAAgB,GAAG,QAAQ,KAAK;AAChC,sBAAgB,GAAG,YAAY,IAAI;AAAA,IACvC,CAAC;AAAA,EACL,CAAC;AACL;;;AChQA;AAAA;AAAA,cAAAC;AAAA;AAOO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,oBAAoB,MACpC;AACI,WAAO,SAAS,oBAAoB,MACpC;AACI,oBAAc,QAAQ,MAAM,cAAc,OAAO,SAAS,OAAe,CAAC,CAAC,GAAG,CAAC,MAAc,IAAI,CAAC;AAElG,aAAO,aAAa,eAAe,MACnC;AACI,iBAAS,gBAAmB,UAAkB,eAA4B,WAAkC,UAC5G;AACI,iBAAO,KAAK,UAAU,CAACA,WACvB;AACI,YAAAA,OAAK,aAAa,MAAM,cAAc,OAAO,eAAe,SAAS,GAAG,QAAQ;AAAA,UACpF,CAAC;AAAA,QACL;AAEA;AAAA,UACI;AAAA,UACA;AAAA,UACA,CAAC,MAAc;AAAA,UACf,IAAI;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QACJ;AACA;AAAA,UACI;AAAA,UACA;AAAA,UACA,CAAC,MAAc;AAAA,UACf,IAAI;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QACJ;AAEA,iBAAS,WAAc,UAAkB,eAA4B,WAAkC,UACvG;AACI,iBAAO,KAAK,UAAU,OAAOA,WAC7B;AACI,kBAAM,WAA6B,cAAc,OAAO,eAAe,SAAS;AAChF,YAAAA,OAAK,YAAY,MAAM,SAAS,QAAQ,GAAG,QAAQ;AAAA,UACvD,CAAC;AAAA,QACL;AAEA;AAAA,UACI;AAAA,UACA,SAAS,OAAe,CAAC,CAAC;AAAA,UAC1B,CAAC,MAAc;AAAA,UACf,CAAC;AAAA,QACL;AACA;AAAA,UACI;AAAA,UACA,SAAS,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,UACzB,CAAC,UAAkB,QAAQ;AAAA,UAC3B,CAAC;AAAA,QACL;AACA;AAAA,UACI;AAAA,UACA,SAAS,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,UACzB,CAAC,UAAkB,QAAQ,KAAK;AAAA,UAChC,CAAC,GAAG,CAAC;AAAA,QACT;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;AC5EA;AAAA;AAAA,cAAAC;AAAA;AAWO,SAASC,OAAK,QACrB;AACI,SAAO,SAAS,4BAA4B,MAC5C;AACI,WAAO,aAAa,+BAA+B,MACnD;AACI,eAAS,8BAA8B,OAAgB,UACvD;AACI,eAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,CAACA,WAC/C;AACI,UAAAA,OAAK,YAAY,0BAA0B,KAAK,GAAG,QAAQ;AAAA,QAC/D,CAAC;AAAA,MACL;AAEA,oCAA8B,QAAW,KAAK;AAC9C,oCAA8B,MAAM,KAAK;AACzC,oCAA8B,IAAI,KAAK;AACvC,oCAA8B,CAAC,GAAG,KAAK;AACvC,oCAA8B,yBAAyB,WAAW,IAAI;AAAA,IAC1E,CAAC;AAED,WAAO,SAAS,4BAA4B,MAC5C;AACI,aAAO,aAAa,kBAAkB,CAACA,WACvC;AACI,cAAM,YAA+C,yBAAyB,aAAa;AAC3F,QAAAA,OAAK,6BAA6B,SAAS;AAC3C,QAAAA,OAAK,YAAY,UAAU,SAAS,EAAE,MAAM,GAAG,EAAE;AAAA,MACrD,CAAC;AAED,aAAO,aAAa,mBAAmB,CAACA,WACxC;AACI,cAAM,aAAgD,yBAAyB,cAAc;AAC7F,QAAAA,OAAK,YAAY,GAAG,WAAW,SAAS,EAAE,MAAM,CAAC;AACjD,QAAAA,OAAK;AAAA,UACD;AAAA,YACI,yBAAyB,qBAAqB;AAAA,YAC9C,yBAAyB,WAAW;AAAA,YACpC,yBAAyB,eAAe;AAAA,YACxC,yBAAyB,UAAU;AAAA,YACnC,yBAAyB,gBAAgB;AAAA,YACzC,yBAAyB,SAAS;AAAA,UACtC;AAAA,UACA,WAAW,IAAI,OAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM;AAAA,QAChD;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AAED,WAAO,SAAS,+BAA+B,MAC/C;AACI,aAAO,aAAa,qBAAqB,MACzC;AACI,eAAO,KAAK,2BAA2B,CAACA,WACxC;AACI,gBAAM,eAA4C,4BAA4B,OAAO;AACrF,UAAAA,OAAK,aAAa,MAAM,aAAa,gBAAgB,QAAY,SAAS,IAAI,CAAC,GAAG,IAAI;AAAA,YAClF;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,KAAK,sBAAsB,CAACA,WACnC;AACI,gBAAM,eAA4C,4BAA4B,OAAO;AACrF,UAAAA,OAAK,aAAa,MAAM,aAAa,gBAAgB,MAAO,SAAS,IAAI,CAAC,GAAG,IAAI;AAAA,YAC7E;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,KAAK,uBAAuB,CAACA,WACpC;AACI,gBAAM,eAA4C,4BAA4B,OAAO;AACrF,UAAAA,OAAK,aAAa,MAAM,aAAa,gBAAgB,yBAAyB,WAAW,MAAU,GAAG,IAAI;AAAA,YACtG;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,KAAK,kBAAkB,CAACA,WAC/B;AACI,gBAAM,eAA4C,4BAA4B,OAAO;AACrF,UAAAA,OAAK,aAAa,MAAM,aAAa,gBAAgB,yBAAyB,WAAW,IAAK,GAAG,IAAI;AAAA,YACjG;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,KAAK,+CAA+C,CAACA,WAC5D;AACI,gBAAM,eAA4C,4BAA4B,OAAO;AAErF,gBAAM,WAAoC,yBAAyB;AACnE,gBAAM,OAAiB,SAAS,MAAM,YAAY;AAClD,UAAAA,OAAK,YAAY,IAAI,OAAO,GAAG,aAAa,gBAAgB,QAAQ,CAAC;AAErE,uBAAa,gBAAgB,UAAU,IAAI;AAE3C,gBAAM,WAAgE,IAAI,OAAO;AACjF,mBAAS,IAAI,KAAK,aAAa,GAAG,EAAE,WAAW,QAAW,gBAAgB,OAAU,CAAC;AACrF,UAAAA,OAAK,YAAY,UAAU,aAAa,gBAAgB,QAAQ,CAAC;AAAA,QACrE,CAAC;AAED,eAAO,KAAK,6BAA6B,CAACA,WAC1C;AACI,gBAAM,eAA4C,4BAA4B,OAAO;AAErF,gBAAM,WAAoC,yBAAyB;AACnE,gBAAM,OAAiB,SAAS,MAAM,YAAY;AAClD,UAAAA,OAAK,YAAY,IAAI,OAAO,GAAG,aAAa,gBAAgB,QAAQ,CAAC;AAErE,uBAAa,gBAAgB,UAAU,oBAA2C;AAElF,gBAAM,WAAgE,IAAI,OAAO;AACjF,mBAAS,IAAI,KAAK,aAAa,GAAG,EAAE,WAAW,QAAW,+BAAsD,CAAC;AACjH,UAAAA,OAAK,YAAY,UAAU,aAAa,gBAAgB,QAAQ,CAAC;AAAA,QACrE,CAAC;AAED,eAAO,KAAK,wBAAwB,CAACA,WACrC;AACI,gBAAM,eAA4C,4BAA4B,OAAO;AAErF,gBAAM,WAAoC,yBAAyB;AACnE,gBAAM,OAAiB,SAAS,MAAM,YAAY;AAClD,UAAAA,OAAK,YAAY,IAAI,OAAO,GAAG,aAAa,gBAAgB,QAAQ,CAAC;AAErE,uBAAa,gBAAgB,UAAU,MAAM,wBAAkD;AAE/F,gBAAM,WAAgE,IAAI,OAAO;AACjF,mBAAS,IAAI,KAAK,aAAa,GAAG,EAAE,6BAAoD,gBAAgB,OAAU,CAAC;AACnH,UAAAA,OAAK,YAAY,UAAU,aAAa,gBAAgB,QAAQ,CAAC;AAAA,QACrE,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,qBAAqB,MACzC;AACI,iBAAS,yBAAyB,UAAmC,UACrE;AACI,iBAAO,KAAK,QAAQ,OAAO,SAAS,QAAQ,CAAC,IAAI,CAACA,WAClD;AACI,kBAAM,eAA4C,4BAA4B,OAAO;AACrF,YAAAA,OAAK,aAAa,MAAM,aAAa,gBAAgB,QAAQ,GAAG,QAAQ;AAAA,UAC5E,CAAC;AAAA,QACL;AAEA,iCAAyB,QAAY,IAAI;AAAA,UACrC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,iCAAyB,MAAO,IAAI;AAAA,UAChC;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,6BAA6B,CAACA,WAC1C;AACI,gBAAM,eAA4C,4BAA4B,OAAO;AACrF,gBAAM,WAAoC,yBAAyB;AACnE,gBAAM,uBAA4E,aAAa,gBAAgB,QAAQ;AACvH,UAAAA,OAAK,6BAA6B,oBAAoB;AACtD,UAAAA,OAAK,YAAY,qBAAqB,IAAI,EAAE,MAAM,CAAC;AACnD,UAAAA,OAAK,WAAW,sBAAsB,aAAa,gBAAgB,QAAQ,CAAC;AAAA,QAChF,CAAC;AAED,eAAO,KAAK,0BAA0B,CAACA,WACvC;AACI,gBAAM,eAA4C,4BAA4B,OAAO;AAErF,gBAAM,WAAoC,yBAAyB;AACnE,gBAAM,OAAiB,SAAS,MAAM,YAAY;AAClD,uBAAa,gBAAgB,UAAU,sCAAoF;AAE3H,gBAAM,uBAA4E,aAAa,gBAAgB,QAAQ;AACvH,gBAAM,WAAgE,IAAI,OAAO;AACjF,mBAAS,IAAI,KAAK,aAAa,GAAG;AAAA,YAC9B;AAAA,YACA;AAAA,UACJ,CAAC;AACD,UAAAA,OAAK,YAAY,sBAAsB,QAAQ;AAC/C,UAAAA,OAAK,WAAW,sBAAsB,aAAa,gBAAgB,QAAQ,CAAC;AAAA,QAChF,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,wBAAwB,MAC5C;AACI,iBAAS,4BAA4B,UAAmC,MAAgB,UACxF;AACI,iBAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAACA,WACzD;AACI,kBAAM,eAA4C,4BAA4B,OAAO;AACrF,YAAAA,OAAK,aAAa,MAAM,aAAa,mBAAmB,UAAU,IAAI,EAAE,MAAM,GAAG,QAAQ;AAAA,UAC7F,CAAC;AAAA,QACL;AAEA,oCAA4B,QAAY,SAAS,MAAM,YAAY,GAAG,IAAI;AAAA,UACtE;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,oCAA4B,MAAO,SAAS,MAAM,YAAY,GAAG,IAAI;AAAA,UACjE;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,oCAA4B,yBAAyB,WAAW,QAAY,IAAI;AAAA,UAC5E;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,oCAA4B,yBAAyB,WAAW,MAAO,IAAI;AAAA,UACvE;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAED,eAAO,KAAK,mCAAmC,CAACA,WAChD;AACI,gBAAM,eAA4C,4BAA4B,OAAO;AACrF,gBAAM,WAAoC,yBAAyB;AACnE,gBAAM,OAAiB,SAAS,MAAM,YAAY;AAElD,UAAAA,OAAK,aAAa,MAAM,aAAa,mBAAmB,UAAU,IAAI,EAAE,MAAM,GAAG,IAAI;AAAA,YACjF;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,KAAK,oCAAoC,CAACA,WACjD;AACI,gBAAM,eAA4C,4BAA4B,OAAO;AAErF,gBAAM,WAAoC,yBAAyB;AACnE,gBAAM,OAAiB,SAAS,MAAM,YAAY;AAClD,uBAAa,gBAAgB,UAAU,sCAAoF;AAE3H,gBAAM,kBAAmD,aAAa,mBAAmB,UAAU,IAAI,EAAE,MAAM;AAC/G,gBAAM,WAA4C;AAAA,YAC9C;AAAA,YACA;AAAA,UACJ;AACA,UAAAA,OAAK,YAAY,iBAAiB,QAAQ;AAC1C,UAAAA,OAAK,WAAW,iBAAiB,aAAa,mBAAmB,UAAU,IAAI,EAAE,MAAM,CAAC;AAAA,QAC5F,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAED,WAAO,SAAS,4BAA4B,MAC5C;AACI,aAAO,aAAa,cAAc,CAACA,WACnC;AACI,QAAAA,OAAK,YAAY,aAAa,yBAAyB,UAAU,SAAS,CAAC;AAC3E,QAAAA,OAAK,YAAY,oBAAoB,yBAAyB,iBAAiB,SAAS,CAAC;AAAA,MAC7F,CAAC;AAED,aAAO,aAAa,aAAa,CAACA,WAClC;AACI,QAAAA,OAAK,WAAW,yBAAyB,kBAAkB,yBAAyB,UAAU,QAAQ,CAAC;AACvG,QAAAA,OAAK,WAAW,yBAAyB,WAAW,yBAAyB,iBAAiB,QAAQ,CAAC;AAAA,MAC3G,CAAC;AAAA,IACL,CAAC;AAED,WAAO,SAAS,6BAA6B,MAC7C;AACI,aAAO,aAAa,YAAY,CAACA,WACjC;AACI,cAAM,aAAwC,0BAA0B;AAAA,UACpE,yBAAyB;AAAA,UACzB,yBAAyB;AAAA,UACzB;AAAA,UACA;AAAA,UACA;AAAA,UACA,yBAAyB;AAAA,UACzB,SAAS,OAAO;AAAA,YACZ,yBAAyB;AAAA,YACzB,yBAAyB;AAAA,UAC7B,CAAC;AAAA,QACL;AACA,QAAAA,OAAK,6BAA6B,UAAU;AAC5C,QAAAA,OAAK,YAAY,WAAW,eAAe,yBAAyB,SAAS;AAC7E,QAAAA,OAAK,YAAY,WAAW,aAAa,yBAAyB,WAAW;AAC7E,QAAAA,OAAK,YAAY,WAAW,eAAe,GAAI;AAC/C,QAAAA,OAAK,YAAY,WAAW,YAAY,GAAI;AAC5C,QAAAA,OAAK,YAAY,WAAW,aAAa,EAAE;AAC3C,QAAAA,OAAK,YAAY,WAAW,WAAW,yBAAyB,SAAS;AACzE,QAAAA,OAAK,YAAY,WAAW,uBAAuB,SAAS,OAAO;AAAA,UAC/D,yBAAyB;AAAA,UACzB,yBAAyB;AAAA,QAC7B,CAAC,CAAC;AAAA,MACN,CAAC;AAED,aAAO,aAAa,kBAAkB,MACtC;AACI,eAAO,KAAK,iCAAiC,CAACA,WAC9C;AACI,gBAAM,aAAwC,0BAA0B;AAAA,YACpE,yBAAyB;AAAA,YACzB,yBAAyB;AAAA,YACzB;AAAA,YACA;AAAA,YACA;AAAA,YACA,yBAAyB;AAAA,YACzB,SAAS,OAAO;AAAA,cACZ,yBAAyB;AAAA,cACzB,yBAAyB;AAAA,YAC7B,CAAC;AAAA,UACL;AACA,UAAAA,OAAK,YAAY,WAAW,aAAa,GAAG,SAAS,OAAO;AAAA,YACxD,yBAAyB;AAAA,YACzB,yBAAyB;AAAA,YACzB,yBAAyB;AAAA,YACzB,yBAAyB;AAAA,UAC7B,CAAC,CAAC;AAAA,QACN,CAAC;AAED,eAAO,KAAK,6BAA6B,CAACA,WAC1C;AACI,gBAAM,aAAwC,0BAA0B;AAAA,YACpE,yBAAyB;AAAA,YACzB,yBAAyB;AAAA,YACzB;AAAA,YACA;AAAA,YACA;AAAA,YACA,yBAAyB;AAAA,YACzB,SAAS,OAAO;AAAA,cACZ,yBAAyB;AAAA,cACzB,yBAAyB;AAAA,YAC7B,CAAC;AAAA,UACL;AACA,UAAAA,OAAK,YAAY,WAAW,aAAa,GAAG,SAAS,OAAO;AAAA,YACxD,yBAAyB;AAAA,YACzB,yBAAyB;AAAA,YACzB,yBAAyB;AAAA,UAC7B,CAAC,CAAC;AAAA,QACN,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,sBAAsB,CAACA,WAC3C;AACI,cAAM,aAAwC,0BAA0B;AAAA,UACpE,yBAAyB;AAAA,UACzB,yBAAyB;AAAA,UACzB;AAAA,UACA;AAAA,UACA;AAAA,UACA,yBAAyB;AAAA,UACzB,SAAS,OAAO;AAAA,YACZ,yBAAyB;AAAA,YACzB,yBAAyB;AAAA,UAC7B,CAAC;AAAA,QACL;AACA,cAAM,qBAAgD,WAAW,iBAAiB;AAClF,QAAAA,OAAK,cAAc,YAAY,kBAAkB;AACjD,QAAAA,OAAK,YAAY,mBAAmB,eAAe,yBAAyB,WAAW;AACvF,QAAAA,OAAK,YAAY,mBAAmB,aAAa,yBAAyB,SAAS;AACnF,QAAAA,OAAK,YAAY,mBAAmB,eAAe,GAAI;AACvD,QAAAA,OAAK,YAAY,mBAAmB,YAAY,EAAE;AAClD,QAAAA,OAAK,YAAY,mBAAmB,aAAa,GAAI;AACrD,QAAAA,OAAK,YAAY,mBAAmB,WAAW,yBAAyB,gBAAgB;AACxF,QAAAA,OAAK,YAAY,mBAAmB,uBAAuB,SAAS,OAAO;AAAA,UACvE,yBAAyB;AAAA,UACzB,yBAAyB;AAAA,QAC7B,CAAC,CAAC;AAAA,MACN,CAAC;AAAA,IACL,CAAC;AAED,WAAO,SAAS,yBAAyB,MACzC;AACI,aAAO,aAAa,YAAY,MAChC;AACI,eAAO,KAAK,6BAA6B,CAACA,WAC1C;AACI,UAAAA,OAAK,aAAa,MAAM,sBAAsB,OAAO,MAAU,GAAG,IAAI;AAAA,YAClE;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,KAAK,wBAAwB,CAACA,WACrC;AACI,UAAAA,OAAK,aAAa,MAAM,sBAAsB,OAAO,IAAK,GAAG,IAAI;AAAA,YAC7D;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAED,eAAO,KAAK,2BAA2B,CAACA,WACxC;AACI,gBAAM,aAAyB,WAAW,OAAO;AACjD,gBAAM,SAAgC,sBAAsB,OAAO,UAAU;AAC7E,UAAAA,OAAK,6BAA6B,MAAM;AAAA,QAC5C,CAAC;AAAA,MACL,CAAC;AAED,aAAO,aAAa,qBAAqB,OAAO,KAAK,MAAM,mCAAmC,GAAG,MACjG;AACI,eAAO,KAAK,yBAAyB,OAAOA,WAC5C;AACI,gBAAM,aAAyB,WAAW,OAAO;AACjD,gBAAM,SAAgC,sBAAsB,OAAO,UAAU;AAE7E,gBAAM,eAA4C,MAAM,OAAO,gBAAgB,GAAG,MAAM,MAAM,MAAM,IAAI;AACxG,UAAAA,OAAK,6BAA6B,YAAY;AAC9C,UAAAA,OAAK,YAAY,aAAa,IAAI,CAAC;AAAA,QACvC,CAAC;AAED,eAAO,KAAK,0BAA0B,OAAOA,WAC7C;AACI,gBAAM,aAAyB,WAAW,OAAO;AACjD,gBAAM,SAAgC,sBAAsB,OAAO,UAAU;AAE7E,gBAAM,eAA4C,MAAM,OAAO,gBAAgB,GAAG,MAAM,MAAM,MAAM,IAAI;AACxG,UAAAA,OAAK,6BAA6B,YAAY;AAC9C,UAAAA,OAAK,YAAY,aAAa,IAAI,CAAC;AAAA,QACvC,CAAC;AAED,eAAO,KAAK,2CAA2C,OAAOA,WAC9D;AACI,gBAAM,aAAyB,WAAW,OAAO;AACjD,gBAAM,SAAgC,sBAAsB,OAAO,UAAU;AAE7E,gBAAM,eAA4C,MAAM,OAAO,gBAAgB;AAAA,YAC3E,OAAO;AAAA,YACP,MAAM;AAAA,YACN,iBAAiB;AAAA,YACjB,sBAAsB;AAAA,YACtB,oBAAoB;AAAA,UACxB,CAAC;AACD,UAAAA,OAAK,6BAA6B,YAAY;AAC9C,UAAAA,OAAK,WAAW,aAAa,IAAI,CAAC;AAAA,QACtC,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL;;;ACnZO,IAAM,mBAA4B;AAEzC,eAAe,QACf;AACI,QAAM,kBAAkB,IAAI;AAAA,IACxB;AAAA,IACwBC;AAAA,IACdA;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACoBA;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACL;AAEA,MAAM;","names":["test","value","testFunction","test","test","test","test","test","test","test","test","test","test","test","test","test","test","AssertionError","test","test2","test","test2","test","test2","testGroupAction","AssertionError","test","test","test","test","test","test","test","test","test","result","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","test","value","quote","test","test","test","test","test","test","test","test","test","test","test","test","test"]}
|